System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact a55f838cf9a2253f5bb1b514cf6981ed67eac9cf:


0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72  /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57  .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69  ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65  stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67  k!.. */....using
0080: 20 53 79 73 74 65 6d 3b 0d 0a 75 73 69 6e 67 20   System;..using 
0090: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
00a0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69  ns.Generic;..usi
00b0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
00c0: 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53 79  stics;..using Sy
00d0: 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65 53  stem.EnterpriseS
00e0: 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61 6c  ervices.Internal
00f0: 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  ;..using System.
0100: 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  IO;..using Syste
0110: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 75  m.Reflection;..u
0120: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0130: 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72 76  ime.CompilerServ
0140: 69 63 65 73 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  ices;....#if WIN
0150: 44 4f 57 53 0d 0a 75 73 69 6e 67 20 53 79 73 74  DOWS..using Syst
0160: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0170: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 23 65 6e  opServices;..#en
0180: 64 69 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73  dif....using Sys
0190: 74 65 6d 2e 53 65 63 75 72 69 74 79 3b 0d 0a 0d  tem.Security;...
01a0: 0a 23 69 66 20 4e 45 54 5f 32 30 20 7c 7c 20 4e  .#if NET_20 || N
01b0: 45 54 5f 33 35 0d 0a 75 73 69 6e 67 20 53 79 73  ET_35..using Sys
01c0: 74 65 6d 2e 53 65 63 75 72 69 74 79 2e 50 65 72  tem.Security.Per
01d0: 6d 69 73 73 69 6f 6e 73 3b 0d 0a 23 65 6e 64 69  missions;..#endi
01e0: 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  f....using Syste
01f0: 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 75 73  m.Threading;..us
0200: 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f  ing System.Windo
0210: 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73 69 6e 67  ws.Forms;..using
0220: 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d 0a 75 73   System.Xml;..us
0230: 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 57 69  ing Microsoft.Wi
0240: 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63  n32;....namespac
0250: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
0260: 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23 72 65  Lite..{..    #re
0270: 67 69 6f 6e 20 50 75 62 6c 69 63 20 44 65 6c 65  gion Public Dele
0280: 67 61 74 65 73 0d 0a 20 20 20 20 69 6e 74 65 72  gates..    inter
0290: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f 69  nal delegate voi
02a0: 64 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28  d TraceCallback(
02b0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
02c0: 20 6d 65 73 73 61 67 65 2c 20 2f 2a 20 69 6e 20   message, /* in 
02d0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
02e0: 6e 67 20 63 61 74 65 67 6f 72 79 20 2f 2a 20 69  ng category /* i
02f0: 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a  n */..    );....
0300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0350: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
0360: 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46 72  delegate bool Fr
0370: 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c  ameworkConfigCal
0380: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
0390: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
03a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
03b0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
03c0: 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  ing invariantNam
03d0: 65 2c 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f  e,      /* in */
03e0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
03f0: 20 6e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20   name,          
0400: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0410: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
0420: 73 63 72 69 70 74 69 6f 6e 2c 20 20 20 20 20 20  scription,      
0430: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0440: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
0450: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ame,           /
0460: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0470: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
0480: 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 2f 2a 20 69  semblyName, /* i
0490: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
04a0: 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20  ring directory, 
04b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
04c0: 2f 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  /..        objec
04d0: 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20  t clientData,   
04e0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
04f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
0500: 55 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20  User,           
0510: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0520: 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0540: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0550: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
0560: 73 73 69 6e 67 2c 20 20 20 20 20 20 20 2f 2a 20  ssing,       /* 
0570: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0580: 6f 6f 6c 20 77 68 61 74 49 66 2c 20 20 20 20 20  ool whatIf,     
0590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
05a0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
05b0: 20 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20   verbose,       
05c0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
05d0: 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f  .        ref boo
05e0: 6c 20 73 61 76 65 64 2c 20 20 20 20 20 20 20 20  l saved,        
05f0: 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20      /* out */.. 
0600: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
0610: 67 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20  g error         
0620: 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20    /* out */..   
0630: 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f   );....    /////
0640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0680: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e  //////....    in
0690: 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20  ternal delegate 
06a0: 62 6f 6f 6c 20 46 72 61 6d 65 77 6f 72 6b 52 65  bool FrameworkRe
06b0: 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d  gistryCallback(.
06c0: 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c  .        Install
06d0: 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  er.MockRegistryK
06e0: 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f 2a 20 69  ey rootKey, /* i
06f0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
0700: 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
0710: 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  me,             
0720: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0730: 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
0740: 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 20 20 20  workVersion,    
0750: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0760: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
0770: 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 20 20 20  latformName,    
0780: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0790: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
07a0: 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20  ing directory,  
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07c0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
07d0: 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
07e0: 61 74 61 2c 20 20 20 20 20 20 20 20 20 20 20 20  ata,            
07f0: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0800: 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
0810: 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  ser,            
0820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0830: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
0840: 20 77 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20   wow64,         
0850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0860: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0870: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
0880: 73 69 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20  sing,           
0890: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
08a0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
08b0: 66 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f,              
08c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
08d0: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
08e0: 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20  verbose,        
08f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0900: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0910: 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0930: 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20     /* out */..  
0940: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f    );....    ////
0950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0990: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69  ///////....    i
09a0: 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65  nternal delegate
09b0: 20 62 6f 6f 6c 20 56 69 73 75 61 6c 53 74 75 64   bool VisualStud
09c0: 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  ioRegistryCallba
09d0: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73  ck(..        Ins
09e0: 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73  taller.MockRegis
09f0: 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20  tryKey rootKey, 
0a00: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0a10: 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
0a20: 69 6f 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20  ion,            
0a30: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0a40: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
0a50: 66 66 69 78 2c 20 20 20 20 20 20 20 20 20 20 20  ffix,           
0a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c            /* in,
0a70: 20 6f 70 74 69 6f 6e 61 6c 20 2a 2f 0d 0a 20 20   optional */..  
0a80: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
0a90: 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
0aa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0ab0: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0ac0: 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20 20 20  g directory,    
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0ae0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0af0: 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
0b00: 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a,              
0b10: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0b20: 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
0b30: 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r,              
0b40: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
0b50: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
0b60: 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20  ow64,           
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0b80: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0b90: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
0ba0: 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ng,             
0bb0: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0bc0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
0bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0be0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0bf0: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65  .        bool ve
0c00: 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20  rbose,          
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
0c20: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65  n */..        re
0c30: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20  f string error  
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c50: 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20   /* out */..    
0c60: 29 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  );..    #endregi
0c70: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
0c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cc0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
0cd0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 45 6e 75 6d  gion Public Enum
0ce0: 65 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 5b 46  erations..    [F
0cf0: 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62  lags()]..    pub
0d00: 6c 69 63 20 65 6e 75 6d 20 49 6e 73 74 61 6c 6c  lic enum Install
0d10: 46 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  Flags..    {..  
0d20: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f        #region No
0d30: 72 6d 61 6c 20 56 61 6c 75 65 73 0d 0a 20 20 20  rmal Values..   
0d40: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
0d50: 0d 0a 20 20 20 20 20 20 20 20 43 6f 72 65 47 6c  ..        CoreGl
0d60: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
0d70: 65 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20  e = 0x1,..      
0d80: 20 20 4c 69 6e 71 47 6c 6f 62 61 6c 41 73 73 65    LinqGlobalAsse
0d90: 6d 62 6c 79 43 61 63 68 65 20 3d 20 30 78 32 2c  mblyCache = 0x2,
0da0: 0d 0a 20 20 20 20 20 20 20 20 45 66 36 47 6c 6f  ..        Ef6Glo
0db0: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
0dc0: 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20   = 0x4,..       
0dd0: 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73   AssemblyFolders
0de0: 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20 20   = 0x8,..       
0df0: 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f   DbProviderFacto
0e00: 72 79 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20 20  ry = 0x10,..    
0e10: 20 20 20 20 56 73 50 61 63 6b 61 67 65 20 3d 20      VsPackage = 
0e20: 30 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 56  0x20,..        V
0e30: 73 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73  sPackageGlobalAs
0e40: 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 30 78  semblyCache = 0x
0e50: 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44  40,..        VsD
0e60: 61 74 61 53 6f 75 72 63 65 20 3d 20 30 78 38 30  ataSource = 0x80
0e70: 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44 61 74  ,..        VsDat
0e80: 61 50 72 6f 76 69 64 65 72 20 3d 20 30 78 31 30  aProvider = 0x10
0e90: 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44 65  0,..        VsDe
0ea0: 76 45 6e 76 53 65 74 75 70 20 3d 20 30 78 32 30  vEnvSetup = 0x20
0eb0: 30 2c 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  0,..        #end
0ec0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
0ed0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0f20: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d       #region Com
0f30: 70 6f 73 69 74 65 20 56 61 6c 75 65 73 0d 0a 20  posite Values.. 
0f40: 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b         Framework
0f50: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
0f60: 63 68 65 20 3d 20 43 6f 72 65 47 6c 6f 62 61 6c  che = CoreGlobal
0f70: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 0d  AssemblyCache |.
0f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fa0: 20 20 20 20 20 20 20 20 4c 69 6e 71 47 6c 6f 62          LinqGlob
0fb0: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20  alAssemblyCache 
0fc0: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fe0: 20 20 20 20 20 20 20 20 20 20 45 66 36 47 6c 6f            Ef6Glo
0ff0: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
1000: 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ,....        ///
1010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1050: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1060: 46 72 61 6d 65 77 6f 72 6b 20 3d 20 46 72 61 6d  Framework = Fram
1070: 65 77 6f 72 6b 47 6c 6f 62 61 6c 41 73 73 65 6d  eworkGlobalAssem
1080: 62 6c 79 43 61 63 68 65 20 7c 20 41 73 73 65 6d  blyCache | Assem
1090: 62 6c 79 46 6f 6c 64 65 72 73 20 7c 0d 0a 20 20  blyFolders |..  
10a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b0: 20 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74    DbProviderFact
10c0: 6f 72 79 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ory,....        
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1110: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1120: 20 20 20 56 73 20 3d 20 56 73 50 61 63 6b 61 67     Vs = VsPackag
1130: 65 20 7c 20 56 73 50 61 63 6b 61 67 65 47 6c 6f  e | VsPackageGlo
1140: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
1150: 20 7c 20 56 73 44 61 74 61 53 6f 75 72 63 65 20   | VsDataSource 
1160: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
1170: 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 20 7c  VsDataProvider |
1180: 20 56 73 44 65 76 45 6e 76 53 65 74 75 70 2c 0d   VsDevEnvSetup,.
1190: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
11a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 41 6c  //....        Al
11f0: 6c 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  lGlobalAssemblyC
1200: 61 63 68 65 20 3d 20 46 72 61 6d 65 77 6f 72 6b  ache = Framework
1210: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
1220: 63 68 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20  che |..         
1230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1240: 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61 67          VsPackag
1250: 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  eGlobalAssemblyC
1260: 61 63 68 65 2c 0d 0a 0d 0a 20 20 20 20 20 20 20  ache,....       
1270: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
12c0: 20 20 20 20 41 6c 6c 20 3d 20 46 72 61 6d 65 77      All = Framew
12d0: 6f 72 6b 20 7c 20 56 73 2c 0d 0a 0d 0a 20 20 20  ork | Vs,....   
12e0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1330: 20 20 20 20 20 20 20 20 41 6c 6c 45 78 63 65 70          AllExcep
1340: 74 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  tGlobalAssemblyC
1350: 61 63 68 65 20 3d 20 41 6c 6c 20 26 20 7e 41 6c  ache = All & ~Al
1360: 6c 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  lGlobalAssemblyC
1370: 61 63 68 65 2c 0d 0a 20 20 20 20 20 20 20 20 23  ache,..        #
1380: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1390: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
13e0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
13f0: 53 75 67 67 65 73 74 65 64 20 44 65 66 61 75 6c  Suggested Defaul
1400: 74 20 56 61 6c 75 65 73 0d 0a 20 20 20 20 20 20  t Values..      
1410: 20 20 44 65 66 61 75 6c 74 20 3d 20 41 6c 6c 0d    Default = All.
1420: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1430: 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ion..    }....  
1440: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1490: 0a 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a  .    [Flags()]..
14a0: 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20      public enum 
14b0: 50 72 6f 76 69 64 65 72 46 6c 61 67 73 0d 0a 20  ProviderFlags.. 
14c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
14d0: 65 67 69 6f 6e 20 4e 6f 72 6d 61 6c 20 56 61 6c  egion Normal Val
14e0: 75 65 73 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e  ues..        Non
14f0: 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20 20  e = 0x0,..      
1500: 20 20 53 79 73 74 65 6d 45 66 36 4d 75 73 74 42    SystemEf6MustB
1510: 65 47 6c 6f 62 61 6c 20 3d 20 30 78 31 2c 0d 0a  eGlobal = 0x1,..
1520: 20 20 20 20 20 20 20 20 44 69 64 4c 69 6e 71 46          DidLinqF
1530: 6f 72 63 65 54 72 61 63 65 20 3d 20 30 78 32 2c  orceTrace = 0x2,
1540: 0d 0a 20 20 20 20 20 20 20 20 44 69 64 45 66 36  ..        DidEf6
1550: 46 6f 72 63 65 54 72 61 63 65 20 3d 20 30 78 34  ForceTrace = 0x4
1560: 2c 0d 0a 20 20 20 20 20 20 20 20 44 69 64 45 66  ,..        DidEf
1570: 36 52 65 73 6f 6c 76 65 54 72 61 63 65 20 3d 20  6ResolveTrace = 
1580: 30 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 46 6f  0x8,..        Fo
1590: 72 63 65 4c 69 6e 71 45 6e 61 62 6c 65 64 20 3d  rceLinqEnabled =
15a0: 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x10,..        
15b0: 46 6f 72 63 65 4c 69 6e 71 44 69 73 61 62 6c 65  ForceLinqDisable
15c0: 64 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20  d = 0x20,..     
15d0: 20 20 20 46 6f 72 63 65 45 66 36 45 6e 61 62 6c     ForceEf6Enabl
15e0: 65 64 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20  ed = 0x40,..    
15f0: 20 20 20 20 46 6f 72 63 65 45 66 36 44 69 73 61      ForceEf6Disa
1600: 62 6c 65 64 20 3d 20 30 78 38 30 2c 0d 0a 20 20  bled = 0x80,..  
1610: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1680: 72 65 67 69 6f 6e 20 53 75 67 67 65 73 74 65 64  region Suggested
1690: 20 44 65 66 61 75 6c 74 20 56 61 6c 75 65 73 0d   Default Values.
16a0: 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74  .        Default
16b0: 20 3d 20 4e 6f 6e 65 0d 0a 20 20 20 20 20 20 20   = None..       
16c0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
16d0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c  /////....    [Fl
1730: 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c  ags()]..    publ
1740: 69 63 20 65 6e 75 6d 20 54 72 61 63 65 50 72 69  ic enum TracePri
1750: 6f 72 69 74 79 0d 0a 20 20 20 20 7b 0d 0a 20 20  ority..    {..  
1760: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f        #region No
1770: 72 6d 61 6c 20 56 61 6c 75 65 73 0d 0a 20 20 20  rmal Values..   
1780: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
1790: 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 73 74  ..        Lowest
17a0: 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20   = 0x1,..       
17b0: 20 4c 6f 77 65 72 20 3d 20 30 78 32 2c 0d 0a 20   Lower = 0x2,.. 
17c0: 20 20 20 20 20 20 20 4c 6f 77 20 3d 20 30 78 34         Low = 0x4
17d0: 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75  ,..        Mediu
17e0: 6d 4c 6f 77 20 3d 20 30 78 38 2c 0d 0a 20 20 20  mLow = 0x8,..   
17f0: 20 20 20 20 20 4d 65 64 69 75 6d 20 3d 20 30 78       Medium = 0x
1800: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64  10,..        Med
1810: 69 75 6d 48 69 67 68 20 3d 20 30 78 32 30 2c 0d  iumHigh = 0x20,.
1820: 0a 20 20 20 20 20 20 20 20 48 69 67 68 20 3d 20  .        High = 
1830: 30 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 48  0x40,..        H
1840: 69 67 68 65 72 20 3d 20 30 78 38 30 2c 0d 0a 20  igher = 0x80,.. 
1850: 20 20 20 20 20 20 20 48 69 67 68 65 73 74 20 3d         Highest =
1860: 20 30 78 31 30 30 2c 0d 0a 20 20 20 20 20 20 20   0x100,..       
1870: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1880: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18d0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
18e0: 6e 20 53 75 67 67 65 73 74 65 64 20 44 65 66 61  n Suggested Defa
18f0: 75 6c 74 20 46 6c 61 67 73 0d 0a 20 20 20 20 20  ult Flags..     
1900: 20 20 20 44 65 66 61 75 6c 74 20 3d 20 4d 65 64     Default = Med
1910: 69 75 6d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ium..        #en
1920: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
1930: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1940: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1990: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
19a0: 20 49 6e 73 74 61 6c 6c 65 72 20 43 6c 61 73 73   Installer Class
19b0: 0d 0a 23 69 66 20 4e 45 54 5f 34 30 20 7c 7c 20  ..#if NET_40 || 
19c0: 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35  NET_45 || NET_45
19d0: 31 20 7c 7c 20 4e 45 54 5f 34 35 32 20 7c 7c 20  1 || NET_452 || 
19e0: 4e 45 54 5f 34 36 20 7c 7c 20 4e 45 54 5f 34 36  NET_46 || NET_46
19f0: 31 0d 0a 20 20 20 20 5b 53 65 63 75 72 69 74 79  1..    [Security
1a00: 43 72 69 74 69 63 61 6c 28 29 5d 0d 0a 23 65 6c  Critical()]..#el
1a10: 73 65 0d 0a 20 20 20 20 5b 53 65 63 75 72 69 74  se..    [Securit
1a20: 79 50 65 72 6d 69 73 73 69 6f 6e 28 53 65 63 75  yPermission(Secu
1a30: 72 69 74 79 41 63 74 69 6f 6e 2e 4c 69 6e 6b 44  rityAction.LinkD
1a40: 65 6d 61 6e 64 2c 20 55 6e 6d 61 6e 61 67 65 64  emand, Unmanaged
1a50: 43 6f 64 65 20 3d 20 74 72 75 65 29 5d 0d 0a 23  Code = true)]..#
1a60: 65 6e 64 69 66 0d 0a 20 20 20 20 69 6e 74 65 72  endif..    inter
1a70: 6e 61 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73  nal static class
1a80: 20 49 6e 73 74 61 6c 6c 65 72 0d 0a 20 20 20 20   Installer..    
1a90: 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  {..        #regi
1aa0: 6f 6e 20 55 6e 73 61 66 65 20 4e 61 74 69 76 65  on Unsafe Native
1ab0: 20 4d 65 74 68 6f 64 73 20 43 6c 61 73 73 0d 0a   Methods Class..
1ac0: 20 20 20 20 20 20 20 20 5b 53 75 70 70 72 65 73          [Suppres
1ad0: 73 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65 53 65  sUnmanagedCodeSe
1ae0: 63 75 72 69 74 79 28 29 5d 0d 0a 20 20 20 20 20  curity()]..     
1af0: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
1b00: 64 20 63 6c 61 73 73 20 55 6e 73 61 66 65 4e 61  d class UnsafeNa
1b10: 74 69 76 65 4d 65 74 68 6f 64 73 0d 0a 20 20 20  tiveMethods..   
1b20: 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44       {..#if WIND
1b30: 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OWS..           
1b40: 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76 65 20   #region Native 
1b50: 57 69 6e 33 32 20 43 6f 6e 73 74 61 6e 74 73 0d  Win32 Constants.
1b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1b70: 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 4d  vate const int M
1b80: 41 58 5f 50 41 54 48 20 3d 20 32 36 30 3b 0d 0a  AX_PATH = 260;..
1b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1bf0: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69   private const i
1c00: 6e 74 20 43 53 49 44 4c 5f 53 59 53 54 45 4d 58  nt CSIDL_SYSTEMX
1c10: 38 36 20 3d 20 30 78 30 30 32 39 3b 0d 0a 0d 0a  86 = 0x0029;....
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1c70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1c80: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74  rivate const int
1c90: 20 53 48 47 46 50 5f 54 59 50 45 5f 43 55 52 52   SHGFP_TYPE_CURR
1ca0: 45 4e 54 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  ENT = 0;....    
1cb0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1d00: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1d10: 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 53 5f 4f  te const int S_O
1d20: 4b 20 3d 20 30 3b 20 2f 2a 20 48 52 45 53 55 4c  K = 0; /* HRESUL
1d30: 54 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  T */..          
1d40: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1da0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
1db0: 72 65 67 69 6f 6e 20 4e 61 74 69 76 65 20 57 69  region Native Wi
1dc0: 6e 64 6f 77 73 20 4d 65 74 68 6f 64 73 0d 0a 20  ndows Methods.. 
1dd0: 20 20 20 20 20 20 20 20 20 20 20 5b 44 6c 6c 49             [DllI
1de0: 6d 70 6f 72 74 28 22 73 68 66 6f 6c 64 65 72 2e  mport("shfolder.
1df0: 64 6c 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  dll",..         
1e00: 20 20 20 20 20 20 20 43 61 6c 6c 69 6e 67 43 6f         CallingCo
1e10: 6e 76 65 6e 74 69 6f 6e 20 3d 20 43 61 6c 6c 69  nvention = Calli
1e20: 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 2e 57 69 6e  ngConvention.Win
1e30: 61 70 69 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  api,..          
1e40: 20 20 20 20 20 20 43 68 61 72 53 65 74 20 3d 20        CharSet = 
1e50: 43 68 61 72 53 65 74 2e 41 75 74 6f 2c 20 42 65  CharSet.Auto, Be
1e60: 73 74 46 69 74 4d 61 70 70 69 6e 67 20 3d 20 66  stFitMapping = f
1e70: 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alse,..         
1e80: 20 20 20 20 20 20 20 54 68 72 6f 77 4f 6e 55 6e         ThrowOnUn
1e90: 6d 61 70 70 61 62 6c 65 43 68 61 72 20 3d 20 74  mappableChar = t
1ea0: 72 75 65 2c 20 53 65 74 4c 61 73 74 45 72 72 6f  rue, SetLastErro
1eb0: 72 20 3d 20 74 72 75 65 29 5d 0d 0a 20 20 20 20  r = true)]..    
1ec0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1ed0: 73 74 61 74 69 63 20 65 78 74 65 72 6e 20 69 6e  static extern in
1ee0: 74 20 53 48 47 65 74 46 6f 6c 64 65 72 50 61 74  t SHGetFolderPat
1ef0: 68 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h(..            
1f00: 20 20 20 20 49 6e 74 50 74 72 20 68 57 6e 64 4f      IntPtr hWndO
1f10: 77 6e 65 72 2c 20 69 6e 74 20 6e 46 6f 6c 64 65  wner, int nFolde
1f20: 72 2c 20 49 6e 74 50 74 72 20 68 54 6f 6b 65 6e  r, IntPtr hToken
1f30: 2c 20 75 69 6e 74 20 66 6c 61 67 73 2c 0d 0a 20  , uint flags,.. 
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
1f50: 6e 74 50 74 72 20 62 75 66 66 65 72 20 2f 2a 20  ntPtr buffer /* 
1f60: 3e 3d 20 4d 41 58 5f 50 41 54 48 20 2a 2f 29 3b  >= MAX_PATH */);
1f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
1f80: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1f90: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1fe0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
1ff0: 6f 6e 20 50 75 62 6c 69 63 20 57 72 61 70 70 65  on Public Wrappe
2000: 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  r Methods..     
2010: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2020: 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 53  atic string GetS
2030: 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 29  ystemDirectory()
2040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2060: 20 49 6e 74 50 74 72 20 62 75 66 66 65 72 20 3d   IntPtr buffer =
2070: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
2080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2090: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
20a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66               buf
20c0: 66 65 72 20 3d 20 4d 61 72 73 68 61 6c 2e 41 6c  fer = Marshal.Al
20d0: 6c 6f 63 43 6f 54 61 73 6b 4d 65 6d 28 0d 0a 20  locCoTaskMem(.. 
20e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f0: 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 63 68         sizeof(ch
2100: 61 72 29 20 2a 20 28 4d 41 58 5f 50 41 54 48 20  ar) * (MAX_PATH 
2110: 2b 20 31 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  + 1));....      
2120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2130: 20 28 62 75 66 66 65 72 20 21 3d 20 49 6e 74 50   (buffer != IntP
2140: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
2150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2170: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 48 47           if (SHG
2180: 65 74 46 6f 6c 64 65 72 50 61 74 68 28 49 6e 74  etFolderPath(Int
2190: 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20 20  Ptr.Zero,..     
21a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b0: 20 20 20 20 20 20 20 20 20 20 20 43 53 49 44 4c             CSIDL
21c0: 5f 53 59 53 54 45 4d 58 38 36 2c 20 49 6e 74 50  _SYSTEMX86, IntP
21d0: 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20 20 20  tr.Zero,..      
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f0: 20 20 20 20 20 20 20 20 20 20 53 48 47 46 50 5f            SHGFP_
2200: 54 59 50 45 5f 43 55 52 52 45 4e 54 2c 20 62 75  TYPE_CURRENT, bu
2210: 66 66 65 72 29 20 3d 3d 20 53 5f 4f 4b 29 0d 0a  ffer) == S_OK)..
2220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2230: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2250: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61         return Ma
2260: 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72 69 6e  rshal.PtrToStrin
2270: 67 41 75 74 6f 28 62 75 66 66 65 72 29 3b 0d 0a  gAuto(buffer);..
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2290: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
22a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
22b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
22d0: 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
22e0: 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
22f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2310: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2320: 20 20 20 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f           // TODO
2330: 3a 20 49 73 20 74 68 69 73 20 74 68 65 20 72 69  : Is this the ri
2340: 67 68 74 20 65 72 72 6f 72 20 68 61 6e 64 6c 69  ght error handli
2350: 6e 67 20 73 6f 6c 75 74 69 6f 6e 0d 0a 20 20 20  ng solution..   
2360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2370: 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 75 73 65   //       to use
2380: 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 3f 0d   at this point?.
2390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23a0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
23b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
23c0: 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
23d0: 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
23e0: 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20  y.MediumHigh,.. 
23f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2400: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
2410: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
2420: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
2430: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2440: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f               "Co
2450: 75 6c 64 20 6e 6f 74 20 67 65 74 20 73 79 73 74  uld not get syst
2460: 65 6d 20 64 69 72 65 63 74 6f 72 79 3a 20 7b 30  em directory: {0
2470: 7d 22 2c 20 65 29 2c 0d 0a 20 20 20 20 20 20 20  }", e),..       
2480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2490: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
24a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 3b 0d 0a          throw;..
24c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
24e0: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
24f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2510: 20 20 20 69 66 20 28 62 75 66 66 65 72 20 21 3d     if (buffer !=
2520: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
2530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2540: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61                Ma
2560: 72 73 68 61 6c 2e 46 72 65 65 43 6f 54 61 73 6b  rshal.FreeCoTask
2570: 4d 65 6d 28 62 75 66 66 65 72 29 3b 0d 0a 20 20  Mem(buffer);..  
2580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2590: 20 20 20 20 20 20 62 75 66 66 65 72 20 3d 20 49        buffer = I
25a0: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
25b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25f0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
2600: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2610: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 23 65    #endregion..#e
2620: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
2630: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
2640: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
2650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2690: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26a0: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
26b0: 65 20 48 65 6c 70 65 72 20 43 6c 61 73 73 65 73  e Helper Classes
26c0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
26d0: 6e 20 41 6e 79 50 61 69 72 20 43 6c 61 73 73 0d  n AnyPair Class.
26e0: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
26f0: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 41 6e   sealed class An
2700: 79 50 61 69 72 3c 54 31 2c 20 54 32 3e 0d 0a 20  yPair<T1, T2>.. 
2710: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2720: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
2730: 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
2740: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  s..            /
2750: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
2760: 2f 20 57 41 52 4e 49 4e 47 3a 20 54 68 69 73 20  / WARNING: This 
2770: 63 6f 6e 73 74 72 75 63 74 6f 72 20 70 72 6f 64  constructor prod
2780: 75 63 65 73 20 61 6e 20 69 6d 6d 75 74 61 62 6c  uces an immutabl
2790: 65 20 22 65 6d 70 74 79 22 20 70 61 69 72 0d 0a  e "empty" pair..
27a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
27b0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 2e 0d          object..
27c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
27d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
27e0: 6c 69 63 20 41 6e 79 50 61 69 72 28 29 0d 0a 20  lic AnyPair().. 
27f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
2800: 20 62 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20   base()..       
2810: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2820: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
2830: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
2840: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2850: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2890: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
28a0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
28b0: 6e 79 50 61 69 72 28 54 31 20 78 29 0d 0a 20 20  nyPair(T1 x)..  
28c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
28d0: 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20  this()..        
28e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28f0: 20 20 20 20 20 20 20 74 68 69 73 2e 78 20 3d 20         this.x = 
2900: 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x;..            
2910: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2920: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2960: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2970: 20 20 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61      public AnyPa
2980: 69 72 28 54 31 20 78 2c 20 54 32 20 79 29 0d 0a  ir(T1 x, T2 y)..
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 3a 20 74 68 69 73 28 78 29 0d 0a 20 20 20 20 20  : this(x)..     
29b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29c0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 79            this.y
29d0: 20 3d 20 79 3b 0d 0a 20 20 20 20 20 20 20 20 20   = y;..         
29e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
29f0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2a50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2a60: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
2a70: 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
2a80: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54 31        private T1
2a90: 20 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   x;..           
2aa0: 20 70 75 62 6c 69 63 20 54 31 20 58 0d 0a 20 20   public T1 X..  
2ab0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
2ad0: 20 7b 20 72 65 74 75 72 6e 20 78 3b 20 7d 0d 0a   { return x; }..
2ae0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b50: 70 72 69 76 61 74 65 20 54 32 20 79 3b 0d 0a 20  private T2 y;.. 
2b60: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2b70: 63 20 54 32 20 59 0d 0a 20 20 20 20 20 20 20 20  c T2 Y..        
2b80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b90: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2ba0: 75 72 6e 20 79 3b 20 7d 0d 0a 20 20 20 20 20 20  urn y; }..      
2bb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2bc0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2bd0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2be0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2bf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c40: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2c50: 67 69 6f 6e 20 54 72 61 63 65 4f 70 73 20 43 6c  gion TraceOps Cl
2c60: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
2c70: 76 61 74 65 20 73 74 61 74 69 63 20 63 6c 61 73  vate static clas
2c80: 73 20 54 72 61 63 65 4f 70 73 0d 0a 20 20 20 20  s TraceOps..    
2c90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ca0: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
2cb0: 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20  te Constants..  
2cc0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2cd0: 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44  e const string D
2ce0: 65 66 61 75 6c 74 44 65 62 75 67 46 6f 72 6d 61  efaultDebugForma
2cf0: 74 20 3d 20 22 23 7b 30 3a 30 30 30 7d 20 40 20  t = "#{0:000} @ 
2d00: 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 20 20 20 20  {1}: {2}";..    
2d10: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2d20: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 66  const string Def
2d30: 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 20  aultTraceFormat 
2d40: 3d 20 22 23 7b 30 3a 30 30 30 7d 20 40 20 7b 31  = "#{0:000} @ {1
2d50: 7d 3a 20 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20  }: {2}";....    
2d60: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2d70: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 49 73 6f  const string Iso
2d80: 38 36 30 31 44 61 74 65 54 69 6d 65 4f 75 74 70  8601DateTimeOutp
2d90: 75 74 46 6f 72 6d 61 74 20 3d 0d 0a 20 20 20 20  utFormat =..    
2da0: 20 20 20 20 20 20 20 20 20 20 20 20 22 79 79 79              "yyy
2db0: 79 2e 4d 4d 2e 64 64 54 48 48 3a 6d 6d 3a 73 73  y.MM.ddTHH:mm:ss
2dc0: 2e 66 66 66 66 66 66 66 22 3b 0d 0a 20 20 20 20  .fffffff";..    
2dd0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2de0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
2df0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e30: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2e40: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
2e50: 76 61 74 65 20 53 74 61 74 69 63 20 44 61 74 61  vate Static Data
2e60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2e70: 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a  ivate static obj
2e80: 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e  ect syncRoot = n
2e90: 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 20 20  ew object();..  
2ea0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2eb0: 65 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e 65  e static long ne
2ec0: 78 74 44 65 62 75 67 49 64 3b 0d 0a 20 20 20 20  xtDebugId;..    
2ed0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2ee0: 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74  static long next
2ef0: 54 72 61 63 65 49 64 3b 0d 0a 20 20 20 20 20 20  TraceId;..      
2f00: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2f10: 61 74 69 63 20 49 4c 69 73 74 3c 54 72 61 63 65  atic IList<Trace
2f20: 4c 69 73 74 65 6e 65 72 3e 20 64 65 62 75 67 4c  Listener> debugL
2f30: 69 73 74 65 6e 65 72 73 3b 0d 0a 20 20 20 20 20  isteners;..     
2f40: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2f50: 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72  tatic TracePrior
2f60: 69 74 79 20 64 65 62 75 67 50 72 69 6f 72 69 74  ity debugPriorit
2f70: 79 20 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74  y = TracePriorit
2f80: 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20  y.Default;..    
2f90: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2fa0: 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f  static TracePrio
2fb0: 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
2fc0: 74 79 20 3d 20 54 72 61 63 65 50 72 69 6f 72 69  ty = TracePriori
2fd0: 74 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20  ty.Default;..   
2fe0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2ff0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 64   static string d
3000: 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 44 65 66  ebugFormat = Def
3010: 61 75 6c 74 44 65 62 75 67 46 6f 72 6d 61 74 3b  aultDebugFormat;
3020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
3030: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
3040: 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74 20  ing traceFormat 
3050: 3d 20 44 65 66 61 75 6c 74 54 72 61 63 65 46 6f  = DefaultTraceFo
3060: 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
3070: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
3080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
3090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30e0: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53  #region Public S
30f0: 74 61 74 69 63 20 50 72 6f 70 65 72 74 69 65 73  tatic Properties
3100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
3110: 62 6c 69 63 20 73 74 61 74 69 63 20 54 72 61 63  blic static Trac
3120: 65 50 72 69 6f 72 69 74 79 20 44 65 62 75 67 50  ePriority DebugP
3130: 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
3140: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3150: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f          get { lo
3160: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20  ck (syncRoot) { 
3170: 72 65 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f  return debugPrio
3180: 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20 20  rity; } }..     
3190: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
31a0: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
31b0: 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69 74 79   { debugPriority
31c0: 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20   = value; } }.. 
31d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
31e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
31f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3230: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
3240: 75 62 6c 69 63 20 73 74 61 74 69 63 20 54 72 61  ublic static Tra
3250: 63 65 50 72 69 6f 72 69 74 79 20 54 72 61 63 65  cePriority Trace
3260: 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  Priority..      
3270: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3280: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c           get { l
3290: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
32a0: 20 72 65 74 75 72 6e 20 74 72 61 63 65 50 72 69   return tracePri
32b0: 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20  ority; } }..    
32c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
32d0: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
32e0: 29 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74  ) { tracePriorit
32f0: 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a  y = value; } }..
3300: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
3310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
3320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3360: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3370: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
3380: 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d 61 74  ring DebugFormat
3390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
33a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33b0: 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e   get { lock (syn
33c0: 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20  cRoot) { return 
33d0: 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 20 7d  debugFormat; } }
33e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33f0: 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    set { lock (sy
3400: 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62 75 67 46  ncRoot) { debugF
3410: 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d  ormat = value; }
3420: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3430: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3440: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3480: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3490: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
34a0: 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f  c string TraceFo
34b0: 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20  rmat..          
34c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
34d0: 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20       get { lock 
34e0: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74  (syncRoot) { ret
34f0: 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61 74 3b  urn traceFormat;
3500: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
3510: 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b        set { lock
3520: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72   (syncRoot) { tr
3530: 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75  aceFormat = valu
3540: 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20  e; } }..        
3550: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
3560: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
3570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
3580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35d0: 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 61 63 74  #region Interact
35e0: 69 76 65 20 53 75 70 70 6f 72 74 20 4d 65 74 68  ive Support Meth
35f0: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
3600: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
3610: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
3620: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
3630: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
3640: 73 74 61 74 69 63 20 44 69 61 6c 6f 67 52 65 73  static DialogRes
3650: 75 6c 74 20 53 68 6f 77 4d 65 73 73 61 67 65 28  ult ShowMessage(
3660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3670: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20    TracePriority 
3680: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
3690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a0: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65  TraceCallback de
36b0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
36c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
36d0: 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63  aceCallback trac
36e0: 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
3700: 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 2c 0d 0a  mbly assembly,..
3710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3720: 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d  string message,.
3730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3740: 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
3750: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3760: 20 20 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74     MessageBoxBut
3770: 74 6f 6e 73 20 62 75 74 74 6f 6e 73 2c 0d 0a 20  tons buttons,.. 
3780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
3790: 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 20 69 63  essageBoxIcon ic
37a0: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
37b0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
37c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
37d0: 20 20 20 20 20 20 44 69 61 6c 6f 67 52 65 73 75        DialogResu
37e0: 6c 74 20 72 65 73 75 6c 74 20 3d 20 44 69 61 6c  lt result = Dial
37f0: 6f 67 52 65 73 75 6c 74 2e 4f 4b 3b 0d 0a 0d 0a  ogResult.OK;....
3800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3810: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72  DebugAndTrace(tr
3820: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  acePriority,..  
3830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3840: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
3850: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
3860: 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72  message, categor
3870: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
3880: 20 20 20 20 20 20 20 69 66 20 28 53 79 73 74 65         if (Syste
3890: 6d 49 6e 66 6f 72 6d 61 74 69 6f 6e 2e 55 73 65  mInformation.Use
38a0: 72 49 6e 74 65 72 61 63 74 69 76 65 29 0d 0a 20  rInteractive).. 
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
38c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38d0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 69 74        string tit
38e0: 6c 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79  le = GetAssembly
38f0: 54 69 74 6c 65 28 61 73 73 65 6d 62 6c 79 29 3b  Title(assembly);
3900: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3910: 20 20 20 20 20 20 20 20 69 66 20 28 74 69 74 6c          if (titl
3920: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
3930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3940: 20 20 20 20 74 69 74 6c 65 20 3d 20 41 70 70 6c      title = Appl
3950: 69 63 61 74 69 6f 6e 2e 50 72 6f 64 75 63 74 4e  ication.ProductN
3960: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
3970: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
3980: 6c 74 20 3d 20 4d 65 73 73 61 67 65 42 6f 78 2e  lt = MessageBox.
3990: 53 68 6f 77 28 6d 65 73 73 61 67 65 2c 20 74 69  Show(message, ti
39a0: 74 6c 65 2c 20 62 75 74 74 6f 6e 73 2c 20 69 63  tle, buttons, ic
39b0: 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
39c0: 20 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75              Debu
39d0: 67 41 6e 64 54 72 61 63 65 28 74 72 61 63 65 50  gAndTrace(traceP
39e0: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
39f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a00: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
3a10: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
3a20: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
3a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a40: 20 20 20 20 20 20 20 20 22 55 73 65 72 20 63 68          "User ch
3a50: 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46  oice of {0}.", F
3a60: 6f 72 44 69 73 70 6c 61 79 28 72 65 73 75 6c 74  orDisplay(result
3a70: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
3a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
3a90: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
3aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3ab0: 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
3ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
3ad0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3ae0: 20 20 20 20 44 65 62 75 67 41 6e 64 54 72 61 63      DebugAndTrac
3af0: 65 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  e(tracePriority,
3b00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3b10: 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
3b20: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
3b30: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
3b40: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
3b50: 20 20 20 20 20 20 20 20 22 44 65 66 61 75 6c 74          "Default
3b60: 20 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22   choice of {0}."
3b70: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 73  , ForDisplay(res
3b80: 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ult)),..        
3b90: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 65              cate
3ba0: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
3bb0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3bc0: 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
3bd0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3be0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
3bf0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
3c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c40: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
3c50: 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 69 6e    #region Tracin
3c60: 67 20 53 75 70 70 6f 72 74 20 4d 65 74 68 6f 64  g Support Method
3c70: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
3c80: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
3c90: 64 20 53 65 74 75 70 44 65 62 75 67 4c 69 73 74  d SetupDebugList
3ca0: 65 6e 65 72 73 28 29 0d 0a 20 20 20 20 20 20 20  eners()..       
3cb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3cc0: 20 20 20 20 20 20 20 20 69 66 20 28 64 65 62 75          if (debu
3cd0: 67 4c 69 73 74 65 6e 65 72 73 20 3d 3d 20 6e 75  gListeners == nu
3ce0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
3cf0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 4c 69           debugLi
3d00: 73 74 65 6e 65 72 73 20 3d 20 6e 65 77 20 4c 69  steners = new Li
3d10: 73 74 3c 54 72 61 63 65 4c 69 73 74 65 6e 65 72  st<TraceListener
3d20: 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  >();....        
3d30: 20 20 20 20 20 20 20 20 64 65 62 75 67 4c 69 73          debugLis
3d40: 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43  teners.Add(new C
3d50: 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65  onsoleTraceListe
3d60: 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ner());..       
3d70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3d80: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
3d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3dd0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
3de0: 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78 74  static long Next
3df0: 44 65 62 75 67 49 64 28 29 0d 0a 20 20 20 20 20  DebugId()..     
3e00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3e10: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3e20: 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63   Interlocked.Inc
3e30: 72 65 6d 65 6e 74 28 72 65 66 20 6e 65 78 74 44  rement(ref nextD
3e40: 65 62 75 67 49 64 29 3b 0d 0a 20 20 20 20 20 20  ebugId);..      
3e50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3e60: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
3e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3eb0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
3ec0: 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78   static long Nex
3ed0: 74 54 72 61 63 65 49 64 28 29 0d 0a 20 20 20 20  tTraceId()..    
3ee0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3ef0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3f00: 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e  n Interlocked.In
3f10: 63 72 65 6d 65 6e 74 28 72 65 66 20 6e 65 78 74  crement(ref next
3f20: 54 72 61 63 65 49 64 29 3b 0d 0a 20 20 20 20 20  TraceId);..     
3f30: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3f40: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
3f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3f90: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
3fa0: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
3fb0: 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69  TimeStamp(DateTi
3fc0: 6d 65 20 64 61 74 65 54 69 6d 65 29 0d 0a 20 20  me dateTime)..  
3fd0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
3ff0: 75 72 6e 20 64 61 74 65 54 69 6d 65 2e 54 6f 53  urn dateTime.ToS
4000: 74 72 69 6e 67 28 49 73 6f 38 36 30 31 44 61 74  tring(Iso8601Dat
4010: 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d 61  eTimeOutputForma
4020: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
4030: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4040: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4080: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4090: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
40a0: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
40b0: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
40c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
40d0: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
40e0: 6e 67 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65  ng GetMethodName
40f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4100: 20 20 20 53 74 61 63 6b 54 72 61 63 65 20 73 74     StackTrace st
4110: 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20  ackTrace,..     
4120: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
4130: 65 76 65 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  evel..          
4140: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
4150: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4160: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
4180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4190: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
41b0: 4f 54 45 3a 20 49 66 20 61 20 76 61 6c 69 64 20  OTE: If a valid 
41c0: 73 74 61 63 6b 20 74 72 61 63 65 20 77 61 73 20  stack trace was 
41d0: 6e 6f 74 20 73 75 70 70 6c 69 65 64 20 62 79 20  not supplied by 
41e0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
41f0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
4200: 20 20 63 61 6c 6c 65 72 2c 20 63 72 65 61 74 65    caller, create
4210: 20 6f 6e 65 20 6e 6f 77 20 62 61 73 65 64 20 6f   one now based o
4220: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20  n the current.. 
4230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4240: 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63     //       exec
4250: 75 74 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a 20 20  ution stack...  
4260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4270: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
4280: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
4290: 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75 6c 6c  ackTrace == null
42a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
42b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42d0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
42e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
42f0: 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
4300: 63 75 72 72 65 6e 74 20 65 78 65 63 75 74 69 6f  current executio
4310: 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20  n stack...      
4320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4330: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
4340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4350: 61 63 6b 54 72 61 63 65 20 3d 20 6e 65 77 20 53  ackTrace = new S
4360: 74 61 63 6b 54 72 61 63 65 28 29 3b 0d 0a 0d 0a  tackTrace();....
4370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4380: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43a0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77      // NOTE: Alw
43b0: 61 79 73 20 73 6b 69 70 20 74 68 69 73 20 63 61  ays skip this ca
43c0: 6c 6c 20 66 72 61 6d 65 20 77 68 65 6e 20 77 65  ll frame when we
43d0: 20 63 61 70 74 75 72 65 0d 0a 20 20 20 20 20 20   capture..      
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43f0: 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 73    //       the s
4400: 74 61 63 6b 20 74 72 61 63 65 2e 0d 0a 20 20 20  tack trace...   
4410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4420: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
4430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4440: 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 20 20 20 20 20   level++;..     
4450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4460: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4470: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4490: 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65  // NOTE: Get the
44a0: 20 73 70 65 63 69 66 69 65 64 20 73 74 61 63 6b   specified stack
44b0: 20 66 72 61 6d 65 20 28 61 6c 77 61 79 73 20 61   frame (always a
44c0: 64 64 20 6f 6e 65 20 74 6f 0d 0a 20 20 20 20 20  dd one to..     
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
44e0: 2f 20 20 20 20 20 20 20 73 6b 69 70 20 74 68 69  /       skip thi
44f0: 73 20 6d 65 74 68 6f 64 29 2e 0d 0a 20 20 20 20  s method)...    
4500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4510: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4520: 20 20 20 20 20 20 20 20 53 74 61 63 6b 46 72 61          StackFra
4530: 6d 65 20 73 74 61 63 6b 46 72 61 6d 65 20 3d 20  me stackFrame = 
4540: 73 74 61 63 6b 54 72 61 63 65 2e 47 65 74 46 72  stackTrace.GetFr
4550: 61 6d 65 28 6c 65 76 65 6c 29 3b 0d 0a 0d 0a 20  ame(level);.... 
4560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4570: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
4580: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
4590: 54 45 3a 20 47 65 74 20 74 68 65 20 6d 65 74 68  TE: Get the meth
45a0: 6f 64 20 66 6f 72 20 74 68 65 20 73 74 61 63 6b  od for the stack
45b0: 20 66 72 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20   frame...       
45c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
45d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
45e0: 20 20 20 20 20 4d 65 74 68 6f 64 42 61 73 65 20       MethodBase 
45f0: 6d 65 74 68 6f 64 42 61 73 65 20 3d 20 73 74 61  methodBase = sta
4600: 63 6b 46 72 61 6d 65 2e 47 65 74 4d 65 74 68 6f  ckFrame.GetMetho
4610: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
4620: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4640: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74      // NOTE: Get
4650: 20 74 68 65 20 74 79 70 65 20 66 6f 72 20 74 68   the type for th
4660: 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  e method...     
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4680: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4690: 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70 65         Type type
46a0: 20 3d 20 6d 65 74 68 6f 64 42 61 73 65 2e 44 65   = methodBase.De
46b0: 63 6c 61 72 69 6e 67 54 79 70 65 3b 0d 0a 0d 0a  claringType;....
46c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
46f0: 4f 54 45 3a 20 47 65 74 20 74 68 65 20 6e 61 6d  OTE: Get the nam
4700: 65 20 6f 66 20 74 68 65 20 6d 65 74 68 6f 64 2e  e of the method.
4710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4720: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4740: 72 69 6e 67 20 6e 61 6d 65 20 3d 20 6d 65 74 68  ring name = meth
4750: 6f 64 42 61 73 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a  odBase.Name;....
4760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4770: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4780: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
4790: 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20  OTE: Return the 
47a0: 70 72 6f 70 65 72 6c 79 20 66 6f 72 6d 61 74 74  properly formatt
47b0: 65 64 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20  ed result...    
47c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47d0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
47e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
47f0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
4800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4810: 20 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32         "{0}{1}{2
4820: 7d 22 2c 20 74 79 70 65 2e 4e 61 6d 65 2c 20 54  }", type.Name, T
4830: 79 70 65 2e 44 65 6c 69 6d 69 74 65 72 2c 20 6e  ype.Delimiter, n
4840: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
4850: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4860: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
4870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4880: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4890: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
48a0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
48b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
48c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
48d0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
48e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
48f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
4900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
4940: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
4950: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 44 65  c static void De
4960: 62 75 67 43 6f 72 65 28 0d 0a 20 20 20 20 20 20  bugCore(..      
4970: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
4980: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
4990: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
49a0: 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
49b0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
49c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
49d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
49e0: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20  ck (syncRoot).. 
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
4a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4a10: 20 20 20 20 20 20 69 66 20 28 64 65 62 75 67 4c        if (debugL
4a20: 69 73 74 65 6e 65 72 73 20 21 3d 20 6e 75 6c 6c  isteners != null
4a30: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4a40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a60: 20 20 66 6f 72 65 61 63 68 20 28 54 72 61 63 65    foreach (Trace
4a70: 4c 69 73 74 65 6e 65 72 20 6c 69 73 74 65 6e 65  Listener listene
4a80: 72 20 69 6e 20 64 65 62 75 67 4c 69 73 74 65 6e  r in debugListen
4a90: 65 72 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ers)..          
4aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 73               lis
4ad0: 74 65 6e 65 72 2e 57 72 69 74 65 4c 69 6e 65 28  tener.WriteLine(
4ae0: 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72  message, categor
4af0: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
4b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b10: 20 6c 69 73 74 65 6e 65 72 2e 46 6c 75 73 68 28   listener.Flush(
4b20: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4b30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b50: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
4b60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4b70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4b80: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4bd0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4be0: 73 74 61 74 69 63 20 76 6f 69 64 20 54 72 61 63  static void Trac
4bf0: 65 43 6f 72 65 28 0d 0a 20 20 20 20 20 20 20 20  eCore(..        
4c00: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
4c10: 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
4c20: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4c30: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
4c40: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
4c50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4c60: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b              lock
4c70: 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20   (syncRoot)..   
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ca0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4cb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
4cc0: 4f 54 45 3a 20 57 72 69 74 65 20 74 68 65 20 6d  OTE: Write the m
4cd0: 65 73 73 61 67 65 20 74 6f 20 61 6c 6c 20 74 68  essage to all th
4ce0: 65 20 61 63 74 69 76 65 20 74 72 61 63 65 0d 0a  e active trace..
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d00: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73      //       lis
4d10: 74 65 6e 65 72 73 2e 0d 0a 20 20 20 20 20 20 20  teners...       
4d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
4d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d40: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
4d50: 4c 69 6e 65 28 6d 65 73 73 61 67 65 2c 20 63 61  Line(message, ca
4d60: 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4d80: 61 63 65 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20  ace.Flush();..  
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e00: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
4e10: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
4e20: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
4e30: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
4e40: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4e50: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
4e60: 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
4e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4e80: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
4e90: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4eb0: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
4ec0: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
4ed0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
4ee0: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
4ef0: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
4f00: 20 20 20 20 20 20 20 20 45 78 63 65 70 74 69 6f          Exceptio
4f10: 6e 20 65 78 63 65 70 74 69 6f 6e 2c 0d 0a 20 20  n exception,..  
4f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4f30: 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20  ring category.. 
4f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
4f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
4f60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4f70: 20 69 66 20 28 65 78 63 65 70 74 69 6f 6e 20 21   if (exception !
4f80: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
4f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
4fa0: 75 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63  urn DebugAndTrac
4fb0: 65 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  e(tracePriority,
4fc0: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
4fd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4fe0: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
4ff0: 6c 6c 62 61 63 6b 2c 20 6e 65 77 20 53 74 61 63  llback, new Stac
5000: 6b 54 72 61 63 65 28 65 78 63 65 70 74 69 6f 6e  kTrace(exception
5010: 2c 20 74 72 75 65 29 2c 20 30 2c 0d 0a 20 20 20  , true), 0,..   
5020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5030: 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 2e 54       exception.T
5040: 6f 53 74 72 69 6e 67 28 29 2c 20 63 61 74 65 67  oString(), categ
5050: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
5060: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5070: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
5080: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
5090: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
50a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
50e0: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
50f0: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
5100: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
5110: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
5120: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
5130: 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61 63  ing DebugAndTrac
5140: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
5150: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
5160: 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  y tracePriority,
5170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5180: 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    TraceCallback 
5190: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
51a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51b0: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
51c0: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
51e0: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
51f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
5200: 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a  tring category..
5210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5220: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
5230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5240: 20 20 72 65 74 75 72 6e 20 44 65 62 75 67 41 6e    return DebugAn
5250: 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
5260: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
5270: 63 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75  cePriority, debu
5280: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
5290: 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c 20  Callback, null, 
52a0: 31 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1,..            
52b0: 20 20 20 20 20 20 20 20 6d 65 73 73 61 67 65 2c          message,
52c0: 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20   category);..   
52d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
52e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
52f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
5340: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
5350: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
5360: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
5370: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
5380: 74 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67  tic string Debug
5390: 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
53a0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
53b0: 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72  Priority tracePr
53c0: 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20  iority,..       
53d0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61           TraceCa
53e0: 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c  llback debugCall
53f0: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
5400: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
5410: 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
5420: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
5430: 20 20 20 20 20 53 74 61 63 6b 54 72 61 63 65 20       StackTrace 
5440: 73 74 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20  stackTrace,..   
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
5460: 20 6c 65 76 65 6c 2c 0d 0a 20 20 20 20 20 20 20   level,..       
5470: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
5480: 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  message,..      
5490: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
54a0: 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20   category..     
54b0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
54c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
54d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
54e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
54f0: 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73   // NOTE: Always
5500: 20 73 6b 69 70 20 74 68 69 73 20 63 61 6c 6c 20   skip this call 
5510: 66 72 61 6d 65 20 69 66 20 74 68 65 20 73 74 61  frame if the sta
5520: 63 6b 20 74 72 61 63 65 20 69 73 0d 0a 20 20 20  ck trace is..   
5530: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
5540: 20 20 20 20 20 20 67 6f 69 6e 67 20 74 6f 20 62        going to b
5550: 65 20 63 61 70 74 75 72 65 64 20 62 79 20 47 65  e captured by Ge
5560: 74 4d 65 74 68 6f 64 4e 61 6d 65 2e 0d 0a 20 20  tMethodName...  
5570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5590: 20 20 69 66 20 28 73 74 61 63 6b 54 72 61 63 65    if (stackTrace
55a0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
55b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
55c0: 65 76 65 6c 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20  evel++;....     
55d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
55e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
55f0: 2f 20 4e 4f 54 45 3a 20 46 6f 72 6d 61 74 20 74  / NOTE: Format t
5600: 68 65 20 6d 65 73 73 61 67 65 20 66 6f 72 20 64  he message for d
5610: 69 73 70 6c 61 79 20 28 6f 6e 63 65 29 2e 0d 0a  isplay (once)...
5620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5630: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
5640: 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61      string forma
5650: 74 74 65 64 20 3d 20 53 74 72 69 6e 67 2e 46 6f  tted = String.Fo
5660: 72 6d 61 74 28 22 7b 30 7d 3a 20 7b 31 7d 22 2c  rmat("{0}: {1}",
5670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5680: 20 20 20 20 20 20 47 65 74 4d 65 74 68 6f 64 4e        GetMethodN
5690: 61 6d 65 28 73 74 61 63 6b 54 72 61 63 65 2c 20  ame(stackTrace, 
56a0: 6c 65 76 65 6c 29 2c 20 6d 65 73 73 61 67 65 29  level), message)
56b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
56c0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
56d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
56e0: 3a 20 49 66 20 74 68 65 20 64 65 62 75 67 20 63  : If the debug c
56f0: 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c  allback is inval
5700: 69 64 20 6f 72 20 74 68 65 20 74 72 61 63 65 20  id or the trace 
5710: 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  priority..      
5720: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
5730: 20 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61     of this messa
5740: 67 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ge is less than 
5750: 77 68 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c  what we currentl
5760: 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20  y want to..     
5770: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
5780: 20 20 20 20 64 65 62 75 67 2c 20 73 6b 69 70 20      debug, skip 
5790: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  it...           
57a0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
57b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 64 65           if ((de
57c0: 62 75 67 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e  bugCallback != n
57d0: 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ull) &&..       
57e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 72               (tr
57f0: 61 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 44  acePriority >= D
5800: 65 62 75 67 50 72 69 6f 72 69 74 79 29 29 0d 0a  ebugPriority))..
5810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5820: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5830: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
5840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5850: 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74  / NOTE: Invoke t
5860: 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63  he debug callbac
5870: 6b 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61  k with the forma
5880: 74 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  tted..          
5890: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
58a0: 20 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74     message and t
58b0: 68 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 63  he category spec
58c0: 69 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20  ified by the..  
58d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58e0: 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65    //       calle
58f0: 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r...            
5900: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5920: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 28 66 6f  debugCallback(fo
5930: 72 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72  rmatted, categor
5940: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
5950: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5960: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5980: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 72   NOTE: If the tr
5990: 61 63 65 20 63 61 6c 6c 62 61 63 6b 20 69 73 20  ace callback is 
59a0: 69 6e 76 61 6c 69 64 20 6f 72 20 74 68 65 20 74  invalid or the t
59b0: 72 61 63 65 20 70 72 69 6f 72 69 74 79 0d 0a 20  race priority.. 
59c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
59d0: 2f 20 20 20 20 20 20 20 6f 66 20 74 68 69 73 20  /       of this 
59e0: 6d 65 73 73 61 67 65 20 69 73 20 6c 65 73 73 20  message is less 
59f0: 74 68 61 6e 20 77 68 61 74 20 77 65 20 63 75 72  than what we cur
5a00: 72 65 6e 74 6c 79 20 77 61 6e 74 20 74 6f 0d 0a  rently want to..
5a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a20: 2f 2f 20 20 20 20 20 20 20 74 72 61 63 65 2c 20  //       trace, 
5a30: 73 6b 69 70 20 69 74 2e 0d 0a 20 20 20 20 20 20  skip it...      
5a40: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5a60: 20 28 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b   ((traceCallback
5a70: 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20   != null) &&..  
5a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a90: 20 20 28 74 72 61 63 65 50 72 69 6f 72 69 74 79    (tracePriority
5aa0: 20 3e 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74   >= TracePriorit
5ab0: 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
5ac0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5ad0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
5ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5af0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 76      // NOTE: Inv
5b00: 6f 6b 65 20 74 68 65 20 74 72 61 63 65 20 63 61  oke the trace ca
5b10: 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65 20  llback with the 
5b20: 66 6f 72 6d 61 74 74 65 64 0d 0a 20 20 20 20 20  formatted..     
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5b40: 2f 20 20 20 20 20 20 20 6d 65 73 73 61 67 65 20  /       message 
5b50: 61 6e 64 20 74 68 65 20 63 61 74 65 67 6f 72 79  and the category
5b60: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
5b70: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
5b80: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
5b90: 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20  caller...       
5ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
5bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5bc0: 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
5bd0: 63 6b 28 66 6f 72 6d 61 74 74 65 64 2c 20 63 61  ck(formatted, ca
5be0: 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
5bf0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5c10: 65 74 75 72 6e 20 6d 65 73 73 61 67 65 3b 0d 0a  eturn message;..
5c20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5c30: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
5c40: 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
5c50: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
5c60: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
5c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cb0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
5cc0: 20 20 20 23 72 65 67 69 6f 6e 20 4d 6f 63 6b 52     #region MockR
5cd0: 65 67 69 73 74 72 79 20 43 6c 61 73 73 0d 0a 20  egistry Class.. 
5ce0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
5cf0: 65 61 6c 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b  ealed class Mock
5d00: 52 65 67 69 73 74 72 79 20 3a 20 49 44 69 73 70  Registry : IDisp
5d10: 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  osable..        
5d20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
5d30: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
5d40: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
5d50: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
5d60: 6f 63 6b 52 65 67 69 73 74 72 79 28 29 0d 0a 20  ockRegistry().. 
5d70: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
5d90: 61 74 49 66 20 3d 20 74 72 75 65 3b 0d 0a 20 20  atIf = true;..  
5da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5db0: 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a  adOnly = true;..
5dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5dd0: 73 61 66 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20  safe = true;..  
5de0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5df0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5e50: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5e60: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5e70: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d      bool whatIf.
5e80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5e90: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
5ea0: 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20      : this()..  
5eb0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
5ed0: 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49  s.whatIf = whatI
5ee0: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
5ef0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
5f00: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
5f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f40: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5f50: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
5f60: 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20  egistry(..      
5f70: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
5f80: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
5f90: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
5fa0: 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  dOnly..         
5fb0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
5fc0: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
5fd0: 28 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  (whatIf)..      
5fe0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5ff0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65           this.re
6000: 61 64 4f 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c  adOnly = readOnl
6010: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
6020: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6030: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6070: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6080: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
6090: 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20  egistry(..      
60a0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
60b0: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
60c0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
60d0: 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  dOnly,..        
60e0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66          bool saf
60f0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
6100: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
6110: 20 20 20 20 20 20 3a 20 74 68 69 73 28 77 68 61        : this(wha
6120: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a  tIf, readOnly)..
6130: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
6150: 68 69 73 2e 73 61 66 65 20 3d 20 73 61 66 65 3b  his.safe = safe;
6160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
6180: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
6190: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
61a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
61e0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
61f0: 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
6200: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
6210: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68   private bool wh
6220: 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20  atIf;..         
6230: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57     public bool W
6240: 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20  hatIf..         
6250: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6260: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
6270: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
6280: 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20  urn whatIf; }.. 
6290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
62a0: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
62b0: 65 64 28 29 3b 20 77 68 61 74 49 66 20 3d 20 76  ed(); whatIf = v
62c0: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
62d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
62e0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
62f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6330: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
6340: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d   bool readOnly;.
6350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
6360: 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c  lic bool ReadOnl
6370: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
6380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6390: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
63a0: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
63b0: 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20  readOnly; }..   
63c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
63d0: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
63e0: 28 29 3b 20 72 65 61 64 4f 6e 6c 79 20 3d 20 76  (); readOnly = v
63f0: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
6400: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6410: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6460: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
6470: 20 62 6f 6f 6c 20 73 61 66 65 3b 0d 0a 20 20 20   bool safe;..   
6480: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
6490: 62 6f 6f 6c 20 53 61 66 65 0d 0a 20 20 20 20 20  bool Safe..     
64a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
64b0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
64c0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
64d0: 20 72 65 74 75 72 6e 20 73 61 66 65 3b 20 7d 0d   return safe; }.
64e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
64f0: 20 73 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   set { CheckDisp
6500: 6f 73 65 64 28 29 3b 20 73 61 66 65 20 3d 20 76  osed(); safe = v
6510: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
6520: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6530: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6580: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
6590: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
65a0: 20 63 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20   classesRoot;.. 
65b0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
65c0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
65d0: 79 20 43 6c 61 73 73 65 73 52 6f 6f 74 0d 0a 20  y ClassesRoot.. 
65e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
65f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
6600: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
6610: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6620: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
6630: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
6640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6650: 20 20 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f    if (classesRoo
6660: 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
6670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6680: 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 20      classesRoot 
6690: 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  = new MockRegist
66a0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
66b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66c0: 20 20 20 20 52 65 67 69 73 74 72 79 2e 43 6c 61      Registry.Cla
66d0: 73 73 65 73 52 6f 6f 74 2c 20 77 68 61 74 49 66  ssesRoot, whatIf
66e0: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
66f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6700: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6710: 20 63 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20   classesRoot;.. 
6720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6740: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
6750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6790: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
67a0: 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65    private MockRe
67b0: 67 69 73 74 72 79 4b 65 79 20 63 75 72 72 65 6e  gistryKey curren
67c0: 74 43 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20 20  tConfig;..      
67d0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
67e0: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 75 72  kRegistryKey Cur
67f0: 72 65 6e 74 43 6f 6e 66 69 67 0d 0a 20 20 20 20  rentConfig..    
6800: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6810: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
6820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6830: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6840: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
6850: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6870: 66 20 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67  f (currentConfig
6880: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
6890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68a0: 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67     currentConfig
68b0: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
68c0: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
68d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68e0: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 43 75       Registry.Cu
68f0: 72 72 65 6e 74 43 6f 6e 66 69 67 2c 20 77 68 61  rrentConfig, wha
6900: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73  tIf, readOnly, s
6910: 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  afe);....       
6920: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
6930: 75 72 6e 20 63 75 72 72 65 6e 74 43 6f 6e 66 69  urn currentConfi
6940: 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
6950: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6960: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6970: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69b0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
69c0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
69d0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 63  ockRegistryKey c
69e0: 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20 20 20  urrentUser;..   
69f0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
6a00: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
6a10: 43 75 72 72 65 6e 74 55 73 65 72 0d 0a 20 20 20  CurrentUser..   
6a20: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6a30: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d              get.
6a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6a50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6a60: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
6a70: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
6a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a90: 69 66 20 28 63 75 72 72 65 6e 74 55 73 65 72 20  if (currentUser 
6aa0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
6ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ac0: 20 20 63 75 72 72 65 6e 74 55 73 65 72 20 3d 20    currentUser = 
6ad0: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
6ae0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
6af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b00: 20 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65    Registry.Curre
6b10: 6e 74 55 73 65 72 2c 20 77 68 61 74 49 66 2c 20  ntUser, whatIf, 
6b20: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b  readOnly, safe);
6b30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6b40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
6b50: 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20 20 20  urrentUser;..   
6b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6b70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
6b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
6b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6be0: 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
6bf0: 73 74 72 79 4b 65 79 20 64 79 6e 44 61 74 61 3b  stryKey dynData;
6c00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6c10: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
6c20: 79 4b 65 79 20 44 79 6e 44 61 74 61 0d 0a 20 20  yKey DynData..  
6c30: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
6c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6c60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6c70: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
6c80: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
6c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ca0: 20 69 66 20 28 64 79 6e 44 61 74 61 20 3d 3d 20   if (dynData == 
6cb0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
6cd0: 79 6e 44 61 74 61 20 3d 20 6e 65 77 20 4d 6f 63  ynData = new Moc
6ce0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
6cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d00: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
6d10: 74 72 79 2e 44 79 6e 44 61 74 61 2c 20 77 68 61  try.DynData, wha
6d20: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73  tIf, readOnly, s
6d30: 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  afe);....       
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
6d50: 75 72 6e 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20  urn dynData;..  
6d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6d70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dd0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
6de0: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
6df0: 69 73 74 72 79 4b 65 79 20 6c 6f 63 61 6c 4d 61  istryKey localMa
6e00: 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20  chine;..        
6e10: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
6e20: 65 67 69 73 74 72 79 4b 65 79 20 4c 6f 63 61 6c  egistryKey Local
6e30: 4d 61 63 68 69 6e 65 0d 0a 20 20 20 20 20 20 20  Machine..       
6e40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6e50: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
6e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e80: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6e90: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
6ea0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6eb0: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 3d 20  localMachine == 
6ec0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
6ee0: 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 20 6e 65  ocalMachine = ne
6ef0: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
6f00: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
6f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f20: 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61  Registry.LocalMa
6f30: 63 68 69 6e 65 2c 20 77 68 61 74 49 66 2c 20 72  chine, whatIf, r
6f40: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6f50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6f60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c 6f         return lo
6f70: 63 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20  calMachine;..   
6f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6f90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
6fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
6fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ff0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7000: 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
7010: 73 74 72 79 4b 65 79 20 70 65 72 66 6f 72 6d 61  stryKey performa
7020: 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20  nceData;..      
7030: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
7040: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 50 65 72  kRegistryKey Per
7050: 66 6f 72 6d 61 6e 63 65 44 61 74 61 0d 0a 20 20  formanceData..  
7060: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7070: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
7080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7090: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
70a0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
70b0: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
70c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70d0: 20 69 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65   if (performance
70e0: 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Data == null).. 
70f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7100: 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e         performan
7110: 63 65 44 61 74 61 20 3d 20 6e 65 77 20 4d 6f 63  ceData = new Moc
7120: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
7130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7140: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
7150: 74 72 79 2e 50 65 72 66 6f 72 6d 61 6e 63 65 44  try.PerformanceD
7160: 61 74 61 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ata, whatIf, rea
7170: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d  dOnly, safe);...
7180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7190: 20 20 20 20 20 72 65 74 75 72 6e 20 70 65 72 66       return perf
71a0: 6f 72 6d 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20  ormanceData;..  
71b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
71c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
71d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
71e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7220: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7230: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
7240: 69 73 74 72 79 4b 65 79 20 75 73 65 72 73 3b 0d  istryKey users;.
7250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
7260: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
7270: 4b 65 79 20 55 73 65 72 73 0d 0a 20 20 20 20 20  Key Users..     
7280: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7290: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
72b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
72c0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
72d0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
72e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
72f0: 20 28 75 73 65 72 73 20 3d 3d 20 6e 75 6c 6c 29   (users == null)
7300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7310: 20 20 20 20 20 20 20 20 20 20 75 73 65 72 73 20            users 
7320: 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  = new MockRegist
7330: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
7340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7350: 20 20 20 20 52 65 67 69 73 74 72 79 2e 55 73 65      Registry.Use
7360: 72 73 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  rs, whatIf, read
7370: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
7380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7390: 20 20 20 20 72 65 74 75 72 6e 20 75 73 65 72 73      return users
73a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
73b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
73c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
73d0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
73e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
73f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
7440: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 22 52 65  egion Public "Re
7450: 67 69 73 74 72 79 22 20 4d 65 74 68 6f 64 73 0d  gistry" Methods.
7460: 0a 23 69 66 20 66 61 6c 73 65 0d 0a 20 20 20 20  .#if false..    
7470: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
7480: 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d  bject GetValue(.
7490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
74a0: 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c   string keyName,
74b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
74c0: 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61    string valueNa
74d0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
74e0: 20 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61       object defa
74f0: 75 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20 20 20  ultValue..      
7500: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
7510: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7520: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
7530: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
7540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7550: 72 65 74 75 72 6e 20 52 65 67 69 73 74 72 79 2e  return Registry.
7560: 47 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65  GetValue(keyName
7570: 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20 64 65 66  , valueName, def
7580: 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20  aultValue);..   
7590: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
75a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
75b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
75f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
7600: 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75  lic void SetValu
7610: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
7620: 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
7630: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
7640: 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75       string valu
7650: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
7660: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
7670: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
7680: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
7690: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
76a0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
76b0: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
76c0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
76d0: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
76e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
76f0: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
7700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7710: 52 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c 75  Registry.SetValu
7720: 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65  e(keyName, value
7730: 4e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  Name, value);.. 
7740: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
7750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
7760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
77a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
77b0: 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61  ublic void SetVa
77c0: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
77d0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
77e0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
77f0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61         string va
7800: 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  lueName,..      
7810: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
7820: 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20   value,..       
7830: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
7840: 79 56 61 6c 75 65 4b 69 6e 64 20 76 61 6c 75 65  yValueKind value
7850: 4b 69 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20  Kind..          
7860: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
7870: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7880: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
7890: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
78a0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
78b0: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
78c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
78d0: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
78e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78f0: 52 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c 75  Registry.SetValu
7900: 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65  e(keyName, value
7910: 4e 61 6d 65 2c 20 76 61 6c 75 65 2c 20 76 61 6c  Name, value, val
7920: 75 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20  ueKind);..      
7930: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
7940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
7950: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
7960: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
79b0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
79c0: 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64  n Private Method
79d0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
79e0: 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
79f0: 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a 20 20 20  kReadOnly()..   
7a00: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
7a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a30: 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 72 65 61  // NOTE: In "rea
7a40: 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c 20 77 65  d-only" mode, we
7a50: 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20 77 72   disallow all wr
7a60: 69 74 65 20 61 63 63 65 73 73 2e 0d 0a 20 20 20  ite access...   
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
7a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7a90: 20 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d   if (!readOnly).
7aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7ab0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
7ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ad0: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
7ae0: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
7af0: 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ion();..        
7b00: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
7b10: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
7b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
7b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7b80: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
7b90: 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65  ble "Pattern" Me
7ba0: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  mbers..         
7bb0: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
7bc0: 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20  disposed;..     
7bd0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
7be0: 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65  oid CheckDispose
7bf0: 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  d() /* throw */.
7c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
7c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c20: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c40: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
7c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
7c60: 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44  hrow new ObjectD
7c70: 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e  isposedException
7c80: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7c90: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 4d 6f         typeof(Mo
7ca0: 63 6b 52 65 67 69 73 74 72 79 29 2e 4e 61 6d 65  ckRegistry).Name
7cb0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7cc0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
7cd0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d10: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7d20: 20 20 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70      private /* p
7d30: 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
7d40: 20 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65   */ void Dispose
7d50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7d60: 20 20 20 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e     bool disposin
7d70: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
7d80: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
7d90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7da0: 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73       if (!dispos
7db0: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
7dc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7dd0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7de0: 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7e10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7e50: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70           // disp
7e60: 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f  ose managed reso
7e70: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
7e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ed0: 20 20 20 20 20 20 20 69 66 20 28 63 6c 61 73 73         if (class
7ee0: 65 73 52 6f 6f 74 20 21 3d 20 6e 75 6c 6c 29 0d  esRoot != null).
7ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7f00: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f20: 20 20 20 20 20 20 20 20 63 6c 61 73 73 65 73 52          classesR
7f30: 6f 6f 74 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  oot.Close();..  
7f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f50: 20 20 20 20 20 20 20 20 20 20 63 6c 61 73 73 65            classe
7f60: 73 52 6f 6f 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  sRoot = null;.. 
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f80: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fa0: 20 20 20 20 69 66 20 28 63 75 72 72 65 6e 74 43      if (currentC
7fb0: 6f 6e 66 69 67 20 21 3d 20 6e 75 6c 6c 29 0d 0a  onfig != null)..
7fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ff0: 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f         currentCo
8000: 6e 66 69 67 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20  nfig.Close();.. 
8010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8020: 20 20 20 20 20 20 20 20 20 20 20 63 75 72 72 65             curre
8030: 6e 74 43 6f 6e 66 69 67 20 3d 20 6e 75 6c 6c 3b  ntConfig = null;
8040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8050: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8070: 20 20 20 20 20 20 20 69 66 20 28 63 75 72 72 65         if (curre
8080: 6e 74 55 73 65 72 20 21 3d 20 6e 75 6c 6c 29 0d  ntUser != null).
8090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
80a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
80b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80c0: 20 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 55          currentU
80d0: 73 65 72 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ser.Close();..  
80e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80f0: 20 20 20 20 20 20 20 20 20 20 63 75 72 72 65 6e            curren
8100: 74 55 73 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  tUser = null;.. 
8110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8120: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8140: 20 20 20 20 69 66 20 28 64 79 6e 44 61 74 61 20      if (dynData 
8150: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
8160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8170: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8190: 20 64 79 6e 44 61 74 61 2e 43 6c 6f 73 65 28 29   dynData.Close()
81a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
81b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
81c0: 79 6e 44 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a  ynData = null;..
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
81f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8200: 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 4d 61       if (localMa
8210: 63 68 69 6e 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  chine != null)..
8220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8230: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8250: 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68         localMach
8260: 69 6e 65 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ine.Close();..  
8270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8280: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d            localM
8290: 61 63 68 69 6e 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  achine = null;..
82a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
82c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82d0: 20 20 20 20 20 69 66 20 28 70 65 72 66 6f 72 6d       if (perform
82e0: 61 6e 63 65 44 61 74 61 20 21 3d 20 6e 75 6c 6c  anceData != null
82f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8300: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8320: 20 20 20 20 20 20 20 20 20 20 70 65 72 66 6f 72            perfor
8330: 6d 61 6e 63 65 44 61 74 61 2e 43 6c 6f 73 65 28  manceData.Close(
8340: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8360: 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20  performanceData 
8370: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
8380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8390: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
83a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
83b0: 20 28 75 73 65 72 73 20 21 3d 20 6e 75 6c 6c 29   (users != null)
83c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
83d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83f0: 20 20 20 20 20 20 20 20 20 75 73 65 72 73 2e 43           users.C
8400: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
8410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8420: 20 20 20 20 20 75 73 65 72 73 20 3d 20 6e 75 6c       users = nul
8430: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
8440: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
8450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8460: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8470: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
8480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84a0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
84b0: 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61          // relea
84c0: 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73  se unmanaged res
84d0: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
84e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8530: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
8540: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
8550: 45 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69  E: This object i
8560: 73 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d  s now disposed..
8570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8580: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
8590: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73               dis
85a0: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
85b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
85c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
85d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
85e0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
85f0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8640: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
8650: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65  n IDisposable Me
8660: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  mbers..         
8670: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
8680: 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20  ispose()..      
8690: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
86a0: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
86b0: 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  (true);..       
86c0: 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70           GC.Supp
86d0: 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69  ressFinalize(thi
86e0: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
86f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8700: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
8710: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
8720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
8760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
8770: 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d  gion Destructor.
8780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7e 4d 6f  .            ~Mo
8790: 63 6b 52 65 67 69 73 74 72 79 28 29 0d 0a 20 20  ckRegistry()..  
87a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
87b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73               Dis
87c0: 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20  pose(false);..  
87d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
87e0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
87f0: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
8800: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
8810: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
8820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8860: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8870: 20 23 72 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67   #region MockReg
8880: 69 73 74 72 79 4b 65 79 20 43 6c 61 73 73 0d 0a  istryKey Class..
8890: 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c          internal
88a0: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 4d 6f   sealed class Mo
88b0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 3a 20  ckRegistryKey : 
88c0: 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20  IDisposable..   
88d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
88e0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
88f0: 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  ate Constructors
8900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
8910: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
8920: 72 79 4b 65 79 28 29 0d 0a 20 20 20 20 20 20 20  ryKey()..       
8930: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8940: 20 20 20 20 20 20 20 20 77 68 61 74 49 66 20 3d          whatIf =
8950: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
8960: 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79          readOnly
8970: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
8980: 20 20 20 20 20 20 20 20 20 20 73 61 66 65 20 3d            safe =
8990: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
89a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
89b0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
89c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
89d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8a20: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
8a30: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
8a40: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
8a50: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
8a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8a70: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
8a80: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
8a90: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8aa0: 20 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a        : this()..
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
8ad0: 68 69 73 2e 6b 65 79 20 3d 20 6b 65 79 3b 0d 0a  his.key = key;..
8ae0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
8af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
8b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8b50: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
8b60: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
8b70: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
8b80: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
8b90: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
8ba0: 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20  g subKeyName..  
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
8bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8bd0: 20 3a 20 74 68 69 73 28 6b 65 79 29 0d 0a 20 20   : this(key)..  
8be0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
8c00: 73 2e 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 73  s.subKeyName = s
8c10: 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  ubKeyName;..    
8c20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8c30: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
8c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8c80: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
8c90: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
8ca0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
8cb0: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
8cc0: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
8cd0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
8ce0: 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
8cf0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
8d00: 77 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20  whatIf..        
8d10: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
8d20: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
8d30: 73 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d  s(key, subKeyNam
8d40: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
8d50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8d60: 20 20 20 74 68 69 73 2e 77 68 61 74 49 66 20 3d     this.whatIf =
8d70: 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20   whatIf;..      
8d80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8d90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8de0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
8df0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
8e00: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
8e10: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
8e20: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
8e30: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
8e40: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
8e50: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
8e60: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
8e70: 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64         bool read
8e80: 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  Only..          
8e90: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
8ea0: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
8eb0: 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
8ec0: 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20   whatIf)..      
8ed0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8ee0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65           this.re
8ef0: 61 64 4f 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c  adOnly = readOnl
8f00: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
8f10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
8f20: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f60: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8f70: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
8f80: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
8fa0: 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8fc0: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
8fd0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8fe0: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
8ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9000: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d   bool readOnly,.
9010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9020: 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20   bool safe..    
9030: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
9050: 20 74 68 69 73 28 6b 65 79 2c 20 73 75 62 4b 65   this(key, subKe
9060: 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 72  yName, whatIf, r
9070: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
9080: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9090: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 61           this.sa
90a0: 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20  fe = safe;..    
90b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
90c0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
90d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9110: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9120: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
9130: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
9140: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
9150: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
9160: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
9170: 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
9180: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
9190: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65         : this(ke
91a0: 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 29  y, null, whatIf)
91b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
91c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
91d0: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
91e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
91f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
9200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9240: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
9250: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
9260: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
9270: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
9280: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
9290: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
92a0: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
92b0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72            bool r
92c0: 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20  eadOnly..       
92d0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
92e0: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
92f0: 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68  is(key, null, wh
9300: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d  atIf, readOnly).
9310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9330: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
9340: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
9360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
93b0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
93c0: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
93d0: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
93e0: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
93f0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
9400: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
9410: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65           bool re
9420: 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20  adOnly,..       
9430: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61           bool sa
9440: 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  fe..            
9450: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
9460: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65         : this(ke
9470: 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c  y, null, whatIf,
9480: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
9490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
94a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
94b0: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
94c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
94d0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
94e0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
94f0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9540: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
9550: 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d   Public Methods.
9560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
9570: 6c 69 63 20 76 6f 69 64 20 43 6c 6f 73 65 28 29  lic void Close()
9580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
95a0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
95b0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 6f       // NOTE: No
95c0: 20 64 69 73 70 6f 73 65 64 20 63 68 65 63 6b 20   disposed check 
95d0: 68 65 72 65 20 62 65 63 61 75 73 65 20 63 61 6c  here because cal
95e0: 6c 69 6e 67 20 74 68 69 73 20 6d 65 74 68 6f 64  ling this method
95f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9600: 20 20 2f 2f 20 20 20 20 20 20 20 73 68 6f 75 6c    //       shoul
9610: 64 20 62 65 20 6a 75 73 74 20 6c 69 6b 65 20 63  d be just like c
9620: 61 6c 6c 69 6e 67 20 44 69 73 70 6f 73 65 2e 0d  alling Dispose..
9630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9640: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
9650: 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75       Dispose(tru
9660: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
9670: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
9680: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
96d0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
96e0: 52 65 67 69 73 74 72 79 4b 65 79 20 43 72 65 61  RegistryKey Crea
96f0: 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  teSubKey(..     
9700: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
9710: 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20  g subKeyName..  
9720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
9730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9750: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
9760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9770: 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28    CheckReadOnly(
9780: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9790: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
97a0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
97b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
97c0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
97d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
97e0: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
97f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9810: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
9820: 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a          // HACK:
9830: 20 41 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e   Attempt to open
9840: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73   the specified s
9850: 75 62 2d 6b 65 79 2e 20 20 49 66 20 74 68 69 73  ub-key.  If this
9860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9870: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66        //       f
9880: 61 69 6c 73 2c 20 77 65 20 77 69 6c 6c 20 73 69  ails, we will si
9890: 6d 70 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20  mply return the 
98a0: 77 72 61 70 70 65 64 20 72 6f 6f 74 20 6b 65 79  wrapped root key
98b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
98c0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
98d0: 74 73 65 6c 66 20 73 69 6e 63 65 20 6e 6f 20 77  tself since no w
98e0: 72 69 74 65 73 20 61 72 65 20 61 6c 6c 6f 77 65  rites are allowe
98f0: 64 20 69 6e 20 22 77 68 61 74 2d 69 66 22 0d 0a  d in "what-if"..
9900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9910: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64      //       mod
9920: 65 20 61 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20  e anyhow...     
9930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9940: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
9950: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
9960: 65 79 20 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e  ey subKey = key.
9970: 4f 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65  OpenSubKey(subKe
9980: 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
99a0: 65 74 75 72 6e 20 28 73 75 62 4b 65 79 20 21 3d  eturn (subKey !=
99b0: 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20   null) ?..      
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99d0: 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74    new MockRegist
99e0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a00: 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
9a10: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
9a20: 2c 20 73 61 66 65 29 20 3a 0d 0a 20 20 20 20 20  , safe) :..     
9a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a40: 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73     new MockRegis
9a50: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a70: 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75           key, su
9a80: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
9a90: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
9aa0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9ab0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
9ac0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4d      return new M
9b00: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
9b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9b20: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43 72 65           key.Cre
9b30: 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
9b40: 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 72  Name), whatIf, r
9b50: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
9b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9b70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
9b80: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9b90: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bd0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9be0: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
9bf0: 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20  DeleteSubKey(.. 
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
9c10: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
9c20: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9c30: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
9c40: 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  issing..        
9c50: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
9c60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9c70: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9c80: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
9c90: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
9ca0: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
9cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cc0: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
9cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ce0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
9cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9d00: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
9d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d20: 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 53 75 62     key.DeleteSub
9d30: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20  Key(subKeyName, 
9d40: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b  throwOnMissing);
9d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9d60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9db0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9dc0: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65    public void De
9dd0: 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d  leteSubKeyTree(.
9de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9df0: 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
9e00: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
9e10: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
9e20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9e30: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
9e40: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
9e50: 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61          CheckRea
9e60: 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  dOnly();....    
9e70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9e80: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
9e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ea0: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
9ec0: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
9ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
9ee0: 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  ey.DeleteSubKeyT
9ef0: 72 65 65 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b  ree(subKeyName);
9f00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9f10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f60: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9f70: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65    public void De
9f80: 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20  leteValue(..    
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
9fa0: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
9fb0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
9fc0: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20  hrowOnMissing.. 
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a000: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a010: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a020: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
a030: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
a040: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
a050: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
a060: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a070: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
a080: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
a090: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
a0a0: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
a0b0: 6c 65 74 65 56 61 6c 75 65 28 6e 61 6d 65 2c 20  leteValue(name, 
a0c0: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b  throwOnMissing);
a0d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a0e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
a0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a130: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
a140: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 5b    public string[
a150: 5d 20 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73  ] GetSubKeyNames
a160: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
a170: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a180: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
a190: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
a1a0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
a1b0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
a1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a1d0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
a1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a1f0: 75 72 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b 65  urn key.GetSubKe
a200: 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20  yNames();..     
a210: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a220: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a270: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
a280: 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75  c object GetValu
a290: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
a2a0: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
a2b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a2c0: 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74    object default
a2d0: 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  Value..         
a2e0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
a2f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a300: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
a310: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
a320: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a330: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
a340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a350: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
a360: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
a370: 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65     return key.Ge
a380: 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66  tValue(name, def
a390: 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20  aultValue);..   
a3a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
a3b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
a3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
a410: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
a420: 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d  Key OpenSubKey(.
a430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a440: 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
a450: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
a460: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
a470: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a480: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
a490: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
a4a0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a4b0: 20 4f 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b   OpenSubKey(subK
a4c0: 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 29 3b 0d  eyName, false);.
a4d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
a4e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
a4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a530: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
a540: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
a550: 73 74 72 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b  stryKey OpenSubK
a560: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
a570: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
a580: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
a590: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72           bool wr
a5a0: 69 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  itable..        
a5b0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
a5c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a5d0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
a5e0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
a5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
a600: 20 28 77 72 69 74 61 62 6c 65 29 0d 0a 20 20 20   (writable)..   
a610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a620: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
a630: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a640: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
a650: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
a660: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
a670: 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
a680: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
a690: 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
a6a0: 6b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  key.OpenSubKey(.
a6b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a6c0: 20 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c       subKeyName,
a6d0: 20 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65 20   whatIf ? false 
a6e0: 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a  : writable);....
a6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a700: 72 65 74 75 72 6e 20 28 73 75 62 4b 65 79 20 21  return (subKey !
a710: 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20  = null) ?..     
a720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
a730: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
a740: 65 79 28 73 75 62 4b 65 79 2c 20 77 68 61 74 49  ey(subKey, whatI
a750: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
a760: 65 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  e) : null;..    
a770: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a780: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a7d0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
a7e0: 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65  ic void SetValue
a7f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
a800: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
a810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a820: 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20   object value.. 
a830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
a840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a860: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a870: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a880: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
a890: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
a8a0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
a8b0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
a8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a8d0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
a8e0: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
a8f0: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
a900: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53 65            key.Se
a910: 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c  tValue(name, val
a920: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
a930: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
a940: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
a950: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a9a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
a9b0: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f  egion Public Pro
a9c0: 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20  perties..       
a9d0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
a9e0: 6e 67 20 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ng Name..       
a9f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
aa00: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
aa40: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
aa60: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
aa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
aa90: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
aaa0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
aab0: 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   !String.IsNullO
aac0: 72 45 6d 70 74 79 28 73 75 62 4b 65 79 4e 61 6d  rEmpty(subKeyNam
aad0: 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  e) ?..          
aae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
aaf0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
ab00: 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2e 4e 61 6d 65  \\{1}", key.Name
ab10: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 20 3a 0d  , subKeyName) :.
ab20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ab30: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 4e 61 6d           key.Nam
ab40: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
ab50: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
ab60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
ab70: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
ab80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abb0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
abc0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 52         private R
abd0: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 3b 0d  egistryKey key;.
abe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
abf0: 6c 69 63 20 52 65 67 69 73 74 72 79 4b 65 79 20  lic RegistryKey 
ac00: 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Key..           
ac10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ac20: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
ac30: 69 73 70 6f 73 65 64 28 29 3b 20 43 68 65 63 6b  isposed(); Check
ac40: 53 61 66 65 28 29 3b 20 72 65 74 75 72 6e 20 6b  Safe(); return k
ac50: 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ey; }..         
ac60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
ac70: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
ac80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acb0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
acc0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
acd0: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
ace0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
acf0: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 53 75 62  ublic string Sub
ad00: 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  KeyName..       
ad10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ad20: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
ad30: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
ad40: 65 74 75 72 6e 20 73 75 62 4b 65 79 4e 61 6d 65  eturn subKeyName
ad50: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
ad60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ad70: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ad80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ada0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adb0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
adc0: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
add0: 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20  l whatIf;..     
ade0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
adf0: 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20  ol WhatIf..     
ae00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ae10: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
ae20: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
ae30: 20 72 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20   return whatIf; 
ae40: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
ae50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ae60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aea0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
aeb0: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
aec0: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
aed0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
aee0: 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol ReadOnly..   
aef0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
af00: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
af10: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
af20: 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e  ); return readOn
af30: 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ly; }..         
af40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
af50: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
af60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
afa0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
afb0: 6f 6c 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20  ol safe;..      
afc0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
afd0: 6c 20 53 61 66 65 0d 0a 20 20 20 20 20 20 20 20  l Safe..        
afe0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
aff0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
b000: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
b010: 74 75 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20  turn safe; }..  
b020: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b030: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
b040: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
b050: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b090: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
b0a0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
b0b0: 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20  ivate Methods.. 
b0c0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
b0d0: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61  te void CheckRea
b0e0: 64 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20  dOnly()..       
b0f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b100: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
b110: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
b120: 4f 54 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e  OTE: In "read-on
b130: 6c 79 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73  ly" mode, we dis
b140: 61 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20  allow all write 
b150: 61 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  access...       
b160: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
b170: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b180: 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20  (!readOnly)..   
b190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1a0: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
b1b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
b1c0: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
b1d0: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
b1e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b1f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
b200: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b240: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
b250: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
b260: 20 43 68 65 63 6b 53 61 66 65 28 29 0d 0a 20 20   CheckSafe()..  
b270: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b280: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
b290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b2a0: 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 73 61   // NOTE: In "sa
b2b0: 66 65 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73  fe" mode, we dis
b2c0: 61 6c 6c 6f 77 20 61 6c 6c 20 64 69 72 65 63 74  allow all direct
b2d0: 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 0d 0a   access to the..
b2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2f0: 2f 2f 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e  //       contain
b300: 65 64 20 72 65 67 69 73 74 72 79 20 6b 65 79 2e  ed registry key.
b310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b320: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b330: 20 20 20 20 20 20 69 66 20 28 21 73 61 66 65 29        if (!safe)
b340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b350: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
b360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b370: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
b380: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
b390: 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20  tion();..       
b3a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b3b0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
b3c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
b3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b410: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
b420: 20 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 2e   #region System.
b430: 4f 62 6a 65 63 74 20 4f 76 65 72 72 69 64 65 73  Object Overrides
b440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
b450: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74  blic override st
b460: 72 69 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0d  ring ToString().
b470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
b480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b490: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
b4a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b4b0: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
b4c0: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
b4d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
b4e0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
b500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b540: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
b550: 72 65 67 69 6f 6e 20 49 6d 70 6c 69 63 69 74 20  region Implicit 
b560: 43 6f 6e 76 65 72 73 69 6f 6e 20 4f 70 65 72 61  Conversion Opera
b570: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
b580: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b590: 20 20 2f 2f 20 42 55 47 42 55 47 3a 20 52 65 6d    // BUGBUG: Rem
b5a0: 6f 76 65 20 6d 65 3f 20 20 54 68 69 73 20 73 68  ove me?  This sh
b5b0: 6f 75 6c 64 20 62 65 20 73 61 66 65 20 62 65 63  ould be safe bec
b5c0: 61 75 73 65 20 69 6e 20 22 77 68 61 74 2d 69 66  ause in "what-if
b5d0: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  "..            /
b5e0: 2f 20 20 20 20 20 20 20 20 20 6d 6f 64 65 20 61  /         mode a
b5f0: 6c 6c 20 6b 65 79 73 20 61 72 65 20 6f 70 65 6e  ll keys are open
b600: 65 64 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20  ed read-only... 
b610: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
b620: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
b630: 63 20 73 74 61 74 69 63 20 69 6d 70 6c 69 63 69  c static implici
b640: 74 20 6f 70 65 72 61 74 6f 72 20 52 65 67 69 73  t operator Regis
b650: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
b660: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
b670: 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20  istryKey key..  
b680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
b690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
b6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6b0: 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e  return (key != n
b6c0: 75 6c 6c 29 20 3f 20 6b 65 79 2e 4b 65 79 20 3a  ull) ? key.Key :
b6d0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
b6e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b6f0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
b700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
b710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b750: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b760: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
b770: 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65  ble "Pattern" Me
b780: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  mbers..         
b790: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
b7a0: 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20  disposed;..     
b7b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
b7c0: 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65  oid CheckDispose
b7d0: 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  d() /* throw */.
b7e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b800: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b820: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
b830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
b840: 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44  hrow new ObjectD
b850: 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e  isposedException
b860: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
b870: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 4d 6f         typeof(Mo
b880: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 29 2e 4e  ckRegistryKey).N
b890: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
b8a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
b8b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b900: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 2f         private /
b910: 2a 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74  * protected virt
b920: 75 61 6c 20 2a 2f 20 76 6f 69 64 20 44 69 73 70  ual */ void Disp
b930: 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ose(..          
b940: 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 73 70 6f        bool dispo
b950: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  sing..          
b960: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
b970: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b980: 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
b990: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
b9a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
b9c0: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ba00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba20: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
ba30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
ba40: 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72  ispose managed r
ba50: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
ba60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ba70: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ba80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
baa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bab0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
bac0: 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bae0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
baf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb00: 20 20 20 6b 65 79 2e 43 6c 6f 73 65 28 29 3b 0d     key.Close();.
bb10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
bb30: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
bb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
bb60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
bb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb80: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
bb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bba0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
bbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
bbc0: 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67   release unmanag
bbd0: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
bbe0: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
bbf0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
bc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bc30: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
bc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc50: 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6f 62  // NOTE: This ob
bc60: 6a 65 63 74 20 69 73 20 6e 6f 77 20 64 69 73 70  ject is now disp
bc70: 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  osed...         
bc80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72     disposed = tr
bcb0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
bcc0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
bcd0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
bce0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
bcf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
bd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bd50: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
bd60: 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  ble Members..   
bd70: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
bd80: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a  void Dispose()..
bd90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
bda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
bdb0: 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20  ispose(true);.. 
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
bdd0: 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69  C.SuppressFinali
bde0: 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20  ze(this);..     
bdf0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
be00: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
be10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
be20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be60: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
be70: 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72     #region Destr
be80: 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  uctor..         
be90: 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73 74 72 79     ~MockRegistry
bea0: 4b 65 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  Key()..         
beb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bec0: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61        Dispose(fa
bed0: 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lse);..         
bee0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
bef0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
bf00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
bf10: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
bf20: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
bf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
bf70: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
bf80: 6e 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  n RegistryHelper
bf90: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
bfa0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 63  private static c
bfb0: 6c 61 73 73 20 52 65 67 69 73 74 72 79 48 65 6c  lass RegistryHel
bfc0: 70 65 72 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  per..        {..
bfd0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
bfe0: 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69  ion Public Stati
bff0: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
c000: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
c010: 65 20 73 74 61 74 69 63 20 69 6e 74 20 73 75 62  e static int sub
c020: 4b 65 79 73 43 72 65 61 74 65 64 3b 0d 0a 20 20  KeysCreated;..  
c030: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
c040: 20 73 74 61 74 69 63 20 69 6e 74 20 53 75 62 4b   static int SubK
c050: 65 79 73 43 72 65 61 74 65 64 0d 0a 20 20 20 20  eysCreated..    
c060: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c070: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
c080: 20 72 65 74 75 72 6e 20 73 75 62 4b 65 79 73 43   return subKeysC
c090: 72 65 61 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20  reated; }..     
c0a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
c0b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
c0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
c100: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
c110: 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 73 75  te static int su
c120: 62 4b 65 79 73 44 65 6c 65 74 65 64 3b 0d 0a 20  bKeysDeleted;.. 
c130: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
c140: 63 20 73 74 61 74 69 63 20 69 6e 74 20 53 75 62  c static int Sub
c150: 4b 65 79 73 44 65 6c 65 74 65 64 0d 0a 20 20 20  KeysDeleted..   
c160: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c170: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
c180: 7b 20 72 65 74 75 72 6e 20 73 75 62 4b 65 79 73  { return subKeys
c190: 44 65 6c 65 74 65 64 3b 20 7d 0d 0a 20 20 20 20  Deleted; }..    
c1a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
c1b0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
c1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
c200: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
c210: 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b  ate static int k
c220: 65 79 56 61 6c 75 65 73 52 65 61 64 3b 0d 0a 20  eyValuesRead;.. 
c230: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
c240: 63 20 73 74 61 74 69 63 20 69 6e 74 20 4b 65 79  c static int Key
c250: 56 61 6c 75 65 73 52 65 61 64 0d 0a 20 20 20 20  ValuesRead..    
c260: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c270: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
c280: 20 72 65 74 75 72 6e 20 6b 65 79 56 61 6c 75 65   return keyValue
c290: 73 52 65 61 64 3b 20 7d 0d 0a 20 20 20 20 20 20  sRead; }..      
c2a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c2b0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
c2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
c300: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
c310: 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79  e static int key
c320: 56 61 6c 75 65 73 57 72 69 74 74 65 6e 3b 0d 0a  ValuesWritten;..
c330: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
c340: 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 4b 65  ic static int Ke
c350: 79 56 61 6c 75 65 73 57 72 69 74 74 65 6e 0d 0a  yValuesWritten..
c360: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
c380: 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79 56  et { return keyV
c390: 61 6c 75 65 73 57 72 69 74 74 65 6e 3b 20 7d 0d  aluesWritten; }.
c3a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
c3b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
c3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c400: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
c410: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
c420: 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 44 65 6c  int keyValuesDel
c430: 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  eted;..         
c440: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
c450: 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 44 65   int KeyValuesDe
c460: 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20  leted..         
c470: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c480: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
c490: 72 6e 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65  rn keyValuesDele
c4a0: 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ted; }..        
c4b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
c4c0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
c4d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
c4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c520: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c530: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53  #region Public S
c540: 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  tatic Methods.. 
c550: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
c560: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
c570: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
c580: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
c590: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
c5a0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
c5b0: 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20   OpenSubKey(..  
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
c5d0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
c5e0: 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
c5f0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
c600: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
c610: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
c620: 20 77 72 69 74 61 62 6c 65 2c 0d 0a 20 20 20 20   writable,..    
c630: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
c640: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
c650: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
c660: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
c670: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
c680: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c690: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
c6a0: 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
c6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6c0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
c6d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c6e0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
c6f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c700: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
c710: 65 62 75 67 41 6e 64 54 72 61 63 65 28 77 72 69  ebugAndTrace(wri
c720: 74 61 62 6c 65 20 3f 0d 0a 20 20 20 20 20 20 20  table ?..       
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c740: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48   TracePriority.H
c750: 69 67 68 65 73 74 20 3a 20 54 72 61 63 65 50 72  ighest : TracePr
c760: 69 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a  iority.Higher,..
c770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c780: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
c790: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
c7a0: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
c7b0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
c7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72                "r
c7d0: 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75  ootKey = {0}, su
c7e0: 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20  bKeyName = {1}, 
c7f0: 77 72 69 74 61 62 6c 65 20 3d 20 7b 32 7d 22 2c  writable = {2}",
c800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c810: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
c820: 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46  play(rootKey), F
c830: 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79  orDisplay(subKey
c840: 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Name),..        
c850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c860: 46 6f 72 44 69 73 70 6c 61 79 28 77 72 69 74 61  ForDisplay(writa
c870: 62 6c 65 29 29 2c 20 74 72 61 63 65 43 61 74 65  ble)), traceCate
c880: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
c890: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c8b0: 20 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 66 6f   HACK: Always fo
c8c0: 72 62 69 64 20 77 72 69 74 61 62 6c 65 20 61 63  rbid writable ac
c8d0: 63 65 73 73 20 77 68 65 6e 20 6f 70 65 72 61 74  cess when operat
c8e0: 69 6e 67 20 69 6e 0d 0a 20 20 20 20 20 20 20 20  ing in..        
c8f0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
c900: 20 22 77 68 61 74 2d 69 66 22 20 6d 6f 64 65 2e   "what-if" mode.
c910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c920: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
c930: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
c940: 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74  ryKey key = root
c950: 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  Key.OpenSubKey(.
c960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c970: 20 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c       subKeyName,
c980: 20 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65 20   whatIf ? false 
c990: 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a  : writable);....
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9b0: 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e  return (key != n
c9c0: 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ull) ?..        
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
c9e0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
c9f0: 6b 65 79 2c 20 77 68 61 74 49 66 2c 20 66 61 6c  key, whatIf, fal
ca00: 73 65 2c 20 66 61 6c 73 65 29 20 3a 20 6e 75 6c  se, false) : nul
ca10: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
ca20: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
ca30: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ca40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca70: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ca80: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
ca90: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
caa0: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
cac0: 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52 65  ic static MockRe
cad0: 67 69 73 74 72 79 4b 65 79 20 43 72 65 61 74 65  gistryKey Create
cae0: 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
caf0: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
cb00: 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
cb10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
cb20: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
cb30: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
cb40: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
cb50: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
cb60: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
cb70: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
cb80: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
cb90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cba0: 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
cbb0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
cbd0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
cbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
cbf0: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
cc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc10: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
cc20: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
cc30: 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc50: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
cc60: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
cc70: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
cc80: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72                "r
cca0: 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75  ootKey = {0}, su
ccb0: 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c  bKeyName = {1}",
ccc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ccd0: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
cce0: 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46  play(rootKey), F
ccf0: 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79  orDisplay(subKey
cd00: 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
cd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd20: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
cd30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cd40: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
cd50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
cd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd70: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
cd80: 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a          // HACK:
cd90: 20 41 6c 77 61 79 73 20 6f 70 65 6e 20 61 20 6b   Always open a k
cda0: 65 79 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20  ey, rather than 
cdb0: 63 72 65 61 74 69 6e 67 20 6f 6e 65 20 77 68 65  creating one whe
cdc0: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
cdd0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
cde0: 6f 70 65 72 61 74 69 6e 67 20 69 6e 20 22 77 68  operating in "wh
cdf0: 61 74 2d 69 66 22 20 6d 6f 64 65 2e 0d 0a 20 20  at-if" mode...  
ce00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce10: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
ce20: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77 68            if (wh
ce30: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
ce40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ce50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce60: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
ce70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce80: 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d    // HACK: Attem
ce90: 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73  pt to open the s
cea0: 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79  pecified sub-key
ceb0: 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 20  .  If..         
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ced0: 2f 20 20 20 20 20 20 20 74 68 69 73 20 66 61 69  /       this fai
cee0: 6c 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d 70  ls, we will simp
cef0: 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 72 6f  ly return the ro
cf00: 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot..            
cf10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
cf20: 20 20 20 20 20 6b 65 79 20 69 74 73 65 6c 66 20       key itself 
cf30: 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20  since no writes 
cf40: 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a  are allowed in..
cf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf60: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
cf70: 20 22 77 68 61 74 2d 69 66 22 20 6d 6f 64 65 20   "what-if" mode 
cf80: 61 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20  anyhow...       
cf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfa0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
cfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
cfc0: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
cfd0: 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53   = rootKey.OpenS
cfe0: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
cff0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
d010: 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c  turn (key != nul
d020: 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  l) ?..          
d030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d040: 20 20 6b 65 79 20 3a 20 6e 65 77 20 4d 6f 63 6b    key : new Mock
d050: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
d060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
d080: 6f 74 4b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d  otKey, subKeyNam
d090: 65 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65  e, whatIf, false
d0a0: 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  , false);..     
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
d0c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d0d0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d100: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
d110: 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  n new MockRegist
d120: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d140: 20 20 20 20 72 6f 6f 74 4b 65 79 2e 43 72 65 61      rootKey.Crea
d150: 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e  teSubKey(subKeyN
d160: 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 66 61  ame), whatIf, fa
d170: 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lse,..          
d180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d190: 20 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20    false);..     
d1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
d1b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d1c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
d1d0: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
d1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
d1f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d200: 20 20 20 20 20 73 75 62 4b 65 79 73 43 72 65 61       subKeysCrea
d210: 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ted++;..        
d220: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
d230: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
d240: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
d250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
d290: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
d2a0: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
d2b0: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
d2c0: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
d2d0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
d2e0: 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b   void DeleteSubK
d2f0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
d300: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
d310: 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
d320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
d330: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
d340: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d350: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
d360: 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
d370: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
d380: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
d390: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
d3a0: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
d3b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
d3c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d3d0: 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
d3e0: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d400: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
d410: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d420: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
d430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
d440: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
d450: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
d460: 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
d470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d480: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
d490: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
d4a0: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
d4b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
d4c0: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
d4d0: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
d4e0: 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20  yName = {1}",.. 
d4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d500: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
d510: 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
d520: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
d530: 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
d540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
d550: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
d560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d570: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
d580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d590: 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74     rootKey.Delet
d5a0: 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61  eSubKey(subKeyNa
d5b0: 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  me, throwOnMissi
d5c0: 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ng);....        
d5d0: 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 44          subKeysD
d5e0: 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20  eleted++;..     
d5f0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
d600: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
d610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
d650: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
d660: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
d670: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
d680: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
d690: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
d6a0: 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b   void DeleteSubK
d6b0: 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20  eyTree(..       
d6c0: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
d6d0: 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
d6e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d6f0: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
d700: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
d710: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
d720: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
d730: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
d740: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
d750: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
d760: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d770: 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
d780: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
d790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d7a0: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
d7b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
d7c0: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
d7d0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
d7e0: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
d7f0: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
d800: 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
d810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d820: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
d830: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
d840: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
d850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d860: 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65           "rootKe
d870: 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e  y = {0}, subKeyN
d880: 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20  ame = {1}",..   
d890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8a0: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
d8b0: 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73  rootKey), ForDis
d8c0: 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  play(subKeyName)
d8d0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
d8e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
d8f0: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
d910: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
d920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d930: 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53   rootKey.DeleteS
d940: 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65 79  ubKeyTree(subKey
d950: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
d960: 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
d970: 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20  sDeleted++;..   
d980: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
d990: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
d9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
d9e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
d9f0: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
da00: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
da10: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
da20: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
da30: 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74 53  ic string[] GetS
da40: 75 62 4b 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20  ubKeyNames(..   
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
da60: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
da70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
da80: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
da90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
daa0: 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
dac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
dad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dae0: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
daf0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
db00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
db10: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
db20: 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
db30: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
db40: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
db50: 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
db60: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
db70: 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
db90: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
dba0: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
dbb0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
dbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbd0: 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 22 2c 20     "key = {0}", 
dbe0: 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 29  ForDisplay(key))
dbf0: 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
dc00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
dc10: 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e       return key.
dc20: 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29  GetSubKeyNames()
dc30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
dc40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
dc50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc90: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
dca0: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
dcb0: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
dcc0: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
dcd0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
dce0: 63 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20  c static object 
dcf0: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
dd00: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
dd10: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
dd20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dd30: 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
dd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
dd50: 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c  bject defaultVal
dd60: 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
dd70: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
dd80: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
dd90: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
dda0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ddb0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
ddc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ddd0: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
dde0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
ddf0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
de00: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
de10: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
de20: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
de30: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
de40: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
de50: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
de60: 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
de80: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
de90: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
dea0: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dec0: 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c       "key = {0},
ded0: 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66   name = {1}, def
dee0: 61 75 6c 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22  aultValue = {2}"
def0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
df00: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
df10: 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72 44  splay(key), ForD
df20: 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20  isplay(name),.. 
df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df40: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
df50: 79 28 64 65 66 61 75 6c 74 56 61 6c 75 65 29 29  y(defaultValue))
df60: 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
df70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
df80: 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
df90: 65 20 3d 20 6b 65 79 2e 47 65 74 56 61 6c 75 65  e = key.GetValue
dfa0: 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56 61  (name, defaultVa
dfb0: 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lue);....       
dfc0: 20 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75           keyValu
dfd0: 65 73 52 65 61 64 2b 2b 3b 0d 0a 0d 0a 20 20 20  esRead++;....   
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
dff0: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
e000: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
e010: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
e020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
e060: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
e070: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
e080: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
e090: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
e0a0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
e0b0: 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28  c void SetValue(
e0c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e0d0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
e0e0: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
e0f0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
e100: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
e110: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
e120: 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
e130: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
e140: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e150: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
e160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e170: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
e180: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e190: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
e1a0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
e1b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
e1c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e1d0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
e1e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e1f0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
e200: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
e210: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
e220: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
e240: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
e250: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
e260: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
e270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e280: 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e     "key = {0}, n
e290: 61 6d 65 20 3d 20 7b 31 7d 2c 20 76 61 6c 75 65  ame = {1}, value
e2a0: 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20   = {2}",..      
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2c0: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79    ForDisplay(key
e2d0: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61  ), ForDisplay(na
e2e0: 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me), ForDisplay(
e2f0: 76 61 6c 75 65 29 29 2c 0d 0a 20 20 20 20 20 20  value)),..      
e300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e310: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
e320: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
e330: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
e340: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e350: 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74 56 61         key.SetVa
e360: 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29  lue(name, value)
e370: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
e380: 20 20 20 20 20 6b 65 79 56 61 6c 75 65 73 57 72       keyValuesWr
e390: 69 74 74 65 6e 2b 2b 3b 0d 0a 20 20 20 20 20 20  itten++;..      
e3a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
e3b0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
e3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
e400: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
e410: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
e420: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
e430: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
e440: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
e450: 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65  void DeleteValue
e460: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
e470: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
e480: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
e490: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
e4a0: 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
e4b0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
e4c0: 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
e4e0: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
e4f0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
e500: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
e510: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
e520: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e530: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
e540: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
e550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e560: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
e570: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
e580: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
e590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
e5a0: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
e5b0: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
e5c0: 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
e5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5e0: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
e5f0: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
e600: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
e610: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
e620: 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20             "key 
e630: 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31  = {0}, name = {1
e640: 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b  }", ForDisplay(k
e650: 65 79 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ey),..          
e660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
e670: 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 29 2c  rDisplay(name)),
e680: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
e690: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e6a0: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
e6b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e6c0: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
e6d0: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f  Value(name, thro
e6e0: 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a  wOnMissing);....
e6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e700: 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  keyValuesDeleted
e710: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
e720: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
e730: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
e740: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
e750: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
e760: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
e770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
e7b0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
e7c0: 53 74 72 69 6e 67 4c 69 73 74 20 43 6c 61 73 73  StringList Class
e7d0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
e7e0: 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  e sealed class S
e7f0: 74 72 69 6e 67 4c 69 73 74 20 3a 20 4c 69 73 74  tringList : List
e800: 3c 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20  <string>..      
e810: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e820: 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69   public StringLi
e830: 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st()..          
e840: 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a        : base()..
e850: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e870: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
e880: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
e890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
e8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
e8e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
e8f0: 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74  ublic StringList
e900: 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 73 74 72  (IEnumerable<str
e910: 69 6e 67 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29  ing> collection)
e920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e930: 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74    : base(collect
e940: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ion)..          
e950: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e960: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
e970: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
e980: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
e990: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
e9a0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
e9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ea00: 23 72 65 67 69 6f 6e 20 53 74 72 69 6e 67 44 69  #region StringDi
ea10: 63 74 69 6f 6e 61 72 79 20 43 6c 61 73 73 0d 0a  ctionary Class..
ea20: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
ea30: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72  sealed class Str
ea40: 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 20 3a 20  ingDictionary : 
ea50: 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
ea60: 67 2c 20 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20  g, string>..    
ea70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ea80: 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67     public String
ea90: 44 69 63 74 69 6f 6e 61 72 79 28 29 0d 0a 20 20  Dictionary()..  
eaa0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
eab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
eac0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
ead0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
eae0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
eaf0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
eb00: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
eb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
eb50: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
eb60: 56 65 72 73 69 6f 6e 4c 69 73 74 20 43 6c 61 73  VersionList Clas
eb70: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
eb80: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
eb90: 56 65 72 73 69 6f 6e 4c 69 73 74 20 3a 20 4c 69  VersionList : Li
eba0: 73 74 3c 56 65 72 73 69 6f 6e 3e 0d 0a 20 20 20  st<Version>..   
ebb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ebc0: 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69      public Versi
ebd0: 6f 6e 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  onList()..      
ebe0: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65            : base
ebf0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
ec00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ec10: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
ec20: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
ec30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ec40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec80: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
ec90: 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
eca0: 6e 4c 69 73 74 28 49 45 6e 75 6d 65 72 61 62 6c  nList(IEnumerabl
ecb0: 65 3c 56 65 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65  e<Version> colle
ecc0: 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
ecd0: 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 63          : base(c
ece0: 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20  ollection)..    
ecf0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ed00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
ed10: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
ed20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ed30: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
ed40: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
ed50: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
ed60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
eda0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65        #region Ve
edb0: 72 73 69 6f 6e 4d 61 70 20 43 6c 61 73 73 0d 0a  rsionMap Class..
edc0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
edd0: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72  sealed class Ver
ede0: 73 69 6f 6e 4d 61 70 20 3a 20 44 69 63 74 69 6f  sionMap : Dictio
edf0: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 56 65 72  nary<string, Ver
ee00: 73 69 6f 6e 4c 69 73 74 3e 0d 0a 20 20 20 20 20  sionList>..     
ee10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ee20: 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e    public Version
ee30: 4d 61 70 28 29 0d 0a 20 20 20 20 20 20 20 20 20  Map()..         
ee40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ee50: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
ee60: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
ee70: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
ee80: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
ee90: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
eea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eee0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
eef0: 20 23 72 65 67 69 6f 6e 20 50 61 63 6b 61 67 65   #region Package
ef00: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
ef10: 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20  internal sealed 
ef20: 63 6c 61 73 73 20 50 61 63 6b 61 67 65 0d 0a 20  class Package.. 
ef30: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ef40: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
ef50: 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
ef60: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
ef70: 75 62 6c 69 63 20 50 61 63 6b 61 67 65 28 29 0d  ublic Package().
ef80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ef90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efa0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
efb0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
efc0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
efd0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
efe0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
eff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f020: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f030: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
f040: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
f050: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
f060: 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 70 72  rivate string pr
f070: 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e  oviderInvariantN
f080: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
f090: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
f0a0: 50 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e  ProviderInvarian
f0b0: 74 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  tName..         
f0c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f0d0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
f0e0: 72 6e 20 70 72 6f 76 69 64 65 72 49 6e 76 61 72  rn providerInvar
f0f0: 69 61 6e 74 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  iantName; }..   
f100: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
f110: 20 7b 20 70 72 6f 76 69 64 65 72 49 6e 76 61 72   { providerInvar
f120: 69 61 6e 74 4e 61 6d 65 20 3d 20 76 61 6c 75 65  iantName = value
f130: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
f140: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
f150: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f190: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
f1a0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
f1b0: 69 6e 67 20 66 61 63 74 6f 72 79 54 79 70 65 4e  ing factoryTypeN
f1c0: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
f1d0: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
f1e0: 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 0d  FactoryTypeName.
f1f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
f200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f210: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 66 61 63  get { return fac
f220: 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b 20 7d 0d  toryTypeName; }.
f230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f240: 20 73 65 74 20 7b 20 66 61 63 74 6f 72 79 54 79   set { factoryTy
f250: 70 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20  peName = value; 
f260: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
f270: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
f2d0: 20 20 20 70 72 69 76 61 74 65 20 41 73 73 65 6d     private Assem
f2e0: 62 6c 79 4e 61 6d 65 20 70 72 6f 76 69 64 65 72  blyName provider
f2f0: 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20  AssemblyName;.. 
f300: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
f310: 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 50  c AssemblyName P
f320: 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e  roviderAssemblyN
f330: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
f340: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f350: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
f360: 20 70 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c   providerAssembl
f370: 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  yName; }..      
f380: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
f390: 70 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79  providerAssembly
f3a0: 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
f3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
f3c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f410: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f420: 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c   private Assembl
f430: 79 4e 61 6d 65 20 64 65 73 69 67 6e 65 72 41 73  yName designerAs
f440: 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20  semblyName;..   
f450: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
f460: 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 44 65 73  AssemblyName Des
f470: 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  ignerAssemblyNam
f480: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
f490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f4a0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64    get { return d
f4b0: 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e  esignerAssemblyN
f4c0: 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
f4d0: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65          set { de
f4e0: 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61  signerAssemblyNa
f4f0: 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
f500: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
f510: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
f520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
f560: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
f570: 72 69 76 61 74 65 20 62 6f 6f 6c 20 67 6c 6f 62  rivate bool glob
f580: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b  alAssemblyCache;
f590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
f5a0: 62 6c 69 63 20 62 6f 6f 6c 20 47 6c 6f 62 61 6c  blic bool Global
f5b0: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 0d 0a 20  AssemblyCache.. 
f5c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
f5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
f5e0: 74 20 7b 20 72 65 74 75 72 6e 20 67 6c 6f 62 61  t { return globa
f5f0: 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b 20  lAssemblyCache; 
f600: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
f610: 20 20 20 73 65 74 20 7b 20 67 6c 6f 62 61 6c 41     set { globalA
f620: 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 76  ssemblyCache = v
f630: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
f640: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f650: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
f660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
f6a0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
f6b0: 20 47 75 69 64 20 70 61 63 6b 61 67 65 49 64 3b   Guid packageId;
f6c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
f6d0: 62 6c 69 63 20 47 75 69 64 20 50 61 63 6b 61 67  blic Guid Packag
f6e0: 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  eId..           
f6f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f700: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
f710: 20 70 61 63 6b 61 67 65 49 64 3b 20 7d 0d 0a 20   packageId; }.. 
f720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f730: 65 74 20 7b 20 70 61 63 6b 61 67 65 49 64 20 3d  et { packageId =
f740: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
f750: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
f760: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
f770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
f7b0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f7c0: 74 65 20 47 75 69 64 20 73 65 72 76 69 63 65 49  te Guid serviceI
f7d0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
f7e0: 70 75 62 6c 69 63 20 47 75 69 64 20 53 65 72 76  public Guid Serv
f7f0: 69 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20  iceId..         
f800: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f810: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
f820: 72 6e 20 73 65 72 76 69 63 65 49 64 3b 20 7d 0d  rn serviceId; }.
f830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f840: 20 73 65 74 20 7b 20 73 65 72 76 69 63 65 49 64   set { serviceId
f850: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
f860: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
f870: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
f880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
f8c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f8d0: 76 61 74 65 20 47 75 69 64 20 64 61 74 61 53 6f  vate Guid dataSo
f8e0: 75 72 63 65 49 64 3b 0d 0a 20 20 20 20 20 20 20  urceId;..       
f8f0: 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64       public Guid
f900: 20 44 61 74 61 53 6f 75 72 63 65 49 64 0d 0a 20   DataSourceId.. 
f910: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
f920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
f930: 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74 61 53  t { return dataS
f940: 6f 75 72 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20  ourceId; }..    
f950: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
f960: 7b 20 64 61 74 61 53 6f 75 72 63 65 49 64 20 3d  { dataSourceId =
f970: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
f980: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
f990: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
f9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
f9e0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f9f0: 74 65 20 47 75 69 64 20 64 61 74 61 50 72 6f 76  te Guid dataProv
fa00: 69 64 65 72 49 64 3b 0d 0a 20 20 20 20 20 20 20  iderId;..       
fa10: 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64       public Guid
fa20: 20 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 0d   DataProviderId.
fa30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
fa40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa50: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74  get { return dat
fa60: 61 50 72 6f 76 69 64 65 72 49 64 3b 20 7d 0d 0a  aProviderId; }..
fa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa80: 73 65 74 20 7b 20 64 61 74 61 50 72 6f 76 69 64  set { dataProvid
fa90: 65 72 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  erId = value; }.
faa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
fab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
fac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
faf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb00: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
fb10: 20 70 72 69 76 61 74 65 20 47 75 69 64 20 61 64   private Guid ad
fb20: 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64  oNetTechnologyId
fb30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
fb40: 75 62 6c 69 63 20 47 75 69 64 20 41 64 6f 4e 65  ublic Guid AdoNe
fb50: 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20  tTechnologyId.. 
fb60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
fb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
fb80: 74 20 7b 20 72 65 74 75 72 6e 20 61 64 6f 4e 65  t { return adoNe
fb90: 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d  tTechnologyId; }
fba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fbb0: 20 20 73 65 74 20 7b 20 61 64 6f 4e 65 74 54 65    set { adoNetTe
fbc0: 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 76 61 6c  chnologyId = val
fbd0: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
fbe0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
fbf0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
fc00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
fc10: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
fc20: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
fc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
fc70: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
fc80: 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  n Configuration 
fc90: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
fca0: 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
fcb0: 61 73 73 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  ass Configuratio
fcc0: 6e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  n..        {..  
fcd0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
fce0: 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61  n Private Consta
fcf0: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nts..           
fd00: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63   private const c
fd10: 68 61 72 20 53 77 69 74 63 68 20 3d 20 27 2d 27  har Switch = '-'
fd20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
fd30: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61  rivate const cha
fd40: 72 20 41 6c 74 53 77 69 74 63 68 20 3d 20 27 2f  r AltSwitch = '/
fd50: 27 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ';....          
fd60: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
fd70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fda0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
fdb0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
fdc0: 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 63 68 61  tic readonly cha
fdd0: 72 5b 5d 20 53 77 69 74 63 68 43 68 61 72 73 20  r[] SwitchChars 
fde0: 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  = {..           
fdf0: 20 20 20 20 20 53 77 69 74 63 68 2c 20 41 6c 74       Switch, Alt
fe00: 53 77 69 74 63 68 0d 0a 20 20 20 20 20 20 20 20  Switch..        
fe10: 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20      };....      
fe20: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
fe30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
fe70: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
fe80: 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 49 6e   const string In
fe90: 76 61 72 69 61 6e 74 4e 61 6d 65 20 3d 20 22 53  variantName = "S
fea0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
feb0: 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
fec0: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
fed0: 74 72 69 6e 67 20 45 66 36 49 6e 76 61 72 69 61  tring Ef6Invaria
fee0: 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  ntName = "System
fef0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36  .Data.SQLite.EF6
ff00: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
ff10: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ff20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff50: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
ff60: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
ff70: 73 74 20 73 74 72 69 6e 67 20 46 61 63 74 6f 72  st string Factor
ff80: 79 54 79 70 65 4e 61 6d 65 20 3d 0d 0a 20 20 20  yTypeName =..   
ff90: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 79               "Sy
ffa0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
ffb0: 2e 53 51 4c 69 74 65 46 61 63 74 6f 72 79 22 3b  .SQLiteFactory";
ffc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ffd0: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
ffe0: 72 69 6e 67 20 45 66 36 46 61 63 74 6f 72 79 54  ring Ef6FactoryT
fff0: 79 70 65 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20  ypeName =..     
10000 20 20 20 20 20 20 20 20 20 20 20 22 53 79 73 74             "Syst
10010 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45  em.Data.SQLite.E
10020 46 36 2e 53 51 4c 69 74 65 50 72 6f 76 69 64 65  F6.SQLiteProvide
10030 72 46 61 63 74 6f 72 79 22 3b 0d 0a 20 20 20 20  rFactory";..    
10040 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
10050 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
10060 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
10070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
100b0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
100c0 76 61 74 65 20 53 74 61 74 69 63 20 44 61 74 61  vate Static Data
100d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
100e0 69 76 61 74 65 20 73 74 61 74 69 63 20 41 73 73  ivate static Ass
100f0 65 6d 62 6c 79 20 73 79 73 74 65 6d 45 66 36 41  embly systemEf6A
10100 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20  ssembly;..      
10110 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
10120 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10170 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
10180 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
10190 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  te Data..       
101a0 20 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73       private Ass
101b0 65 6d 62 6c 79 4e 61 6d 65 20 63 6f 72 65 41 73  emblyName coreAs
101c0 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20  semblyName;..   
101d0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
101e0 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 6c 69   AssemblyName li
101f0 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d  nqAssemblyName;.
10200 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
10210 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d  vate AssemblyNam
10220 65 20 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d  e ef6AssemblyNam
10230 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
10240 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79  private Assembly
10250 4e 61 6d 65 20 64 65 73 69 67 6e 65 72 41 73 73  Name designerAss
10260 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
10270 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
10280 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
10290 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
102a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
102e0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
102f0 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72  vate Constructor
10300 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
10310 72 69 76 61 74 65 20 43 6f 6e 66 69 67 75 72 61  rivate Configura
10320 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
10330 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20         Assembly 
10340 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20  assembly,..     
10350 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
10360 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a  g logFileName,..
10370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10380 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
10390 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
103a0 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69     string coreFi
103b0 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
103c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
103d0 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  linqFileName,.. 
103e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
103f0 74 72 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d  tring ef6FileNam
10400 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
10410 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 69 67      string desig
10420 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  nerFileName,..  
10430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10440 72 69 6e 67 20 72 65 67 69 73 74 72 79 56 65 72  ring registryVer
10450 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
10460 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f         string co
10470 6e 66 69 67 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  nfigVersion,..  
10480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10490 72 69 6e 67 20 76 73 56 65 72 73 69 6f 6e 53 75  ring vsVersionSu
104a0 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ffix,..         
104b0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
104c0 62 75 67 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  bugFormat,..    
104d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
104e0 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74 2c 0d  ng traceFormat,.
104f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10500 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e   InstallFlags in
10510 73 74 61 6c 6c 46 6c 61 67 73 2c 0d 0a 20 20 20  stallFlags,..   
10520 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
10530 76 69 64 65 72 46 6c 61 67 73 20 70 72 6f 76 69  viderFlags provi
10540 64 65 72 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20  derFlags,..     
10550 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
10560 50 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72  Priority debugPr
10570 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20  iority,..       
10580 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
10590 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
105a0 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
105b0 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
105c0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
105d0 20 20 20 20 20 20 62 6f 6f 6c 20 69 6e 73 74 61        bool insta
105e0 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
105f0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
10600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10610 20 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65    bool noRuntime
10620 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
10630 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
10640 6f 44 65 73 6b 74 6f 70 2c 0d 0a 20 20 20 20 20  oDesktop,..     
10650 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
10660 6e 6f 43 6f 6d 70 61 63 74 2c 0d 0a 20 20 20 20  noCompact,..    
10670 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
10680 20 6e 6f 4e 65 74 46 78 32 30 2c 0d 0a 20 20 20   noNetFx20,..   
10690 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
106a0 6c 20 6e 6f 4e 65 74 46 78 33 35 2c 0d 0a 20 20  l noNetFx35,..  
106b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
106c0 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 2c 0d 0a 20  ol noNetFx40,.. 
106d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
106e0 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 2c 0d 0a  ool noNetFx45,..
106f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10700 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 31 2c  bool noNetFx451,
10710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10720 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35    bool noNetFx45
10730 32 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2,..            
10740 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78      bool noNetFx
10750 34 36 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  46,..           
10760 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46       bool noNetF
10770 78 34 36 31 2c 0d 0a 20 20 20 20 20 20 20 20 20  x461,..         
10780 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73         bool noVs
10790 32 30 30 35 2c 0d 0a 20 20 20 20 20 20 20 20 20  2005,..         
107a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73         bool noVs
107b0 32 30 30 38 2c 0d 0a 20 20 20 20 20 20 20 20 20  2008,..         
107c0 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73         bool noVs
107d0 32 30 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  2010,..         
107e0 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73         bool noVs
107f0 32 30 31 32 2c 0d 0a 20 20 20 20 20 20 20 20 20  2012,..         
10800 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73         bool noVs
10810 32 30 31 33 2c 0d 0a 20 20 20 20 20 20 20 20 20  2013,..         
10820 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73         bool noVs
10830 32 30 31 35 2c 0d 0a 20 20 20 20 20 20 20 20 20  2015,..         
10840 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 54 72         bool noTr
10850 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ace,..          
10860 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e        bool noCon
10870 73 6f 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sole,..         
10880 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f         bool noLo
10890 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
108a0 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
108b0 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
108c0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
108d0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
108e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 65 62          bool deb
108f0 75 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ug,..           
10900 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
10910 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
10920 20 20 20 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d      bool confirm
10930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10940 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
10950 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10960 20 20 20 20 74 68 69 73 2e 61 73 73 65 6d 62 6c      this.assembl
10970 79 20 3d 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20  y = assembly;.. 
10980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10990 68 69 73 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20  his.logFileName 
109a0 3d 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a  = logFileName;..
109b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109c0 74 68 69 73 2e 64 69 72 65 63 74 6f 72 79 20 3d  this.directory =
109d0 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20   directory;..   
109e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
109f0 73 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  s.coreFileName =
10a00 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a   coreFileName;..
10a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a20 74 68 69 73 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d  this.linqFileNam
10a30 65 20 3d 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  e = linqFileName
10a40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10a50 20 20 20 74 68 69 73 2e 65 66 36 46 69 6c 65 4e     this.ef6FileN
10a60 61 6d 65 20 3d 20 65 66 36 46 69 6c 65 4e 61 6d  ame = ef6FileNam
10a70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
10a80 20 20 20 20 74 68 69 73 2e 64 65 73 69 67 6e 65      this.designe
10a90 72 46 69 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69  rFileName = desi
10aa0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  gnerFileName;.. 
10ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10ac0 68 69 73 2e 72 65 67 69 73 74 72 79 56 65 72 73  his.registryVers
10ad0 69 6f 6e 20 3d 20 72 65 67 69 73 74 72 79 56 65  ion = registryVe
10ae0 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
10af0 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e          this.con
10b00 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 63 6f 6e  figVersion = con
10b10 66 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20  figVersion;..   
10b20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10b30 73 2e 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69  s.vsVersionSuffi
10b40 78 20 3d 20 76 73 56 65 72 73 69 6f 6e 53 75 66  x = vsVersionSuf
10b50 66 69 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  fix;..          
10b60 20 20 20 20 20 20 74 68 69 73 2e 64 65 62 75 67        this.debug
10b70 46 6f 72 6d 61 74 20 3d 20 64 65 62 75 67 46 6f  Format = debugFo
10b80 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
10b90 20 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63         this.trac
10ba0 65 46 6f 72 6d 61 74 20 3d 20 74 72 61 63 65 46  eFormat = traceF
10bb0 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
10bc0 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73          this.ins
10bd0 74 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74  tallFlags = inst
10be0 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20  allFlags;..     
10bf0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10c00 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 3d 20  providerFlags = 
10c10 70 72 6f 76 69 64 65 72 46 6c 61 67 73 3b 0d 0a  providerFlags;..
10c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c30 74 68 69 73 2e 64 65 62 75 67 50 72 69 6f 72 69  this.debugPriori
10c40 74 79 20 3d 20 64 65 62 75 67 50 72 69 6f 72 69  ty = debugPriori
10c50 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
10c60 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65 50       this.traceP
10c70 72 69 6f 72 69 74 79 20 3d 20 74 72 61 63 65 50  riority = traceP
10c80 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20  riority;..      
10c90 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 70            this.p
10ca0 65 72 55 73 65 72 20 3d 20 70 65 72 55 73 65 72  erUser = perUser
10cb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10cc0 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c 20     this.install 
10cd0 3d 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20  = install;..    
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
10cf0 2e 77 6f 77 36 34 20 3d 20 77 6f 77 36 34 3b 0d  .wow64 = wow64;.
10d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10d10 20 74 68 69 73 2e 6e 6f 52 75 6e 74 69 6d 65 56   this.noRuntimeV
10d20 65 72 73 69 6f 6e 20 3d 20 6e 6f 52 75 6e 74 69  ersion = noRunti
10d30 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  meVersion;..    
10d40 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
10d50 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 6e 6f 44  .noDesktop = noD
10d60 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20  esktop;..       
10d70 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
10d80 43 6f 6d 70 61 63 74 20 3d 20 6e 6f 43 6f 6d 70  Compact = noComp
10d90 61 63 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  act;..          
10da0 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74        this.noNet
10db0 46 78 32 30 20 3d 20 6e 6f 4e 65 74 46 78 32 30  Fx20 = noNetFx20
10dc0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10dd0 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 33     this.noNetFx3
10de0 35 20 3d 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a  5 = noNetFx35;..
10df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e00 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d  this.noNetFx40 =
10e10 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20   noNetFx40;..   
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10e30 73 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20 6e 6f  s.noNetFx45 = no
10e40 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20  NetFx45;..      
10e50 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
10e60 6f 4e 65 74 46 78 34 35 31 20 3d 20 6e 6f 4e 65  oNetFx451 = noNe
10e70 74 46 78 34 35 31 3b 0d 0a 20 20 20 20 20 20 20  tFx451;..       
10e80 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
10e90 4e 65 74 46 78 34 35 32 20 3d 20 6e 6f 4e 65 74  NetFx452 = noNet
10ea0 46 78 34 35 32 3b 0d 0a 20 20 20 20 20 20 20 20  Fx452;..        
10eb0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e          this.noN
10ec0 65 74 46 78 34 36 20 3d 20 6e 6f 4e 65 74 46 78  etFx46 = noNetFx
10ed0 34 36 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  46;..           
10ee0 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46       this.noNetF
10ef0 78 34 36 31 20 3d 20 6e 6f 4e 65 74 46 78 34 36  x461 = noNetFx46
10f00 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1;..            
10f10 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30      this.noVs200
10f20 35 20 3d 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20  5 = noVs2005;.. 
10f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10f40 68 69 73 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e  his.noVs2008 = n
10f50 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20  oVs2008;..      
10f60 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
10f70 6f 56 73 32 30 31 30 20 3d 20 6e 6f 56 73 32 30  oVs2010 = noVs20
10f80 31 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10;..           
10f90 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30       this.noVs20
10fa0 31 32 20 3d 20 6e 6f 56 73 32 30 31 32 3b 0d 0a  12 = noVs2012;..
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fc0 74 68 69 73 2e 6e 6f 56 73 32 30 31 33 20 3d 20  this.noVs2013 = 
10fd0 6e 6f 56 73 32 30 31 33 3b 0d 0a 20 20 20 20 20  noVs2013;..     
10fe0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10ff0 6e 6f 56 73 32 30 31 35 20 3d 20 6e 6f 56 73 32  noVs2015 = noVs2
11000 30 31 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  015;..          
11010 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 54 72 61        this.noTra
11020 63 65 20 3d 20 6e 6f 54 72 61 63 65 3b 0d 0a 20  ce = noTrace;.. 
11030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
11040 68 69 73 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20  his.noConsole = 
11050 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20  noConsole;..    
11060 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
11070 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f 4c 6f 67 3b 0d  .noLog = noLog;.
11080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11090 20 74 68 69 73 2e 74 68 72 6f 77 4f 6e 4d 69 73   this.throwOnMis
110a0 73 69 6e 67 20 3d 20 74 68 72 6f 77 4f 6e 4d 69  sing = throwOnMi
110b0 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20  ssing;..        
110c0 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 61          this.wha
110d0 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20  tIf = whatIf;.. 
110e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
110f0 68 69 73 2e 64 65 62 75 67 20 3d 20 64 65 62 75  his.debug = debu
11100 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
11110 20 20 20 20 74 68 69 73 2e 76 65 72 62 6f 73 65      this.verbose
11120 20 3d 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20   = verbose;..   
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
11140 73 2e 63 6f 6e 66 69 72 6d 20 3d 20 63 6f 6e 66  s.confirm = conf
11150 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  irm;..          
11160 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
11170 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
11180 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
11190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
111d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
111e0 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74  egion Private St
111f0 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  atic Methods..  
11200 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
11210 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 47 65  e static void Ge
11220 74 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65  tDefaultFileName
11230 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
11240 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 64      ref string d
11250 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
11260 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
11270 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
11280 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
11290 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
112a0 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  linqFileName,.. 
112b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
112c0 65 66 20 73 74 72 69 6e 67 20 65 66 36 46 69 6c  ef string ef6Fil
112d0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
112e0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
112f0 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng designerFileN
11300 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
11310 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
11320 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11330 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 41         if (thisA
11340 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29  ssembly == null)
11350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11360 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
11370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11380 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74   directory = Pat
11390 68 2e 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61  h.GetDirectoryNa
113a0 6d 65 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2e  me(thisAssembly.
113b0 4c 6f 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20  Location);....  
113c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
113d0 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
113e0 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79  rEmpty(directory
113f0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
11400 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
11410 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11420 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20     coreFileName 
11430 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64  = Path.Combine(d
11440 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
11450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
11460 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c  nstaller.CoreFil
11470 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
11480 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46             linqF
11490 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
114a0 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
114b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
114c0 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72         Installer
114d0 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d  .LinqFileName);.
114e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
114f0 20 20 20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d     ef6FileName =
11500 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
11510 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
11520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
11530 73 74 61 6c 6c 65 72 2e 45 66 36 46 69 6c 65 4e  staller.Ef6FileN
11540 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
11550 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e 65           designe
11560 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  rFileName = Path
11570 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
11580 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
11590 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
115a0 65 72 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e  er.DesignerFileN
115b0 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
115c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
115d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
115e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
115f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11610 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
11620 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
11630 74 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b  tatic bool Check
11640 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  Option(..       
11650 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
11660 69 6e 67 20 61 72 67 0d 0a 20 20 20 20 20 20 20  ing arg..       
11670 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
11680 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11690 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
116a0 67 20 72 65 73 75 6c 74 20 3d 20 61 72 67 3b 0d  g result = arg;.
116b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
116c0 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
116d0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73  sNullOrEmpty(res
116e0 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ult))..         
116f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11720 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52        // NOTE: R
11730 65 6d 6f 76 65 20 61 6c 6c 20 6c 65 61 64 69 6e  emove all leadin
11740 67 20 73 77 69 74 63 68 20 63 68 61 72 73 2e 0d  g switch chars..
11750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11760 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11770 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
11780 75 6c 74 20 3d 20 72 65 73 75 6c 74 2e 54 72 69  ult = result.Tri
11790 6d 53 74 61 72 74 28 53 77 69 74 63 68 43 68 61  mStart(SwitchCha
117a0 72 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rs);....        
117b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
117c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117d0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 48 6f 77      // NOTE: How
117e0 20 6d 61 6e 79 20 63 68 61 72 73 20 77 65 72 65   many chars were
117f0 20 72 65 6d 6f 76 65 64 3f 0d 0a 20 20 20 20 20   removed?..     
11800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11810 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
11820 20 20 20 20 20 20 20 69 6e 74 20 63 6f 75 6e 74         int count
11830 20 3d 20 61 72 67 2e 4c 65 6e 67 74 68 20 2d 20   = arg.Length - 
11840 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a  result.Length;..
11850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11860 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
11870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11880 20 4e 4f 54 45 3a 20 57 61 73 20 74 68 65 72 65   NOTE: Was there
11890 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 3f 0d 0a   at least one?..
118a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118b0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
118c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
118d0 63 6f 75 6e 74 20 3e 20 30 29 0d 0a 20 20 20 20  count > 0)..    
118e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11900 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
11910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11920 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
11930 4f 6b 2c 20 72 65 70 6c 61 63 65 20 74 68 65 69  Ok, replace thei
11940 72 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20 20  r original..    
11950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11960 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 72 67      //       arg
11970 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  ument...        
11980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11990 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
119a0 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 20              arg 
119b0 3d 20 72 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20 20  = result;....   
119c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119d0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
119e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119f0 20 2f 2f 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74   // NOTE: Yes, t
11a00 68 69 73 20 69 73 20 61 20 73 77 69 74 63 68 2e  his is a switch.
11a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11a20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
11a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a40 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
11a50 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
11a60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11a70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a90 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
11aa0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11ab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
11ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
11b00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
11b10 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
11b20 6f 6c 20 4d 61 74 63 68 4f 70 74 69 6f 6e 28 0d  ol MatchOption(.
11b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11b40 20 73 74 72 69 6e 67 20 61 72 67 2c 0d 0a 20 20   string arg,..  
11b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
11b60 72 69 6e 67 20 6f 70 74 69 6f 6e 0d 0a 20 20 20  ring option..   
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
11b80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11ba0 66 20 28 28 61 72 67 20 3d 3d 20 6e 75 6c 6c 29  f ((arg == null)
11bb0 20 7c 7c 20 28 6f 70 74 69 6f 6e 20 3d 3d 20 6e   || (option == n
11bc0 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
11bd0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11be0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
11bf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11c00 72 6e 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  rn String.Compar
11c10 65 28 61 72 67 2c 20 30 2c 20 6f 70 74 69 6f 6e  e(arg, 0, option
11c20 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  , 0,..          
11c30 20 20 20 20 20 20 20 20 20 20 61 72 67 2e 4c 65            arg.Le
11c40 6e 67 74 68 2c 20 53 74 72 69 6e 67 43 6f 6d 70  ngth, StringComp
11c50 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
11c60 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 3b 0d  noreCase) == 0;.
11c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
11c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
11c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11cd0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
11ce0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
11cf0 62 6f 6f 6c 3f 20 50 61 72 73 65 42 6f 6f 6c 65  bool? ParseBoole
11d00 61 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  an(..           
11d10 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74       string text
11d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11d30 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
11d40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11d50 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
11d60 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65  IsNullOrEmpty(te
11d70 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  xt))..          
11d80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11d90 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
11da0 6c 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  l value;....    
11db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11dc0 69 66 20 28 62 6f 6f 6c 2e 54 72 79 50 61 72 73  if (bool.TryPars
11dd0 65 28 74 65 78 74 2c 20 6f 75 74 20 76 61 6c 75  e(text, out valu
11de0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
11df0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
11e00 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
11e10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
11e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11e30 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
11e40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11e50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
11e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
11ea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
11eb0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62  rivate static ob
11ec0 6a 65 63 74 20 50 61 72 73 65 45 6e 75 6d 28 0d  ject ParseEnum(.
11ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11ee0 20 54 79 70 65 20 65 6e 75 6d 54 79 70 65 2c 0d   Type enumType,.
11ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11f00 20 73 74 72 69 6e 67 20 74 65 78 74 2c 0d 0a 20   string text,.. 
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
11f20 6f 6f 6c 20 6e 6f 43 61 73 65 0d 0a 20 20 20 20  ool noCase..    
11f30 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
11f40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
11f60 20 28 28 65 6e 75 6d 54 79 70 65 20 3d 3d 20 6e   ((enumType == n
11f70 75 6c 6c 29 20 7c 7c 20 21 65 6e 75 6d 54 79 70  ull) || !enumTyp
11f80 65 2e 49 73 45 6e 75 6d 29 0d 0a 20 20 20 20 20  e.IsEnum)..     
11f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11fa0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11fc0 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
11fd0 6c 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d  lOrEmpty(text)).
11fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11ff0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12000 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12020 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12030 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
12040 72 6e 20 45 6e 75 6d 2e 50 61 72 73 65 28 65 6e  rn Enum.Parse(en
12050 75 6d 54 79 70 65 2c 20 74 65 78 74 2c 20 6e 6f  umType, text, no
12060 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Case);..        
12070 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
12080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12090 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
120a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
120b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
120c0 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
120d0 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
120e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
120f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12100 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12110 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
12120 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
12130 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12180 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
12190 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
121a0 63 20 62 6f 6f 6c 20 49 73 53 79 73 74 65 6d 45  c bool IsSystemE
121b0 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c  f6AssemblyGlobal
121c0 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
121d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
121e0 20 20 20 69 66 20 28 73 79 73 74 65 6d 45 66 36     if (systemEf6
121f0 41 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c  Assembly == null
12200 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12210 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
12220 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
12230 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73          return s
12240 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79  ystemEf6Assembly
12250 2e 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  .GlobalAssemblyC
12260 61 63 68 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  ache;..         
12270 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
12280 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
12290 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
122a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
122e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
122f0 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74  region Public St
12300 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  atic Methods..  
12310 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
12320 20 73 74 61 74 69 63 20 76 6f 69 64 20 42 72 65   static void Bre
12330 61 6b 49 6e 74 6f 44 65 62 75 67 67 65 72 28 29  akIntoDebugger()
12340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
12350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12360 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69   Console.WriteLi
12370 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
12380 20 20 20 20 20 20 20 20 20 22 41 74 74 61 63 68           "Attach
12390 20 61 20 64 65 62 75 67 67 65 72 20 74 6f 20 70   a debugger to p
123a0 72 6f 63 65 73 73 20 7b 30 7d 20 61 6e 64 20 70  rocess {0} and p
123b0 72 65 73 73 20 22 20 2b 0d 0a 20 20 20 20 20 20  ress " +..      
123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61                "a
123d0 6e 79 20 6b 65 79 20 74 6f 20 63 6f 6e 74 69 6e  ny key to contin
123e0 75 65 2e 22 2c 20 28 74 68 69 73 50 72 6f 63 65  ue.", (thisProce
123f0 73 73 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20  ss != null) ?.. 
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 20 20 20 74 68 69 73 50 72 6f 63 65 73 73 2e 49     thisProcess.I
12420 64 2e 54 6f 53 74 72 69 6e 67 28 29 20 3a 20 22  d.ToString() : "
12430 3c 75 6e 6b 6e 6f 77 6e 3e 22 29 3b 0d 0a 0d 0a  <unknown>");....
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12450 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
12460 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12470 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73              Cons
12480 6f 6c 65 2e 52 65 61 64 4b 65 79 28 74 72 75 65  ole.ReadKey(true
12490 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
124a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
124c0 20 20 20 63 61 74 63 68 20 28 49 6e 76 61 6c 69     catch (Invali
124d0 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
124e0 69 6f 6e 29 20 2f 2f 20 43 6f 6e 73 6f 6c 65 2e  ion) // Console.
124f0 52 65 61 64 4b 65 79 0d 0a 20 20 20 20 20 20 20  ReadKey..       
12500 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
12510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12520 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
12530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12540 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12550 20 20 20 20 20 44 65 62 75 67 67 65 72 2e 42 72       Debugger.Br
12560 65 61 6b 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  eak();..        
12570 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
12580 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
12590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
125d0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
125e0 74 61 74 69 63 20 43 6f 6e 66 69 67 75 72 61 74  tatic Configurat
125f0 69 6f 6e 20 43 72 65 61 74 65 44 65 66 61 75 6c  ion CreateDefaul
12600 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t()..           
12610 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12620 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
12630 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  tory = null;..  
12640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
12650 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d  ring coreFileNam
12660 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
12670 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
12680 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  g linqFileName =
12690 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
126a0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65          string e
126b0 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c  f6FileName = nul
126c0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
126d0 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 69 67      string desig
126e0 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75  nerFileName = nu
126f0 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
12700 20 20 20 20 20 20 20 47 65 74 44 65 66 61 75 6c         GetDefaul
12710 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20  tFileNames(..   
12720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12730 20 72 65 66 20 64 69 72 65 63 74 6f 72 79 2c 20   ref directory, 
12740 72 65 66 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ref coreFileName
12750 2c 20 72 65 66 20 6c 69 6e 71 46 69 6c 65 4e 61  , ref linqFileNa
12760 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
12770 20 20 20 20 20 20 20 20 20 72 65 66 20 65 66 36           ref ef6
12780 46 69 6c 65 4e 61 6d 65 2c 20 72 65 66 20 64 65  FileName, ref de
12790 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b  signerFileName);
127a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
127b0 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 43      return new C
127c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20  onfiguration(.. 
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127e0 20 20 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c     thisAssembly,
127f0 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79   null, directory
12800 2c 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20  , coreFileName, 
12810 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  linqFileName,.. 
12820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12830 20 20 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 20     ef6FileName, 
12840 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
12850 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75  , null, null, nu
12860 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
12870 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
12880 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54  s.DebugFormat, T
12890 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72  raceOps.TraceFor
128a0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
128b0 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
128c0 6c 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 2c 20  lFlags.Default, 
128d0 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 65  ProviderFlags.De
128e0 66 61 75 6c 74 2c 0d 0a 20 20 20 20 20 20 20 20  fault,..        
128f0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
12900 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75 6c  ePriority.Defaul
12910 74 2c 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  t, TracePriority
12920 2e 44 65 66 61 75 6c 74 2c 20 66 61 6c 73 65 2c  .Default, false,
12930 20 74 72 75 65 2c 0d 0a 20 20 20 20 20 20 20 20   true,..        
12940 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73              fals
12950 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
12960 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
12970 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
12980 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
12990 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20           false, 
129a0 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
129b0 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
129c0 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
129d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
129e0 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c        false, fal
129f0 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
12a00 2c 20 66 61 6c 73 65 2c 20 74 72 75 65 2c 20 74  , false, true, t
12a10 72 75 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20  rue, false,..   
12a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a30 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 3b 0d   false, false);.
12a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
12a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
12a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12aa0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
12ab0 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
12ac0 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
12ad0 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
12ae0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
12af0 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 72 6f 6d  static bool From
12b00 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
12b10 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
12b20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  args,..         
12b30 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69         bool stri
12b40 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct,..           
12b50 20 20 20 20 20 72 65 66 20 43 6f 6e 66 69 67 75       ref Configu
12b60 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61  ration configura
12b70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
12b80 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
12b90 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
12ba0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
12bb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12bc0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12be0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12bf0 20 20 20 20 20 20 20 69 66 20 28 61 72 67 73 20         if (args 
12c00 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
12c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12c40 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
12c50 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
12c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12c70 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
12c80 75 72 61 74 69 6f 6e 20 3d 20 43 6f 6e 66 69 67  uration = Config
12c90 75 72 61 74 69 6f 6e 2e 43 72 65 61 74 65 44 65  uration.CreateDe
12ca0 66 61 75 6c 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  fault();....    
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cc0 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 67  int length = arg
12cd0 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20  s.Length;....   
12ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cf0 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20   for (int index 
12d00 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e  = 0; index < len
12d10 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20  gth; index++).. 
12d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
12d50 72 69 6e 67 20 61 72 67 20 3d 20 61 72 67 73 5b  ring arg = args[
12d60 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20  index];....     
12d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d80 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
12d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12da0 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6e 79  / NOTE: Skip any
12db0 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 69   argument that i
12dc0 73 20 6e 75 6c 6c 20 28 3f 29 20 6f 72 20 61 6e  s null (?) or an
12dd0 20 65 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20   empty..        
12de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12df0 2f 2f 20 20 20 20 20 20 20 73 74 72 69 6e 67 2e  //       string.
12e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12e10 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
12e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e30 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
12e40 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 61  .IsNullOrEmpty(a
12e50 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  rg))..          
12e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e70 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e90 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
12ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12eb0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 61     // NOTE: We a
12ec0 72 65 20 67 6f 69 6e 67 20 74 6f 20 6d 6f 64 69  re going to modi
12ed0 66 79 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  fy the original 
12ee0 61 72 67 75 6d 65 6e 74 0d 0a 20 20 20 20 20 20  argument..      
12ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f00 20 20 2f 2f 20 20 20 20 20 20 20 62 79 20 72 65    //       by re
12f10 6d 6f 76 69 6e 67 20 61 6e 79 20 6c 65 61 64 69  moving any leadi
12f20 6e 67 20 6f 70 74 69 6f 6e 20 63 68 61 72 61 63  ng option charac
12f30 74 65 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  ters;..         
12f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12f50 2f 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  /       therefor
12f60 65 2c 20 77 65 20 75 73 65 20 61 20 6e 65 77 20  e, we use a new 
12f70 73 74 72 69 6e 67 20 74 6f 20 68 6f 6c 64 20 74  string to hold t
12f80 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
12f90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
12fa0 20 20 20 20 20 6d 6f 64 69 66 69 65 64 20 61 72       modified ar
12fb0 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20  gument...       
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fd0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
12ff0 69 6e 67 20 6e 65 77 41 72 67 20 3d 20 61 72 67  ing newArg = arg
13000 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
13020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13030 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
13040 3a 20 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72  : All the suppor
13050 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ted command line
13060 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20   options must.. 
13070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13080 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
13090 62 65 67 69 6e 20 77 69 74 68 20 61 6e 20 6f 70  begin with an op
130a0 74 69 6f 6e 20 63 68 61 72 61 63 74 65 72 20 28  tion character (
130b0 65 2e 67 2e 20 61 20 6d 69 6e 75 73 0d 0a 20 20  e.g. a minus..  
130c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130d0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
130e0 72 20 66 6f 72 77 61 72 64 20 73 6c 61 73 68 29  r forward slash)
130f0 3b 20 61 74 74 65 6d 70 74 20 74 6f 20 76 61 6c  ; attempt to val
13100 69 64 61 74 65 20 74 68 61 74 0d 0a 20 20 20 20  idate that..    
13110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13120 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 6f 77      //       now
13130 2e 20 20 49 66 20 77 65 20 66 61 69 6c 20 69 6e  .  If we fail in
13140 20 73 74 72 69 63 74 20 6d 6f 64 65 2c 20 77 65   strict mode, we
13150 20 61 72 65 20 64 6f 6e 65 3b 0d 0a 20 20 20 20   are done;..    
13160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13170 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68      //       oth
13180 65 72 77 69 73 65 2c 20 6a 75 73 74 20 73 6b 69  erwise, just ski
13190 70 20 74 68 69 73 20 61 72 67 75 6d 65 6e 74 20  p this argument 
131a0 61 6e 64 20 61 64 76 61 6e 63 65 0d 0a 20 20 20  and advance..   
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
131d0 20 74 68 65 20 6e 65 78 74 20 6f 6e 65 2e 0d 0a   the next one...
131e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131f0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13210 20 20 20 20 69 66 20 28 21 43 68 65 63 6b 4f 70      if (!CheckOp
13220 74 69 6f 6e 28 72 65 66 20 6e 65 77 41 72 67 29  tion(ref newArg)
13230 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13240 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13260 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
13270 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
13280 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
13290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132a0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
132b0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
132c0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
132d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
132e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132f0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
13300 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
13310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13330 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d  "Unsupported com
13340 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65  mand line argume
13350 6e 74 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  nt: {0}",..     
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13370 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
13380 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61  splay(arg)), tra
13390 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
133c0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
133f0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
13400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13410 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
13420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13430 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
13440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13450 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
13460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13470 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74    // NOTE: All t
13480 68 65 20 73 75 70 70 6f 72 74 65 64 20 63 6f 6d  he supported com
13490 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand line option
134a0 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20  s must..        
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134c0 2f 2f 20 20 20 20 20 20 20 68 61 76 65 20 61 20  //       have a 
134d0 76 61 6c 75 65 3b 20 74 68 65 72 65 66 6f 72 65  value; therefore
134e0 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 61 64 76  , attempt to adv
134f0 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  ance..          
13500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
13510 20 20 20 20 20 20 20 74 6f 20 69 74 20 6e 6f 77         to it now
13520 2e 20 20 49 66 20 77 65 20 66 61 69 6c 2c 20 77  .  If we fail, w
13530 65 20 61 72 65 20 64 6f 6e 65 2e 0d 0a 20 20 20  e are done...   
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13550 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
13560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13570 20 69 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20   index++;....   
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13590 20 20 20 20 20 69 66 20 28 69 6e 64 65 78 20 3e       if (index >
135a0 3d 20 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20  = length)..     
135b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
135d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135e0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
135f0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
13600 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13620 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
13630 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
13640 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
13650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13660 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13670 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
13680 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
13690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136a0 20 20 20 20 20 20 20 20 22 4d 69 73 73 69 6e 67          "Missing
136b0 20 76 61 6c 75 65 20 66 6f 72 20 6f 70 74 69 6f   value for optio
136c0 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  n: {0}",..      
136d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136e0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
136f0 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63  play(arg)), trac
13700 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
13710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13720 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
13730 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
13740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13750 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
13760 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13780 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
13790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
137b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137c0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
137d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
137e0 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
137f0 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20 6f 66  textual value of
13800 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6c 69   this command li
13810 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ne..            
13820 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
13830 20 20 20 20 20 6f 70 74 69 6f 6e 2e 0d 0a 20 20       option...  
13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13850 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
13860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13870 20 20 73 74 72 69 6e 67 20 74 65 78 74 20 3d 20    string text = 
13880 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a  args[index];....
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
138b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138c0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 67      // NOTE: Fig
138d0 75 72 65 20 6f 75 74 20 77 68 69 63 68 20 63 6f  ure out which co
138e0 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f  mmand line optio
138f0 6e 20 74 68 69 73 20 69 73 0d 0a 20 20 20 20 20  n this is..     
13900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13910 20 20 20 2f 2f 20 20 20 20 20 20 20 28 62 61 73     //       (bas
13920 65 64 20 6f 6e 20 61 20 70 61 72 74 69 61 6c 20  ed on a partial 
13930 6e 61 6d 65 20 6d 61 74 63 68 29 20 61 6e 64 20  name match) and 
13940 74 68 65 6e 20 74 72 79 0d 0a 20 20 20 20 20 20  then try..      
13950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13960 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 6e    //       to in
13970 74 65 72 70 72 65 74 20 74 68 65 20 74 65 78 74  terpret the text
13980 75 61 6c 20 76 61 6c 75 65 20 61 73 20 74 68 65  ual value as the
13990 20 63 6f 72 72 65 63 74 0d 0a 20 20 20 20 20 20   correct..      
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139b0 20 20 2f 2f 20 20 20 20 20 20 20 74 79 70 65 2e    //       type.
139c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
139d0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139f0 20 20 20 20 20 20 69 66 20 28 4d 61 74 63 68 4f        if (MatchO
13a00 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 62  ption(newArg, "b
13a10 72 65 61 6b 22 29 29 0d 0a 20 20 20 20 20 20 20  reak"))..       
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a50 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
13a60 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
13a70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a90 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
13aa0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ac0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ae0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
13af0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
13b00 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
13b30 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
13b40 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
13b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b70 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
13b80 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
13b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bb0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
13bc0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
13bd0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
13be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
13c00 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
13c10 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
13c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c40 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
13c50 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c70 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
13c80 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
13c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ca0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
13cb0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cd0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
13ce0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
13cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
13d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d20 20 20 20 69 66 20 28 28 62 6f 6f 6c 29 76 61 6c     if ((bool)val
13d30 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue)..           
13d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d50 20 20 20 20 20 42 72 65 61 6b 49 6e 74 6f 44 65       BreakIntoDe
13d60 62 75 67 67 65 72 28 29 3b 0d 0a 20 20 20 20 20  bugger();..     
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
13d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
13da0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
13db0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66  on(newArg, "conf
13dc0 69 67 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20  igVersion"))..  
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13de0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e00 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
13e10 6f 6e 2e 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e  on.configVersion
13e20 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
13e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e40 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
13e50 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
13e60 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
13e70 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66 69  n(newArg, "confi
13e80 72 6d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rm"))..         
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
13ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
13ec0 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
13ed0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
13ee0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
13f00 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
13f10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
13f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f50 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
13f60 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
13f70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f90 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
13fa0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
13fb0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
13fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fe0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
13ff0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
14000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14020 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
14030 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
14040 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14060 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
14070 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
14080 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
14090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
140c0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
140d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140e0 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
140f0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14110 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
14120 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
14130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14140 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
14150 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
14180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14190 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63   configuration.c
141a0 6f 6e 66 69 72 6d 20 3d 20 28 62 6f 6f 6c 29 76  onfirm = (bool)v
141b0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
141d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
141e0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
141f0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
14200 65 77 41 72 67 2c 20 22 63 6f 72 65 46 69 6c 65  ewArg, "coreFile
14210 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20  Name"))..       
14220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14230 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14250 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f  configuration.co
14260 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  reFileName = tex
14270 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
14280 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
14290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142a0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
142b0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
142c0 72 67 2c 20 22 64 65 62 75 67 22 29 29 0d 0a 20  rg, "debug")).. 
142d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
142f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14300 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
14310 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
14320 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14340 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
14350 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
14360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14370 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14390 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
143a0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
143b0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
143e0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
143f0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
14400 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
14410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14420 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14430 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
14440 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
14450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14460 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
14470 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
14480 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144b0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
144c0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
144d0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14500 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
14530 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
14540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14560 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
14570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14590 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
145c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145d0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
145e0 72 61 74 69 6f 6e 2e 64 65 62 75 67 20 3d 20 28  ration.debug = (
145f0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14610 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14630 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
14640 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65  tion(newArg, "de
14650 62 75 67 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20  bugFormat"))..  
14660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14670 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14690 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
146a0 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74 20 3d  on.debugFormat =
146b0 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146d0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
146e0 75 67 46 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69  ugFormat = confi
146f0 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f  guration.debugFo
14700 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
14720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14730 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
14740 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
14750 65 77 41 72 67 2c 20 22 64 65 62 75 67 50 72 69  ewArg, "debugPri
14760 6f 72 69 74 79 22 29 29 0d 0a 20 20 20 20 20 20  ority"))..      
14770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14780 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
147b0 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20  ParseEnum(..    
147c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147d0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
147e0 6f 66 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  of(TracePriority
147f0 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d  ), text, true);.
14800 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
14820 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
14830 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
14850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14870 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
14880 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
14890 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
148a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148b0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
148c0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
148d0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14900 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
14910 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14940 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
14950 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
14960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14980 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
14990 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
149a0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
149d0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
149e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
14a00 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a30 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
14a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a60 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14aa0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
14ab0 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f  ration.debugPrio
14ac0 72 69 74 79 20 3d 20 28 54 72 61 63 65 50 72 69  rity = (TracePri
14ad0 6f 72 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20  ority)value;..  
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14af0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
14b00 70 73 2e 44 65 62 75 67 50 72 69 6f 72 69 74 79  ps.DebugPriority
14b10 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
14b20 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d  .debugPriority;.
14b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14b40 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b60 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
14b70 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
14b80 20 22 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61   "designerFileNa
14b90 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  me"))..         
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
14bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14bd0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69  nfiguration.desi
14be0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 74  gnerFileName = t
14bf0 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
14c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
14c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14c20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
14c30 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
14c40 77 41 72 67 2c 20 22 64 69 72 65 63 74 6f 72 79  wArg, "directory
14c50 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
14c60 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c80 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
14c90 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74  iguration.direct
14ca0 6f 72 79 20 3d 20 74 65 78 74 3b 0d 0a 0d 0a 20  ory = text;.... 
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
14cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ce0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
14cf0 54 45 3a 20 2a 53 50 45 43 49 41 4c 2a 20 4d 75  TE: *SPECIAL* Mu
14d00 73 74 20 72 65 66 72 65 73 68 20 74 68 65 20 66  st refresh the f
14d10 69 6c 65 20 6e 61 6d 65 73 0d 0a 20 20 20 20 20  ile names..     
14d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d30 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
14d40 68 65 72 65 20 62 65 63 61 75 73 65 20 74 68 65  here because the
14d50 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 69 72 65   underlying dire
14d60 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  ctory..         
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d80 20 20 20 2f 2f 20 20 20 20 20 20 20 68 61 73 20     //       has 
14d90 63 68 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20  changed...      
14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14db0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dd0 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72        string cor
14de0 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66  eFileName = conf
14df0 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69  iguration.coreFi
14e00 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
14e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
14e30 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
14e40 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d  (coreFileName)).
14e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e70 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   coreFileName = 
14e80 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
14e90 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d  (coreFileName);.
14ea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
14ec0 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
14ed0 4f 72 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65  OrEmpty(coreFile
14ee0 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f00 20 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65          coreFile
14f10 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72  Name = Installer
14f20 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a  .CoreFileName;..
14f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14f50 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65  nfiguration.core
14f60 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
14f70 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20  Combine(..      
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f90 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
14fa0 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
14fb0 79 2c 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  y, coreFileName)
14fc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fe0 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
14ff0 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61  Name = configura
15000 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d  tion.linqFileNam
15010 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
15020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15030 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
15040 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71  NullOrEmpty(linq
15050 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15070 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71              linq
15080 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
15090 47 65 74 46 69 6c 65 4e 61 6d 65 28 6c 69 6e 71  GetFileName(linq
150a0 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
150b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
150d0 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
150e0 74 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  ty(linqFileName)
150f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
15100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15110 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20     linqFileName 
15120 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71  = Installer.Linq
15130 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
15140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15150 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
15160 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e  ration.linqFileN
15170 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
15180 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
15190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151a0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
151b0 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 6c 69  on.directory, li
151c0 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  nqFileName);....
151d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
151f0 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d  ng ef6FileName =
15200 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 65   configuration.e
15210 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  f6FileName;.... 
15220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15230 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
15240 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
15250 6d 70 74 79 28 65 66 36 46 69 6c 65 4e 61 6d 65  mpty(ef6FileName
15260 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
15270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15280 20 20 20 20 65 66 36 46 69 6c 65 4e 61 6d 65 20      ef6FileName 
15290 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61  = Path.GetFileNa
152a0 6d 65 28 65 66 36 46 69 6c 65 4e 61 6d 65 29 3b  me(ef6FileName);
152b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
152c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152d0 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
152e0 6c 4f 72 45 6d 70 74 79 28 65 66 36 46 69 6c 65  lOrEmpty(ef6File
152f0 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
15300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15310 20 20 20 20 20 20 20 20 65 66 36 46 69 6c 65 4e          ef6FileN
15320 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e  ame = Installer.
15330 45 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  Ef6FileName;....
15340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15350 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
15360 69 67 75 72 61 74 69 6f 6e 2e 65 66 36 46 69 6c  iguration.ef6Fil
15370 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
15380 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20  bine(..         
15390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153a0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
153b0 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20  tion.directory, 
153c0 65 66 36 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ef6FileName);...
153d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
153e0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
153f0 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ing designerFile
15400 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61  Name = configura
15410 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c  tion.designerFil
15420 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eName;....      
15430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15440 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
15450 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
15460 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
15470 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
15480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15490 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65      designerFile
154a0 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46  Name = Path.GetF
154b0 69 6c 65 4e 61 6d 65 28 64 65 73 69 67 6e 65 72  ileName(designer
154c0 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
154d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
154f0 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
15500 74 79 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ty(designerFileN
15510 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
15520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15530 20 20 20 20 20 20 20 64 65 73 69 67 6e 65 72 46         designerF
15540 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c  ileName = Instal
15550 6c 65 72 2e 44 65 73 69 67 6e 65 72 46 69 6c 65  ler.DesignerFile
15560 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
15570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15580 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
15590 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  on.designerFileN
155a0 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
155b0 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
155c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155d0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
155e0 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 64 65  on.directory, de
155f0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b  signerFileName);
15600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15610 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
15620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15630 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
15640 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
15650 2c 20 22 65 66 36 46 69 6c 65 4e 61 6d 65 22 29  , "ef6FileName")
15660 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
15670 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
15680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15690 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
156a0 75 72 61 74 69 6f 6e 2e 65 66 36 46 69 6c 65 4e  uration.ef6FileN
156b0 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ame = text;..   
156c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
156e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156f0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
15700 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e  tion(newArg, "in
15710 73 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20 20 20  stall"))..      
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15730 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15750 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
15760 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
15770 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15790 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
157a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
157b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
157d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157e0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
157f0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
15800 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
15810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15820 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
15830 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
15840 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
15850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15870 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
15880 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
15890 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
158a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158b0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
158c0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
158d0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
158e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
15900 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
15910 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
15920 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15940 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
15950 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
15960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15970 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
15980 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
15990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
159b0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
159c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159d0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
159e0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
159f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
15a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
15a30 6e 2e 69 6e 73 74 61 6c 6c 20 3d 20 28 62 6f 6f  n.install = (boo
15a40 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a60 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
15a70 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
15a80 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
15a90 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73 74 61  n(newArg, "insta
15aa0 6c 6c 46 6c 61 67 73 22 29 29 0d 0a 20 20 20 20  llFlags"))..    
15ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ac0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ae0 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20     object value 
15af0 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20  = ParseEnum(..  
15b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
15b20 70 65 6f 66 28 49 6e 73 74 61 6c 6c 46 6c 61 67  peof(InstallFlag
15b30 73 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b  s), text, true);
15b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b60 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
15b70 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bb0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
15bc0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
15bd0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
15be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bf0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
15c00 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
15c10 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
15c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c40 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
15c50 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
15c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c80 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
15c90 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  } value: {1}",..
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cc0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
15cd0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
15ce0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
15d10 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
15d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d40 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
15d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d70 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
15d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15da0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
15db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15de0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
15df0 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 46  uration.installF
15e00 6c 61 67 73 20 3d 20 28 49 6e 73 74 61 6c 6c 46  lags = (InstallF
15e10 6c 61 67 73 29 76 61 6c 75 65 3b 0d 0a 20 20 20  lags)value;..   
15e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e50 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
15e60 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 69  tion(newArg, "li
15e70 6e 71 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20  nqFileName")).. 
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15eb0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
15ec0 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ion.linqFileName
15ed0 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ef0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
15f10 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
15f20 6e 28 6e 65 77 41 72 67 2c 20 22 6c 6f 67 46 69  n(newArg, "logFi
15f30 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20  leName"))..     
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f70 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
15f80 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65  logFileName = te
15f90 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
15fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fc0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
15fd0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
15fe0 41 72 67 2c 20 22 6e 6f 43 6f 6d 70 61 63 74 22  Arg, "noCompact"
15ff0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
16000 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16020 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
16030 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
16040 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
16050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16060 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
16070 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
16080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16090 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
160a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
160c0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
160d0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
160e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16100 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
16110 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
16120 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
16130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
16150 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
16160 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
16170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16190 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
161a0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
161b0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
161c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161d0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
161e0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
161f0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
16200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16220 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
16230 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16250 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
16260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16280 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
16290 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162b0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
162c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
162e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
162f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
16300 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f  nfiguration.noCo
16310 6d 70 61 63 74 20 3d 20 28 62 6f 6f 6c 29 76 61  mpact = (bool)va
16320 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16350 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
16360 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
16370 77 41 72 67 2c 20 22 6e 6f 43 6f 6e 73 6f 6c 65  wArg, "noConsole
16380 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
163a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
163c0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
163d0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
163e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
163f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
16400 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
16410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16420 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
16430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16450 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
16460 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
16470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16490 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
164a0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
164b0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
164c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
164e0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
164f0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
16500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16520 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
16530 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
16540 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
16550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16560 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
16570 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
16580 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165b0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
165c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165e0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
165f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16610 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
16620 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
16630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16640 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
16650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16670 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16690 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43  onfiguration.noC
166a0 6f 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c 29 76  onsole = (bool)v
166b0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
166d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
166e0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
166f0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
16700 65 77 41 72 67 2c 20 22 6e 6f 44 65 73 6b 74 6f  ewArg, "noDeskto
16710 70 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  p"))..          
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
16730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16740 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
16750 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
16760 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
16770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16790 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
167a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
167b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
167c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
167d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167e0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
167f0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
16800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16820 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
16830 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
16840 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
16850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16870 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
16880 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
16890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168b0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
168c0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
168d0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
168e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168f0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
16900 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
16910 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
16920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16940 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
16950 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16970 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
16980 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
169b0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
169c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169d0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
169e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
169f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
16a00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
16a30 44 65 73 6b 74 6f 70 20 3d 20 28 62 6f 6f 6c 29  Desktop = (bool)
16a40 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
16a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
16a70 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
16a80 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
16a90 6e 65 77 41 72 67 2c 20 22 6e 6f 4c 6f 67 22 29  newArg, "noLog")
16aa0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16ab0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ad0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
16ae0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
16af0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
16b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
16b20 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
16b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
16b70 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
16b80 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
16b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bb0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
16bc0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
16bd0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
16be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
16c00 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
16c10 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
16c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c40 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
16c50 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
16c60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c80 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
16c90 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
16ca0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
16cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cd0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
16ce0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d00 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
16d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d30 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
16d40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d60 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
16d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
16d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16da0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
16db0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67  figuration.noLog
16dc0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
16dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16de0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e00 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
16e10 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
16e20 20 22 6e 6f 4e 65 74 46 78 32 30 22 29 29 0d 0a   "noNetFx20"))..
16e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e60 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
16e70 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
16e80 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ea0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
16eb0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
16ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ed0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ef0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
16f00 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
16f10 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
16f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f40 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
16f50 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
16f60 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
16f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f80 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16f90 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
16fa0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
16fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
16fd0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
16fe0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
16ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17010 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
17020 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
17030 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
17040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17050 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
17060 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
17070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17090 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
170a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170c0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
170d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
170e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170f0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
17100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17110 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
17120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17130 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
17140 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32  uration.noNetFx2
17150 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  0 = (bool)value;
17160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17170 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
17180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17190 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
171a0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
171b0 2c 20 22 6e 6f 4e 65 74 46 78 33 35 22 29 29 0d  , "noNetFx35")).
171c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
171d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171f0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
17200 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
17210 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
17220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17230 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
17240 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
17250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17260 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
17270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17280 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
17290 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
172a0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
172b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172d0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
172e0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
172f0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
17300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17310 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
17320 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
17330 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
17340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
17360 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
17370 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
17380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173a0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
173b0 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
173c0 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
173f0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
17400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
17430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17450 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
17460 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17480 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
17490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
174b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174c0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
174d0 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78  guration.noNetFx
174e0 33 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  35 = (bool)value
174f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
17500 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
17510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17520 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
17530 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
17540 67 2c 20 22 6e 6f 4e 65 74 46 78 34 30 22 29 29  g, "noNetFx40"))
17550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17560 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17580 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
17590 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
175a0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
175b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
175d0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
175e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17610 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
17620 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
17630 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
17640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17660 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
17670 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
17680 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
17690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
176b0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
176c0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
176d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
176f0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
17700 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
17710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17730 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
17740 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
17750 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
17760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17780 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
17790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177b0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
177c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177e0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
177f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17810 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
17820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17830 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
17840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17850 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
17860 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
17870 78 34 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  x40 = (bool)valu
17880 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
17890 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
178a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178b0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
178c0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
178d0 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 35 22 29  rg, "noNetFx45")
178e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
178f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17910 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
17920 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
17930 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
17940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17950 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
17960 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
17970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17980 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
179b0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
179c0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
179d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179f0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
17a00 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
17a10 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
17a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
17a40 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
17a50 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
17a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a80 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
17a90 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
17aa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ac0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
17ad0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
17ae0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
17af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b10 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
17b20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b40 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
17b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b70 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
17b80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ba0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17be0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
17bf0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
17c00 46 78 34 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  Fx45 = (bool)val
17c10 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
17c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c40 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
17c50 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
17c60 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 35 31  Arg, "noNetFx451
17c70 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
17c80 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
17c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
17cb0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
17cc0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
17cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17cf0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
17d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d10 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
17d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d40 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
17d50 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
17d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d80 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
17d90 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
17da0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
17db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17dd0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
17de0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
17df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e10 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
17e20 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
17e30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
17e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e50 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
17e60 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
17e70 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
17e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ea0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
17eb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ed0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
17ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f00 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
17f10 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
17f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f30 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
17f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
17f60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
17f80 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
17f90 65 74 46 78 34 35 31 20 3d 20 28 62 6f 6f 6c 29  etFx451 = (bool)
17fa0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fc0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
17fd0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
17fe0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
17ff0 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78  newArg, "noNetFx
18000 34 35 32 22 29 29 0d 0a 20 20 20 20 20 20 20 20  452"))..        
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18020 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
18040 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
18050 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
18060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18080 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
18090 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
180a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
180c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180d0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
180e0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
180f0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
18100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18110 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
18120 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
18130 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18160 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
18170 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
18180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181a0 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
181b0 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
181c0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
181d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181e0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
181f0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
18200 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
18210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18230 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
18240 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
18250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18260 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
18270 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
18280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18290 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
182a0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
182b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182c0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
182d0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
18300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18310 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
18320 6e 6f 4e 65 74 46 78 34 35 32 20 3d 20 28 62 6f  noNetFx452 = (bo
18330 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
18340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18350 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
18360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
18370 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
18380 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65  on(newArg, "noNe
18390 74 46 78 34 36 22 29 29 0d 0a 20 20 20 20 20 20  tFx46"))..      
183a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183d0 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
183e0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
183f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18410 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
18420 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
18430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18440 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18460 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
18470 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
18480 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
18490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184a0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
184b0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
184c0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184f0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
18500 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
18510 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18530 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
18540 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
18550 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
18580 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
18590 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
185a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
185d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
185e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
18600 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18620 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
18630 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
18640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18650 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
18660 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
18670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18680 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
18690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186a0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
186b0 6e 2e 6e 6f 4e 65 74 46 78 34 36 20 3d 20 28 62  n.noNetFx46 = (b
186c0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
186d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
18700 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
18710 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e  ion(newArg, "noN
18720 65 74 46 78 34 36 31 22 29 29 0d 0a 20 20 20 20  etFx461"))..    
18730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18740 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18760 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
18770 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
18780 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
18790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187a0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
187b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
187c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187f0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
18800 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
18810 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
18820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18830 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
18840 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
18850 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
18860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18880 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
18890 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
188a0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
188b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188c0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
188d0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
188e0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
188f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18910 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
18920 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
18930 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18950 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
18960 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18980 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18990 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
189a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
189c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
189f0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
18a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a30 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
18a40 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 36 31 20 3d  ion.noNetFx461 =
18a50 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
18a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a90 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
18aa0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
18ab0 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
18ac0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18af0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
18b00 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
18b10 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
18b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
18b40 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
18b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18b60 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b90 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
18ba0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
18bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bd0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
18be0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
18bf0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18c20 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
18c30 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
18c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c60 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
18c70 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
18c80 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
18c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ca0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
18cb0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
18cc0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cf0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
18d00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
18d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d50 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
18d60 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
18d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d80 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
18d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18db0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
18dd0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52  onfiguration.noR
18de0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20  untimeVersion = 
18df0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
18e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e30 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
18e40 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
18e50 6f 54 72 61 63 65 22 29 29 0d 0a 20 20 20 20 20  oTrace"))..     
18e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e90 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
18ea0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
18eb0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
18ee0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
18f30 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
18f40 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
18f70 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
18f80 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
18f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fb0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
18fc0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
18fd0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ff0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
19000 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
19010 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
19020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
19040 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
19050 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
19060 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
19090 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
190c0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
190d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
190f0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19110 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
19120 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19140 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
19150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19160 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
19170 6f 6e 2e 6e 6f 54 72 61 63 65 20 3d 20 28 62 6f  on.noTrace = (bo
19180 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
191b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
191c0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
191d0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73  on(newArg, "noVs
191e0 32 30 30 35 22 29 29 0d 0a 20 20 20 20 20 20 20  2005"))..       
191f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19200 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19220 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
19230 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
19240 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19260 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
19270 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
19280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19290 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
192a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192b0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
192c0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
192d0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192f0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
19300 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
19310 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
19320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19340 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
19350 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
19360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19380 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
19390 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
193a0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
193b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
193d0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
193e0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
193f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19410 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
19420 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19440 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
19450 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19470 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
19480 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
19490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194a0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
194b0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194f0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
19500 2e 6e 6f 56 73 32 30 30 35 20 3d 20 28 62 6f 6f  .noVs2005 = (boo
19510 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
19520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19530 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
19540 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
19550 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
19560 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32  n(newArg, "noVs2
19570 30 30 38 22 29 29 0d 0a 20 20 20 20 20 20 20 20  008"))..        
19580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19590 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
195b0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
195c0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
195d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195f0 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
19600 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
19610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19620 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19640 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
19650 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
19660 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19680 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
19690 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
196a0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
196b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196d0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
196e0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
196f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19710 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
19720 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
19730 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
19740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19750 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
19760 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
19770 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
19780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197a0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
197b0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197d0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
197e0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
197f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19800 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
19810 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
19840 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19880 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
19890 6e 6f 56 73 32 30 30 38 20 3d 20 28 62 6f 6f 6c  noVs2008 = (bool
198a0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
198d0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
198e0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
198f0 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30  (newArg, "noVs20
19900 31 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  10"))..         
19910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
19940 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
19950 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
19960 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19980 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
19990 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
199a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
199b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
199c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199d0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
199e0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
199f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a10 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
19a20 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
19a30 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a60 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
19a70 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
19a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19aa0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
19ab0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
19ac0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
19ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ae0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
19af0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
19b00 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
19b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b30 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
19b40 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
19b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b60 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
19b70 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b90 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
19ba0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
19bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bc0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
19bd0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
19be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c10 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
19c20 6f 56 73 32 30 31 30 20 3d 20 28 62 6f 6f 6c 29  oVs2010 = (bool)
19c30 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
19c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
19c60 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
19c70 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
19c80 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31  newArg, "noVs201
19c90 32 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  2"))..          
19ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
19cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
19cd0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
19ce0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
19cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
19d10 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
19d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
19d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d60 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
19d70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
19d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19da0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
19db0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
19dc0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
19dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19df0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
19e00 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
19e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e30 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
19e40 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
19e50 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
19e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e70 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
19e80 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
19e90 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
19ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ec0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
19ed0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
19f00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
19f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
19f30 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f50 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
19f60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19f80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fa0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
19fb0 56 73 32 30 31 32 20 3d 20 28 62 6f 6f 6c 29 76  Vs2012 = (bool)v
19fc0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
19fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19ff0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1a000 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
1a010 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 33  ewArg, "noVs2013
1a020 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
1a030 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a050 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1a060 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
1a070 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
1a080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a090 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1a0a0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
1a0b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0f0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
1a100 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
1a110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a130 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1a140 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
1a150 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a180 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1a190 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1c0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
1a1d0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
1a1e0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a200 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1a210 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
1a220 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
1a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a250 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1a260 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a280 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
1a290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1a2c0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
1a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2e0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1a2f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1a310 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1a330 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
1a340 73 32 30 31 33 20 3d 20 28 62 6f 6f 6c 29 76 61  s2013 = (bool)va
1a350 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
1a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1a370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a380 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
1a390 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
1a3a0 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 35 22  wArg, "noVs2015"
1a3b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1a3c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3e0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
1a3f0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
1a400 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
1a410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a420 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1a430 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
1a440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a450 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1a480 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
1a490 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4c0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1a4d0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
1a4e0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a510 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1a520 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a550 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
1a560 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
1a570 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1a580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a590 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1a5a0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
1a5b0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
1a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5e0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1a5f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a610 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
1a620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a640 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1a650 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a670 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1a680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a690 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1a6a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1a6c0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
1a6d0 32 30 31 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  2015 = (bool)val
1a6e0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a710 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
1a720 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
1a730 41 72 67 2c 20 22 70 65 72 55 73 65 72 22 29 29  Arg, "perUser"))
1a740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a750 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a770 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
1a780 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
1a790 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
1a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
1a7c0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
1a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a800 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1a810 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
1a820 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
1a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a850 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
1a860 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
1a870 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
1a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a890 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1a8a0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1a8b0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a8e0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
1a8f0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
1a900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a920 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1a930 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
1a940 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
1a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a970 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1a980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9a0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
1a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1a9e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa00 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
1aa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa40 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1aa50 69 67 75 72 61 74 69 6f 6e 2e 70 65 72 55 73 65  iguration.perUse
1aa60 72 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  r = (bool)value;
1aa70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aa80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1aa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaa0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
1aab0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
1aac0 2c 20 22 70 72 6f 76 69 64 65 72 46 6c 61 67 73  , "providerFlags
1aad0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1aaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab00 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
1ab10 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  ct value = Parse
1ab20 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab40 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 50 72         typeof(Pr
1ab50 6f 76 69 64 65 72 46 6c 61 67 73 29 2c 20 74 65  oviderFlags), te
1ab60 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  xt, true);....  
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
1ab90 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
1aba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1abe0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
1abf0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
1ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
1ac30 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
1ac40 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
1ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ac70 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1ac80 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1acb0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75  Invalid {0} valu
1acc0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
1acd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1acf0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
1ad00 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
1ad10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad30 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1ad40 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
1ad70 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
1ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad90 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1ada0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
1adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adc0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1add0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adf0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae10 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1ae20 6e 2e 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20  n.providerFlags 
1ae30 3d 20 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73  = (ProviderFlags
1ae40 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1ae70 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1ae80 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
1ae90 28 6e 65 77 41 72 67 2c 20 22 72 65 67 69 73 74  (newArg, "regist
1aea0 72 79 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20  ryVersion"))..  
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aec0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aee0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1aef0 6f 6e 2e 72 65 67 69 73 74 72 79 56 65 72 73 69  on.registryVersi
1af00 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  on = text;..    
1af10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1af30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1af40 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
1af50 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 73 74 72  ion(newArg, "str
1af60 69 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ict"))..        
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1af90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1afa0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
1afb0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
1afc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afe0 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
1aff0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b010 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b030 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
1b040 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1b050 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1b060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b070 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
1b080 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
1b090 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
1b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0c0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
1b0d0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1b0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b100 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
1b110 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
1b120 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b140 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1b150 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
1b160 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
1b170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b190 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1b1a0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1c0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
1b1d0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1b200 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b220 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1b230 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b250 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b270 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b290 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 6f 77    // NOTE: Allow
1b2a0 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
1b2b0 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 0d 0a  e arguments to..
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1b2e0 20 20 20 20 20 6f 76 65 72 72 69 64 65 20 74 68       override th
1b2f0 65 20 22 73 74 72 69 63 74 6e 65 73 73 22 20 73  e "strictness" s
1b300 65 74 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  etting..        
1b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b320 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f      //       pro
1b330 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c  vided by our cal
1b340 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ler...          
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b360 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b380 20 20 73 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c    strict = (bool
1b390 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1b3d0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
1b3e0 28 6e 65 77 41 72 67 2c 20 22 74 68 72 6f 77 4f  (newArg, "throwO
1b3f0 6e 4d 69 73 73 69 6e 67 22 29 29 0d 0a 20 20 20  nMissing"))..   
1b400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b410 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b430 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
1b440 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
1b450 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
1b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b470 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
1b480 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1b490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4c0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1b4d0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1b4e0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
1b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b500 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1b510 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
1b520 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
1b530 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b550 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1b560 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1b570 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b590 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
1b5a0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
1b5b0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
1b5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5e0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
1b5f0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
1b600 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
1b610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b620 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1b630 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1b640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b650 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1b660 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1b690 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1b6c0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
1b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b700 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1b710 74 69 6f 6e 2e 74 68 72 6f 77 4f 6e 4d 69 73 73  tion.throwOnMiss
1b720 69 6e 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  ing = (bool)valu
1b730 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1b740 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b760 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
1b770 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
1b780 72 67 2c 20 22 74 72 61 63 65 46 6f 72 6d 61 74  rg, "traceFormat
1b790 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
1b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1b7d0 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46  iguration.traceF
1b7e0 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20  ormat = text;.. 
1b7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b800 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1b810 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 20  Ops.TraceFormat 
1b820 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
1b830 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20  traceFormat;..  
1b840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b850 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b870 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
1b880 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74  ption(newArg, "t
1b890 72 61 63 65 50 72 69 6f 72 69 74 79 22 29 29 0d  racePriority")).
1b8a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b8b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8d0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
1b8e0 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d  alue = ParseEnum
1b8f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1b900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b910 20 20 20 74 79 70 65 6f 66 28 54 72 61 63 65 50     typeof(TraceP
1b920 72 69 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20  riority), text, 
1b930 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  true);....      
1b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b950 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
1b960 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b980 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1b9b0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1b9c0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
1b9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1b9f0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
1ba00 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
1ba10 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
1ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba30 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1ba40 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1ba50 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba70 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
1ba80 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b  lid {0} value: {
1ba90 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
1baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bab0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1bac0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
1bad0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
1bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb00 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1bb10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb30 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
1bb40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1bb70 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
1bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb90 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
1bba0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1bbc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbe0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
1bbf0 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 28 54  acePriority = (T
1bc00 72 61 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c  racePriority)val
1bc10 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1bc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc30 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 50   TraceOps.TraceP
1bc40 72 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67  riority = config
1bc50 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69  uration.tracePri
1bc60 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
1bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc80 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1bc90 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
1bca0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
1bcb0 6e 65 77 41 72 67 2c 20 22 76 65 72 62 6f 73 65  newArg, "verbose
1bcc0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
1bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1bce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcf0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1bd00 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
1bd10 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
1bd20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1bd40 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
1bd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd90 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
1bda0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
1bdb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdd0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1bde0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
1bdf0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
1be00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1be20 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1be30 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1be40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be60 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
1be70 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
1be80 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1be90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bea0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1beb0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
1bec0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
1bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bef0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1bf00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
1bf30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf50 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1bf60 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
1bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf80 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1bf90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1bfb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1bfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1bfd0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 65 72  onfiguration.ver
1bfe0 62 6f 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  bose = (bool)val
1bff0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1c000 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c020 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
1c030 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
1c040 41 72 67 2c 20 22 76 73 56 65 72 73 69 6f 6e 53  Arg, "vsVersionS
1c050 75 66 66 69 78 22 29 29 0d 0a 20 20 20 20 20 20  uffix"))..      
1c060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c070 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c090 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76   configuration.v
1c0a0 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d  sVersionSuffix =
1c0b0 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
1c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1c0e0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
1c0f0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
1c100 6e 65 77 41 72 67 2c 20 22 77 68 61 74 49 66 22  newArg, "whatIf"
1c110 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1c120 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c140 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
1c150 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
1c160 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
1c170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c180 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1c190 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
1c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1c1e0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
1c1f0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
1c200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c220 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1c230 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
1c240 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1c250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1c270 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1c280 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1c290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2b0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
1c2c0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
1c2d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2f0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1c300 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
1c310 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
1c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c340 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1c350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c370 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
1c380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1c3b0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1c3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3d0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1c3e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1c400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1c420 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74  nfiguration.what
1c430 49 66 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  If = (bool)value
1c440 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1c450 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c470 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
1c480 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
1c490 67 2c 20 22 77 6f 77 36 34 22 29 29 0d 0a 20 20  g, "wow64"))..  
1c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4d0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
1c4e0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
1c4f0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c510 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
1c520 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c540 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c560 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1c570 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1c580 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
1c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1c5b0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
1c5c0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
1c5d0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1c600 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1c610 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c630 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
1c640 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
1c650 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
1c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c680 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
1c690 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
1c6a0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
1c6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6c0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1c6d0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1c6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1c700 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
1c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1c730 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
1c740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c760 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
1c770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c780 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7a0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1c7b0 61 74 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28 62  ation.wow64 = (b
1c7c0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
1c7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1c800 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
1c810 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c830 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1c840 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
1c850 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
1c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c870 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1c880 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
1c890 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
1c8a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8c0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1c8d0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1c8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c900 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63    "Unsupported c
1c910 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69  ommand line opti
1c920 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  on: {0}",..     
1c930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c940 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1c950 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61  splay(arg)), tra
1c960 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c980 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1c990 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
1c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1c9c0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1c9f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1ca00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca10 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
1ca20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1ca30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ca40 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
1ca50 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
1ca60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ca70 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1ca80 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1ca90 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
1caa0 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cac0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1cad0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1cae0 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f  , e, traceCatego
1caf0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1cb00 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1cb10 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 6d  r = "Failed to m
1cb20 6f 64 69 66 79 20 63 6f 6e 66 69 67 75 72 61 74  odify configurat
1cb30 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  ion.";..        
1cb40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1cb60 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1cb70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1cb80 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1cb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
1cbe0 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
1cbf0 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
1cc00 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
1cc10 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
1cc20 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28 0d  c bool Process(.
1cc30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cc40 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d   string[] args,.
1cc50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cc60 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63   Configuration c
1cc70 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20  onfiguration,.. 
1cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1cc90 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20  ool strict,..   
1cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
1ccb0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
1ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
1ccd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1cce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ccf0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
1cd00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1cd10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1cd20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
1cd30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd60 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1cd70 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75  "Invalid configu
1cd80 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20  ration.";..     
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cda0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1cdb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cdc0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
1cde0 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
1cdf0 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
1ce00 2e 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20  .assembly;....  
1ce10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 3d    if (assembly =
1ce30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce60 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1ce70 22 49 6e 76 61 6c 69 64 20 61 73 73 65 6d 62 6c  "Invalid assembl
1ce80 79 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  y.";..          
1ce90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1cea0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cec0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1ced0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
1cee0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54  onfiguration.noT
1cef0 72 61 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20  race)..         
1cf00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1cf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
1cf30 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26  guration.noLog &
1cf40 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
1cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1cf60 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
1cf70 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  pty(configuratio
1cf80 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d  n.logFileName)).
1cf90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cfa0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1cfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfc0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfe0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1cff0 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   Use the default
1d000 20 6c 6f 67 20 66 69 6c 65 20 6e 61 6d 65 2e 0d   log file name..
1d010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d020 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1d030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d040 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1d050 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69  figuration.logFi
1d060 6c 65 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46  leName = GetLogF
1d070 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  ileName(..      
1d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d090 20 20 20 20 20 20 20 20 20 20 22 74 72 61 63 65            "trace
1d0a0 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
1d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1d0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d0d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1d0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d110 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1d120 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1d130 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
1d140 6e 6f 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20  noConsole)..    
1d150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d160 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d180 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1d190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1a0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 76     // NOTE: In v
1d1b0 65 72 62 6f 73 65 20 6d 6f 64 65 2c 20 64 65 62  erbose mode, deb
1d1c0 75 67 20 6f 75 74 70 75 74 20 28 74 68 61 74 20  ug output (that 
1d1d0 6d 65 65 74 73 0d 0a 20 20 20 20 20 20 20 20 20  meets..         
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1f0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
1d200 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72  configured prior
1d210 69 74 79 20 63 72 69 74 65 72 69 61 29 20 77 69  ity criteria) wi
1d220 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20  ll be..         
1d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d240 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69 73 70     //       disp
1d250 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e  layed to the con
1d260 73 6f 6c 65 3b 20 6f 74 68 65 72 77 69 73 65 2c  sole; otherwise,
1d270 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20   trace..        
1d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d290 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 75 74      //       out
1d2a0 70 75 74 20 28 74 68 61 74 20 6d 65 65 74 73 20  put (that meets 
1d2b0 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70  the configured p
1d2c0 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2e0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 72       //       cr
1d2f0 69 74 65 72 69 61 29 20 77 69 6c 6c 20 62 65 20  iteria) will be 
1d300 64 69 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65  displayed to the
1d310 20 63 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 20   console...     
1d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d330 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1d340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d350 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
1d360 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 29 0d  guration.debug).
1d370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d380 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3b0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3d0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64      // NOTE: Add
1d3e0 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61   the console tra
1d3f0 63 65 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74  ce listener to t
1d400 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d420 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73      //       lis
1d430 74 20 6f 66 20 74 72 61 63 65 20 6c 69 73 74 65  t of trace liste
1d440 6e 65 72 73 20 6d 61 69 6e 74 61 69 6e 65 64 20  ners maintained 
1d450 62 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  by..            
1d460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d470 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
1d480 20 54 72 61 63 65 4f 70 73 20 63 6c 61 73 73 20   TraceOps class 
1d490 28 69 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73 73 61  (i.e. only messa
1d4a0 67 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ges..           
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
1d4d0 61 74 20 6d 65 65 74 20 74 68 65 20 64 65 62 75  at meet the debu
1d4e0 67 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20  g priority will 
1d4f0 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  be..            
1d500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d510 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 65 65      //       see
1d520 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65  n on the console
1d530 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
1d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d550 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d570 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1d580 2e 53 65 74 75 70 44 65 62 75 67 4c 69 73 74 65  .SetupDebugListe
1d590 6e 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20  ners();..       
1d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5d0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
1d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d610 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d630 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d640 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f  NOTE: Add the co
1d650 6e 73 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74  nsole trace list
1d660 65 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20  ener to the..   
1d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d680 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d690 20 20 20 20 20 20 6c 69 73 74 20 6f 66 20 62 75        list of bu
1d6a0 69 6c 74 2d 69 6e 20 74 72 61 63 65 20 6c 69 73  ilt-in trace lis
1d6b0 74 65 6e 65 72 73 20 28 69 2e 65 2e 0d 0a 20 20  teners (i.e...  
1d6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d6e0 20 20 20 20 20 20 20 6f 6e 6c 79 20 6d 65 73 73         only mess
1d6f0 61 67 65 73 20 74 68 61 74 20 6d 65 65 74 20 74  ages that meet t
1d700 68 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  he trace..      
1d710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d720 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1d730 20 20 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c     priority will
1d740 20 62 65 20 73 65 65 6e 20 6f 6e 20 74 68 65 20   be seen on the 
1d750 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20  console)...     
1d760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d770 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1d7a0 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41  race.Listeners.A
1d7b0 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72  dd(new ConsoleTr
1d7c0 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d  aceListener());.
1d7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1d7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d800 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d820 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1d830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d870 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
1d880 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67  figuration.noLog
1d890 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
1d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8b0 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   !String.IsNullO
1d8c0 72 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61  rEmpty(configura
1d8d0 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65  tion.logFileName
1d8e0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1d8f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d910 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1d920 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e  .Listeners.Add(n
1d930 65 77 20 54 65 78 74 57 72 69 74 65 72 54 72 61  ew TextWriterTra
1d940 63 65 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20 20  ceListener(..   
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d960 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1d970 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69  figuration.logFi
1d980 6c 65 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20  leName));....   
1d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9a0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9c0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1d9d0 3a 20 54 65 63 68 6e 69 63 61 6c 6c 79 2c 20 77  : Technically, w
1d9e0 65 20 63 72 65 61 74 65 64 20 74 68 65 20 6c 6f  e created the lo
1d9f0 67 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20  g file...       
1da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da10 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1da20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da30 20 20 20 20 20 66 69 6c 65 73 43 72 65 61 74 65       filesCreate
1da40 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d++;..          
1da50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1da60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1da70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1da90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1daa0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44        // NOTE: D
1dab0 75 6d 70 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ump the configur
1dac0 61 74 69 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73  ation now in cas
1dad0 65 20 77 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20  e we need to..  
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daf0 20 20 2f 2f 20 20 20 20 20 20 20 74 72 6f 75 62    //       troub
1db00 6c 65 73 68 6f 6f 74 20 61 6e 79 20 69 73 73 75  leshoot any issu
1db10 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es...           
1db20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db40 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
1db50 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79  on.debugPriority
1db60 20 3c 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74   <= TracePriorit
1db70 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20  y.Medium)..     
1db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db90 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1dba0 2e 44 75 6d 70 28 64 65 62 75 67 43 61 6c 6c 62  .Dump(debugCallb
1dbb0 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ack);....       
1dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1dbd0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74  (configuration.t
1dbe0 72 61 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20  racePriority <= 
1dbf0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
1dc00 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20  dium)..         
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1dc20 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d  onfiguration.Dum
1dc30 70 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 29  p(traceCallback)
1dc40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1dc50 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc70 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77   // NOTE: Show w
1dc80 68 65 72 65 20 77 65 20 61 72 65 20 72 75 6e 6e  here we are runn
1dc90 69 6e 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77  ing from and how
1dca0 20 77 65 20 77 65 72 65 0d 0a 20 20 20 20 20 20   we were..      
1dcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1dcc0 20 20 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d         invoked..
1dcd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dce0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
1dd00 69 6e 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61  ing location = a
1dd10 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e  ssembly.Location
1dd20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1dd30 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1dd40 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1dd50 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
1dd60 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  diumLow,..      
1dd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd80 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
1dd90 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1dda0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddc0 20 20 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67          "Running
1ddd0 20 65 78 65 63 75 74 61 62 6c 65 20 69 73 3a 20   executable is: 
1dde0 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {0}", ForDisplay
1ddf0 28 6c 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20  (location)),..  
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de10 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1de20 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1de30 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1de40 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1de50 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
1de60 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20  y.MediumLow,..  
1de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de80 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1de90 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1dea0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1deb0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1dec0 20 20 20 20 20 20 20 20 20 20 20 20 22 4f 72 69              "Ori
1ded0 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69  ginal command li
1dee0 6e 65 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ne is: {0}",..  
1def0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df00 20 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e        Environmen
1df10 74 2e 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20  t.CommandLine), 
1df20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1df30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1df40 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1df50 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1df60 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1df70 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  umLow,..        
1df80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df90 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1dfa0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1dfb0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfd0 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 70        "Running p
1dfe0 72 6f 63 65 73 73 20 69 73 20 7b 30 7d 2e 22 2c  rocess is {0}.",
1dff0 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28   Is64BitProcess(
1e000 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
1e010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e020 20 22 36 34 2d 62 69 74 22 20 3a 20 22 33 32 2d   "64-bit" : "32-
1e030 62 69 74 22 29 2c 20 74 72 61 63 65 43 61 74 65  bit"), traceCate
1e040 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1e060 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
1e070 2e 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  .whatIf)..      
1e080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1e090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e0a0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1e0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0c0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
1e0d0 20 74 68 65 20 64 65 62 75 67 67 65 72 20 69 73   the debugger is
1e0e0 20 61 74 74 61 63 68 65 64 20 61 6e 64 20 22 77   attached and "w
1e0f0 68 61 74 2d 69 66 22 0d 0a 20 20 20 20 20 20 20  hat-if"..       
1e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e110 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 65 20 69   //       mode i
1e120 73 20 5b 6e 6f 77 5d 20 64 69 73 61 62 6c 65 64  s [now] disabled
1e130 2c 20 69 73 73 75 65 20 61 20 77 61 72 6e 69 6e  , issue a warnin
1e140 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
1e150 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1e160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e170 20 20 20 20 20 20 20 20 69 66 20 28 44 65 62 75          if (Debu
1e180 67 67 65 72 2e 49 73 41 74 74 61 63 68 65 64 29  gger.IsAttached)
1e190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1e1b0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1e1c0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
1e1d0 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a  ty.MediumHigh,..
1e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e200 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1e210 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
1e220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1e240 46 6f 72 63 65 64 20 74 6f 20 64 69 73 61 62 6c  Forced to disabl
1e250 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f  e \"what-if\" mo
1e260 64 65 20 77 69 74 68 20 22 20 2b 0d 0a 20 20 20  de with " +..   
1e270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e280 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65               "de
1e290 62 75 67 67 65 72 20 61 74 74 61 63 68 65 64 2e  bugger attached.
1e2a0 22 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ", traceCategory
1e2b0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1e2c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1e2e0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
1e2f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e310 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1e320 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1e330 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48  Priority.MediumH
1e340 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
1e350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e360 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
1e370 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
1e380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e390 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
1e3a0 20 61 63 74 75 61 6c 20 63 68 61 6e 67 65 73 20   actual changes 
1e3b0 77 69 6c 6c 20 62 65 20 6d 61 64 65 20 74 6f 20  will be made to 
1e3c0 74 68 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20  this " +..      
1e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3e0 20 20 20 20 20 20 22 73 79 73 74 65 6d 20 62 65        "system be
1e3f0 63 61 75 73 65 20 5c 22 77 68 61 74 2d 69 66 5c  cause \"what-if\
1e400 22 20 6d 6f 64 65 20 69 73 20 65 6e 61 62 6c 65  " mode is enable
1e410 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d.",..          
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e430 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1e440 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1e450 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e470 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1e480 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1e490 20 49 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20   If the command 
1e4a0 6c 69 6e 65 20 68 61 73 20 6e 6f 74 20 62 65 65  line has not bee
1e4b0 6e 20 6d 61 6e 75 61 6c 6c 79 0d 0a 20 20 20 20  n manually..    
1e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4d0 2f 2f 20 20 20 20 20 20 20 63 6f 6e 66 69 72 6d  //       confirm
1e4e0 65 64 20 28 69 2e 65 2e 20 76 69 61 20 74 68 65  ed (i.e. via the
1e4f0 20 65 78 70 6c 69 63 69 74 20 63 6f 6d 6d 61 6e   explicit comman
1e500 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20  d line..        
1e510 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1e520 20 20 20 20 20 6f 70 74 69 6f 6e 29 2c 20 74 68       option), th
1e530 65 6e 20 73 74 6f 70 20 70 72 6f 63 65 73 73 69  en stop processi
1e540 6e 67 20 6e 6f 77 2e 20 20 57 65 20 65 6e 66 6f  ng now.  We enfo
1e550 72 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rce..           
1e560 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1e570 20 20 74 68 69 73 20 72 75 6c 65 20 73 6f 20 74    this rule so t
1e580 68 61 74 20 73 69 6d 70 6c 79 20 64 6f 75 62 6c  hat simply doubl
1e590 65 2d 63 6c 69 63 6b 69 6e 67 20 74 68 65 0d 0a  e-clicking the..
1e5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5b0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 65      //       exe
1e5c0 63 75 74 61 62 6c 65 20 77 69 6c 6c 20 6e 6f 74  cutable will not
1e5d0 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 79 20 63   result in any c
1e5e0 68 61 6e 67 65 73 20 62 65 69 6e 67 0d 0a 20 20  hanges being..  
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e600 20 20 2f 2f 20 20 20 20 20 20 20 6d 61 64 65 20    //       made 
1e610 74 6f 20 74 68 65 20 73 79 73 74 65 6d 2e 0d 0a  to the system...
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e630 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1e640 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1e650 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63  !configuration.c
1e660 6f 6e 66 69 72 6d 29 0d 0a 20 20 20 20 20 20 20  onfirm)..       
1e670 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e690 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1e6a0 22 43 61 6e 6e 6f 74 20 63 6f 6e 74 69 6e 75 65  "Cannot continue
1e6b0 2c 20 74 68 65 20 5c 22 63 6f 6e 66 69 72 6d 5c  , the \"confirm\
1e6c0 22 20 6f 70 74 69 6f 6e 20 69 73 20 22 20 2b 0d  " option is " +.
1e6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f               "no
1e6f0 74 20 65 6e 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a  t enabled.";....
1e700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e710 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1e720 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1e730 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e750 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
1e760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e770 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1e780 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
1e790 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
1e7a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7c0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1e7d0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1e7e0 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
1e7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e800 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1e810 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1e820 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61  back, e, traceCa
1e830 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1e840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e850 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20  error = "Failed 
1e860 74 6f 20 70 72 6f 63 65 73 73 20 63 6f 6e 66 69  to process confi
1e870 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20  guration.";..   
1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1e890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e8a0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1e8b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1e8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1e8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e910 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1e920 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
1e930 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
1e940 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
1e950 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1e960 73 74 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63  static bool Chec
1e970 6b 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28  kRuntimeVersion(
1e980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e990 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    Configuration 
1e9a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a  configuration,..
1e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9c0 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20  bool strict,..  
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1e9e0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
1e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1ea10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ea20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1ea30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1ea50 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20   (configuration 
1ea60 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1ea70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1ea80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ea90 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1eaa0 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67   "Invalid config
1eab0 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20  uration.";..    
1eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ead0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1eae0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1eaf0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb10 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1eb20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1eb30 20 57 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66   What version of
1eb40 20 74 68 65 20 72 75 6e 74 69 6d 65 20 77 61 73   the runtime was
1eb50 20 74 68 65 20 63 6f 72 65 20 28 70 72 69 6d 61   the core (prima
1eb60 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry)..           
1eb70 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1eb80 20 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69    assembly compi
1eb90 6c 65 64 20 61 67 61 69 6e 73 74 20 28 65 2e 67  led against (e.g
1eba0 2e 20 22 76 32 2e 30 2e 35 30 37 32 37 22 20 6f  . "v2.0.50727" o
1ebb0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
1ebc0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1ebd0 22 76 34 2e 30 2e 33 30 33 31 39 22 29 2e 0d 0a  "v4.0.30319")...
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebf0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1ec00 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1ec10 6e 67 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74  ng coreImageRunt
1ec20 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 47 65 74  imeVersion = Get
1ec30 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1ec40 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1ec60 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65  nfiguration.core
1ec70 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
1ec80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec90 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1eca0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1ecb0 45 3a 20 57 65 20 61 6c 6c 6f 77 20 74 68 65 20  E: We allow the 
1ecc0 61 63 74 75 61 6c 20 69 6d 61 67 65 20 72 75 6e  actual image run
1ecd0 74 69 6d 65 20 63 68 65 63 6b 69 6e 67 20 74 6f  time checking to
1ece0 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   be..           
1ecf0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1ed00 20 20 62 79 70 61 73 73 65 64 20 76 69 61 20 74    bypassed via t
1ed10 68 65 20 22 2d 6e 6f 52 75 6e 74 69 6d 65 56 65  he "-noRuntimeVe
1ed20 72 73 69 6f 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c  rsion" command l
1ed30 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ine..           
1ed40 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1ed50 20 20 6f 70 74 69 6f 6e 2e 20 20 54 68 65 20 63    option.  The c
1ed60 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69  ommand line opti
1ed70 6f 6e 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  on is intended f
1ed80 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
1ed90 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1eda0 20 65 78 70 65 72 74 20 75 73 65 20 6f 6e 6c 79   expert use only
1edb0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1edc0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1ede0 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
1edf0 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  .noRuntimeVersio
1ee00 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
1ee10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee30 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
1ee40 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
1ee50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d  riority.Medium,.
1ee60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ee70 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
1ee80 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
1ee90 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1eea0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1eeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eec0 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79         "Assembly
1eed0 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72   is compiled for
1eee0 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77   the .NET Framew
1eef0 6f 72 6b 20 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20  ork {0}; " +..  
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef10 20 20 20 20 20 20 20 20 20 20 22 68 6f 77 65 76            "howev
1ef20 65 72 2c 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e  er, installation
1ef30 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 62 61   restrictions ba
1ef40 73 65 64 20 6f 6e 20 74 68 69 73 20 22 20 2b 0d  sed on this " +.
1ef50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66 61               "fa
1ef70 63 74 20 68 61 76 65 20 62 65 65 6e 20 64 69 73  ct have been dis
1ef80 61 62 6c 65 64 20 76 69 61 20 74 68 65 20 63 6f  abled via the co
1ef90 6d 6d 61 6e 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20  mmand line.",.. 
1efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efb0 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 49             coreI
1efc0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1efd0 6f 6e 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  on), traceCatego
1efe0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f000 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
1f010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f020 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f030 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1f040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f050 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 52 65 73 74     // TODO: Rest
1f060 72 69 63 74 20 74 68 65 20 63 6f 6e 66 69 67 75  rict the configu
1f070 72 61 74 69 6f 6e 20 62 61 73 65 64 20 6f 6e 20  ration based on 
1f080 77 68 69 63 68 20 69 6d 61 67 65 0d 0a 20 20 20  which image..   
1f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0a0 20 2f 2f 20 20 20 20 20 20 20 72 75 6e 74 69 6d   //       runtim
1f0b0 65 20 76 65 72 73 69 6f 6e 73 20 28 77 68 69 63  e versions (whic
1f0c0 68 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20 63  h more-or-less c
1f0d0 6f 72 72 65 73 70 6f 6e 64 0d 0a 20 20 20 20 20  orrespond..     
1f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f0f0 2f 20 20 20 20 20 20 20 74 6f 20 2e 4e 45 54 20  /       to .NET 
1f100 46 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f  Framework versio
1f110 6e 73 29 20 61 72 65 20 73 75 70 70 6f 72 74 65  ns) are supporte
1f120 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  d by the..      
1f130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1f140 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 73 20         versions 
1f150 6f 66 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  of Visual Studio
1f160 20 74 68 61 74 20 61 72 65 20 69 6e 73 74 61 6c   that are instal
1f170 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  led...          
1f180 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1a0 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
1f1b0 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 49  ullOrEmpty(coreI
1f1c0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1f1d0 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  on))..          
1f1e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f200 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
1f210 76 61 6c 69 64 20 63 6f 72 65 20 66 69 6c 65 20  valid core file 
1f220 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65  image runtime ve
1f230 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20  rsion";..       
1f240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f250 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f270 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1f280 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
1f290 69 66 20 28 53 74 72 69 6e 67 2e 45 71 75 61 6c  if (String.Equal
1f2a0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
1f2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2c0 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65  coreImageRuntime
1f2d0 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 32 49 6d  Version, CLRv2Im
1f2e0 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1f2f0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f310 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
1f320 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20  .Ordinal))..    
1f330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f340 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f350 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f370 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1f380 46 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30  For the CLR v2.0
1f390 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73   runtime, make s
1f3a0 75 72 65 20 77 65 20 64 69 73 61 62 6c 65 0d 0a  ure we disable..
1f3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3c0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1f3d0 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20   any attempt to 
1f3e0 75 73 65 20 69 74 20 66 6f 72 20 74 68 69 6e 67  use it for thing
1f3f0 73 20 74 68 61 74 20 72 65 71 75 69 72 65 0d 0a  s that require..
1f400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f410 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1f420 20 61 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d   an assembly com
1f430 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 43 4c  piled for the CL
1f440 52 20 76 34 2e 30 2e 20 20 49 74 20 69 73 0d 0a  R v4.0.  It is..
1f450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f460 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1f470 20 75 6e 63 65 72 74 61 69 6e 20 69 66 20 74 68   uncertain if th
1f480 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61  is is actually a
1f490 20 70 72 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20 20   problem in..   
1f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4b0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72       //       pr
1f4c0 61 63 74 69 63 65 20 61 73 20 74 68 65 20 43 4c  actice as the CL
1f4d0 52 20 76 34 2e 30 20 63 61 6e 20 6c 6f 61 64 20  R v4.0 can load 
1f4e0 61 6e 64 20 75 73 65 20 61 6e 0d 0a 20 20 20 20  and use an..    
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f500 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73      //       ass
1f510 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 77  embly compiled w
1f520 69 74 68 20 74 68 65 20 43 4c 52 20 76 32 2e 30  ith the CLR v2.0
1f530 3b 20 68 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20  ; however,..    
1f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f550 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 69 6e      //       sin
1f560 63 65 20 74 68 69 73 20 70 72 6f 6a 65 63 74 20  ce this project 
1f570 6f 66 66 65 72 73 20 62 6f 74 68 20 63 6f 6e 66  offers both conf
1f580 69 67 75 72 61 74 69 6f 6e 73 2c 0d 0a 20 20 20  igurations,..   
1f590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 77 65       //       we
1f5b0 20 63 75 72 72 65 6e 74 6c 79 20 64 69 73 61 6c   currently disal
1f5c0 6c 6f 77 20 74 68 69 73 20 6d 69 73 6d 61 74 63  low this mismatc
1f5d0 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h...            
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f600 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1f610 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20  ation.noNetFx40 
1f620 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1f630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f640 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1f650 6f 4e 65 74 46 78 34 35 20 3d 20 74 72 75 65 3b  oNetFx45 = true;
1f660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f670 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1f680 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34  uration.noNetFx4
1f690 35 31 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  51 = true;..    
1f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6b0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1f6c0 6e 2e 6e 6f 4e 65 74 46 78 34 35 32 20 3d 20 74  n.noNetFx452 = t
1f6d0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1f6f0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
1f700 74 46 78 34 36 20 3d 20 74 72 75 65 3b 0d 0a 20  tFx46 = true;.. 
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f720 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1f730 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 36 31 20  tion.noNetFx461 
1f740 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f760 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1f770 6f 56 73 32 30 31 30 20 3d 20 74 72 75 65 3b 0d  oVs2010 = true;.
1f780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f790 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1f7a0 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32 20  ration.noVs2012 
1f7b0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1f7e0 6f 56 73 32 30 31 33 20 3d 20 74 72 75 65 3b 0d  oVs2013 = true;.
1f7f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f800 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1f810 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 35 20  ration.noVs2015 
1f820 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  = true;....     
1f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f840 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
1f850 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
1f860 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d  riority.Medium,.
1f870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f880 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
1f890 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
1f8a0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1f8b0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8d0 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79         "Assembly
1f8e0 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72   is compiled for
1f8f0 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77   the .NET Framew
1f900 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20  ork {0}, " +..  
1f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f920 20 20 20 20 20 20 20 20 20 20 22 73 75 70 70 6f            "suppo
1f930 72 74 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20  rt for the .NET 
1f940 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73  Framework {1} is
1f950 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22 2c   now disabled.",
1f960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4c                CL
1f980 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv2ImageRuntimeV
1f990 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61  ersion, CLRv4Ima
1f9a0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1f9b0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9d0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1f9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f9f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1fa00 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1fa10 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71 75 61   if (String.Equa
1fa20 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ls(..           
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa40 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d   coreImageRuntim
1fa50 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49  eVersion, CLRv4I
1fa60 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1fa70 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
1fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa90 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
1faa0 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20  n.Ordinal))..   
1fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fac0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1fad0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1faf0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1fb00 20 46 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e   For the CLR v4.
1fb10 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20  0 runtime, make 
1fb20 73 75 72 65 20 77 65 20 64 69 73 61 62 6c 65 0d  sure we disable.
1fb30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fb40 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1fb50 20 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74 6f    any attempt to
1fb60 20 75 73 65 20 69 74 20 66 6f 72 20 74 68 69 6e   use it for thin
1fb70 67 73 20 74 68 61 74 20 72 65 71 75 69 72 65 0d  gs that require.
1fb80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fb90 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1fba0 20 20 61 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f    an assembly co
1fbb0 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 43  mpiled for the C
1fbc0 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20  LR v2.0...      
1fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbe0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1fc00 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
1fc10 74 46 78 32 30 20 3d 20 74 72 75 65 3b 0d 0a 20  tFx20 = true;.. 
1fc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc30 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1fc40 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d  tion.noNetFx35 =
1fc50 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1fc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc70 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1fc80 56 73 32 30 30 35 20 3d 20 74 72 75 65 3b 0d 0a  Vs2005 = true;..
1fc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fca0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1fcb0 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d  ation.noVs2008 =
1fcc0 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
1fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fce0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1fcf0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
1fd00 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a  iority.Medium,..
1fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
1fd30 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1fd40 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1fd50 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1fd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd70 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20        "Assembly 
1fd80 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  is compiled for 
1fd90 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  the .NET Framewo
1fda0 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20  rk {0}, " +..   
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdc0 20 20 20 20 20 20 20 20 20 22 73 75 70 70 6f 72           "suppor
1fdd0 74 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46  t for the .NET F
1fde0 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20  ramework {1} is 
1fdf0 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d  now disabled.",.
1fe00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fe10 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1fe20 44 69 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61  Display(CLRv4Ima
1fe30 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1fe40 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe60 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 32  ForDisplay(CLRv2
1fe70 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1fe80 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion)),..        
1fe90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fea0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1feb0 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
1fec0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1fed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fee0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
1fef0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1ff00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff10 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
1ff20 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1ff30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff40 20 20 20 20 20 20 20 20 20 22 75 6e 73 75 70 70           "unsupp
1ff50 6f 72 74 65 64 20 63 6f 72 65 20 66 69 6c 65 20  orted core file 
1ff60 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65  image runtime ve
1ff70 72 73 69 6f 6e 20 22 20 2b 0d 0a 20 20 20 20 20  rsion " +..     
1ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff90 20 20 20 20 20 20 20 22 7b 30 7d 2c 20 6d 75 73         "{0}, mus
1ffa0 74 20 62 65 20 7b 31 7d 20 6f 72 20 7b 32 7d 22  t be {1} or {2}"
1ffb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ffc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1ffd0 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65 49 6d  orDisplay(coreIm
1ffe0 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1fff0 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
20000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20010 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76   ForDisplay(CLRv
20020 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  2ImageRuntimeVer
20030 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
20040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20050 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43      ForDisplay(C
20060 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv4ImageRuntime
20070 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 0d 0a 20 20  Version));....  
20080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20090 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
200a0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
200b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
200c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200d0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
200e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
20100 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
20110 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
20120 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
20140 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
20150 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
20160 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
20170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20180 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
20190 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
201a0 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65  ck, e, traceCate
201b0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
201c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
201d0 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f  ror = "Failed to
201e0 20 63 68 65 63 6b 20 69 6d 61 67 65 20 72 75 6e   check image run
201f0 74 69 6d 65 20 76 65 72 73 69 6f 6e 2e 22 3b 0d  time version.";.
20200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20210 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20220 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
20230 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
20240 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20250 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
20260 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
20270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
202b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
202c0 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74  gion Private Met
202d0 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
202e0 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
202f0 20 47 65 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d   GetInvariantNam
20300 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
20310 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a      bool trace..
20320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20330 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
20340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20350 20 20 72 65 74 75 72 6e 20 55 73 65 45 66 36 50    return UseEf6P
20360 72 6f 76 69 64 65 72 28 74 72 61 63 65 29 20 3f  rovider(trace) ?
20370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20380 20 20 20 20 20 20 45 66 36 49 6e 76 61 72 69 61        Ef6Invaria
20390 6e 74 4e 61 6d 65 20 3a 20 49 6e 76 61 72 69 61  ntName : Invaria
203a0 6e 74 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  ntName;..       
203b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
203c0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
203d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20400 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
20410 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
20420 20 62 6f 6f 6c 20 49 73 53 79 73 74 65 6d 45 66   bool IsSystemEf
20430 36 41 73 73 65 6d 62 6c 79 41 76 61 69 6c 61 62  6AssemblyAvailab
20440 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le(..           
20450 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d       bool trace.
20460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20470 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
20480 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20490 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
204a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
204b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
204c0 66 20 28 73 79 73 74 65 6d 45 66 36 41 73 73 65  f (systemEf6Asse
204d0 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly == null).. 
204e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79                sy
20510 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 20  stemEf6Assembly 
20520 3d 20 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c 65  = Assembly.Refle
20530 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 28 0d 0a  ctionOnlyLoad(..
20540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20550 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
20560 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d  emEf6AssemblyNam
20570 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
20580 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205a0 20 20 69 66 20 28 73 79 73 74 65 6d 45 66 36 41    if (systemEf6A
205b0 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29  ssembly != null)
205c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
205d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
205e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205f0 20 69 66 20 28 74 72 61 63 65 20 26 26 0d 0a 20   if (trace &&.. 
20600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20610 20 20 20 20 20 20 20 20 20 20 20 21 48 61 73 46             !HasF
20620 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61  lags(ProviderFla
20630 67 73 2e 44 69 64 45 66 36 52 65 73 6f 6c 76 65  gs.DidEf6Resolve
20640 54 72 61 63 65 2c 20 74 72 75 65 29 29 0d 0a 20  Trace, true)).. 
20650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20660 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20680 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
20690 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
206a0 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
206b0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
206c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206d0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
206e0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
206f0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
20700 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
20710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20720 20 20 20 22 45 6e 74 69 74 79 20 46 72 61 6d 65     "Entity Frame
20730 77 6f 72 6b 20 36 20 61 73 73 65 6d 62 6c 79 20  work 6 assembly 
20740 77 61 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  was " +..       
20750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20760 20 20 20 20 20 20 20 20 20 22 72 65 73 6f 6c 76           "resolv
20770 65 64 20 74 6f 20 7b 30 7d 2e 22 2c 20 46 6f 72  ed to {0}.", For
20780 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
20790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207a0 20 20 20 20 20 20 20 20 20 20 73 79 73 74 65 6d            system
207b0 45 66 36 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61  Ef6Assembly.Loca
207c0 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  tion)),..       
207d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
207f0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
20800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20810 20 20 20 20 20 20 20 20 70 72 6f 76 69 64 65 72          provider
20820 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69 64 65  Flags |= Provide
20830 72 46 6c 61 67 73 2e 44 69 64 45 66 36 52 65 73  rFlags.DidEf6Res
20840 6f 6c 76 65 54 72 61 63 65 3b 0d 0a 20 20 20 20  olveTrace;..    
20850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20860 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
20870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20880 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
20890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
208b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
208c0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
208d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
208f0 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
20900 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
20910 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20920 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
20930 74 72 61 63 65 20 26 26 0d 0a 20 20 20 20 20 20  trace &&..      
20940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 48                !H
20950 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72  asFlags(Provider
20960 46 6c 61 67 73 2e 44 69 64 45 66 36 52 65 73 6f  Flags.DidEf6Reso
20970 6c 76 65 54 72 61 63 65 2c 20 74 72 75 65 29 29  lveTrace, true))
20980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20990 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
209a0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
209b0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
209c0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
209d0 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
209e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209f0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
20a00 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
20a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a20 20 20 20 20 20 20 20 22 45 6e 74 69 74 79 20 46         "Entity F
20a30 72 61 6d 65 77 6f 72 6b 20 36 20 61 73 73 65 6d  ramework 6 assem
20a40 62 6c 79 20 77 61 73 20 6e 6f 74 20 72 65 73 6f  bly was not reso
20a50 6c 76 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20  lved.",..       
20a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a70 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
20a80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20a90 20 20 20 20 20 20 20 20 70 72 6f 76 69 64 65 72          provider
20aa0 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69 64 65  Flags |= Provide
20ab0 72 46 6c 61 67 73 2e 44 69 64 45 66 36 52 65 73  rFlags.DidEf6Res
20ac0 6f 6c 76 65 54 72 61 63 65 3b 0d 0a 20 20 20 20  olveTrace;..    
20ad0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
20ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20af0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
20b00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
20b10 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
20b20 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
20b30 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
20b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b70 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20b80 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
20b90 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a  Public Methods..
20ba0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
20bb0 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73  ic bool HasFlags
20bc0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
20bd0 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20     InstallFlags 
20be0 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20  hasFlags,..     
20bf0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
20c00 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  all..           
20c10 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
20c20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20c30 20 20 20 20 20 20 20 69 66 20 28 61 6c 6c 29 0d         if (all).
20c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20c50 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 69 6e       return ((in
20c60 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68 61 73  stallFlags & has
20c70 46 6c 61 67 73 29 20 3d 3d 20 68 61 73 46 6c 61  Flags) == hasFla
20c80 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gs);..          
20c90 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cb0 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c  return ((install
20cc0 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73  Flags & hasFlags
20cd0 29 20 21 3d 20 49 6e 73 74 61 6c 6c 46 6c 61 67  ) != InstallFlag
20ce0 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20 20 20  s.None);..      
20cf0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20d00 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20d50 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
20d60 20 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73 28 0d   bool HasFlags(.
20d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20d80 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 20 68   ProviderFlags h
20d90 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20  asFlags,..      
20da0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 61            bool a
20db0 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll..            
20dc0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
20dd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20de0 20 20 20 20 20 20 69 66 20 28 61 6c 6c 29 0d 0a        if (all)..
20df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e00 20 20 20 20 72 65 74 75 72 6e 20 28 28 70 72 6f      return ((pro
20e10 76 69 64 65 72 46 6c 61 67 73 20 26 20 68 61 73  viderFlags & has
20e20 46 6c 61 67 73 29 20 3d 3d 20 68 61 73 46 6c 61  Flags) == hasFla
20e30 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gs);..          
20e40 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
20e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e60 72 65 74 75 72 6e 20 28 28 70 72 6f 76 69 64 65  return ((provide
20e70 72 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67  rFlags & hasFlag
20e80 73 29 20 21 3d 20 50 72 6f 76 69 64 65 72 46 6c  s) != ProviderFl
20e90 61 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20  ags.None);..    
20ea0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
20eb0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
20ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
20f00 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
20f10 69 63 20 62 6f 6f 6c 20 49 73 4c 69 6e 71 53 75  ic bool IsLinqSu
20f20 70 70 6f 72 74 65 64 28 0d 0a 20 20 20 20 20 20  pported(..      
20f30 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
20f40 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
20f50 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
20f60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20f70 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
20f80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
20f90 4f 54 45 3a 20 43 68 65 63 6b 20 74 6f 20 73 65  OTE: Check to se
20fa0 65 20 69 66 20 74 68 65 20 63 61 6c 6c 65 72 20  e if the caller 
20fb0 68 61 73 20 66 6f 72 63 65 64 20 4c 49 4e 51 20  has forced LINQ 
20fc0 73 75 70 70 6f 72 74 20 74 6f 0d 0a 20 20 20 20  support to..    
20fd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
20fe0 20 20 20 20 20 62 65 20 65 6e 61 62 6c 65 64 20       be enabled 
20ff0 2d 4f 52 2d 20 64 69 73 61 62 6c 65 64 2c 20 74  -OR- disabled, t
21000 68 65 72 65 62 79 20 62 79 70 61 73 73 69 6e 67  hereby bypassing
21010 20 74 68 65 20 6e 65 65 64 0d 0a 20 20 20 20 20   the need..     
21020 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
21030 20 20 20 20 66 6f 72 20 22 61 75 74 6f 6d 61 74      for "automat
21040 69 63 20 64 65 74 65 63 74 69 6f 6e 22 20 62 79  ic detection" by
21050 20 74 68 69 73 20 6d 65 74 68 6f 64 2e 0d 0a 20   this method... 
21060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21070 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
21080 20 20 20 69 66 20 28 48 61 73 46 6c 61 67 73 28     if (HasFlags(
21090 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 46 6f  ProviderFlags.Fo
210a0 72 63 65 4c 69 6e 71 45 6e 61 62 6c 65 64 2c 20  rceLinqEnabled, 
210b0 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
210c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
210d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
210e0 66 20 28 74 72 61 63 65 20 26 26 0d 0a 20 20 20  f (trace &&..   
210f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21100 20 20 20 20 20 21 48 61 73 46 6c 61 67 73 28 50       !HasFlags(P
21110 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64  roviderFlags.Did
21120 4c 69 6e 71 46 6f 72 63 65 54 72 61 63 65 2c 20  LinqForceTrace, 
21130 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
21140 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21160 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
21170 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
21180 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
21190 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
211a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211b0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
211c0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
211d0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
211e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211f0 22 46 6f 72 63 65 64 20 74 6f 20 65 6e 61 62 6c  "Forced to enabl
21200 65 20 73 75 70 70 6f 72 74 20 66 6f 72 20 5c 22  e support for \"
21210 4c 69 6e 71 5c 22 2e 22 2c 0d 0a 20 20 20 20 20  Linq\".",..     
21220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21230 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
21240 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
21250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21260 20 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20    providerFlags 
21270 7c 3d 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73  |= ProviderFlags
21280 2e 44 69 64 4c 69 6e 71 46 6f 72 63 65 54 72 61  .DidLinqForceTra
21290 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce;..           
212a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
212b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212c0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
212f0 20 20 20 65 6c 73 65 20 69 66 20 28 48 61 73 46     else if (HasF
21300 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61  lags(ProviderFla
21310 67 73 2e 46 6f 72 63 65 4c 69 6e 71 44 69 73 61  gs.ForceLinqDisa
21320 62 6c 65 64 2c 20 74 72 75 65 29 29 0d 0a 20 20  bled, true))..  
21330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
21340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21350 20 20 20 20 20 69 66 20 28 74 72 61 63 65 20 26       if (trace &
21360 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
21370 20 20 20 20 20 20 20 20 20 20 20 21 48 61 73 46             !HasF
21380 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61  lags(ProviderFla
21390 67 73 2e 44 69 64 4c 69 6e 71 46 6f 72 63 65 54  gs.DidLinqForceT
213a0 72 61 63 65 2c 20 74 72 75 65 29 29 0d 0a 20 20  race, true))..  
213b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
213d0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
213e0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
213f0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
21400 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20  y.MediumHigh,.. 
21410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21420 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
21430 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
21440 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
21450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21460 20 20 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f        "Forced to
21470 20 64 69 73 61 62 6c 65 20 73 75 70 70 6f 72 74   disable support
21480 20 66 6f 72 20 5c 22 4c 69 6e 71 5c 22 2e 22 2c   for \"Linq\".",
21490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
214a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
214b0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
214c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
214d0 20 20 20 20 20 20 20 20 20 70 72 6f 76 69 64 65           provide
214e0 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69 64  rFlags |= Provid
214f0 65 72 46 6c 61 67 73 2e 44 69 64 4c 69 6e 71 46  erFlags.DidLinqF
21500 6f 72 63 65 54 72 61 63 65 3b 0d 0a 20 20 20 20  orceTrace;..    
21510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21520 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
21530 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21540 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
21550 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21560 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
21570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21580 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e   // NOTE: Return
21590 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   non-zero if the
215a0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
215b0 69 74 65 2e 4c 69 6e 71 0d 0a 20 20 20 20 20 20  ite.Linq..      
215c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
215d0 20 20 20 61 73 73 65 6d 62 6c 79 20 73 68 6f 75     assembly shou
215e0 6c 64 20 62 65 20 70 72 6f 63 65 73 73 65 64 20  ld be processed 
215f0 64 75 72 69 6e 67 20 74 68 65 20 69 6e 73 74 61  during the insta
21600 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll...           
21610 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66       //       If
21620 20 74 68 65 20 74 61 72 67 65 74 20 69 73 20 56   the target is V
21630 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30  isual Studio 200
21640 35 2c 20 74 68 69 73 20 6d 75 73 74 0d 0a 20 20  5, this must..  
21650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
21660 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 7a 65         return ze
21670 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro...           
21680 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
21690 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
216a0 21 6e 6f 4e 65 74 46 78 33 35 20 7c 7c 20 21 6e  !noNetFx35 || !n
216b0 6f 4e 65 74 46 78 34 30 20 7c 7c 20 21 6e 6f 4e  oNetFx40 || !noN
216c0 65 74 46 78 34 35 20 7c 7c 0d 0a 20 20 20 20 20  etFx45 ||..     
216d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
216e0 6e 6f 4e 65 74 46 78 34 35 31 20 7c 7c 20 21 6e  noNetFx451 || !n
216f0 6f 4e 65 74 46 78 34 35 32 20 7c 7c 20 21 6e 6f  oNetFx452 || !no
21700 4e 65 74 46 78 34 36 20 7c 7c 0d 0a 20 20 20 20  NetFx46 ||..    
21710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21720 21 6e 6f 4e 65 74 46 78 34 36 31 3b 0d 0a 20 20  !noNetFx461;..  
21730 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21740 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
21750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
217a0 62 6c 69 63 20 62 6f 6f 6c 20 49 73 45 66 36 53  blic bool IsEf6S
217b0 75 70 70 6f 72 74 65 64 28 0d 0a 20 20 20 20 20  upported(..     
217c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
217d0 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  trace..         
217e0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
217f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21800 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
21810 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
21820 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 6f 20 73  NOTE: Check to s
21830 65 65 20 69 66 20 74 68 65 20 63 61 6c 6c 65 72  ee if the caller
21840 20 68 61 73 20 66 6f 72 63 65 64 20 45 46 36 20   has forced EF6 
21850 73 75 70 70 6f 72 74 20 74 6f 0d 0a 20 20 20 20  support to..    
21860 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
21870 20 20 20 20 20 62 65 20 65 6e 61 62 6c 65 64 20       be enabled 
21880 2d 4f 52 2d 20 64 69 73 61 62 6c 65 64 2c 20 74  -OR- disabled, t
21890 68 65 72 65 62 79 20 62 79 70 61 73 73 69 6e 67  hereby bypassing
218a0 20 74 68 65 20 6e 65 65 64 0d 0a 20 20 20 20 20   the need..     
218b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
218c0 20 20 20 20 66 6f 72 20 22 61 75 74 6f 6d 61 74      for "automat
218d0 69 63 20 64 65 74 65 63 74 69 6f 6e 22 20 62 79  ic detection" by
218e0 20 74 68 69 73 20 6d 65 74 68 6f 64 2e 0d 0a 20   this method... 
218f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21900 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
21910 20 20 20 69 66 20 28 48 61 73 46 6c 61 67 73 28     if (HasFlags(
21920 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 46 6f  ProviderFlags.Fo
21930 72 63 65 45 66 36 45 6e 61 62 6c 65 64 2c 20 74  rceEf6Enabled, t
21940 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
21950 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
21970 20 28 74 72 61 63 65 20 26 26 0d 0a 20 20 20 20   (trace &&..    
21980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21990 20 20 20 20 21 48 61 73 46 6c 61 67 73 28 50 72      !HasFlags(Pr
219a0 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64 45  oviderFlags.DidE
219b0 66 36 46 6f 72 63 65 54 72 61 63 65 2c 20 74 72  f6ForceTrace, tr
219c0 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
219d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
219e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219f0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
21a00 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
21a10 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
21a20 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a40 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
21a50 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
21a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
21a80 6f 72 63 65 64 20 74 6f 20 65 6e 61 62 6c 65 20  orced to enable 
21a90 73 75 70 70 6f 72 74 20 66 6f 72 20 5c 22 45 66  support for \"Ef
21aa0 36 5c 22 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  6\".",..        
21ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ac0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
21ad0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
21ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
21af0 72 6f 76 69 64 65 72 46 6c 61 67 73 20 7c 3d 20  roviderFlags |= 
21b00 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69  ProviderFlags.Di
21b10 64 45 66 36 46 6f 72 63 65 54 72 61 63 65 3b 0d  dEf6ForceTrace;.
21b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21b30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21b50 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
21b60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
21b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
21b80 6c 73 65 20 69 66 20 28 48 61 73 46 6c 61 67 73  lse if (HasFlags
21b90 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 46  (ProviderFlags.F
21ba0 6f 72 63 65 45 66 36 44 69 73 61 62 6c 65 64 2c  orceEf6Disabled,
21bb0 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20   true))..       
21bc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21be0 69 66 20 28 74 72 61 63 65 20 26 26 0d 0a 20 20  if (trace &&..  
21bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c00 20 20 20 20 20 20 21 48 61 73 46 6c 61 67 73 28        !HasFlags(
21c10 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69  ProviderFlags.Di
21c20 64 45 66 36 46 6f 72 63 65 54 72 61 63 65 2c 20  dEf6ForceTrace, 
21c30 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
21c40 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c60 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
21c70 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
21c80 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
21c90 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cb0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
21cc0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
21cd0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
21ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cf0 22 46 6f 72 63 65 64 20 74 6f 20 64 69 73 61 62  "Forced to disab
21d00 6c 65 20 73 75 70 70 6f 72 74 20 66 6f 72 20 5c  le support for \
21d10 22 45 66 36 5c 22 2e 22 2c 0d 0a 20 20 20 20 20  "Ef6\".",..     
21d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d30 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
21d40 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
21d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d60 20 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20    providerFlags 
21d70 7c 3d 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73  |= ProviderFlags
21d80 2e 44 69 64 45 66 36 46 6f 72 63 65 54 72 61 63  .DidEf6ForceTrac
21d90 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
21da0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21dc0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
21dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21de0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
21df0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
21e00 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
21e10 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72  : Return non-zer
21e20 6f 20 69 66 20 74 68 65 20 53 79 73 74 65 6d 2e  o if the System.
21e30 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 0d  Data.SQLite.EF6.
21e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21e50 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62   //       assemb
21e60 6c 79 20 73 68 6f 75 6c 64 20 62 65 20 70 72 6f  ly should be pro
21e70 63 65 73 73 65 64 20 64 75 72 69 6e 67 20 74 68  cessed during th
21e80 65 20 69 6e 73 74 61 6c 6c 2e 0d 0a 20 20 20 20  e install...    
21e90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
21ea0 20 20 20 20 20 49 66 20 74 68 65 20 74 61 72 67       If the targ
21eb0 65 74 20 69 73 20 56 69 73 75 61 6c 20 53 74 75  et is Visual Stu
21ec0 64 69 6f 20 32 30 30 35 20 6f 72 20 56 69 73 75  dio 2005 or Visu
21ed0 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  al..            
21ee0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 53 74 75      //       Stu
21ef0 64 69 6f 20 32 30 30 38 2c 20 74 68 69 73 20 6d  dio 2008, this m
21f00 75 73 74 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e  ust return zero.
21f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21f20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
21f30 20 20 20 20 20 20 69 66 20 28 6e 6f 4e 65 74 46        if (noNetF
21f40 78 34 30 20 26 26 0d 0a 20 20 20 20 20 20 20 20  x40 &&..        
21f50 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 4e 65              noNe
21f60 74 46 78 34 35 20 26 26 20 6e 6f 4e 65 74 46 78  tFx45 && noNetFx
21f70 34 35 31 20 26 26 20 6e 6f 4e 65 74 46 78 34 35  451 && noNetFx45
21f80 32 20 26 26 20 6e 6f 4e 65 74 46 78 34 36 20 26  2 && noNetFx46 &
21f90 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
21fa0 20 20 20 20 20 20 20 6e 6f 4e 65 74 46 78 34 36         noNetFx46
21fb0 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
21fc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21fd0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21fe0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
21ff0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22010 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
22020 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 73 6f     // NOTE: Also
22030 2c 20 69 66 20 74 68 65 20 45 46 36 20 63 6f 72  , if the EF6 cor
22040 65 20 61 73 73 65 6d 62 6c 79 20 69 73 20 75 6e  e assembly is un
22050 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 69 73 0d  available, this.
22060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22070 20 2f 2f 20 20 20 20 20 20 20 6d 75 73 74 20 72   //       must r
22080 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20  eturn zero...   
22090 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
220a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
220b0 20 69 66 20 28 21 49 73 53 79 73 74 65 6d 45 66   if (!IsSystemEf
220c0 36 41 73 73 65 6d 62 6c 79 41 76 61 69 6c 61 62  6AssemblyAvailab
220d0 6c 65 28 74 72 61 63 65 29 29 0d 0a 20 20 20 20  le(trace))..    
220e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220f0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
22100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22110 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
22120 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69       // NOTE: Fi
22130 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 45 46  nally, if the EF
22140 36 20 63 6f 72 65 20 61 73 73 65 6d 62 6c 79 20  6 core assembly 
22150 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
22160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22170 20 20 2f 2f 20 20 20 20 20 20 20 67 6c 6f 62 61    //       globa
22180 6c 6c 79 20 5b 61 6e 64 20 74 68 69 73 20 69 73  lly [and this is
22190 20 61 20 72 65 71 75 69 72 65 6d 65 6e 74 20 66   a requirement f
221a0 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 0d 0a  or the current..
221b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221c0 2f 2f 20 20 20 20 20 20 20 69 6e 73 74 61 6c 6c  //       install
221d0 5d 2c 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d  ], return zero..
221e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
221f0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
22200 20 20 20 20 20 72 65 74 75 72 6e 20 48 61 73 46       return HasF
22210 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61  lags(ProviderFla
22220 67 73 2e 53 79 73 74 65 6d 45 66 36 4d 75 73 74  gs.SystemEf6Must
22230 42 65 47 6c 6f 62 61 6c 2c 20 74 72 75 65 29 20  BeGlobal, true) 
22240 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
22250 20 20 20 20 20 20 20 49 73 53 79 73 74 65 6d 45         IsSystemE
22260 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c  f6AssemblyGlobal
22270 28 29 20 3a 20 74 72 75 65 3b 0d 0a 20 20 20 20  () : true;..    
22280 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22290 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
222a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
222e0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
222f0 61 74 65 20 62 6f 6f 6c 20 49 73 45 66 36 41 73  ate bool IsEf6As
22300 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 0d 0a  semblyGlobal()..
22310 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
22330 66 20 28 65 66 36 41 73 73 65 6d 62 6c 79 4e 61  f (ef6AssemblyNa
22340 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
22350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22360 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
22370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22380 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d    Assembly assem
22390 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 52  bly = Assembly.R
223a0 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61  eflectionOnlyLoa
223b0 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
223c0 20 20 20 20 20 20 20 20 65 66 36 41 73 73 65 6d          ef6Assem
223d0 62 6c 79 4e 61 6d 65 2e 54 6f 53 74 72 69 6e 67  blyName.ToString
223e0 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ());....        
223f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
22400 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c  assembly != null
22410 29 20 26 26 20 61 73 73 65 6d 62 6c 79 2e 47 6c  ) && assembly.Gl
22420 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
22430 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
22440 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22450 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22490 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
224a0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
224b0 55 73 65 45 66 36 50 72 6f 76 69 64 65 72 28 0d  UseEf6Provider(.
224c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
224d0 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20   bool trace..   
224e0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
224f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22510 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
22520 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 63     // NOTE: We c
22530 61 6e 6e 6f 74 20 75 73 65 20 74 68 65 20 45 46  annot use the EF
22540 36 20 61 73 73 65 6d 62 6c 79 20 61 73 20 74 68  6 assembly as th
22550 65 20 70 72 6f 76 69 64 65 72 20 69 66 20 69 74  e provider if it
22560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22570 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20 6e 6f    //       is no
22580 74 20 73 75 70 70 6f 72 74 65 64 20 62 79 20 74  t supported by t
22590 68 69 73 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e  his installation
225a0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
225b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
225c0 20 20 20 20 20 20 20 69 66 20 28 21 49 73 45 66         if (!IsEf
225d0 36 53 75 70 70 6f 72 74 65 64 28 74 72 61 63 65  6Supported(trace
225e0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
225f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
22600 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
22610 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
22620 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
22630 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20 45 46  NOTE: For the EF
22640 36 20 61 73 73 65 6d 62 6c 79 20 74 6f 20 62 65  6 assembly to be
22650 20 75 73 61 62 6c 65 20 61 73 20 61 20 70 72 6f   usable as a pro
22660 76 69 64 65 72 20 69 6e 0d 0a 20 20 20 20 20 20  vider in..      
22670 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
22680 20 20 20 74 68 65 20 6d 61 63 68 69 6e 65 20 63     the machine c
22690 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c  onfiguration fil
226a0 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e  e, it must be in
226b0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
226c0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 67        //       g
226d0 6c 6f 62 61 6c 20 61 73 73 65 6d 62 6c 79 20 63  lobal assembly c
226e0 61 63 68 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  ache...         
226f0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
22700 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
22710 6e 20 49 73 45 66 36 41 73 73 65 6d 62 6c 79 47  n IsEf6AssemblyG
22720 6c 6f 62 61 6c 28 29 3b 0d 0a 20 20 20 20 20 20  lobal();..      
22730 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
22740 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
22750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 45 51            /* REQ
227a0 55 49 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20  UIRED */..      
227b0 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73        public Ass
227c0 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 43 6f 72  emblyName GetCor
227d0 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a  eAssemblyName(..
227e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227f0 62 6f 6f 6c 20 74 72 61 63 65 20 2f 2a 20 4e 4f  bool trace /* NO
22800 54 20 55 53 45 44 20 2a 2f 0d 0a 20 20 20 20 20  T USED */..     
22810 20 20 20 20 20 20 20 20 20 20 20 29 20 2f 2a 20             ) /* 
22820 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
22830 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22840 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 72           if (cor
22850 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d  eAssemblyName ==
22860 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
22870 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
22890 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  oreAssemblyName 
228a0 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47  = AssemblyName.G
228b0 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d  etAssemblyName(.
228c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
228d0 20 20 20 20 20 20 20 20 20 43 6f 72 65 46 69 6c           CoreFil
228e0 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77  eName); /* throw
228f0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
22900 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22910 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
22920 20 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d   coreAssemblyNam
22930 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
22940 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22950 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22990 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
229a0 20 20 20 20 2f 2a 20 4f 50 54 49 4f 4e 41 4c 20      /* OPTIONAL 
229b0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
229c0 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e  public AssemblyN
229d0 61 6d 65 20 47 65 74 4c 69 6e 71 41 73 73 65 6d  ame GetLinqAssem
229e0 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  blyName(..      
229f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
22a00 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
22a10 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72 6f 77        ) /* throw
22a20 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
22a30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22a40 20 20 20 20 69 66 20 28 49 73 4c 69 6e 71 53 75      if (IsLinqSu
22a50 70 70 6f 72 74 65 64 28 74 72 61 63 65 29 20 26  pported(trace) &
22a60 26 20 28 6c 69 6e 71 41 73 73 65 6d 62 6c 79 4e  & (linqAssemblyN
22a70 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ame == null)).. 
22a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
22a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22aa0 20 20 20 20 20 20 6c 69 6e 71 41 73 73 65 6d 62        linqAssemb
22ab0 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c  lyName = Assembl
22ac0 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c  yName.GetAssembl
22ad0 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
22ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22af0 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 20 2f  LinqFileName); /
22b00 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
22b10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
22b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22b30 20 72 65 74 75 72 6e 20 6c 69 6e 71 41 73 73 65   return linqAsse
22b40 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  mblyName;..     
22b50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
22b60 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
22b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
22bb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 50             /* OP
22bc0 54 49 4f 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20 20  TIONAL */..     
22bd0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73         public As
22be0 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 45 66  semblyName GetEf
22bf0 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a  6AssemblyName(..
22c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c10 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20 20  bool trace..    
22c20 20 20 20 20 20 20 20 20 20 20 20 20 29 20 2f 2a              ) /*
22c30 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
22c40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22c50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 49 73            if (Is
22c60 45 66 36 53 75 70 70 6f 72 74 65 64 28 74 72 61  Ef6Supported(tra
22c70 63 65 29 20 26 26 20 28 65 66 36 41 73 73 65 6d  ce) && (ef6Assem
22c80 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29  blyName == null)
22c90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
22ca0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22cb0 20 20 20 20 20 20 20 20 20 20 65 66 36 41 73 73            ef6Ass
22cc0 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65  emblyName = Asse
22cd0 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65  mblyName.GetAsse
22ce0 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  mblyName(..     
22cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d00 20 20 20 45 66 36 46 69 6c 65 4e 61 6d 65 29 3b     Ef6FileName);
22d10 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
22d30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22d40 20 20 20 72 65 74 75 72 6e 20 65 66 36 41 73 73     return ef6Ass
22d50 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
22d60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22d70 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
22d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22dc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
22dd0 45 51 55 49 52 45 44 20 2a 2f 0d 0a 20 20 20 20  EQUIRED */..    
22de0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
22df0 73 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 44  ssemblyName GetD
22e00 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e  esignerAssemblyN
22e10 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
22e20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65        bool trace
22e30 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d   /* NOT USED */.
22e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22e50 20 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a   ) /* throw */..
22e60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
22e80 66 20 28 64 65 73 69 67 6e 65 72 41 73 73 65 6d  f (designerAssem
22e90 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29  blyName == null)
22ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22eb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22ec0 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e 65           designe
22ed0 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20  rAssemblyName = 
22ee0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74  AssemblyName.Get
22ef0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20  AssemblyName(.. 
22f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f10 20 20 20 20 20 20 20 44 65 73 69 67 6e 65 72 46         DesignerF
22f20 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72  ileName); /* thr
22f30 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
22f40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
22f50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
22f60 72 6e 20 64 65 73 69 67 6e 65 72 41 73 73 65 6d  rn designerAssem
22f70 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  blyName;..      
22f80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
22f90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
22fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22fe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 45 51            /* REQ
22ff0 55 49 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20  UIRED */..      
23000 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73        public Ass
23010 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 50 72 6f  emblyName GetPro
23020 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  viderAssemblyNam
23030 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
23040 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a      bool trace..
23050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23060 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
23070 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
23090 74 75 72 6e 20 55 73 65 45 66 36 50 72 6f 76 69  turn UseEf6Provi
230a0 64 65 72 28 74 72 61 63 65 29 20 3f 0d 0a 20 20  der(trace) ?..  
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230c0 20 20 47 65 74 45 66 36 41 73 73 65 6d 62 6c 79    GetEf6Assembly
230d0 4e 61 6d 65 28 74 72 61 63 65 29 20 3a 20 47 65  Name(trace) : Ge
230e0 74 43 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d  tCoreAssemblyNam
230f0 65 28 74 72 61 63 65 29 3b 0d 0a 20 20 20 20 20  e(trace);..     
23100 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23110 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
23120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
23160 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
23170 63 20 73 74 72 69 6e 67 20 47 65 74 43 6f 6e 66  c string GetConf
23180 69 67 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28  igInvariantName(
23190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
231a0 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20    bool trace..  
231b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
231c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
231d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231e0 72 65 74 75 72 6e 20 47 65 74 49 6e 76 61 72 69  return GetInvari
231f0 61 6e 74 4e 61 6d 65 28 74 72 61 63 65 29 3b 0d  antName(trace);.
23200 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
23210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
23220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23260 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
23270 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47   public string G
23280 65 74 50 72 6f 76 69 64 65 72 49 6e 76 61 72 69  etProviderInvari
23290 61 6e 74 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  antName(..      
232a0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
232b0 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
232c0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
232d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
232e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
232f0 65 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28  etInvariantName(
23300 74 72 61 63 65 29 3b 0d 0a 20 20 20 20 20 20 20  trace);..       
23310 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23320 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23360 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
23370 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
23380 73 74 72 69 6e 67 20 47 65 74 46 61 63 74 6f 72  string GetFactor
23390 79 54 79 70 65 4e 61 6d 65 28 0d 0a 20 20 20 20  yTypeName(..    
233a0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
233b0 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20   trace..        
233c0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
233d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
233e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
233f0 20 55 73 65 45 66 36 50 72 6f 76 69 64 65 72 28   UseEf6Provider(
23400 74 72 61 63 65 29 20 3f 0d 0a 20 20 20 20 20 20  trace) ?..      
23410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 66                Ef
23420 36 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65  6FactoryTypeName
23430 20 3a 20 46 61 63 74 6f 72 79 54 79 70 65 4e 61   : FactoryTypeNa
23440 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
23450 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
23460 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
23470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
234b0 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
234c0 20 44 75 6d 70 28 0d 0a 20 20 20 20 20 20 20 20   Dump(..        
234d0 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
234e0 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62  lback traceCallb
234f0 61 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ack..           
23500 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
23510 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23520 20 20 20 20 20 20 20 69 66 20 28 74 72 61 63 65         if (trace
23530 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c  Callback != null
23540 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
23550 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23560 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
23570 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
23580 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
23590 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
235a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235b0 20 20 20 22 41 73 73 65 6d 62 6c 79 22 2c 20 46     "Assembly", F
235c0 6f 72 44 69 73 70 6c 61 79 28 61 73 73 65 6d 62  orDisplay(assemb
235d0 6c 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ly)),..         
235e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
235f0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
23600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23610 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
23620 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
23630 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
23640 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
23650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23660 4c 6f 67 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f  LogFileName", Fo
23670 72 44 69 73 70 6c 61 79 28 6c 6f 67 46 69 6c 65  rDisplay(logFile
23680 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
23690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236a0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
236b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
236c0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
236d0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
236e0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
236f0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
23700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23710 20 22 44 69 72 65 63 74 6f 72 79 22 2c 20 46 6f   "Directory", Fo
23720 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f  rDisplay(directo
23730 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ry)),..         
23740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
23750 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
23760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23770 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
23780 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
23790 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
237a0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
237b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
237c0 43 6f 72 65 46 69 6c 65 4e 61 6d 65 22 2c 20 46  CoreFileName", F
237d0 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65 46 69  orDisplay(coreFi
237e0 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
237f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23800 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
23810 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23820 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
23830 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
23840 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
23850 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
23860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23870 20 20 20 22 4c 69 6e 71 46 69 6c 65 4e 61 6d 65     "LinqFileName
23880 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 69  ", ForDisplay(li
23890 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  nqFileName)),.. 
238a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238b0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
238c0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
238d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
238e0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
238f0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
23900 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
23910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23920 20 20 20 20 20 20 20 22 45 66 36 46 69 6c 65 4e         "Ef6FileN
23930 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
23940 28 65 66 36 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  (ef6FileName)),.
23950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23960 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
23970 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
23980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23990 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
239a0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
239b0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
239c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
239d0 20 20 20 20 20 20 20 20 20 22 44 65 73 69 67 6e           "Design
239e0 65 72 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72  erFileName", For
239f0 44 69 73 70 6c 61 79 28 64 65 73 69 67 6e 65 72  Display(designer
23a00 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
23a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
23a30 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
23a40 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
23a50 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
23a60 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
23a70 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
23a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a90 20 20 20 20 20 22 52 65 67 69 73 74 72 79 56 65       "RegistryVe
23aa0 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c  rsion", ForDispl
23ab0 61 79 28 72 65 67 69 73 74 72 79 56 65 72 73 69  ay(registryVersi
23ac0 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
23ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
23ae0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
23af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23b00 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
23b10 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
23b20 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
23b30 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
23b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23b50 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22 2c 20  ConfigVersion", 
23b60 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
23b70 67 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20  gVersion)),..   
23b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b90 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
23ba0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
23bb0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
23bc0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
23bd0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
23be0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
23bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c00 20 20 20 20 20 22 56 73 56 65 72 73 69 6f 6e 53       "VsVersionS
23c10 75 66 66 69 78 22 2c 20 46 6f 72 44 69 73 70 6c  uffix", ForDispl
23c20 61 79 28 76 73 56 65 72 73 69 6f 6e 53 75 66 66  ay(vsVersionSuff
23c30 69 78 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ix)),..         
23c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
23c50 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
23c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23c70 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
23c80 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
23c90 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
23ca0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
23cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23cc0 44 65 62 75 67 46 6f 72 6d 61 74 22 2c 20 46 6f  DebugFormat", Fo
23cd0 72 44 69 73 70 6c 61 79 28 64 65 62 75 67 46 6f  rDisplay(debugFo
23ce0 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  rmat)),..       
23cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d00 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
23d10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23d20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
23d30 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
23d40 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
23d50 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
23d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d70 20 22 54 72 61 63 65 46 6f 72 6d 61 74 22 2c 20   "TraceFormat", 
23d80 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61 63 65  ForDisplay(trace
23d90 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20  Format)),..     
23da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23db0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
23dc0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23dd0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
23de0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
23df0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
23e00 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
23e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e20 20 20 20 22 49 6e 73 74 61 6c 6c 46 6c 61 67 73     "InstallFlags
23e30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 69 6e  ", ForDisplay(in
23e40 73 74 61 6c 6c 46 6c 61 67 73 29 29 2c 0d 0a 20  stallFlags)),.. 
23e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e60 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
23e70 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
23e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
23e90 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
23ea0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
23eb0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
23ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ed0 20 20 20 20 20 20 20 22 50 72 6f 76 69 64 65 72         "Provider
23ee0 46 6c 61 67 73 22 2c 20 46 6f 72 44 69 73 70 6c  Flags", ForDispl
23ef0 61 79 28 70 72 6f 76 69 64 65 72 46 6c 61 67 73  ay(providerFlags
23f00 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
23f10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
23f20 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
23f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f40 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
23f50 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
23f60 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
23f70 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
23f80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
23f90 62 75 67 50 72 69 6f 72 69 74 79 22 2c 20 46 6f  bugPriority", Fo
23fa0 72 44 69 73 70 6c 61 79 28 64 65 62 75 67 50 72  rDisplay(debugPr
23fb0 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20 20 20  iority)),..     
23fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fd0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
23fe0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23ff0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24000 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
24010 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
24020 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
24030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24040 20 20 20 22 54 72 61 63 65 50 72 69 6f 72 69 74     "TracePriorit
24050 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  y", ForDisplay(t
24060 72 61 63 65 50 72 69 6f 72 69 74 79 29 29 2c 0d  racePriority)),.
24070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24080 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
24090 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
240a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240b0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
240c0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
240d0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
240e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
240f0 20 20 20 20 20 20 20 20 20 22 50 65 72 55 73 65           "PerUse
24100 72 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 70  r", ForDisplay(p
24110 65 72 55 73 65 72 29 29 2c 0d 0a 20 20 20 20 20  erUser)),..     
24120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24130 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
24140 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24150 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24160 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
24170 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
24180 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
24190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241a0 20 20 20 22 49 6e 73 74 61 6c 6c 22 2c 20 46 6f     "Install", Fo
241b0 72 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c  rDisplay(install
241c0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
241e0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
241f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24200 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
24210 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
24220 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
24230 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 22 57 6f               "Wo
24250 77 36 34 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  w64", ForDisplay
24260 28 77 6f 77 36 34 29 29 2c 0d 0a 20 20 20 20 20  (wow64)),..     
24270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24280 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
24290 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
242a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
242b0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
242c0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
242d0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
242e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242f0 20 20 20 22 4e 6f 52 75 6e 74 69 6d 65 56 65 72     "NoRuntimeVer
24300 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61  sion", ForDispla
24310 79 28 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  y(noRuntimeVersi
24320 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
24330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24340 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
24350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24360 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
24370 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
24380 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
24390 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
243a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
243b0 4e 6f 44 65 73 6b 74 6f 70 22 2c 20 46 6f 72 44  NoDesktop", ForD
243c0 69 73 70 6c 61 79 28 6e 6f 44 65 73 6b 74 6f 70  isplay(noDesktop
243d0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
243e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
243f0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
24400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24410 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
24420 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
24430 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
24440 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
24460 43 6f 6d 70 61 63 74 22 2c 20 46 6f 72 44 69 73  Compact", ForDis
24470 70 6c 61 79 28 6e 6f 43 6f 6d 70 61 63 74 29 29  play(noCompact))
24480 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24490 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
244a0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
244b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244c0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
244d0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
244e0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
244f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24500 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65             "NoNe
24510 74 46 78 32 30 22 2c 20 46 6f 72 44 69 73 70 6c  tFx20", ForDispl
24520 61 79 28 6e 6f 4e 65 74 46 78 32 30 29 29 2c 0d  ay(noNetFx20)),.
24530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24540 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
24550 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
24560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24570 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
24580 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
24590 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
245a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
245b0 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46           "NoNetF
245c0 78 33 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  x35", ForDisplay
245d0 28 6e 6f 4e 65 74 46 78 33 35 29 29 2c 0d 0a 20  (noNetFx35)),.. 
245e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245f0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
24600 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
24610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24620 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
24630 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
24640 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
24650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24660 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34         "NoNetFx4
24670 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  0", ForDisplay(n
24680 6f 4e 65 74 46 78 34 30 29 29 2c 0d 0a 20 20 20  oNetFx40)),..   
24690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246a0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
246b0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
246c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
246d0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
246e0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
246f0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
24700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24710 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 35 22       "NoNetFx45"
24720 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
24730 65 74 46 78 34 35 29 29 2c 0d 0a 20 20 20 20 20  etFx45)),..     
24740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24750 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
24760 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24770 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24780 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
24790 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
247a0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
247b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247c0 20 20 20 22 4e 6f 4e 65 74 46 78 34 35 31 22 2c     "NoNetFx451",
247d0 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65   ForDisplay(noNe
247e0 74 46 78 34 35 31 29 29 2c 0d 0a 20 20 20 20 20  tFx451)),..     
247f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24800 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
24810 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24820 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24830 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
24840 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
24850 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
24860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24870 20 20 20 22 4e 6f 4e 65 74 46 78 34 35 32 22 2c     "NoNetFx452",
24880 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65   ForDisplay(noNe
24890 74 46 78 34 35 32 29 29 2c 0d 0a 20 20 20 20 20  tFx452)),..     
248a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248b0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
248c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
248d0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
248e0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
248f0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
24900 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
24910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24920 20 20 20 22 4e 6f 4e 65 74 46 78 34 36 22 2c 20     "NoNetFx46", 
24930 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
24940 46 78 34 36 29 29 2c 0d 0a 20 20 20 20 20 20 20  Fx46)),..       
24950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24960 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
24970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24980 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
24990 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
249a0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
249b0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
249c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249d0 20 22 4e 6f 4e 65 74 46 78 34 36 31 22 2c 20 46   "NoNetFx461", F
249e0 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46  orDisplay(noNetF
249f0 78 34 36 31 29 29 2c 0d 0a 20 20 20 20 20 20 20  x461)),..       
24a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a10 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
24a20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24a30 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
24a40 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
24a50 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
24a60 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
24a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a80 20 22 4e 6f 56 73 32 30 30 35 22 2c 20 46 6f 72   "NoVs2005", For
24a90 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 35  Display(noVs2005
24aa0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
24ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
24ac0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ae0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
24af0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
24b00 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
24b10 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
24b20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
24b30 56 73 32 30 30 38 22 2c 20 46 6f 72 44 69 73 70  Vs2008", ForDisp
24b40 6c 61 79 28 6e 6f 56 73 32 30 30 38 29 29 2c 0d  lay(noVs2008)),.
24b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24b60 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
24b70 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b90 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
24ba0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
24bb0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
24bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24bd0 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30           "NoVs20
24be0 31 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  10", ForDisplay(
24bf0 6e 6f 56 73 32 30 31 30 29 29 2c 0d 0a 20 20 20  noVs2010)),..   
24c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c10 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
24c20 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
24c30 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
24c40 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
24c50 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
24c60 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
24c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c80 20 20 20 20 20 22 4e 6f 56 73 32 30 31 32 22 2c       "NoVs2012",
24c90 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73   ForDisplay(noVs
24ca0 32 30 31 32 29 29 2c 0d 0a 20 20 20 20 20 20 20  2012)),..       
24cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cc0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
24cd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24ce0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
24cf0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
24d00 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
24d10 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
24d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d30 20 22 4e 6f 56 73 32 30 31 33 22 2c 20 46 6f 72   "NoVs2013", For
24d40 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 33  Display(noVs2013
24d50 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
24d60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
24d70 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
24d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d90 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
24da0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
24db0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
24dc0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
24dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
24de0 56 73 32 30 31 35 22 2c 20 46 6f 72 44 69 73 70  Vs2015", ForDisp
24df0 6c 61 79 28 6e 6f 56 73 32 30 31 35 29 29 2c 0d  lay(noVs2015)),.
24e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24e10 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
24e20 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
24e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e40 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
24e50 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
24e60 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
24e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24e80 20 20 20 20 20 20 20 20 20 22 4e 6f 54 72 61 63           "NoTrac
24e90 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  e", ForDisplay(n
24ea0 6f 54 72 61 63 65 29 29 2c 0d 0a 20 20 20 20 20  oTrace)),..     
24eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ec0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
24ed0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24ee0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24ef0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
24f00 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
24f10 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
24f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f30 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22 2c 20     "NoConsole", 
24f40 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6e  ForDisplay(noCon
24f50 73 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  sole)),..       
24f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f70 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
24f80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24f90 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
24fa0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
24fb0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
24fc0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
24fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fe0 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44 69 73   "NoLog", ForDis
24ff0 70 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d 0a 20  play(noLog)),.. 
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25010 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
25020 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
25030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
25040 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
25050 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
25060 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
25070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25080 20 20 20 20 20 20 20 22 54 68 72 6f 77 4f 6e 4d         "ThrowOnM
25090 69 73 73 69 6e 67 22 2c 20 46 6f 72 44 69 73 70  issing", ForDisp
250a0 6c 61 79 28 74 68 72 6f 77 4f 6e 4d 69 73 73 69  lay(throwOnMissi
250b0 6e 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ng)),..         
250c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
250d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
250e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
250f0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
25100 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
25110 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
25120 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
25130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
25140 57 68 61 74 49 66 22 2c 20 46 6f 72 44 69 73 70  WhatIf", ForDisp
25150 6c 61 79 28 77 68 61 74 49 66 29 29 2c 0d 0a 20  lay(whatIf)),.. 
25160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25170 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
25180 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
25190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
251a0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
251b0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
251c0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
251d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251e0 20 20 20 20 20 20 20 22 44 65 62 75 67 22 2c 20         "Debug", 
251f0 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75 67  ForDisplay(debug
25200 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
25210 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
25220 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25240 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
25250 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
25260 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
25270 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
25280 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56 65               "Ve
25290 72 62 6f 73 65 22 2c 20 46 6f 72 44 69 73 70 6c  rbose", ForDispl
252a0 61 79 28 76 65 72 62 6f 73 65 29 29 2c 0d 0a 20  ay(verbose)),.. 
252b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
252d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
252e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
252f0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
25300 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
25310 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
25320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25330 20 20 20 20 20 20 20 22 43 6f 6e 66 69 72 6d 22         "Confirm"
25340 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e  , ForDisplay(con
25350 66 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20 20 20  firm)),..       
25360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25370 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
25380 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25390 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
253a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253d0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
253e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
253f0 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29  ssembly != null)
25400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25410 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25430 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
25440 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
25450 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
25460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
25480 73 73 65 6d 62 6c 79 54 69 74 6c 65 22 2c 0d 0a  ssemblyTitle",..
25490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254a0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
254b0 69 73 70 6c 61 79 28 47 65 74 41 73 73 65 6d 62  isplay(GetAssemb
254c0 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62 6c 79  lyTitle(assembly
254d0 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ))),..          
254e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254f0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
25500 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25510 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
25520 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
25530 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
25540 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
25550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25560 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d            "Assem
25570 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
25580 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
25590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255a0 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74 41 73  ForDisplay(GetAs
255b0 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74  semblyConfigurat
255c0 69 6f 6e 28 61 73 73 65 6d 62 6c 79 29 29 29 2c  ion(assembly))),
255d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
255e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
255f0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
25600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25610 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
25620 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
25630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25660 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
25670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
25680 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
25690 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
256a0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
256b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256c0 20 20 20 20 20 20 20 20 22 49 73 53 79 73 74 65          "IsSyste
256d0 6d 45 66 36 41 73 73 65 6d 62 6c 79 41 76 61 69  mEf6AssemblyAvai
256e0 6c 61 62 6c 65 22 2c 20 46 6f 72 44 69 73 70 6c  lable", ForDispl
256f0 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
25700 20 20 20 20 20 20 20 20 20 20 20 20 20 49 73 53               IsS
25710 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79  ystemEf6Assembly
25720 41 76 61 69 6c 61 62 6c 65 28 66 61 6c 73 65 29  Available(false)
25730 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
25740 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
25750 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
25760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25770 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
25780 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
25790 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
257a0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
257b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 73               "Is
257c0 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c  SystemEf6Assembl
257d0 79 47 6c 6f 62 61 6c 22 2c 20 46 6f 72 44 69 73  yGlobal", ForDis
257e0 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
257f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
25800 73 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62  sSystemEf6Assemb
25810 6c 79 47 6c 6f 62 61 6c 28 29 29 29 2c 0d 0a 20  lyGlobal())),.. 
25820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25830 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
25840 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
25850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
25860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25890 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
258a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
258c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
258d0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
258e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
258f0 20 20 20 20 20 20 20 20 20 20 22 49 73 4c 69 6e            "IsLin
25900 71 53 75 70 70 6f 72 74 65 64 22 2c 20 46 6f 72  qSupported", For
25910 44 69 73 70 6c 61 79 28 49 73 4c 69 6e 71 53 75  Display(IsLinqSu
25920 70 70 6f 72 74 65 64 28 66 61 6c 73 65 29 29 29  pported(false)))
25930 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25940 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
25950 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
25960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25970 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
25980 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
25990 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
259a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
259b0 20 20 20 20 20 20 20 20 20 20 20 22 49 73 45 66             "IsEf
259c0 36 53 75 70 70 6f 72 74 65 64 22 2c 20 46 6f 72  6Supported", For
259d0 44 69 73 70 6c 61 79 28 49 73 45 66 36 53 75 70  Display(IsEf6Sup
259e0 70 6f 72 74 65 64 28 66 61 6c 73 65 29 29 29 2c  ported(false))),
259f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25a00 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
25a10 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
25a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a30 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
25a40 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
25a50 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
25a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25a70 20 20 20 20 20 20 20 20 20 20 22 49 73 45 66 36            "IsEf6
25a80 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 22 2c  AssemblyGlobal",
25a90 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20   ForDisplay(..  
25aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ab0 20 20 20 20 20 20 49 73 45 66 36 41 73 73 65 6d        IsEf6Assem
25ac0 62 6c 79 47 6c 6f 62 61 6c 28 29 29 29 2c 0d 0a  blyGlobal())),..
25ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ae0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
25af0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
25b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
25b10 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
25b20 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
25b30 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
25b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b50 20 20 20 20 20 20 20 20 22 55 73 65 45 66 36 50          "UseEf6P
25b60 72 6f 76 69 64 65 72 22 2c 20 46 6f 72 44 69 73  rovider", ForDis
25b70 70 6c 61 79 28 55 73 65 45 66 36 50 72 6f 76 69  play(UseEf6Provi
25b80 64 65 72 28 66 61 6c 73 65 29 29 29 2c 0d 0a 20  der(false))),.. 
25b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ba0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
25bb0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
25bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
25bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
25c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
25c30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c50 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
25c60 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
25c70 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
25c80 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
25c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ca0 20 20 22 47 65 74 43 6f 72 65 41 73 73 65 6d 62    "GetCoreAssemb
25cb0 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  lyName", ForDisp
25cc0 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lay(..          
25cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ce0 20 20 47 65 74 43 6f 72 65 41 73 73 65 6d 62 6c    GetCoreAssembl
25cf0 79 4e 61 6d 65 28 66 61 6c 73 65 29 29 29 2c 20  yName(false))), 
25d00 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
25d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25d20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
25d30 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
25d40 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
25d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25d60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d80 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
25d90 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
25da0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
25db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
25dd0 74 43 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d  tCoreAssemblyNam
25de0 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65  e", ForDisplay(e
25df0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
25e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e10 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
25e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25e30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
25e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
25e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ea0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
25eb0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ed0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
25ee0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
25ef0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
25f00 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
25f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f20 20 20 20 22 47 65 74 4c 69 6e 71 41 73 73 65 6d     "GetLinqAssem
25f30 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  blyName", ForDis
25f40 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
25f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f60 20 20 20 47 65 74 4c 69 6e 71 41 73 73 65 6d 62     GetLinqAssemb
25f70 6c 79 4e 61 6d 65 28 66 61 6c 73 65 29 29 29 2c  lyName(false))),
25f80 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
25f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25fa0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
25fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
25fc0 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
25fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25fe0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26000 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
26010 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
26020 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
26030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
26050 65 74 4c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61  etLinqAssemblyNa
26060 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
26070 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
26080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26090 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
260a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
260b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
260c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
26110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26120 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
26130 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
26140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26150 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
26160 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
26170 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
26180 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261a0 20 20 20 20 22 47 65 74 45 66 36 41 73 73 65 6d      "GetEf6Assem
261b0 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  blyName", ForDis
261c0 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
261d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261e0 20 20 20 47 65 74 45 66 36 41 73 73 65 6d 62 6c     GetEf6Assembl
261f0 79 4e 61 6d 65 28 66 61 6c 73 65 29 29 29 2c 20  yName(false))), 
26200 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
26210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26220 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
26230 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
26240 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
26250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26260 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26280 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
26290 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
262a0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
262b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
262c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
262d0 74 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65  tEf6AssemblyName
262e0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65 29  ", ForDisplay(e)
262f0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
26300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26310 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
26320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26330 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
26350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26380 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
26390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263a0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
263b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
263c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263d0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
263e0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
263f0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
26400 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
26410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26420 20 20 22 47 65 74 44 65 73 69 67 6e 65 72 41 73    "GetDesignerAs
26430 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72  semblyName", For
26440 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
26450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26460 20 20 20 20 20 20 47 65 74 44 65 73 69 67 6e 65        GetDesigne
26470 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 66 61  rAssemblyName(fa
26480 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43 61 74  lse))), traceCat
26490 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
264a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
264b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264c0 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
264d0 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
264e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
264f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26500 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
26510 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
26520 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
26530 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
26540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26550 20 20 20 20 20 22 47 65 74 44 65 73 69 67 6e 65       "GetDesigne
26560 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20  rAssemblyName", 
26570 46 6f 72 44 69 73 70 6c 61 79 28 65 29 29 2c 0d  ForDisplay(e)),.
26580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26590 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
265a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
265b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
265d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
265e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
265f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26610 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
26630 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
26640 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
26650 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
26660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26670 20 20 20 20 20 20 20 22 47 65 74 49 6e 76 61 72         "GetInvar
26680 69 61 6e 74 4e 61 6d 65 22 2c 20 46 6f 72 44 69  iantName", ForDi
26690 73 70 6c 61 79 28 47 65 74 49 6e 76 61 72 69 61  splay(GetInvaria
266a0 6e 74 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  ntName(..       
266b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266c0 20 66 61 6c 73 65 29 29 29 2c 20 74 72 61 63 65   false))), trace
266d0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
266e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266f0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
26700 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
26710 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
26720 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26730 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 43             "GetC
26740 6f 6e 66 69 67 49 6e 76 61 72 69 61 6e 74 4e 61  onfigInvariantNa
26750 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
26760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26770 20 20 20 20 20 20 20 20 20 20 47 65 74 43 6f 6e            GetCon
26780 66 69 67 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  figInvariantName
26790 28 66 61 6c 73 65 29 29 29 2c 20 74 72 61 63 65  (false))), trace
267a0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
267b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267c0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
267d0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
267e0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
267f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26800 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 50             "GetP
26810 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74  roviderInvariant
26820 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
26830 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
26840 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 50              GetP
26850 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74  roviderInvariant
26860 4e 61 6d 65 28 66 61 6c 73 65 29 29 29 2c 20 74  Name(false))), t
26870 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
26880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26890 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
268a0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
268b0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
268c0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
268d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
268e0 47 65 74 46 61 63 74 6f 72 79 54 79 70 65 4e 61  GetFactoryTypeNa
268f0 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
26900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26910 20 20 20 20 20 20 20 20 20 20 47 65 74 46 61 63            GetFac
26920 74 6f 72 79 54 79 70 65 4e 61 6d 65 28 66 61 6c  toryTypeName(fal
26930 73 65 29 29 29 2c 20 74 72 61 63 65 43 61 74 65  se))), traceCate
26940 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
26950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
26960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26990 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
269a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269b0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
269c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
269d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269e0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
269f0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
26a00 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
26a10 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
26a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a30 20 20 22 47 65 74 50 72 6f 76 69 64 65 72 41 73    "GetProviderAs
26a40 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72  semblyName", For
26a50 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
26a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a70 20 20 20 20 20 20 47 65 74 50 72 6f 76 69 64 65        GetProvide
26a80 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 66 61  rAssemblyName(fa
26a90 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43 61 74  lse))), traceCat
26aa0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
26ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
26ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ad0 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
26ae0 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
26af0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
26b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b10 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
26b20 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
26b30 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
26b40 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
26b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b60 20 20 20 20 20 22 47 65 74 50 72 6f 76 69 64 65       "GetProvide
26b70 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20  rAssemblyName", 
26b80 46 6f 72 44 69 73 70 6c 61 79 28 65 29 29 2c 0d  ForDisplay(e)),.
26b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
26bb0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
26bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bd0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
26be0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
26bf0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
26c00 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
26c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
26c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26c70 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50  #region Public P
26c80 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20  roperties..     
26c90 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 41         private A
26ca0 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
26cb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
26cc0 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 20 41  ublic Assembly A
26cd0 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20  ssembly..       
26ce0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26cf0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
26d00 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 3b 20 7d  turn assembly; }
26d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26d20 20 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c 79    set { assembly
26d30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
26d40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
26d50 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
26d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
26da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
26db0 76 61 74 65 20 73 74 72 69 6e 67 20 6c 6f 67 46  vate string logF
26dc0 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
26dd0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
26de0 69 6e 67 20 4c 6f 67 46 69 6c 65 4e 61 6d 65 0d  ing LogFileName.
26df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
26e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e10 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 6f 67  get { return log
26e20 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  FileName; }..   
26e30 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
26e40 20 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d   { logFileName =
26e50 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
26e60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
26e70 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
26e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
26ec0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
26ed0 74 65 20 73 74 72 69 6e 67 20 64 69 72 65 63 74  te string direct
26ee0 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ory;..          
26ef0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
26f00 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  Directory..     
26f10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26f20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
26f30 72 65 74 75 72 6e 20 64 69 72 65 63 74 6f 72 79  return directory
26f40 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
26f50 20 20 20 20 20 73 65 74 20 7b 20 64 69 72 65 63       set { direc
26f60 74 6f 72 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  tory = value; }.
26f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
26f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
26f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26fd0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
26fe0 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
26ff0 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  coreFileName;.. 
27000 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
27010 63 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c  c string CoreFil
27020 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
27030 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27040 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
27050 72 6e 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b  rn coreFileName;
27060 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
27070 20 20 20 20 73 65 74 20 7b 20 63 6f 72 65 46 69      set { coreFi
27080 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20  leName = value; 
27090 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
270a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
270b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
270c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
270d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
270e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
270f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
27100 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
27110 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d  g linqFileName;.
27120 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
27130 6c 69 63 20 73 74 72 69 6e 67 20 4c 69 6e 71 46  lic string LinqF
27140 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..       
27150 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27160 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
27170 74 75 72 6e 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  turn linqFileNam
27180 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
27190 20 20 20 20 20 20 73 65 74 20 7b 20 6c 69 6e 71        set { linq
271a0 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65  FileName = value
271b0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
271c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
271d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
271e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
271f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27210 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
27220 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
27230 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 3b  ing ef6FileName;
27240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
27250 62 6c 69 63 20 73 74 72 69 6e 67 20 45 66 36 46  blic string Ef6F
27260 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..       
27270 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27280 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
27290 74 75 72 6e 20 65 66 36 46 69 6c 65 4e 61 6d 65  turn ef6FileName
272a0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
272b0 20 20 20 20 20 73 65 74 20 7b 20 65 66 36 46 69       set { ef6Fi
272c0 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20  leName = value; 
272d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
272e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
272f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27330 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
27340 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
27350 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
27360 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
27370 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44   public string D
27380 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d  esignerFileName.
27390 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
273a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273b0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65 73  get { return des
273c0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 20 7d  ignerFileName; }
273d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
273e0 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65 72    set { designer
273f0 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65  FileName = value
27400 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
27410 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27420 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
27430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27460 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
27470 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
27480 69 6e 67 20 72 65 67 69 73 74 72 79 56 65 72 73  ing registryVers
27490 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
274a0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
274b0 52 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 0d  RegistryVersion.
274c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
274d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274e0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 65 67  get { return reg
274f0 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 20 7d 0d  istryVersion; }.
27500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27510 20 73 65 74 20 7b 20 72 65 67 69 73 74 72 79 56   set { registryV
27520 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20  ersion = value; 
27530 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
27540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27590 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
275a0 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
275b0 67 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b  g configVersion;
275c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
275d0 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 6e 66  blic string Conf
275e0 69 67 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20  igVersion..     
275f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27600 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
27610 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 56 65 72  return configVer
27620 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20  sion; }..       
27630 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 63           set { c
27640 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 76  onfigVersion = v
27650 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
27660 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27670 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
27680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
276c0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
276d0 20 73 74 72 69 6e 67 20 76 73 56 65 72 73 69 6f   string vsVersio
276e0 6e 53 75 66 66 69 78 3b 0d 0a 20 20 20 20 20 20  nSuffix;..      
276f0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
27700 69 6e 67 20 56 73 56 65 72 73 69 6f 6e 53 75 66  ing VsVersionSuf
27710 66 69 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fix..           
27720 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27730 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
27740 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78   vsVersionSuffix
27750 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
27760 20 20 20 20 20 73 65 74 20 7b 20 76 73 56 65 72       set { vsVer
27770 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 76 61 6c  sionSuffix = val
27780 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
27790 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
277a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
277b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277e0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
277f0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
27800 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d 61  tring debugForma
27810 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
27820 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44 65  public string De
27830 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20  bugFormat..     
27840 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27850 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
27860 72 65 74 75 72 6e 20 64 65 62 75 67 46 6f 72 6d  return debugForm
27870 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  at; }..         
27880 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 62         set { deb
27890 75 67 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65  ugFormat = value
278a0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
278b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
278c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
278d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27900 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
27910 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
27920 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74 3b  ing traceFormat;
27930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
27940 62 6c 69 63 20 73 74 72 69 6e 67 20 54 72 61 63  blic string Trac
27950 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20  eFormat..       
27960 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27970 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
27980 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61 74  turn traceFormat
27990 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
279a0 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63 65       set { trace
279b0 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20  Format = value; 
279c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
279d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
279e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a20 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
27a30 20 20 20 70 72 69 76 61 74 65 20 49 6e 73 74 61     private Insta
27a40 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46  llFlags installF
27a50 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  lags;..         
27a60 20 20 20 70 75 62 6c 69 63 20 49 6e 73 74 61 6c     public Instal
27a70 6c 46 6c 61 67 73 20 49 6e 73 74 61 6c 6c 46 6c  lFlags InstallFl
27a80 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ags..           
27a90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27aa0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
27ab0 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 20 7d   installFlags; }
27ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27ad0 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c 46    set { installF
27ae0 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  lags = value; }.
27af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
27b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
27b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b50 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
27b60 20 70 72 69 76 61 74 65 20 50 72 6f 76 69 64 65   private Provide
27b70 72 46 6c 61 67 73 20 70 72 6f 76 69 64 65 72 46  rFlags providerF
27b80 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  lags;..         
27b90 20 20 20 70 75 62 6c 69 63 20 50 72 6f 76 69 64     public Provid
27ba0 65 72 46 6c 61 67 73 20 50 72 6f 76 69 64 65 72  erFlags Provider
27bb0 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20  Flags..         
27bc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27bd0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
27be0 72 6e 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73  rn providerFlags
27bf0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
27c00 20 20 20 20 20 73 65 74 20 7b 20 70 72 6f 76 69       set { provi
27c10 64 65 72 46 6c 61 67 73 20 3d 20 76 61 6c 75 65  derFlags = value
27c20 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
27c30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27c40 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
27c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c80 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
27c90 20 20 20 20 20 70 72 69 76 61 74 65 20 54 72 61       private Tra
27ca0 63 65 50 72 69 6f 72 69 74 79 20 64 65 62 75 67  cePriority debug
27cb0 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20  Priority;..     
27cc0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 72         public Tr
27cd0 61 63 65 50 72 69 6f 72 69 74 79 20 44 65 62 75  acePriority Debu
27ce0 67 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20  gPriority..     
27cf0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27d00 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
27d10 72 65 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f  return debugPrio
27d20 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rity; }..       
27d30 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64           set { d
27d40 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76  ebugPriority = v
27d50 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
27d60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27d70 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
27d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
27dc0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
27dd0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
27de0 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20  racePriority;.. 
27df0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
27e00 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  c TracePriority 
27e10 54 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20  TracePriority.. 
27e20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
27e40 74 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65  t { return trace
27e50 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20  Priority; }..   
27e60 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
27e70 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74 79   { tracePriority
27e80 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
27e90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
27ea0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
27eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
27ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
27f00 76 61 74 65 20 62 6f 6f 6c 20 70 65 72 55 73 65  vate bool perUse
27f10 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
27f20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72 55  public bool PerU
27f30 73 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ser..           
27f40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27f50 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
27f60 20 70 65 72 55 73 65 72 3b 20 7d 0d 0a 20 20 20   perUser; }..   
27f70 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
27f80 20 7b 20 70 65 72 55 73 65 72 20 3d 20 76 61 6c   { perUser = val
27f90 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
27fa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27fb0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
27fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ff0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28000 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
28010 6f 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20  ool install;..  
28020 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
28030 20 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20   bool Install.. 
28040 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
28060 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61  t { return insta
28070 6c 6c 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ll; }..         
28080 20 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73         set { ins
28090 74 61 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  tall = value; }.
280a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
280b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
280c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28100 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
28110 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 6f   private bool wo
28120 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  w64;..          
28130 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 6f    public bool Wo
28140 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
28150 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28160 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
28170 20 77 6f 77 36 34 3b 20 7d 0d 0a 20 20 20 20 20   wow64; }..     
28180 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
28190 20 77 6f 77 36 34 20 3d 20 76 61 6c 75 65 3b 20   wow64 = value; 
281a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
281b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
281c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28200 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
28210 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
28220 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
28230 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
28240 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 52 75 6e  ublic bool NoRun
28250 74 69 6d 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20  timeVersion..   
28260 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28270 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
28280 7b 20 72 65 74 75 72 6e 20 6e 6f 52 75 6e 74 69  { return noRunti
28290 6d 65 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20  meVersion; }..  
282a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
282b0 74 20 7b 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72  t { noRuntimeVer
282c0 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  sion = value; }.
282d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
282e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
282f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28330 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
28340 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
28350 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20  Desktop;..      
28360 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
28370 6c 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20 20  l NoDesktop..   
28380 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28390 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
283a0 7b 20 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b 74  { return noDeskt
283b0 6f 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  op; }..         
283c0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 44         set { noD
283d0 65 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b 20  esktop = value; 
283e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
283f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28440 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
28450 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
28460 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20  noCompact;..    
28470 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
28480 6f 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20  ool NoCompact.. 
28490 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
284a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
284b0 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6d  t { return noCom
284c0 70 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20  pact; }..       
284d0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
284e0 6f 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75 65  oCompact = value
284f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
28500 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
28510 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28550 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
28560 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
28570 6c 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20  l noNetFx20;..  
28580 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
28590 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30 0d   bool NoNetFx20.
285a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
285b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285c0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e  get { return noN
285d0 65 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20 20  etFx20; }..     
285e0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
285f0 20 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76 61 6c   noNetFx20 = val
28600 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
28610 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28620 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
28630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28660 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28670 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
28680 6f 6f 6c 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a  ool noNetFx35;..
28690 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
286a0 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 33  ic bool NoNetFx3
286b0 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  5..            {
286c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
286d0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
286e0 6f 4e 65 74 46 78 33 35 3b 20 7d 0d 0a 20 20 20  oNetFx35; }..   
286f0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
28700 20 7b 20 6e 6f 4e 65 74 46 78 33 35 20 3d 20 76   { noNetFx35 = v
28710 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
28720 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28730 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
28740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28770 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28780 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
28790 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b   bool noNetFx40;
287a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
287b0 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46  blic bool NoNetF
287c0 78 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x40..           
287d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
287e0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
287f0 20 6e 6f 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20   noNetFx40; }.. 
28800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
28810 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d  et { noNetFx40 =
28820 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
28830 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28840 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
28890 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
288a0 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34  te bool noNetFx4
288b0 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
288c0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65  public bool NoNe
288d0 74 46 78 34 35 0d 0a 20 20 20 20 20 20 20 20 20  tFx45..         
288e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
288f0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
28900 72 6e 20 6e 6f 4e 65 74 46 78 34 35 3b 20 7d 0d  rn noNetFx45; }.
28910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28920 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 35   set { noNetFx45
28930 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
28940 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
28950 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
28960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
289a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
289b0 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46  vate bool noNetF
289c0 78 34 35 31 3b 0d 0a 20 20 20 20 20 20 20 20 20  x451;..         
289d0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
289e0 6f 4e 65 74 46 78 34 35 31 0d 0a 20 20 20 20 20  oNetFx451..     
289f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28a00 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
28a10 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35  return noNetFx45
28a20 31 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  1; }..          
28a30 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65        set { noNe
28a40 74 46 78 34 35 31 20 3d 20 76 61 6c 75 65 3b 20  tFx451 = value; 
28a50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
28a60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ab0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
28ac0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
28ad0 6e 6f 4e 65 74 46 78 34 35 32 3b 0d 0a 20 20 20  noNetFx452;..   
28ae0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
28af0 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 32 0d  bool NoNetFx452.
28b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
28b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e  get { return noN
28b30 65 74 46 78 34 35 32 3b 20 7d 0d 0a 20 20 20 20  etFx452; }..    
28b40 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
28b50 7b 20 6e 6f 4e 65 74 46 78 34 35 32 20 3d 20 76  { noNetFx452 = v
28b60 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
28b70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28b80 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
28b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28bd0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
28be0 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 3b   bool noNetFx46;
28bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
28c00 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46  blic bool NoNetF
28c10 78 34 36 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x46..           
28c20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28c30 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
28c40 20 6e 6f 4e 65 74 46 78 34 36 3b 20 7d 0d 0a 20   noNetFx46; }.. 
28c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
28c60 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 36 20 3d  et { noNetFx46 =
28c70 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
28c80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28c90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
28ce0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
28cf0 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34  te bool noNetFx4
28d00 36 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  61;..           
28d10 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e   public bool NoN
28d20 65 74 46 78 34 36 31 0d 0a 20 20 20 20 20 20 20  etFx461..       
28d30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28d40 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
28d50 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 36 31 3b  turn noNetFx461;
28d60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
28d70 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
28d80 78 34 36 31 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  x461 = value; }.
28d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
28da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28df0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
28e00 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
28e10 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20 20  Vs2005;..       
28e20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
28e30 20 4e 6f 56 73 32 30 30 35 0d 0a 20 20 20 20 20   NoVs2005..     
28e40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28e50 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
28e60 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 35 3b  return noVs2005;
28e70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
28e80 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30      set { noVs20
28e90 30 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  05 = value; }.. 
28ea0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
28eb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
28ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
28f00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
28f10 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73  rivate bool noVs
28f20 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  2008;..         
28f30 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
28f40 6f 56 73 32 30 30 38 0d 0a 20 20 20 20 20 20 20  oVs2008..       
28f50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28f60 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
28f70 74 75 72 6e 20 6e 6f 56 73 32 30 30 38 3b 20 7d  turn noVs2008; }
28f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28f90 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30 38    set { noVs2008
28fa0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
28fb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
28fc0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
28fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
29010 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
29020 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30  vate bool noVs20
29030 31 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10;..           
29040 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56   public bool NoV
29050 73 32 30 31 30 0d 0a 20 20 20 20 20 20 20 20 20  s2010..         
29060 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29070 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
29080 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20 7d 0d 0a  rn noVs2010; }..
29090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290a0 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 30 20 3d  set { noVs2010 =
290b0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
290c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
290d0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
290e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
29120 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
29130 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32  te bool noVs2012
29140 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
29150 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32  ublic bool NoVs2
29160 30 31 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20  012..           
29170 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29180 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
29190 20 6e 6f 56 73 32 30 31 32 3b 20 7d 0d 0a 20 20   noVs2012; }..  
291a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
291b0 74 20 7b 20 6e 6f 56 73 32 30 31 32 20 3d 20 76  t { noVs2012 = v
291c0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
291d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
291e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
291f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29220 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29230 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
29240 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 33 3b 0d   bool noVs2013;.
29250 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
29260 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31  lic bool NoVs201
29270 33 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  3..            {
29280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29290 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
292a0 6f 56 73 32 30 31 33 3b 20 7d 0d 0a 20 20 20 20  oVs2013; }..    
292b0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
292c0 7b 20 6e 6f 56 73 32 30 31 33 20 3d 20 76 61 6c  { noVs2013 = val
292d0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
292e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
292f0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
29300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29330 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
29340 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
29350 6f 6f 6c 20 6e 6f 56 73 32 30 31 35 3b 0d 0a 20  ool noVs2015;.. 
29360 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
29370 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 35 0d  c bool NoVs2015.
29380 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
29390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293a0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56  get { return noV
293b0 73 32 30 31 35 3b 20 7d 0d 0a 20 20 20 20 20 20  s2015; }..      
293c0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
293d0 6e 6f 56 73 32 30 31 35 20 3d 20 76 61 6c 75 65  noVs2015 = value
293e0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
293f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
29400 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
29410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29440 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
29450 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
29460 6c 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20  l noTrace;..    
29470 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
29480 6f 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a 20 20 20  ool NoTrace..   
29490 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
294a0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
294b0 7b 20 72 65 74 75 72 6e 20 6e 6f 54 72 61 63 65  { return noTrace
294c0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
294d0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 54 72 61       set { noTra
294e0 63 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ce = value; }.. 
294f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
29500 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
29510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
29550 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
29560 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f  rivate bool noCo
29570 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  nsole;..        
29580 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
29590 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20 20 20  NoConsole..     
295a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
295b0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
295c0 72 65 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f 6c 65  return noConsole
295d0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
295e0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6e       set { noCon
295f0 73 6f 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  sole = value; }.
29600 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29660 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
29670 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
29680 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Log;..          
29690 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
296a0 4c 6f 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Log..           
296b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
296c0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
296d0 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20 20 20   noLog; }..     
296e0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
296f0 20 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75 65 3b 20   noLog = value; 
29700 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
29710 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29760 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
29770 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
29780 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d  throwOnMissing;.
29790 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
297a0 6c 69 63 20 62 6f 6f 6c 20 54 68 72 6f 77 4f 6e  lic bool ThrowOn
297b0 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20  Missing..       
297c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
297d0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
297e0 74 75 72 6e 20 74 68 72 6f 77 4f 6e 4d 69 73 73  turn throwOnMiss
297f0 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ing; }..        
29800 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74 68          set { th
29810 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 76  rowOnMissing = v
29820 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
29830 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29840 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
29850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29880 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29890 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
298a0 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a 20   bool whatIf;.. 
298b0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
298c0 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a 20  c bool WhatIf.. 
298d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
298e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
298f0 74 20 7b 20 72 65 74 75 72 6e 20 77 68 61 74 49  t { return whatI
29900 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  f; }..          
29910 20 20 20 20 20 20 73 65 74 20 7b 20 77 68 61 74        set { what
29920 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  If = value; }.. 
29930 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
29940 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
29950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
29990 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
299a0 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 65 62 75  rivate bool debu
299b0 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
299c0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 44 65 62 75  public bool Debu
299d0 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  g..            {
299e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
299f0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64    get { return d
29a00 65 62 75 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ebug; }..       
29a10 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64           set { d
29a20 65 62 75 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ebug = value; }.
29a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a90 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
29aa0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 76 65   private bool ve
29ab0 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  rbose;..        
29ac0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
29ad0 56 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  Verbose..       
29ae0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29af0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
29b00 74 75 72 6e 20 76 65 72 62 6f 73 65 3b 20 7d 0d  turn verbose; }.
29b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29b20 20 73 65 74 20 7b 20 76 65 72 62 6f 73 65 20 3d   set { verbose =
29b30 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
29b40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
29b50 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
29b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
29ba0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
29bb0 74 65 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 3b  te bool confirm;
29bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
29bd0 62 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e 66 69 72  blic bool Confir
29be0 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  m..            {
29bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29c00 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63    get { return c
29c10 6f 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20 20 20 20  onfirm; }..     
29c20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
29c30 20 63 6f 6e 66 69 72 6d 20 3d 20 76 61 6c 75 65   confirm = value
29c40 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
29c50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
29c60 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
29c70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
29c80 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
29c90 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
29ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
29ce0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
29cf0 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 43 6c  FrameworkList Cl
29d00 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
29d10 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
29d20 73 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 0d  s FrameworkList.
29d30 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
29d40 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
29d50 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74  Public Construct
29d60 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
29d70 20 70 75 62 6c 69 63 20 46 72 61 6d 65 77 6f 72   public Framewor
29d80 6b 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20  kList()..       
29d90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29da0 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
29db0 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
29dc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
29dd0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
29de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29e40 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d  #region Public M
29e50 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
29e60 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b      private Mock
29e70 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
29e80 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Key;..          
29e90 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
29ea0 69 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79  istryKey RootKey
29eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
29ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29ed0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 6f   get { return ro
29ee0 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20  otKey; }..      
29ef0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
29f00 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b  rootKey = value;
29f10 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
29f20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
29f30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
29f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
29f80 20 20 20 20 70 72 69 76 61 74 65 20 53 74 72 69      private Stri
29f90 6e 67 4c 69 73 74 20 6e 61 6d 65 73 3b 0d 0a 20  ngList names;.. 
29fa0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
29fb0 63 20 53 74 72 69 6e 67 4c 69 73 74 20 4e 61 6d  c StringList Nam
29fc0 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
29fd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29fe0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
29ff0 6e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20  names; }..      
2a000 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
2a010 6e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d  names = value; }
2a020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2a030 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2a040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a080 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2a090 20 20 70 72 69 76 61 74 65 20 56 65 72 73 69 6f    private Versio
2a0a0 6e 4d 61 70 20 76 65 72 73 69 6f 6e 73 3b 0d 0a  nMap versions;..
2a0b0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2a0c0 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 20 56 65  ic VersionMap Ve
2a0d0 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20  rsions..        
2a0e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a0f0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2a100 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d  urn versions; }.
2a110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a120 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20   set { versions 
2a130 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
2a140 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2a150 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2a160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2a1a0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
2a1b0 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20 70  ate StringList p
2a1c0 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 0d 0a 20  latformNames;.. 
2a1d0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2a1e0 63 20 53 74 72 69 6e 67 4c 69 73 74 20 50 6c 61  c StringList Pla
2a1f0 74 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20 20 20 20  tformNames..    
2a200 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a210 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2a220 20 72 65 74 75 72 6e 20 70 6c 61 74 66 6f 72 6d   return platform
2a230 4e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20  Names; }..      
2a240 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
2a250 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20  platformNames = 
2a260 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
2a270 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2a280 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2a290 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2a2a0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2a2b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2a2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a300 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2a310 67 69 6f 6e 20 56 73 4c 69 73 74 20 43 6c 61 73  gion VsList Clas
2a320 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
2a330 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
2a340 56 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20  VsList..        
2a350 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
2a360 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
2a370 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
2a380 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56          public V
2a390 73 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20  sList()..       
2a3a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a3b0 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
2a3c0 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
2a3d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2a3e0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2a3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a450 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50  #region Public P
2a460 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20  roperties..     
2a470 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
2a480 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2a490 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20  ootKey;..       
2a4a0 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
2a4b0 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f 74  RegistryKey Root
2a4c0 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Key..           
2a4d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a4e0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
2a4f0 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20   rootKey; }..   
2a500 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
2a510 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c   { rootKey = val
2a520 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
2a530 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2a540 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2a550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a580 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2a590 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 56         private V
2a5a0 65 72 73 69 6f 6e 4c 69 73 74 20 76 65 72 73 69  ersionList versi
2a5b0 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ons;..          
2a5c0 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e    public Version
2a5d0 4c 69 73 74 20 56 65 72 73 69 6f 6e 73 0d 0a 20  List Versions.. 
2a5e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
2a600 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 73 69  t { return versi
2a610 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ons; }..        
2a620 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65          set { ve
2a630 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20  rsions = value; 
2a640 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2a650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
2a660 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
2a670 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2a680 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
2a690 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2a6a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2a6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2a6f0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2a700 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61  n Private Consta
2a710 6e 74 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  nt Data..       
2a720 20 23 72 65 67 69 6f 6e 20 50 61 63 6b 61 67 65   #region Package
2a730 20 26 20 50 72 6f 76 69 64 65 72 20 4e 61 6d 65   & Provider Name
2a740 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
2a750 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
2a760 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 22  CoreFileName = "
2a770 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
2a780 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20  te.dll";..      
2a790 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2a7a0 73 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e  string LinqFileN
2a7b0 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
2a7c0 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64  ta.SQLite.Linq.d
2a7d0 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  ll";..        pr
2a7e0 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
2a7f0 6e 67 20 45 66 36 46 69 6c 65 4e 61 6d 65 20 3d  ng Ef6FileName =
2a800 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
2a810 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 22 3b 0d 0a  Lite.EF6.dll";..
2a820 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2a830 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 73  const string Des
2a840 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
2a850 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72  "SQLite.Designer
2a860 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20  .dll";..        
2a870 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
2a880 72 69 6e 67 20 50 72 6f 76 69 64 65 72 4e 61 6d  ring ProviderNam
2a890 65 20 3d 20 22 53 51 4c 69 74 65 20 44 61 74 61  e = "SQLite Data
2a8a0 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a 20 20 20   Provider";..   
2a8b0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
2a8c0 73 74 20 73 74 72 69 6e 67 20 50 72 6f 6a 65 63  st string Projec
2a8d0 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  tName = "System.
2a8e0 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20  Data.SQLite";.. 
2a8f0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
2a900 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 65 67 61  onst string Lega
2a910 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20  cyProjectName = 
2a920 22 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a 20 20 20  "SQLite";....   
2a930 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2a940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2a980 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2a990 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 73  const string Des
2a9a0 63 72 69 70 74 69 6f 6e 20 3d 0d 0a 20 20 20 20  cription =..    
2a9b0 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72          ".NET Fr
2a9c0 61 6d 65 77 6f 72 6b 20 44 61 74 61 20 50 72 6f  amework Data Pro
2a9d0 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74 65  vider for SQLite
2a9e0 22 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  ";..        #end
2a9f0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2aa00 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2aa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa40 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2aa50 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
2aa60 73 74 20 73 74 72 69 6e 67 20 43 4c 52 76 32 49  st string CLRv2I
2aa70 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
2aa80 6f 6e 20 3d 20 22 76 32 2e 30 2e 35 30 37 32 37  on = "v2.0.50727
2aa90 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
2aaa0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
2aab0 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69   CLRv4ImageRunti
2aac0 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22 76 34 2e  meVersion = "v4.
2aad0 30 2e 33 30 33 31 39 22 3b 0d 0a 0d 0a 20 20 20  0.30319";....   
2aae0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2aaf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2ab30 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2ab40 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 53 79 73  const string Sys
2ab50 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 4e 61  temEf6AssemblyNa
2ab60 6d 65 20 3d 20 22 45 6e 74 69 74 79 46 72 61 6d  me = "EntityFram
2ab70 65 77 6f 72 6b 2c 20 22 20 2b 0d 0a 20 20 20 20  ework, " +..    
2ab80 20 20 20 20 20 20 20 20 22 56 65 72 73 69 6f 6e          "Version
2ab90 3d 36 2e 30 2e 30 2e 30 2c 20 43 75 6c 74 75 72  =6.0.0.0, Cultur
2aba0 65 3d 6e 65 75 74 72 61 6c 2c 20 50 75 62 6c 69  e=neutral, Publi
2abb0 63 4b 65 79 54 6f 6b 65 6e 3d 62 37 37 61 35 63  cKeyToken=b77a5c
2abc0 35 36 31 39 33 34 65 30 38 39 22 3b 0d 0a 0d 0a  561934e089";....
2abd0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2abe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2ac20 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2ac30 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
2ac40 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
2ac50 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b  at = "{0}: {1}";
2ac60 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2ac70 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c  e const string L
2ac80 6f 67 46 69 6c 65 53 75 66 66 69 78 20 3d 20 22  ogFileSuffix = "
2ac90 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  .log";....      
2aca0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2acb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2acc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2acd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ace0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2acf0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
2ad00 73 74 20 73 74 72 69 6e 67 20 56 73 44 65 76 45  st string VsDevE
2ad10 6e 76 53 65 74 75 70 46 6f 72 6d 61 74 20 3d 20  nvSetupFormat = 
2ad20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 0d 0a 20  "{0}: {1}";.... 
2ad30 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2ad40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2ad80 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2ad90 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 52  e const string R
2ada0 6f 6f 74 4b 65 79 4e 61 6d 65 20 3d 20 22 53 6f  ootKeyName = "So
2adb0 66 74 77 61 72 65 22 3b 0d 0a 20 20 20 20 20 20  ftware";..      
2adc0 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2add0 73 74 72 69 6e 67 20 57 6f 77 36 34 53 75 62 4b  string Wow64SubK
2ade0 65 79 4e 61 6d 65 20 3d 20 22 57 6f 77 36 34 33  eyName = "Wow643
2adf0 32 4e 6f 64 65 22 3b 0d 0a 0d 0a 20 20 20 20 20  2Node";....     
2ae00 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2ae10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2ae50 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2ae60 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e    // NOTE: The .
2ae70 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 68 61  NET Framework ha
2ae80 73 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e  s both 32-bit an
2ae90 64 20 36 34 2d 62 69 74 20 65 64 69 74 69 6f 6e  d 64-bit edition
2aea0 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  s...        //..
2aeb0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2aec0 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
2aed0 62 6f 6f 6c 20 4e 65 74 46 78 49 73 33 32 42 69  bool NetFxIs32Bi
2aee0 74 4f 6e 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  tOnly = false;..
2aef0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2af00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af40 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  /....        //.
2af50 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
2af60 3a 20 46 6f 72 20 6e 6f 77 2c 20 56 69 73 75 61  : For now, Visua
2af70 6c 20 53 74 75 64 69 6f 20 69 73 20 61 6c 77 61  l Studio is alwa
2af80 79 73 20 61 20 33 32 2d 62 69 74 20 61 70 70 6c  ys a 32-bit appl
2af90 69 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ication...      
2afa0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72    //..        pr
2afb0 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
2afc0 64 6f 6e 6c 79 20 62 6f 6f 6c 20 56 73 49 73 33  donly bool VsIs3
2afd0 32 42 69 74 4f 6e 6c 79 20 3d 20 74 72 75 65 3b  2BitOnly = true;
2afe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2aff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b030 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2b040 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
2b050 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 56 73  adonly string Vs
2b060 49 64 46 6f 72 6d 61 74 20 3d 20 22 42 22 3b 0d  IdFormat = "B";.
2b070 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2b080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b0c0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2b0d0 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
2b0e0 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58 50 61  donly string XPa
2b0f0 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 20  thForAddElement 
2b100 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  =..            "
2b110 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73 79  configuration/sy
2b120 73 74 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76  stem.data/DbProv
2b130 69 64 65 72 46 61 63 74 6f 72 69 65 73 2f 61 64  iderFactories/ad
2b140 64 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b  d[@invariant=\"{
2b150 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20  0}\"]";....     
2b160 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2b170 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e  c readonly strin
2b180 67 20 58 50 61 74 68 46 6f 72 52 65 6d 6f 76 65  g XPathForRemove
2b190 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20  Element =..     
2b1a0 20 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72         "configur
2b1b0 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74  ation/system.dat
2b1c0 61 2f 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  a/DbProviderFact
2b1d0 6f 72 69 65 73 2f 72 65 6d 6f 76 65 5b 40 69 6e  ories/remove[@in
2b1e0 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d  variant=\"{0}\"]
2b1f0 22 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  ";..        #end
2b200 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2b210 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2b220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b250 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2b260 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
2b270 76 61 74 65 20 53 74 61 74 69 63 20 44 61 74 61  vate Static Data
2b280 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2b290 6e 20 44 69 61 67 6e 6f 73 74 69 63 73 20 26 20  n Diagnostics & 
2b2a0 4c 6f 67 67 69 6e 67 0d 0a 20 20 20 20 20 20 20  Logging..       
2b2b0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
2b2c0 4e 4f 54 45 3a 20 43 61 63 68 65 20 74 68 65 20  NOTE: Cache the 
2b2d0 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20  current process 
2b2e0 61 6e 64 20 61 73 73 65 6d 62 6c 79 20 61 73 20  and assembly as 
2b2f0 74 68 65 79 20 64 6f 20 6e 6f 74 20 63 68 61 6e  they do not chan
2b300 67 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ge..        //  
2b310 20 20 20 20 20 61 6e 64 20 6d 61 79 20 62 65 20       and may be 
2b320 6e 65 65 64 65 64 20 69 6e 20 71 75 69 74 65 20  needed in quite 
2b330 61 20 66 65 77 20 64 69 66 66 65 72 65 6e 74 20  a few different 
2b340 70 6c 61 63 65 73 2e 0d 0a 20 20 20 20 20 20 20  places...       
2b350 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69   //..        pri
2b360 76 61 74 65 20 73 74 61 74 69 63 20 50 72 6f 63  vate static Proc
2b370 65 73 73 20 74 68 69 73 50 72 6f 63 65 73 73 20  ess thisProcess 
2b380 3d 20 50 72 6f 63 65 73 73 2e 47 65 74 43 75 72  = Process.GetCur
2b390 72 65 6e 74 50 72 6f 63 65 73 73 28 29 3b 0d 0a  rentProcess();..
2b3a0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2b3b0 73 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79 20  static Assembly 
2b3c0 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 20 41  thisAssembly = A
2b3d0 73 73 65 6d 62 6c 79 2e 47 65 74 45 78 65 63 75  ssembly.GetExecu
2b3e0 74 69 6e 67 41 73 73 65 6d 62 6c 79 28 29 3b 0d  tingAssembly();.
2b3f0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2b400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b440 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
2b450 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
2b460 45 3a 20 54 68 65 20 74 72 61 63 65 20 63 61 74  E: The trace cat
2b470 65 67 6f 72 79 20 69 73 20 74 68 65 20 73 61 6d  egory is the sam
2b480 65 20 66 6f 72 20 62 6f 74 68 20 74 68 65 20 64  e for both the d
2b490 65 62 75 67 20 61 6e 64 20 74 72 61 63 65 0d 0a  ebug and trace..
2b4a0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2b4b0 20 63 61 6c 6c 62 61 63 6b 73 2e 0d 0a 20 20 20   callbacks...   
2b4c0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2b4d0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2b4e0 73 74 72 69 6e 67 20 74 72 61 63 65 43 61 74 65  string traceCate
2b4f0 67 6f 72 79 20 3d 20 28 74 68 69 73 41 73 73 65  gory = (thisAsse
2b500 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d  mbly != null) ?.
2b510 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 74  .            Pat
2b520 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 74 68  h.GetFileName(th
2b530 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74  isAssembly.Locat
2b540 69 6f 6e 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a  ion) : null;....
2b550 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2b560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2b5a0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  ...        //.. 
2b5b0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2b5c0 53 65 74 20 74 68 65 20 64 65 62 75 67 20 61 6e  Set the debug an
2b5d0 64 20 74 72 61 63 65 20 6c 6f 67 67 69 6e 67 20  d trace logging 
2b5e0 63 61 6c 6c 62 61 63 6b 73 20 75 73 65 64 20 62  callbacks used b
2b5f0 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  y the..        /
2b600 2f 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 74  /       applicat
2b610 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
2b620 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2b630 65 20 73 74 61 74 69 63 20 54 72 61 63 65 43 61  e static TraceCa
2b640 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c  llback debugCall
2b650 62 61 63 6b 20 3d 20 41 70 70 44 65 62 75 67 3b  back = AppDebug;
2b660 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2b670 65 20 73 74 61 74 69 63 20 54 72 61 63 65 43 61  e static TraceCa
2b680 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c  llback traceCall
2b690 62 61 63 6b 20 3d 20 41 70 70 54 72 61 63 65 3b  back = AppTrace;
2b6a0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
2b6b0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2b6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b700 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2b710 20 20 20 23 72 65 67 69 6f 6e 20 53 79 73 74 65     #region Syste
2b720 6d 20 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  m Directory..   
2b730 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2b740 74 69 63 20 73 74 72 69 6e 67 20 73 79 73 74 65  tic string syste
2b750 6d 44 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c  mDirectory = nul
2b760 6c 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e 44 4f 57  l;....#if WINDOW
2b770 53 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  S..        priva
2b780 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
2b790 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79   systemDirectory
2b7a0 57 6f 77 36 34 20 3d 20 6e 75 6c 6c 3b 0d 0a 23  Wow64 = null;..#
2b7b0 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 23  endif..        #
2b7c0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2b7d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2b7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2b820 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2b830 52 65 67 69 73 74 72 79 20 53 74 61 74 69 73 74  Registry Statist
2b840 69 63 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ics..        pri
2b850 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20  vate static int 
2b860 66 69 6c 65 73 43 72 65 61 74 65 64 20 3d 20 30  filesCreated = 0
2b870 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
2b880 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 66 69  te static int fi
2b890 6c 65 73 4d 6f 64 69 66 69 65 64 20 3d 20 30 3b  lesModified = 0;
2b8a0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2b8b0 65 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c  e static int fil
2b8c0 65 73 44 65 6c 65 74 65 64 20 3d 20 30 3b 0d 0a  esDeleted = 0;..
2b8d0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2b8e0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  on..        #end
2b8f0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2b900 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2b910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b940 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2b950 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61       #region Tra
2b960 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  ce Handling..   
2b970 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2b980 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 4c 6f  tic string GetLo
2b990 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20  gFileName(..    
2b9a0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
2b9b0 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ypeName..       
2b9c0 20 20 20 20 20 29 20 2f 2a 20 74 68 72 6f 77 20       ) /* throw 
2b9d0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  */..        {.. 
2b9e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2b9f0 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  g fileName = Pat
2ba00 68 2e 47 65 74 54 65 6d 70 46 69 6c 65 4e 61 6d  h.GetTempFileNam
2ba10 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
2ba20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
2ba30 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72  ry = Path.GetDir
2ba40 65 63 74 6f 72 79 4e 61 6d 65 28 66 69 6c 65 4e  ectoryName(fileN
2ba50 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
2ba60 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
2ba70 6d 65 4f 6e 6c 79 20 3d 20 50 61 74 68 2e 47 65  meOnly = Path.Ge
2ba80 74 46 69 6c 65 4e 61 6d 65 57 69 74 68 6f 75 74  tFileNameWithout
2ba90 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c 65 4e 61  Extension(fileNa
2baa0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
2bab0 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77 46 69      string newFi
2bac0 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
2bad0 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
2bae0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2baf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bb00 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 72   "{0}{1}{2}", tr
2bb10 61 63 65 43 61 74 65 67 6f 72 79 2c 20 21 53 74  aceCategory, !St
2bb20 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
2bb30 74 79 28 74 79 70 65 4e 61 6d 65 29 20 3f 0d 0a  ty(typeName) ?..
2bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb50 20 20 20 20 22 2e 22 20 2b 20 74 79 70 65 4e 61      "." + typeNa
2bb60 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74  me : String.Empt
2bb70 79 2c 20 22 2e 22 20 2b 20 66 69 6c 65 4e 61 6d  y, "." + fileNam
2bb80 65 4f 6e 6c 79 20 2b 0d 0a 20 20 20 20 20 20 20  eOnly +..       
2bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67               Log
2bba0 46 69 6c 65 53 75 66 66 69 78 29 29 3b 0d 0a 0d  FileSuffix));...
2bbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 69 6c  .            Fil
2bbc0 65 2e 4d 6f 76 65 28 66 69 6c 65 4e 61 6d 65 2c  e.Move(fileName,
2bbd0 20 6e 65 77 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a   newFileName);..
2bbe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2bbf0 74 75 72 6e 20 6e 65 77 46 69 6c 65 4e 61 6d 65  turn newFileName
2bc00 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2bc10 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2bc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2bc60 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2bc70 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 41  te static void A
2bc80 70 70 44 65 62 75 67 28 0d 0a 20 20 20 20 20 20  ppDebug(..      
2bc90 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
2bca0 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
2bcb0 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
2bcc0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
2bcd0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2bce0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2bcf0 70 73 2e 44 65 62 75 67 43 6f 72 65 28 53 74 72  ps.DebugCore(Str
2bd00 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2bd10 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2bd20 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61  ceOps.DebugForma
2bd30 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74  t, TraceOps.Next
2bd40 44 65 62 75 67 49 64 28 29 2c 0d 0a 20 20 20 20  DebugId(),..    
2bd50 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2bd60 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44  eOps.TimeStamp(D
2bd70 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c  ateTime.UtcNow),
2bd80 20 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65 67   message), categ
2bd90 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ory);..        }
2bda0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2bdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bdd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bdf0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2be00 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
2be10 69 64 20 41 70 70 54 72 61 63 65 28 0d 0a 20 20  id AppTrace(..  
2be20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2be30 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
2be40 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
2be50 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
2be60 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2be70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72  ..            Tr
2be80 61 63 65 4f 70 73 2e 54 72 61 63 65 43 6f 72 65  aceOps.TraceCore
2be90 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
2bea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2beb0 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46   TraceOps.TraceF
2bec0 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e  ormat, TraceOps.
2bed0 4e 65 78 74 54 72 61 63 65 49 64 28 29 2c 0d 0a  NextTraceId(),..
2bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bef0 54 72 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61  TraceOps.TimeSta
2bf00 6d 70 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e  mp(DateTime.UtcN
2bf10 6f 77 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63  ow), message), c
2bf20 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
2bf30 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2bf40 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2bf50 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2bf60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2bfa0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 47         #region G
2bfb0 65 6e 65 72 69 63 20 50 6c 61 74 66 6f 72 6d 20  eneric Platform 
2bfc0 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
2bfd0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2bfe0 20 62 6f 6f 6c 20 49 73 36 34 42 69 74 50 72 6f   bool Is64BitPro
2bff0 63 65 73 73 28 29 0d 0a 20 20 20 20 20 20 20 20  cess()..        
2c000 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
2c010 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
2c020 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20  / NOTE: Returns 
2c030 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72 72  true if the curr
2c040 65 6e 74 20 70 72 6f 63 65 73 73 20 69 73 20 36  ent process is 6
2c050 34 2d 62 69 74 2e 20 20 49 66 20 74 68 69 73 0d  4-bit.  If this.
2c060 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
2c070 20 20 20 20 20 20 69 73 20 74 72 75 65 2c 20 77        is true, w
2c080 65 20 2a 6b 6e 6f 77 2a 20 74 68 61 74 20 77 65  e *know* that we
2c090 20 6d 75 73 74 20 62 65 20 72 75 6e 6e 69 6e 67   must be running
2c0a0 20 6f 6e 20 61 20 36 34 2d 62 69 74 0d 0a 20 20   on a 64-bit..  
2c0b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2c0c0 20 20 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73     operating sys
2c0d0 74 65 6d 20 61 73 20 77 65 6c 6c 2e 20 20 48 6f  tem as well.  Ho
2c0e0 77 65 76 65 72 2c 20 69 66 20 74 68 69 73 20 69  wever, if this i
2c0f0 73 20 66 61 6c 73 65 2c 20 77 65 0d 0a 20 20 20  s false, we..   
2c100 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2c110 20 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61    do not necessa
2c120 72 69 6c 79 20 6b 6e 6f 77 20 74 68 61 74 20 77  rily know that w
2c130 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e  e are running on
2c140 20 61 20 33 32 2d 62 69 74 0d 0a 20 20 20 20 20   a 32-bit..     
2c150 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2c160 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
2c170 2c 20 64 75 65 20 74 6f 20 57 6f 57 36 34 20 28  , due to WoW64 (
2c180 57 69 6e 33 32 2d 6f 6e 2d 57 69 6e 36 34 29 2c  Win32-on-Win64),
2c190 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20   etc...         
2c1a0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2c1b0 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74 50 74     return (IntPt
2c1c0 72 2e 53 69 7a 65 20 3d 3d 20 73 69 7a 65 6f 66  r.Size == sizeof
2c1d0 28 6c 6f 6e 67 29 29 3b 20 2f 2f 20 4e 4f 54 45  (long)); // NOTE
2c1e0 3a 20 50 6f 69 6e 74 65 72 20 69 73 20 36 34 2d  : Pointer is 64-
2c1f0 62 69 74 73 3f 0d 0a 20 20 20 20 20 20 20 20 7d  bits?..        }
2c200 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2c210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c250 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2c260 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2c270 6f 6c 20 49 73 53 75 70 70 6f 72 74 65 64 52 6f  ol IsSupportedRo
2c280 6f 74 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  otKey(..        
2c290 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2c2a0 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20   registry,..    
2c2b0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2c2c0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 0d  stryKey rootKey.
2c2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2c2e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2c2f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4f 62         return Ob
2c300 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71  ject.ReferenceEq
2c310 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65  uals(rootKey, re
2c320 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73  gistry.CurrentUs
2c330 65 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  er) ||..        
2c340 20 20 20 20 20 20 20 20 4f 62 6a 65 63 74 2e 52          Object.R
2c350 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72  eferenceEquals(r
2c360 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79  ootKey, registry
2c370 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 29 3b 0d  .LocalMachine);.
2c380 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2c390 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2c3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2c3e0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2c3f0 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
2c400 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a  etRootKeyName(..
2c410 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2c420 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
2c430 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2c440 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  4..            )
2c450 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2c460 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2c470 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46           // BUGF
2c480 49 58 3a 20 41 70 70 61 72 65 6e 74 6c 79 2c 20  IX: Apparently, 
2c490 74 68 65 20 70 65 72 2d 75 73 65 72 20 72 65 67  the per-user reg
2c4a0 69 73 74 72 79 20 68 69 76 65 20 64 6f 65 73 20  istry hive does 
2c4b0 6e 6f 74 20 75 73 65 0d 0a 20 20 20 20 20 20 20  not use..       
2c4c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
2c4d0 74 68 65 20 22 57 6f 77 36 34 33 32 4e 6f 64 65  the "Wow6432Node
2c4e0 22 20 6e 6f 64 65 20 74 6f 20 73 74 6f 72 65 20  " node to store 
2c4f0 73 65 74 74 69 6e 67 73 20 66 6f 72 20 33 32 2d  settings for 32-
2c500 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bit..           
2c510 20 2f 2f 20 20 20 20 20 20 20 20 20 61 70 70 6c   //         appl
2c520 69 63 61 74 69 6f 6e 73 20 72 75 6e 6e 69 6e 67  ications running
2c530 20 6f 6e 20 61 20 36 34 2d 62 69 74 20 6f 70 65   on a 64-bit ope
2c540 72 61 74 69 6e 67 20 73 79 73 74 65 6d 2e 0d 0a  rating system...
2c550 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2c560 20 20 20 20 20 20 20 54 69 63 6b 65 74 20 5b 61         Ticket [a
2c570 30 36 37 37 33 30 39 66 30 5d 20 68 61 73 20 66  0677309f0] has f
2c580 75 72 74 68 65 72 20 64 65 74 61 69 6c 73 2e 0d  urther details..
2c590 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
2c5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2c5b0 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  urn String.Forma
2c5c0 74 28 22 7b 30 7d 7b 31 7d 22 2c 20 52 6f 6f 74  t("{0}{1}", Root
2c5d0 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
2c5e0 20 20 20 20 20 20 20 20 20 20 21 70 65 72 55 73            !perUs
2c5f0 65 72 20 26 26 20 77 6f 77 36 34 20 26 26 20 49  er && wow64 && I
2c600 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 20  s64BitProcess() 
2c610 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
2c620 20 20 20 20 20 20 20 22 5c 5c 22 20 2b 20 57 6f         "\\" + Wo
2c630 77 36 34 53 75 62 4b 65 79 4e 61 6d 65 20 3a 20  w64SubKeyName : 
2c640 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
2c650 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c660 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2c670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2c6b0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2c6c0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
2c6d0 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  tSystemDirectory
2c6e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  (..            b
2c6f0 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20  ool wow64..     
2c700 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2c710 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53    {..#if WINDOWS
2c720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2c730 20 28 77 6f 77 36 34 29 0d 0a 20 20 20 20 20 20   (wow64)..      
2c740 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c750 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73           if (sys
2c760 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36  temDirectoryWow6
2c770 34 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  4 == null)..    
2c780 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7a0 20 20 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f     systemDirecto
2c7b0 72 79 57 6f 77 36 34 20 3d 0d 0a 20 20 20 20 20  ryWow64 =..     
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7d0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
2c7e0 65 74 68 6f 64 73 2e 47 65 74 53 79 73 74 65 6d  ethods.GetSystem
2c7f0 44 69 72 65 63 74 6f 72 79 28 29 3b 0d 0a 20 20  Directory();..  
2c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2c810 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c820 20 20 20 72 65 74 75 72 6e 20 73 79 73 74 65 6d     return system
2c830 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34 3b 0d  DirectoryWow64;.
2c840 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2c850 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
2c860 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
2c870 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c880 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73           if (sys
2c890 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 3d 20  temDirectory == 
2c8a0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2c8b0 20 20 20 20 20 20 20 20 20 20 20 73 79 73 74 65             syste
2c8c0 6d 44 69 72 65 63 74 6f 72 79 20 3d 20 45 6e 76  mDirectory = Env
2c8d0 69 72 6f 6e 6d 65 6e 74 2e 53 79 73 74 65 6d 44  ironment.SystemD
2c8e0 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20  irectory;....   
2c8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c900 75 72 6e 20 73 79 73 74 65 6d 44 69 72 65 63 74  urn systemDirect
2c910 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ory;..          
2c920 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
2c930 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2c940 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
2c950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c990 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2c9a0 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63   #region Generic
2c9b0 20 53 74 72 69 6e 67 20 48 61 6e 64 6c 69 6e 67   String Handling
2c9c0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2c9d0 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
2c9e0 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
2c9f0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
2ca00 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..         
2ca10 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2ca20 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2ca30 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
2ca40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ca50 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22   return "<null>"
2ca60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ca70 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 3b 0d   string result;.
2ca80 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70  .            Typ
2ca90 65 20 74 79 70 65 20 3d 20 76 61 6c 75 65 2e 47  e type = value.G
2caa0 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a 20 20 20  etType();....   
2cab0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
2cac0 65 20 3d 3d 20 74 79 70 65 6f 66 28 58 6d 6c 45  e == typeof(XmlE
2cad0 6c 65 6d 65 6e 74 29 29 0d 0a 20 20 20 20 20 20  lement))..      
2cae0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2caf0 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d           XmlElem
2cb00 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20 28 58  ent element = (X
2cb10 6d 6c 45 6c 65 6d 65 6e 74 29 76 61 6c 75 65 3b  mlElement)value;
2cb20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cb30 20 20 20 20 72 65 73 75 6c 74 20 3d 20 65 6c 65      result = ele
2cb40 6d 65 6e 74 2e 4f 75 74 65 72 58 6d 6c 3b 0d 0a  ment.OuterXml;..
2cb50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2cb60 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
2cb70 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
2cb80 6f 66 28 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20  of(Version))..  
2cb90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
2cbb0 73 69 6f 6e 20 76 65 72 73 69 6f 6e 20 3d 20 28  sion version = (
2cbc0 56 65 72 73 69 6f 6e 29 76 61 6c 75 65 3b 0d 0a  Version)value;..
2cbd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cbe0 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e    result = Strin
2cbf0 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c  g.Format("v{0}",
2cc00 20 76 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20   version);..    
2cc10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2cc20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
2cc30 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 50  type == typeof(P
2cc40 72 6f 63 65 73 73 53 74 61 72 74 49 6e 66 6f 29  rocessStartInfo)
2cc50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2cc60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cc70 20 20 50 72 6f 63 65 73 73 53 74 61 72 74 49 6e    ProcessStartIn
2cc80 66 6f 20 73 74 61 72 74 49 6e 66 6f 20 3d 20 28  fo startInfo = (
2cc90 50 72 6f 63 65 73 73 53 74 61 72 74 49 6e 66 6f  ProcessStartInfo
2cca0 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  )value;....     
2ccb0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
2ccc0 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  t = String.Forma
2ccd0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2cce0 20 20 20 20 20 20 20 20 22 66 69 6c 65 4e 61 6d          "fileNam
2ccf0 65 20 3d 20 7b 30 7d 2c 20 61 72 67 75 6d 65 6e  e = {0}, argumen
2cd00 74 73 20 3d 20 7b 31 7d 2c 20 77 6f 72 6b 69 6e  ts = {1}, workin
2cd10 67 44 69 72 65 63 74 6f 72 79 20 3d 20 7b 32 7d  gDirectory = {2}
2cd20 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
2cd30 20 20 20 20 20 20 20 20 20 20 20 22 75 73 65 53             "useS
2cd40 68 65 6c 6c 45 78 65 63 75 74 65 20 3d 20 7b 33  hellExecute = {3
2cd50 7d 2c 20 72 65 64 69 72 65 63 74 53 74 61 6e 64  }, redirectStand
2cd60 61 72 64 4f 75 74 70 75 74 20 3d 20 7b 34 7d 2c  ardOutput = {4},
2cd70 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
2cd80 20 20 20 20 20 20 20 20 20 20 22 72 65 64 69 72            "redir
2cd90 65 63 74 53 74 61 6e 64 61 72 64 45 72 72 6f 72  ectStandardError
2cda0 20 3d 20 7b 35 7d 22 2c 20 46 6f 72 44 69 73 70   = {5}", ForDisp
2cdb0 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lay(..          
2cdc0 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 49            startI
2cdd0 6e 66 6f 2e 46 69 6c 65 4e 61 6d 65 29 2c 20 46  nfo.FileName), F
2cde0 6f 72 44 69 73 70 6c 61 79 28 73 74 61 72 74 49  orDisplay(startI
2cdf0 6e 66 6f 2e 41 72 67 75 6d 65 6e 74 73 29 2c 0d  nfo.Arguments),.
2ce00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ce10 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
2ce20 73 74 61 72 74 49 6e 66 6f 2e 57 6f 72 6b 69 6e  startInfo.Workin
2ce30 67 44 69 72 65 63 74 6f 72 79 29 2c 20 46 6f 72  gDirectory), For
2ce40 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
2ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
2ce60 61 72 74 49 6e 66 6f 2e 55 73 65 53 68 65 6c 6c  artInfo.UseShell
2ce70 45 78 65 63 75 74 65 29 2c 20 46 6f 72 44 69 73  Execute), ForDis
2ce80 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
2ce90 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
2cea0 49 6e 66 6f 2e 52 65 64 69 72 65 63 74 53 74 61  Info.RedirectSta
2ceb0 6e 64 61 72 64 4f 75 74 70 75 74 29 2c 20 46 6f  ndardOutput), Fo
2cec0 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20  rDisplay(..     
2ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2cee0 74 61 72 74 49 6e 66 6f 2e 52 65 64 69 72 65 63  tartInfo.Redirec
2cef0 74 53 74 61 6e 64 61 72 64 45 72 72 6f 72 29 29  tStandardError))
2cf00 3b 20 2f 2a 20 52 45 43 55 52 53 49 56 45 20 2a  ; /* RECURSIVE *
2cf10 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  /..            }
2cf20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
2cf30 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74  se if (type == t
2cf40 79 70 65 6f 66 28 50 72 6f 63 65 73 73 29 29 0d  ypeof(Process)).
2cf50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2cf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf70 50 72 6f 63 65 73 73 20 70 72 6f 63 65 73 73 20  Process process 
2cf80 3d 20 28 50 72 6f 63 65 73 73 29 76 61 6c 75 65  = (Process)value
2cf90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2cfa0 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 70 72       result = pr
2cfb0 6f 63 65 73 73 2e 49 64 2e 54 6f 53 74 72 69 6e  ocess.Id.ToStrin
2cfc0 67 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  g();..          
2cfd0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2cfe0 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d   else if (type =
2cff0 3d 20 74 79 70 65 6f 66 28 44 61 74 61 52 65 63  = typeof(DataRec
2d000 65 69 76 65 64 45 76 65 6e 74 41 72 67 73 29 29  eivedEventArgs))
2d010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2d020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d030 20 44 61 74 61 52 65 63 65 69 76 65 64 45 76 65   DataReceivedEve
2d040 6e 74 41 72 67 73 20 65 76 65 6e 74 41 72 67 73  ntArgs eventArgs
2d050 20 3d 20 28 44 61 74 61 52 65 63 65 69 76 65 64   = (DataReceived
2d060 45 76 65 6e 74 41 72 67 73 29 76 61 6c 75 65 3b  EventArgs)value;
2d070 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d080 20 20 20 20 72 65 73 75 6c 74 20 3d 20 46 6f 72      result = For
2d090 44 69 73 70 6c 61 79 28 65 76 65 6e 74 41 72 67  Display(eventArg
2d0a0 73 2e 44 61 74 61 29 3b 20 2f 2a 20 52 45 43 55  s.Data); /* RECU
2d0b0 52 53 49 56 45 20 2a 2f 0d 0a 20 20 20 20 20 20  RSIVE */..      
2d0c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2d0d0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
2d0e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d0f0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
2d100 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e   = value.ToStrin
2d110 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  g();....        
2d120 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
2d130 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 0d  lt.Length == 0).
2d140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d150 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c 65 6d       return "<em
2d160 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  pty>";....      
2d170 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
2d180 70 65 2e 49 73 53 75 62 63 6c 61 73 73 4f 66 28  pe.IsSubclassOf(
2d190 74 79 70 65 6f 66 28 45 78 63 65 70 74 69 6f 6e  typeof(Exception
2d1a0 29 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )))..           
2d1b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2d1c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
2d1d0 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lt = String.Form
2d1e0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2d1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
2d200 7d 7b 31 7d 7b 30 7d 22 2c 20 45 6e 76 69 72 6f  }{1}{0}", Enviro
2d210 6e 6d 65 6e 74 2e 4e 65 77 4c 69 6e 65 2c 20 72  nment.NewLine, r
2d220 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20 20 20  esult);..       
2d230 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2d240 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
2d250 20 69 66 20 28 21 74 79 70 65 2e 49 73 53 75 62   if (!type.IsSub
2d260 63 6c 61 73 73 4f 66 28 74 79 70 65 6f 66 28 56  classOf(typeof(V
2d270 61 6c 75 65 54 79 70 65 29 29 29 0d 0a 20 20 20  alueType)))..   
2d280 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2d290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2a0 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72      result = Str
2d2b0 69 6e 67 2e 46 6f 72 6d 61 74 28 22 5c 22 7b 30  ing.Format("\"{0
2d2c0 7d 5c 22 22 2c 20 72 65 73 75 6c 74 29 3b 0d 0a  }\"", result);..
2d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2d2f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d300 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
2d310 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2d320 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2d330 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2d340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d380 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2d390 69 6f 6e 20 41 73 73 65 6d 62 6c 79 20 41 74 74  ion Assembly Att
2d3a0 72 69 62 75 74 65 20 48 61 6e 64 6c 69 6e 67 0d  ribute Handling.
2d3b0 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
2d3c0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
2d3d0 74 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75  tAssemblyConfigu
2d3e0 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ration(..       
2d3f0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73       Assembly as
2d400 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..        
2d410 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2d420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2d430 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75   (assembly != nu
2d440 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2d450 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d460 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
2d470 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d490 69 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44  if (assembly.IsD
2d4a0 65 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20  efined(..       
2d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4c0 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65       typeof(Asse
2d4d0 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f  mblyConfiguratio
2d4e0 6e 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c  nAttribute), fal
2d4f0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2d500 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d520 20 20 20 20 20 41 73 73 65 6d 62 6c 79 43 6f 6e       AssemblyCon
2d530 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62  figurationAttrib
2d540 75 74 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ute configuratio
2d550 6e 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n =..           
2d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d570 20 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67   (AssemblyConfig
2d580 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65  urationAttribute
2d590 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
2d5b0 73 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f  ssembly.GetCusto
2d5c0 6d 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20  mAttributes(..  
2d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
2d5f0 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e  peof(AssemblyCon
2d600 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62  figurationAttrib
2d610 75 74 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ute),..         
2d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d630 20 20 20 20 20 20 20 66 61 6c 73 65 29 5b 30 5d         false)[0]
2d640 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2d650 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2d660 75 72 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  urn configuratio
2d670 6e 2e 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 3b  n.Configuration;
2d680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d690 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2d6a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2d6b0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
2d6c0 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
2d6d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d6e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
2d6f0 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
2d700 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2d710 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d720 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d730 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2d740 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2d750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d790 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2d7a0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
2d7b0 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79  ring GetAssembly
2d7c0 54 69 74 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  Title(..        
2d7d0 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73      Assembly ass
2d7e0 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  embly..         
2d7f0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2d800 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2d810 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
2d820 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2d830 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d840 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
2d850 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2d870 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65  f (assembly.IsDe
2d880 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20  fined(..        
2d890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8a0 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d      typeof(Assem
2d8b0 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74  blyTitleAttribut
2d8c0 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20  e), false))..   
2d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d8f0 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
2d900 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75  mblyTitleAttribu
2d910 74 65 20 74 69 74 6c 65 20 3d 0d 0a 20 20 20 20  te title =..    
2d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d930 20 20 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c          (Assembl
2d940 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29  yTitleAttribute)
2d950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
2d970 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d  sembly.GetCustom
2d980 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20  Attributes(..   
2d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
2d9b0 65 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c  eof(AssemblyTitl
2d9c0 65 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c  eAttribute), fal
2d9d0 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20  se)[0];....     
2d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9f0 20 20 20 72 65 74 75 72 6e 20 74 69 74 6c 65 2e     return title.
2da00 54 69 74 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  Title;..        
2da10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2da20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2da30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2da40 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
2da50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da70 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
2da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2daa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2dab0 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
2dac0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2dad0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2dae0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2daf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2db30 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2db40 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  n .NET Framework
2db50 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
2db60 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2db70 63 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d  c string GetFram
2db80 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65  eworkRootKeyName
2db90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  (..            b
2dba0 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
2dbb0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2dbc0 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
2dbd0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2dbe0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2dbf0 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
2dc00 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74  ("{0}\\Microsoft
2dc10 5c 5c 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22  \\.NETFramework"
2dc20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2dc30 20 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d     GetRootKeyNam
2dc40 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  e(perUser, wow64
2dc50 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
2dc60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2dc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dcb0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2dcc0 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
2dcd0 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b  ng GetFrameworkK
2dce0 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
2dcf0 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
2dd00 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
2dd10 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
2dd20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2dd30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2dd40 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
2dd50 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2dd60 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
2dd70 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2dd80 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
2dd90 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2dda0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2ddb0 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53  ring format = !S
2ddc0 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
2ddd0 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  pty(platformName
2dde0 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
2ddf0 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f       "{0}\\Micro
2de00 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c  soft\\{1}\\v{2}\
2de10 5c 7b 33 7d 22 20 3a 0d 0a 20 20 20 20 20 20 20  \{3}" :..       
2de20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d           "{0}\\M
2de30 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76  icrosoft\\{1}\\v
2de40 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  {2}";....       
2de50 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
2de60 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74  ng.Format(format
2de70 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65  , GetRootKeyName
2de80 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29  (perUser, wow64)
2de90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2dea0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
2deb0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
2dec0 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
2ded0 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
2dee0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2def0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
2df40 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
2df50 67 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d  g GetImageRuntim
2df60 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20  eVersion(..     
2df70 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
2df80 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
2df90 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2dfa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
2dfb0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
2dfc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dfd0 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d    Assembly assem
2dfe0 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 52  bly = Assembly.R
2dff0 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61  eflectionOnlyLoa
2e000 64 46 72 6f 6d 28 0d 0a 20 20 20 20 20 20 20 20  dFrom(..        
2e010 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
2e020 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  Name); /* throw 
2e030 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  */....          
2e040 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
2e050 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly != null)..   
2e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e070 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79   return assembly
2e080 2e 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  .ImageRuntimeVer
2e090 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
2e0a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2e0b0 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
2e0c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e0d0 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
2e0e0 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
2e0f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e100 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
2e110 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2e120 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2e130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2e170 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2e180 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
2e190 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72   GetFrameworkDir
2e1a0 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
2e1b0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
2e1c0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
2e1d0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2e1e0 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
2e1f0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2e200 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
2e210 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2e220 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
2e230 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2e240 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2e250 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
2e260 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2e270 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e280 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2e290 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
2e2a0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2e2b0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
2e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2d0 20 72 6f 6f 74 4b 65 79 2c 20 47 65 74 46 72 61   rootKey, GetFra
2e2e0 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d  meworkRootKeyNam
2e2f0 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  e(perUser, wow64
2e300 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2e310 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20 77          false, w
2e320 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2e330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2e340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e350 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
2e360 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2e370 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
2e380 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
2e390 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
2e3a0 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79 48 65  lue = RegistryHe
2e3b0 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a  lper.GetValue(..
2e3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e3d0 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74 61 6c      key, "Instal
2e3e0 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c 2c 20 77 68  lRoot", null, wh
2e3f0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
2e400 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e410 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20 69     if (!(value i
2e420 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20  s string))..    
2e430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e440 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
2e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e460 72 65 74 75 72 6e 20 50 61 74 68 2e 43 6f 6d 62  return Path.Comb
2e470 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ine(..          
2e480 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e            (strin
2e490 67 29 76 61 6c 75 65 2c 20 53 74 72 69 6e 67 2e  g)value, String.
2e4a0 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c 20 66  Format("v{0}", f
2e4b0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
2e4c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2e4d0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
2e4e0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2e4f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2e500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e540 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2e550 72 65 67 69 6f 6e 20 50 65 72 2d 46 72 61 6d 65  region Per-Frame
2e560 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d 20 48 61  work/Platform Ha
2e570 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
2e580 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
2e590 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 46 72  oid InitializeFr
2e5a0 61 6d 65 77 6f 72 6b 4c 69 73 74 28 0d 0a 20 20  ameworkList(..  
2e5b0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2e5c0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2e5d0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2e5e0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
2e5f0 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
2e600 20 20 20 20 20 20 20 20 20 20 72 65 66 20 46 72            ref Fr
2e610 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d  ameworkList fram
2e620 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20  eworkList..     
2e630 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2e640 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e650 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
2e660 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st == null)..   
2e670 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
2e680 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e 65 77  meworkList = new
2e690 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29   FrameworkList()
2e6a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2e6b0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
2e6c0 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  st.RootKey == nu
2e6d0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2e6e0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
2e6f0 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f  st.RootKey = roo
2e700 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
2e710 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2e720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e750 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2e760 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
2e770 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20  eworkList.Names 
2e780 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2e790 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2e7a0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2e7b0 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 20 6e  rkList.Names = n
2e7c0 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b  ew StringList();
2e7d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e7e0 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
2e7f0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
2e800 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
2e810 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20  n.NoDesktop)..  
2e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e830 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
2e840 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 46  Names.Add(".NETF
2e850 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 0d 0a 20  ramework");.... 
2e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2e870 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
2e880 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
2e890 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43  onfiguration.NoC
2e8a0 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20  ompact)..       
2e8b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8d0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
2e8e0 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d  mes.Add(".NETCom
2e8f0 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b  pactFramework");
2e900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e910 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
2e920 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e  ist.Names.Add(".
2e930 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77  NETCompactFramew
2e940 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ork");..        
2e950 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2e960 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
2e970 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74  Add(".NETCompact
2e980 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20  Framework");..  
2e990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2e9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2e9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea00 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2ea10 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
2ea20 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e  st.Versions == n
2ea30 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2ea40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2ea50 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
2ea60 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65  st.Versions = ne
2ea70 77 20 56 65 72 73 69 6f 6e 4d 61 70 28 29 3b 0d  w VersionMap();.
2ea80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ea90 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
2eaa0 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
2eab0 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
2eac0 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20  .NoDesktop)..   
2ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eaf0 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20      VersionList 
2eb00 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69  desktopVersionLi
2eb10 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e  st = new Version
2eb20 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
2eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2eb40 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
2eb50 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
2eb60 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e  onfiguration.NoN
2eb70 65 74 46 78 32 30 29 0d 0a 20 20 20 20 20 20 20  etFx20)..       
2eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb90 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
2eba0 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ist.Add(new Vers
2ebb0 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32 37 29  ion(2, 0, 50727)
2ebc0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ebd0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ebf0 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e    // NOTE: The .
2ec00 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 33 2e  NET Framework 3.
2ec10 35 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  5 does not have 
2ec20 69 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20  its own..       
2ec30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2ec40 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b        directory;
2ec50 20 68 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69   however, it sti
2ec60 6c 6c 20 6d 61 79 20 68 61 76 65 20 61 73 73 65  ll may have asse
2ec70 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mbly..          
2ec80 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2ec90 20 20 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75     folders for u
2eca0 73 65 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75  se in Visual Stu
2ecb0 64 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20  dio, etc...     
2ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2ecd0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2ece0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
2ecf0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
2ed00 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
2ed10 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 33 35 29 0d  tion.NoNetFx35).
2ed20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ed30 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
2ed40 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
2ed50 6e 65 77 20 56 65 72 73 69 6f 6e 28 33 2c 20 35  new Version(3, 5
2ed60 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
2ed70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
2ed80 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
2ed90 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
2eda0 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78  guration.NoNetFx
2edb0 34 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40)..           
2edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
2edd0 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e  ktopVersionList.
2ede0 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
2edf0 34 2c 20 30 2c 20 33 30 33 31 39 29 29 3b 0d 0a  4, 0, 30319));..
2ee00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ee10 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2ee30 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20   NOTE: The .NET 
2ee40 46 72 61 6d 65 77 6f 72 6b 20 34 2e 35 20 64 6f  Framework 4.5 do
2ee50 65 73 20 6e 6f 74 20 68 61 76 65 20 69 74 73 20  es not have its 
2ee60 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  own..           
2ee70 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2ee80 20 20 64 69 72 65 63 74 6f 72 79 3b 20 68 6f 77    directory; how
2ee90 65 76 65 72 2c 20 69 74 20 73 74 69 6c 6c 20 6d  ever, it still m
2eea0 61 79 20 68 61 76 65 20 61 73 73 65 6d 62 6c 79  ay have assembly
2eeb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eec0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66        //       f
2eed0 6f 6c 64 65 72 73 20 66 6f 72 20 75 73 65 20 69  olders for use i
2eee0 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 2c  n Visual Studio,
2eef0 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20   etc...         
2ef00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
2ef30 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
2ef40 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
2ef50 2e 4e 6f 4e 65 74 46 78 34 35 29 0d 0a 20 20 20  .NoNetFx45)..   
2ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef70 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73       desktopVers
2ef80 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20  ionList.Add(new 
2ef90 56 65 72 73 69 6f 6e 28 34 2c 20 35 2c 20 35 30  Version(4, 5, 50
2efa0 37 30 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  709));....      
2efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2efc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2efd0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
2efe0 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
2eff0 6b 20 34 2e 35 2e 31 20 64 6f 65 73 20 6e 6f 74  k 4.5.1 does not
2f000 20 68 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20   have its own.. 
2f010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f020 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69 72 65     //       dire
2f030 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20  ctory; however, 
2f040 69 74 20 73 74 69 6c 6c 20 6d 61 79 20 68 61 76  it still may hav
2f050 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  e assembly..    
2f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f070 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64 65 72 73  //       folders
2f080 20 66 6f 72 20 75 73 65 20 69 6e 20 56 69 73 75   for use in Visu
2f090 61 6c 20 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d  al Studio, etc..
2f0a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f0b0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2f0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2f0d0 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
2f0e0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
2f0f0 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74  figuration.NoNet
2f100 46 78 34 35 31 29 0d 0a 20 20 20 20 20 20 20 20  Fx451)..        
2f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f120 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69  desktopVersionLi
2f130 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  st.Add(new Versi
2f140 6f 6e 28 34 2c 20 35 2c 20 31 29 29 3b 0d 0a 0d  on(4, 5, 1));...
2f150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f160 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2f170 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2f180 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20 46  NOTE: The .NET F
2f190 72 61 6d 65 77 6f 72 6b 20 34 2e 35 2e 32 20 64  ramework 4.5.2 d
2f1a0 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69 74 73  oes not have its
2f1b0 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20   own..          
2f1c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2f1d0 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20 68 6f     directory; ho
2f1e0 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c 6c 20  wever, it still 
2f1f0 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d 62 6c  may have assembl
2f200 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
2f210 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2f220 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73 65 20  folders for use 
2f230 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  in Visual Studio
2f240 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20  , etc...        
2f250 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f270 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
2f280 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
2f290 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
2f2a0 6e 2e 4e 6f 4e 65 74 46 78 34 35 32 29 0d 0a 20  n.NoNetFx452).. 
2f2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2c0 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65         desktopVe
2f2d0 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65  rsionList.Add(ne
2f2e0 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 35 2c 20  w Version(4, 5, 
2f2f0 32 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2));....        
2f300 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f320 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65      // NOTE: The
2f330 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
2f340 34 2e 36 20 64 6f 65 73 20 6e 6f 74 20 68 61 76  4.6 does not hav
2f350 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20  e its own..     
2f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f370 2f 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72  /       director
2f380 79 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 73  y; however, it s
2f390 74 69 6c 6c 20 6d 61 79 20 68 61 76 65 20 61 73  till may have as
2f3a0 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..        
2f3b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2f3c0 20 20 20 20 20 66 6f 6c 64 65 72 73 20 66 6f 72       folders for
2f3d0 20 75 73 65 20 69 6e 20 56 69 73 75 61 6c 20 53   use in Visual S
2f3e0 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20  tudio, etc...   
2f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f400 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2f410 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2f420 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2f430 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2f440 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 36  ration.NoNetFx46
2f450 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2f460 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74             deskt
2f470 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  opVersionList.Ad
2f480 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c  d(new Version(4,
2f490 20 36 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   6));....       
2f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2f4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f4c0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
2f4d0 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
2f4e0 20 34 2e 36 2e 31 20 64 6f 65 73 20 6e 6f 74 20   4.6.1 does not 
2f4f0 68 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20  have its own..  
2f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f510 20 20 2f 2f 20 20 20 20 20 20 20 64 69 72 65 63    //       direc
2f520 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 69  tory; however, i
2f530 74 20 73 74 69 6c 6c 20 6d 61 79 20 68 61 76 65  t still may have
2f540 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..     
2f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f560 2f 20 20 20 20 20 20 20 66 6f 6c 64 65 72 73 20  /       folders 
2f570 66 6f 72 20 75 73 65 20 69 6e 20 56 69 73 75 61  for use in Visua
2f580 6c 20 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a  l Studio, etc...
2f590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5a0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2f5b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2f5c0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
2f5d0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
2f5e0 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46  iguration.NoNetF
2f5f0 78 34 36 31 29 0d 0a 20 20 20 20 20 20 20 20 20  x461)..         
2f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2f610 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73  esktopVersionLis
2f620 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  t.Add(new Versio
2f630 6e 28 34 2c 20 36 2c 20 31 29 29 3b 0d 0a 0d 0a  n(4, 6, 1));....
2f640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f650 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
2f660 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 22  t.Versions.Add("
2f670 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d  .NETFramework",.
2f680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f690 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
2f6a0 56 65 72 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20  VersionList);.. 
2f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2f6c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f6d0 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
2f6e0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
2f6f0 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
2f700 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20  n.NoCompact)..  
2f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2f720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f730 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
2f740 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28  st.Versions.Add(
2f750 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
2f760 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20  ework",..       
2f770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f780 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
2f790 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b  (new Version[] {
2f7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f7b0 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65            new Ve
2f7c0 72 73 69 6f 6e 28 32 2c 20 30 2c 20 30 2c 20 30  rsion(2, 0, 0, 0
2f7d0 29 2c 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 33  ), new Version(3
2f7e0 2c 20 35 2c 20 30 2c 20 30 29 0d 0a 20 20 20 20  , 5, 0, 0)..    
2f7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f800 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }));..          
2f810 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2f820 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f830 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2f840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f870 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2f880 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
2f890 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
2f8a0 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c  ormNames == null
2f8b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2f8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f8d0 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
2f8e0 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20  PlatformNames = 
2f8f0 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29  new StringList()
2f900 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2f910 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
2f920 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
2f930 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
2f940 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20  on.NoDesktop).. 
2f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f960 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
2f970 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41  .PlatformNames.A
2f980 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  dd(null);....   
2f990 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2f9a0 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
2f9b0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
2f9c0 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d  figuration.NoCom
2f9d0 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  pact)..         
2f9e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
2fa00 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
2fa10 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 50  formNames.Add("P
2fa20 6f 63 6b 65 74 50 43 22 29 3b 0d 0a 20 20 20 20  ocketPC");..    
2fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa40 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
2fa50 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28  atformNames.Add(
2fa60 22 53 6d 61 72 74 70 68 6f 6e 65 22 29 3b 0d 0a  "Smartphone");..
2fa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa80 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
2fa90 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
2faa0 41 64 64 28 22 57 69 6e 64 6f 77 73 43 45 22 29  Add("WindowsCE")
2fab0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2fac0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2fad0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
2fae0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2faf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb30 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2fb40 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2fb50 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44 69   HaveFrameworkDi
2fb60 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
2fb70 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
2fb80 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
2fb90 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2fba0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
2fbb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2fbc0 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
2fbd0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2fbe0 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
2fbf0 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
2fc00 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2fc10 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2fc20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2fc30 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2fc40 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2fc50 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
2fc60 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
2fc70 20 72 65 66 20 73 74 72 69 6e 67 20 69 6e 73 74   ref string inst
2fc80 61 6c 6c 44 69 72 65 63 74 6f 72 79 0d 0a 20 20  allDirectory..  
2fc90 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2fca0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2fcb0 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
2fcc0 6d 65 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72  me = GetFramewor
2fcd0 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  kKeyName(..     
2fce0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
2fcf0 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
2fd00 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
2fd10 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65  formName, perUse
2fd20 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2fd30 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20      wow64);.... 
2fd40 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2fd50 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2fd60 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
2fd70 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2fd80 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2fd90 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2fda0 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
2fdb0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2fdc0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2fdd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2fde0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
2fdf0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2fe00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2fe10 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
2fe20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c            if (pl
2fe30 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75  atformName != nu
2fe40 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69  ll) // NOTE: Ski
2fe50 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a  p non-desktop...
2fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe70 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2fe80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fe90 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
2fea0 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d 65 77  tory = GetFramew
2feb0 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20  orkDirectory(.. 
2fec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fed0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
2fee0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 65  eworkVersion, pe
2fef0 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68  rUser, wow64, wh
2ff00 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2ff10 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
2ff20 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
2ff30 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
2ff40 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
2ff50 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
2ff60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff70 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2ff80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ff90 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72     if (!Director
2ffa0 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74 6f  y.Exists(directo
2ffb0 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
2ffc0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2ffd0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2ffe0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2fff0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
30000 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
30010 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
30020 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
30030 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
30040 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
30050 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
30060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e                ".
30070 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30  NET Framework {0
30080 7d 20 66 6f 75 6e 64 20 76 69 61 20 64 69 72 65  } found via dire
30090 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20  ctory {1}.",..  
300a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300b0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61    ForDisplay(fra
300c0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 20  meworkVersion), 
300d0 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63  ForDisplay(direc
300e0 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20  tory)),..       
300f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
30100 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
30110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30120 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79  installDirectory
30130 20 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20   = directory;.. 
30140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
30150 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
30160 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
30170 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
30180 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
30190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
301a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
301b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
301c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
301d0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
301e0 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 72 61 6d  ic bool HaveFram
301f0 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a  eworkRegistry(..
30200 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
30210 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
30220 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
30230 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
30240 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
30250 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
30260 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
30270 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
30280 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
30290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
302a0 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
302b0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
302c0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
302d0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
302e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
302f0 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
30300 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
30310 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30320 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
30330 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79   GetFrameworkKey
30340 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
30350 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
30360 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
30370 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
30380 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a  Name, perUser,..
30390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303a0 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
303b0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
303c0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
303d0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
303e0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
303f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30400 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
30410 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
30420 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
30430 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
30450 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
30460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30470 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
30480 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
30490 20 20 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f        if (platfo
304a0 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20  rmName != null) 
304b0 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f  // NOTE: Skip no
304c0 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20  n-desktop...    
304d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304e0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a  return true;....
304f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30500 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
30510 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
30520 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20  rity.Lower,..   
30530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30540 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
30550 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
30560 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
30570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30580 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
30590 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69 61  rk {0} found via
305a0 20 72 65 67 69 73 74 72 79 20 7b 31 7d 2e 22 2c   registry {1}.",
305b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
305c0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
305d0 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
305e0 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b  n), ForDisplay(k
305f0 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  eyName)),..     
30600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
30610 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
30620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30630 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
30640 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
30650 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30660 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
30670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
306a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
306b0 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
306c0 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
306d0 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
306e0 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ]..        priva
306f0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46  te static bool F
30700 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 43  orEachFrameworkC
30710 6f 6e 66 69 67 28 0d 0a 20 20 20 20 20 20 20 20  onfig(..        
30720 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
30730 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20   registry,..    
30740 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
30750 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c  kList frameworkL
30760 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ist,..          
30770 20 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69    FrameworkConfi
30780 67 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61  gCallback callba
30790 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
307a0 20 73 74 72 69 6e 67 20 76 65 72 73 69 6f 6e 2c   string version,
307b0 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e   /* NOTE: Option
307c0 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  al. */..        
307d0 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72      string invar
307e0 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  iantName,..     
307f0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
30800 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
30810 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74   string descript
30820 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
30830 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d    string typeNam
30840 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
30850 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73  AssemblyName ass
30860 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  emblyName,..    
30870 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
30880 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
30890 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
308a0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
308b0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
308c0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
308d0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
308e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
308f0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
30900 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
30910 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
30920 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65     ref bool save
30930 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
30940 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
30950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
30960 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
30970 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69          if (regi
30980 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  stry == null).. 
30990 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
309a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
309b0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
309c0 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20  egistry";..     
309d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
309e0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
309f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
30a00 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
30a10 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c  workList == null
30a20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
30a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30a40 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
30a50 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73  id framework lis
30a60 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t";..           
30a70 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
30a80 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
30a90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
30aa0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
30ab0 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65   rootKey = frame
30ac0 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79  workList.RootKey
30ad0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30ae0 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
30af0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
30b00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30b10 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
30b20 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22  nvalid root key"
30b30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30b40 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
30b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
30b60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
30b70 66 20 28 21 49 73 53 75 70 70 6f 72 74 65 64 52  f (!IsSupportedR
30b80 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c  ootKey(registry,
30b90 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20   rootKey))..    
30ba0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30bb0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
30bc0 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73   = "root key mus
30bd0 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72  t be per-user or
30be0 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a   per-machine";..
30bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c00 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
30c10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
30c20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
30c30 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
30c40 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
30c50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30c60 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
30c70 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f  or = "no framewo
30c80 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b  rk names found";
30c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30ca0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
30cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
30cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
30cd0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
30ce0 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
30cf0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
30d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30d10 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72    error = "no fr
30d20 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73  amework versions
30d30 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
30d40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
30d50 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
30d60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
30d70 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
30d80 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
30d90 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
30da0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
30dc0 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66  rror = "no platf
30dd0 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22  orm names found"
30de0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30df0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
30e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
30e10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
30e20 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
30e30 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20  .Names.Count != 
30e40 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
30e50 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e  atformNames.Coun
30e60 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
30e70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
30e80 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
30e90 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77  g.Format("framew
30ea0 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b  ork name count {
30eb0 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d  0} does not " +.
30ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30ed0 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74       "match plat
30ee0 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20  form name count 
30ef0 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c  {1}", frameworkL
30f00 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c  ist.Names.Count,
30f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30f20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
30f30 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
30f40 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  s.Count);....   
30f50 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
30f60 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
30f70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
30f80 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
30f90 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
30fa0 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69  ex < frameworkLi
30fb0 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20  st.Names.Count; 
30fc0 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
30fd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30fe0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
30ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
31000 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e  NOTE: Grab the n
31010 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65  ame of the frame
31020 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54  work (e.g. ".NET
31030 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20  Framework")..   
31040 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
31050 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61        and the na
31060 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f  me of the platfo
31070 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77  rm (e.g. "Window
31080 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20  sCE")...        
31090 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
310a0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
310b0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
310c0 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
310d0 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a  .Names[index];..
310e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310f0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
31100 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  ame = frameworkL
31110 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
31120 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20  s[index];....   
31130 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
31140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31150 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61   // NOTE: Skip a
31160 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20 66  ll non-desktop f
31170 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65 2e 20  rameworks (i.e. 
31180 69 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 0d  if the platform.
31190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
311a0 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65 20 69   //       name i
311b0 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20  s not null)...  
311c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
311d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
311e0 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61    if (platformNa
311f0 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31210 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
31220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
31230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31240 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20    // NOTE: Grab 
31250 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 76 65  the supported ve
31260 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70  rsions of this p
31270 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20  articular..     
31280 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
31290 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a      framework...
312a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312b0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
312c0 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20      VersionList 
312d0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
312e0 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  List;....       
312f0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
31300 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  sion != null).. 
31310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
31320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31330 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
31340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
31350 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76   NOTE: Manual ov
31360 65 72 72 69 64 65 20 6f 66 20 74 68 65 20 2a 4f  erride of the *O
31370 4e 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76 65  NE* framework ve
31380 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  rsion..         
31390 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
313a0 20 20 20 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d      to process..
313b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
313c0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
313d0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
313e0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
313f0 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c  t = new VersionL
31400 69 73 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ist();..        
31410 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
31420 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
31430 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
31440 28 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20  (version));..   
31450 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
31460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31470 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
31480 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31490 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
314a0 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  (!frameworkList.
314b0 56 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56  Versions.TryGetV
314c0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
314d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314e0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
314f0 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56  , out frameworkV
31500 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a  ersionList) ||..
31510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31520 20 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f          (framewo
31530 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d  rkVersionList ==
31540 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
31550 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
31560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31570 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
31580 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
31590 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
315a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
315b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
315c0 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20  oreach (Version 
315d0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
315e0 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72   in frameworkVer
315f0 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20  sionList)..     
31600 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
31610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31620 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
31630 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
31640 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
31650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31660 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
31670 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
31680 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
31690 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
316a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72               "fr
316b0 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30  ameworkName = {0
316c0 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  }, frameworkVers
316d0 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a  ion = {1}, " +..
316e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316f0 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72          "platfor
31700 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f  mName = {2}", Fo
31710 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
31720 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  rkName),..      
31730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31740 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61    ForDisplay(fra
31750 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d  meworkVersion),.
31760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31770 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
31780 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  lay(platformName
31790 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
317a0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
317b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
317c0 67 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f  g installDirecto
317d0 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  ry = null;....  
317e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317f0 20 20 69 66 20 28 21 48 61 76 65 46 72 61 6d 65    if (!HaveFrame
31800 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a  workDirectory(..
31810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31820 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
31830 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
31840 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
31850 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
31860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31870 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c     platformName,
31880 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
31890 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
318a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
318b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
318c0 65 66 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74  ef installDirect
318d0 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
318e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
318f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31900 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
31910 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
31920 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d  cePriority.Low,.
31930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31940 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
31950 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
31960 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
31970 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
31980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31990 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
319a0 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63  mework {0} direc
319b0 74 6f 72 79 20 6e 6f 74 20 66 6f 75 6e 64 2c 20  tory not found, 
319c0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
319d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319e0 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20   "skipping...", 
319f0 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
31a00 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c 0d 0a  workVersion)),..
31a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
31a30 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
31a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a50 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
31a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31a70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
31a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
31a90 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e  f (callback == n
31aa0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
31ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
31ac0 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
31ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
31ae0 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20  tring directory 
31af0 3d 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f  = installDirecto
31b00 72 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ry;....         
31b10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
31b20 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
31b30 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d  pty(directory)).
31b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31b50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b70 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
31b80 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
31b90 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20  rity.Low,..     
31ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bb0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
31bc0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
31bd0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
31be0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
31bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c00 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
31c10 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20 69   {0} directory i
31c20 73 20 69 6e 76 61 6c 69 64 2c 20 22 20 2b 0d 0a  s invalid, " +..
31c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c40 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69              "ski
31c50 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69  pping...", ForDi
31c60 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
31c70 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
31c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
31ca0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
31cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cc0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
31cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ce0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
31cf0 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74            direct
31d00 6f 72 79 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ory = Path.Combi
31d10 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 43  ne(directory, "C
31d20 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20  onfig");....    
31d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d40 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45  if (!Directory.E
31d50 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79 29  xists(directory)
31d60 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
31d70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d90 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
31da0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
31db0 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20  iority.Low,..   
31dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31dd0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
31de0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
31df0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
31e00 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
31e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
31e30 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79  rk {0} directory
31e40 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20   {1} does not " 
31e50 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
31e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
31e70 65 78 69 73 74 2c 20 73 6b 69 70 70 69 6e 67 2e  exist, skipping.
31e80 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ..", ForDisplay(
31e90 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
31ea0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
31eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ec0 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63  ForDisplay(direc
31ed0 74 6f 72 79 29 29 2c 20 74 72 61 63 65 43 61 74  tory)), traceCat
31ee0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
31ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f00 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
31f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
31f30 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
31f40 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  g fileName = Pat
31f50 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
31f60 6f 72 79 2c 20 22 6d 61 63 68 69 6e 65 2e 63 6f  ory, "machine.co
31f70 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  nfig");....     
31f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
31f90 66 20 28 21 46 69 6c 65 2e 45 78 69 73 74 73 28  f (!File.Exists(
31fa0 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  fileName))..    
31fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
31fd0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
31fe0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
31ff0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
32000 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
32010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32020 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
32030 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
32040 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
32050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32060 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
32070 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20  T Framework {0} 
32080 66 69 6c 65 20 7b 31 7d 20 64 6f 65 73 20 6e 6f  file {1} does no
32090 74 20 65 78 69 73 74 2c 20 22 20 2b 0d 0a 20 20  t exist, " +..  
320a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320b0 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70            "skipp
320c0 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70  ing...", ForDisp
320d0 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
320e0 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
320f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32100 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66      ForDisplay(f
32110 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61 63 65  ileName)), trace
32120 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
32130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32140 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
32150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32160 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
32170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
32180 6f 6c 20 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20  ol localSaved = 
32190 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
321a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
321b0 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20   (!callback(..  
321c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321d0 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61            fileNa
321e0 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  me, invariantNam
321f0 65 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72 69 70  e, name, descrip
32200 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
32210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32220 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61 73 73     typeName, ass
32230 65 6d 62 6c 79 4e 61 6d 65 2c 20 69 6e 73 74 61  emblyName, insta
32240 6c 6c 44 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  llDirectory,..  
32250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32260 20 20 20 20 20 20 20 20 20 20 63 6c 69 65 6e 74            client
32270 44 61 74 61 2c 20 70 65 72 55 73 65 72 2c 20 77  Data, perUser, w
32280 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73  ow64, throwOnMis
32290 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
322a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322b0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
322c0 73 65 2c 20 72 65 66 20 6c 6f 63 61 6c 53 61 76  se, ref localSav
322d0 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d  ed, ref error)).
322e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
322f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32310 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
32320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32330 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
32340 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
32350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32360 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
32370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
32380 66 20 28 6c 6f 63 61 6c 53 61 76 65 64 20 26 26  f (localSaved &&
32390 20 21 73 61 76 65 64 29 0d 0a 20 20 20 20 20 20   !saved)..      
323a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323b0 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 74 72        saved = tr
323c0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
323d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
323e0 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
323f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32400 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
32410 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
32420 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
32430 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  west,..         
32440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32450 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
32460 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
32470 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
32480 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
32490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324a0 20 20 20 20 20 22 6c 6f 63 61 6c 53 61 76 65 64       "localSaved
324b0 20 3d 20 7b 30 7d 2c 20 73 61 76 65 64 20 3d 20   = {0}, saved = 
324c0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
324d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324e0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
324f0 79 28 6c 6f 63 61 6c 53 61 76 65 64 29 2c 20 46  y(localSaved), F
32500 6f 72 44 69 73 70 6c 61 79 28 73 61 76 65 64 29  orDisplay(saved)
32510 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
32520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32530 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
32540 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
32550 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
32560 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
32570 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
32580 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32590 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
325a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
325b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
325c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
325d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
325e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
325f0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
32600 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
32610 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
32620 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
32630 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
32640 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63  atic bool ForEac
32650 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74  hFrameworkRegist
32660 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
32670 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65   MockRegistry re
32680 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20  gistry,..       
32690 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69       FrameworkLi
326a0 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  st frameworkList
326b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  ,..            F
326c0 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79  rameworkRegistry
326d0 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63  Callback callbac
326e0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
326f0 73 74 72 69 6e 67 20 76 65 72 73 69 6f 6e 2c 20  string version, 
32700 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e 61  /* NOTE: Optiona
32710 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  l. */..         
32720 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
32730 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
32740 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
32750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
32760 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
32770 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
32780 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
32790 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
327a0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
327b0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
327c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
327d0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
327e0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
327f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32800 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73 74        if (regist
32810 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ry == null)..   
32820 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32830 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
32840 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67  r = "invalid reg
32850 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20  istry";..       
32860 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
32870 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
32880 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
32890 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
328a0 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d  rkList == null).
328b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
328c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328d0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
328e0 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74 22   framework list"
328f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
32900 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
32910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
32920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ...            M
32930 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
32940 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 77 6f  ootKey = framewo
32950 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d  rkList.RootKey;.
32960 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
32970 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
32980 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
32990 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
329a0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
329b0 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d  alid root key";.
329c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
329d0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
329e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
329f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
32a00 28 21 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f  (!IsSupportedRoo
32a10 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c 20 72  tKey(registry, r
32a20 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 20 20  ootKey))..      
32a30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
32a40 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
32a50 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20   "root key must 
32a60 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70  be per-user or p
32a70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20  er-machine";..  
32a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
32a90 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
32aa0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
32ab0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
32ac0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
32ad0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
32ae0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
32af0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
32b00 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b   = "no framework
32b10 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a   names found";..
32b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b30 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
32b40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
32b50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
32b60 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
32b70 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
32b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
32b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ba0 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d  error = "no fram
32bb0 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66  ework versions f
32bc0 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
32bd0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
32be0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
32bf0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
32c00 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
32c10 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
32c20 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
32c30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32c40 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
32c50 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72  or = "no platfor
32c60 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d  m names found";.
32c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32c80 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
32c90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
32ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
32cb0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e  (frameworkList.N
32cc0 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72  ames.Count != fr
32cd0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
32ce0 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29  formNames.Count)
32cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
32d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32d10 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
32d20 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72  Format("framewor
32d30 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d  k name count {0}
32d40 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20   does not " +.. 
32d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d60 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f     "match platfo
32d70 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31  rm name count {1
32d80 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  }", frameworkLis
32d90 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a  t.Names.Count,..
32da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32db0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
32dc0 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
32dd0 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
32de0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
32df0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
32e00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
32e10 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
32e20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78  index = 0; index
32e30 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   < frameworkList
32e40 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e  .Names.Count; in
32e50 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  dex++)..        
32e60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
32e70 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
32e80 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
32e90 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d  TE: Grab the nam
32ea0 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f  e of the framewo
32eb0 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72  rk (e.g. ".NETFr
32ec0 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20  amework")..     
32ed0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
32ee0 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65      and the name
32ef0 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d   of the platform
32f00 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43   (e.g. "WindowsC
32f10 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  E")...          
32f20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
32f30 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
32f40 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d   frameworkName =
32f50 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
32f60 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20  ames[index];..  
32f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
32f80 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
32f90 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  e = frameworkLis
32fa0 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b  t.PlatformNames[
32fb0 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20  index];....     
32fc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
32fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
32fe0 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  / NOTE: Grab the
32ff0 20 73 75 70 70 6f 72 74 65 64 20 76 65 72 73 69   supported versi
33000 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72 74  ons of this part
33010 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20  icular..        
33020 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
33030 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20   framework...   
33040 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
33050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33060 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61   VersionList fra
33070 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
33080 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
33090 20 20 20 20 20 20 69 66 20 28 76 65 72 73 69 6f        if (versio
330a0 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n != null)..    
330b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
330c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330d0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
330e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
330f0 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65 72 72  TE: Manual overr
33100 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e 45 2a  ide of the *ONE*
33110 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69   framework versi
33120 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
33130 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
33140 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20   to process...  
33150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33160 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
33170 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
33180 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  orkVersionList =
33190 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
331a0 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
331b0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
331c0 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  rkVersionList.Ad
331d0 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 76 65  d(new Version(ve
331e0 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20  rsion));..      
331f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
33200 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
33210 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
33220 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33230 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 66            if (!f
33240 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
33250 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75  sions.TryGetValu
33260 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
33270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33280 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f  frameworkName, o
33290 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ut frameworkVers
332a0 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20  ionList) ||..   
332b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332c0 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b 56       (frameworkV
332d0 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75  ersionList == nu
332e0 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
332f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
33300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33310 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
33320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33330 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
33340 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
33350 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
33360 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66 72 61  ach (Version fra
33370 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e  meworkVersion in
33380 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
33390 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20  nList)..        
333a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
333b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
333c0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
333d0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
333e0 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20  ity.Lower,..    
333f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33400 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
33410 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
33420 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
33430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33440 20 20 20 20 20 20 20 20 20 20 22 66 72 61 6d 65            "frame
33450 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20  workName = {0}, 
33460 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
33470 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20   = {1}, " +..   
33480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33490 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61       "platformNa
334a0 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69  me = {2}", ForDi
334b0 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e  splay(frameworkN
334c0 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
334d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
334e0 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
334f0 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
33500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33510 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
33520 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c  (platformName)),
33530 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
33540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33550 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76          if (!Hav
33560 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74  eFrameworkRegist
33570 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
33580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33590 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
335a0 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
335b0 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
335c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335d0 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
335e0 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77  Name, perUser, w
335f0 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65  ow64, whatIf, ve
33600 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
33610 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
33620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33630 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
33640 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
33650 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
33660 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
33670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
33680 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
33690 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
336a0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
336b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336c0 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
336d0 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 72 65 67  ramework {0} reg
336e0 69 73 74 72 79 20 6e 6f 74 20 66 6f 75 6e 64 2c  istry not found,
336f0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
33700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33710 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c    "skipping...",
33720 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
33730 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c 0d  eworkVersion)),.
33740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33750 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
33760 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
33770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33780 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
33790 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
337a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
337b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337c0 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20  if (callback == 
337d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
337e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
337f0 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
33800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33810 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a  if (!callback(..
33820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33830 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
33840 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
33850 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
33860 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
33870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33880 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c     platformName,
33890 20 6e 75 6c 6c 2c 20 63 6c 69 65 6e 74 44 61 74   null, clientDat
338a0 61 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  a, perUser,..   
338b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338c0 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 2c 20           wow64, 
338d0 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20  throwOnMissing, 
338e0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
338f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
33910 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
33920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
33930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33940 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
33950 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
33960 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
33970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33980 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
33990 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
339a0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
339b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
339c0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
339d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
339e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
339f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
33a20 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
33a30 6e 20 50 65 72 2d 56 69 73 75 61 6c 20 53 74 75  n Per-Visual Stu
33a40 64 69 6f 20 56 65 72 73 69 6f 6e 20 48 61 6e 64  dio Version Hand
33a50 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
33a60 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
33a70 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 4c 69  d InitializeVsLi
33a80 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st(..           
33a90 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
33aa0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
33ab0 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61         Configura
33ac0 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  tion configurati
33ad0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
33ae0 20 72 65 66 20 56 73 4c 69 73 74 20 76 73 4c 69   ref VsList vsLi
33af0 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st..            
33b00 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
33b10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
33b20 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
33b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
33b40 73 4c 69 73 74 20 3d 20 6e 65 77 20 56 73 4c 69  sList = new VsLi
33b50 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
33b60 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e       if (vsList.
33b70 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  RootKey == null)
33b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33b90 20 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79    vsList.RootKey
33ba0 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20   = rootKey;.... 
33bb0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
33bc0 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d  sList.Versions =
33bd0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
33be0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33bf0 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56          vsList.V
33c00 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65  ersions = new Ve
33c10 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a  rsionList();....
33c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c30 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
33c40 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
33c50 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
33c60 56 73 32 30 30 35 29 0d 0a 20 20 20 20 20 20 20  Vs2005)..       
33c70 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
33c80 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
33c90 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 38 2c 20  (new Version(8, 
33ca0 30 29 29 3b 20 2f 2f 20 32 30 30 35 0d 0a 0d 0a  0)); // 2005....
33cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cc0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
33cd0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
33ce0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
33cf0 56 73 32 30 30 38 29 0d 0a 20 20 20 20 20 20 20  Vs2008)..       
33d00 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
33d10 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
33d20 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 39 2c 20  (new Version(9, 
33d30 30 29 29 3b 20 2f 2f 20 32 30 30 38 0d 0a 0d 0a  0)); // 2008....
33d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d50 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
33d60 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
33d70 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
33d80 56 73 32 30 31 30 29 0d 0a 20 20 20 20 20 20 20  Vs2010)..       
33d90 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
33da0 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
33db0 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 30 2c  (new Version(10,
33dc0 20 30 29 29 3b 2f 2f 20 32 30 31 30 0d 0a 0d 0a   0));// 2010....
33dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33de0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
33df0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
33e00 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
33e10 56 73 32 30 31 32 29 0d 0a 20 20 20 20 20 20 20  Vs2012)..       
33e20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
33e30 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
33e40 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 31 2c  (new Version(11,
33e50 20 30 29 29 3b 2f 2f 20 32 30 31 32 0d 0a 0d 0a   0));// 2012....
33e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e70 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
33e80 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
33e90 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
33ea0 56 73 32 30 31 33 29 0d 0a 20 20 20 20 20 20 20  Vs2013)..       
33eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
33ec0 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
33ed0 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 32 2c  (new Version(12,
33ee0 20 30 29 29 3b 2f 2f 20 32 30 31 33 0d 0a 0d 0a   0));// 2013....
33ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f00 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
33f10 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
33f20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
33f30 56 73 32 30 31 35 29 0d 0a 20 20 20 20 20 20 20  Vs2015)..       
33f40 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
33f50 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
33f60 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 34 2c  (new Version(14,
33f70 20 30 29 29 3b 2f 2f 20 32 30 31 35 0d 0a 20 20   0));// 2015..  
33f80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
33f90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
33fa0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
33fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
33ff0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
34000 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 56 73 56  tic bool HaveVsV
34010 65 72 73 69 6f 6e 44 69 72 65 63 74 6f 72 79 28  ersionDirectory(
34020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
34030 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
34040 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
34050 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
34060 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
34070 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69      string suffi
34080 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
34090 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
340a0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
340b0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
340c0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
340d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
340e0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
340f0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
34100 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72 65 63  ing installDirec
34110 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  tory..          
34120 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
34130 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
34140 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
34150 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
34160 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
34170 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34180 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
34190 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
341a0 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
341b0 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
341c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
341d0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
341e0 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
341f0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
34200 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
34210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
34220 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
34230 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
34240 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
34250 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34260 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
34270 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
34280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34290 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
342a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
342b0 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
342c0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47  RegistryHelper.G
342d0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
342e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
342f0 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72 22 2c  y, "InstallDir",
34300 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76   null, whatIf, v
34310 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
34320 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
34330 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e  !(value is strin
34340 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
34350 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
34360 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
34370 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
34380 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28 73 74   directory = (st
34390 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  ring)value;.... 
343a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
343b0 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
343c0 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72  OrEmpty(director
343d0 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
343e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
343f0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
34400 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44            if (!D
34410 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28  irectory.Exists(
34420 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
34430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34440 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
34450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34460 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
34470 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
34480 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
34490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
344a0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
344b0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
344c0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
344d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
344e0 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 74 75       "Visual Stu
344f0 64 69 6f 20 7b 30 7d 20 66 6f 75 6e 64 20 69 6e  dio {0} found in
34500 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22   directory {1}."
34510 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34520 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
34530 79 28 76 73 56 65 72 73 69 6f 6e 29 2c 20 46 6f  y(vsVersion), Fo
34540 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f  rDisplay(directo
34550 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ry)),..         
34560 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
34570 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
34580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
34590 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 20 3d  stallDirectory =
345a0 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20   directory;..   
345b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
345c0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
345d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
345e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
345f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34630 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
34640 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
34650 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
34660 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
34670 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
34680 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63  atic bool ForEac
34690 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74  hVsVersionRegist
346a0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
346b0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65   MockRegistry re
346c0 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20  gistry,..       
346d0 20 20 20 20 20 56 73 4c 69 73 74 20 76 73 4c 69       VsList vsLi
346e0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
346f0 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52 65 67   VisualStudioReg
34700 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63 61  istryCallback ca
34710 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
34720 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
34730 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix,..           
34740 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
34750 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
34760 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
34770 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
34780 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
34790 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
347a0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
347b0 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
347c0 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
347d0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
347e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
347f0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
34800 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
34810 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
34820 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
34830 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34840 20 20 69 66 20 28 72 65 67 69 73 74 72 79 20 3d    if (registry =
34850 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
34860 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34870 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
34880 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72  "invalid registr
34890 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
348a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
348b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
348c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
348d0 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e   if (vsList == n
348e0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
348f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
34900 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
34910 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22 3b 0d  valid VS list";.
34920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34930 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
34940 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
34950 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
34960 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
34970 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e 52 6f  tKey = vsList.Ro
34980 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  otKey;....      
34990 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
349a0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
349b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
349c0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
349d0 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74   = "invalid root
349e0 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20   key";..        
349f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
34a00 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
34a10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
34a20 20 20 20 20 69 66 20 28 21 49 73 53 75 70 70 6f      if (!IsSuppo
34a30 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67 69  rtedRootKey(regi
34a40 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d  stry, rootKey)).
34a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
34a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a70 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65  error = "root ke
34a80 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73  y must be per-us
34a90 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e  er or per-machin
34aa0 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
34ab0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
34ac0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
34ad0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
34ae0 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73   if (vsList.Vers
34af0 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
34b00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
34b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
34b20 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76 65 72  ror = "no VS ver
34b30 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  sions found";.. 
34b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
34b50 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
34b60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
34b70 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
34b80 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73 56 65  ch (Version vsVe
34b90 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73 74 2e  rsion in vsList.
34ba0 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20 20 20  Versions)..     
34bb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34bc0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
34bd0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
34be0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
34bf0 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  ower,..         
34c00 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
34c10 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
34c20 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
34c30 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
34c40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 76 73               "vs
34c50 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c 20  Version = {0}", 
34c60 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 72  ForDisplay(vsVer
34c70 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  sion)),..       
34c80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
34c90 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
34ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cb0 73 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69  string installDi
34cc0 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d  rectory = null;.
34cd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34ce0 20 20 20 69 66 20 28 21 48 61 76 65 56 73 56 65     if (!HaveVsVe
34cf0 72 73 69 6f 6e 44 69 72 65 63 74 6f 72 79 28 0d  rsionDirectory(.
34d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34d10 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
34d20 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66  , vsVersion, suf
34d30 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  fix, perUser, wo
34d40 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  w64, whatIf,..  
34d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d60 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72        verbose, r
34d70 65 66 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74  ef installDirect
34d80 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
34d90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
34db0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
34dc0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
34dd0 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  ty.Low,..       
34de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34df0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
34e00 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
34e10 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
34e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e30 20 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53         "Visual S
34e40 74 75 64 69 6f 20 7b 30 7d 20 6e 6f 74 20 66 6f  tudio {0} not fo
34e50 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e  und, skipping...
34e60 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
34e70 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
34e80 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e  isplay(vsVersion
34e90 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
34ea0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
34eb0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
34ec0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
34ed0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
34ee0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
34ef0 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29  allback == null)
34f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34f10 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
34f20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34f30 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b     if (!callback
34f40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
34f50 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
34f60 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73  ey, vsVersion, s
34f70 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20  uffix, package, 
34f80 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79  installDirectory
34f90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34fa0 20 20 20 20 20 20 20 20 20 20 20 63 6c 69 65 6e             clien
34fb0 74 44 61 74 61 2c 20 70 65 72 55 73 65 72 2c 20  tData, perUser, 
34fc0 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69  wow64, throwOnMi
34fd0 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 0d 0a  ssing, whatIf,..
34fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ff0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c          verbose,
35000 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
35010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
35020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35030 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
35040 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
35050 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
35060 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
35070 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
35080 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
35090 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
350a0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
350b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
350c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
350d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
350e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
350f0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
35100 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74  egion Configurat
35110 69 6f 6e 20 46 69 6c 65 20 48 61 6e 64 6c 69 6e  ion File Handlin
35120 67 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68  g..        [Meth
35130 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
35140 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
35150 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70  ing)]..        p
35160 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
35170 6f 6c 20 41 64 64 44 62 50 72 6f 76 69 64 65 72  ol AddDbProvider
35180 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  Factory(..      
35190 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
351a0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
351b0 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72      string invar
351c0 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  iantName,..     
351d0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
351e0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
351f0 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74   string descript
35200 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
35210 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d    string typeNam
35220 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
35230 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73  AssemblyName ass
35240 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  emblyName,..    
35250 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
35260 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
35270 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
35280 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
35290 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
352a0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
352b0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
352c0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
352d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
352e0 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66    bool dirty = f
352f0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
35300 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64     XmlDocument d
35310 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d  ocument = new Xm
35320 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a  lDocument();....
35330 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
35340 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69  ment.PreserveWhi
35350 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d  tespace = true;.
35360 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
35370 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e  ument.Load(fileN
35380 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
35390 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
353a0 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63  addElement = doc
353b0 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67  ument.SelectSing
353c0 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20  leNode(..       
353d0 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
353e0 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41  Format(XPathForA
353f0 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72  ddElement, invar
35400 69 61 6e 74 4e 61 6d 65 29 29 20 61 73 20 58 6d  iantName)) as Xm
35410 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20  lElement;....   
35420 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64           if (add
35430 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29  Element == null)
35440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
35450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35460 20 73 74 72 69 6e 67 5b 5d 20 65 6c 65 6d 65 6e   string[] elemen
35470 74 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20 20 20 20  tNames = {..    
35480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35490 22 73 79 73 74 65 6d 2e 64 61 74 61 22 2c 20 22  "system.data", "
354a0 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
354b0 69 65 73 22 0d 0a 20 20 20 20 20 20 20 20 20 20  ies"..          
354c0 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20        };....    
354d0 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
354e0 6c 65 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 45  lement previousE
354f0 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20  lement =..      
35500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
35510 63 75 6d 65 6e 74 2e 44 6f 63 75 6d 65 6e 74 45  cument.DocumentE
35520 6c 65 6d 65 6e 74 3b 20 2f 2a 20 63 6f 6e 66 69  lement; /* confi
35530 67 75 72 61 74 69 6f 6e 20 2a 2f 0d 0a 0d 0a 20  guration */.... 
35540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
35550 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67 20 65  oreach (string e
35560 6c 65 6d 65 6e 74 4e 61 6d 65 20 69 6e 20 65 6c  lementName in el
35570 65 6d 65 6e 74 4e 61 6d 65 73 29 0d 0a 20 20 20  ementNames)..   
35580 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
35590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355a0 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d      addElement =
355b0 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
355c0 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64  .SelectSingleNod
355d0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
355e0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d              elem
355f0 65 6e 74 4e 61 6d 65 29 20 61 73 20 58 6d 6c 45  entName) as XmlE
35600 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20  lement;....     
35610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
35620 66 20 28 61 64 64 45 6c 65 6d 65 6e 74 20 3d 3d  f (addElement ==
35630 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
35640 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
35650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35660 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e         addElemen
35670 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65  t = document.Cre
35680 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20  ateElement(..   
35690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356a0 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74           element
356b0 4e 61 6d 65 2c 20 53 74 72 69 6e 67 2e 45 6d 70  Name, String.Emp
356c0 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ty);....        
356d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356e0 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e  previousElement.
356f0 41 70 70 65 6e 64 43 68 69 6c 64 28 61 64 64 45  AppendChild(addE
35700 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20  lement);..      
35710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
35720 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35730 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73 45         previousE
35740 6c 65 6d 65 6e 74 20 3d 20 61 64 64 45 6c 65 6d  lement = addElem
35750 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ent;..          
35760 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
35770 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c             addEl
35780 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74  ement = document
35790 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28 0d  .CreateElement(.
357a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
357b0 20 20 20 20 20 22 61 64 64 22 2c 20 53 74 72 69       "add", Stri
357c0 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20  ng.Empty);....  
357d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
357e0 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 41 70  eviousElement.Ap
357f0 70 65 6e 64 43 68 69 6c 64 28 61 64 64 45 6c 65  pendChild(addEle
35800 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ment);....      
35810 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
35820 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
35830 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
35840 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
35850 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65 6d  g.Equals(addElem
35860 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65  ent.GetAttribute
35870 28 22 6e 61 6d 65 22 29 2c 0d 0a 20 20 20 20 20  ("name"),..     
35880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
35890 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ame, StringCompa
358a0 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d  rison.Ordinal)).
358b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
358c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358d0 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74  addElement.SetAt
358e0 74 72 69 62 75 74 65 28 22 6e 61 6d 65 22 2c 20  tribute("name", 
358f0 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  name);..        
35900 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20          dirty = 
35910 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
35920 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
35930 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
35940 45 71 75 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e  Equals(addElemen
35950 74 2e 47 65 74 41 74 74 72 69 62 75 74 65 28 22  t.GetAttribute("
35960 69 6e 76 61 72 69 61 6e 74 22 29 2c 0d 0a 20 20  invariant"),..  
35970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35980 20 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c    invariantName,
35990 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
359a0 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20  n.Ordinal))..   
359b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
359c0 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
359d0 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62  lement.SetAttrib
359e0 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 2c  ute("invariant",
359f0 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 29 3b   invariantName);
35a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35a10 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d    dirty = true;.
35a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
35a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
35a40 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
35a50 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41  (addElement.GetA
35a60 74 74 72 69 62 75 74 65 28 22 64 65 73 63 72 69  ttribute("descri
35a70 70 74 69 6f 6e 22 29 2c 0d 0a 20 20 20 20 20 20  ption"),..      
35a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
35a90 73 63 72 69 70 74 69 6f 6e 2c 20 53 74 72 69 6e  scription, Strin
35aa0 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
35ab0 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nal))..         
35ac0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35ad0 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74        addElement
35ae0 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22 64  .SetAttribute("d
35af0 65 73 63 72 69 70 74 69 6f 6e 22 2c 20 64 65 73  escription", des
35b00 63 72 69 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20  cription);..    
35b10 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
35b20 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
35b30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
35b40 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
35b50 75 6c 6c 54 79 70 65 4e 61 6d 65 20 3d 20 53 74  ullTypeName = St
35b60 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
35b70 2c 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  , {1}",..       
35b80 20 20 20 20 20 20 20 20 20 74 79 70 65 4e 61 6d           typeNam
35b90 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 29  e, assemblyName)
35ba0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
35bb0 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75   if (!String.Equ
35bc0 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47  als(addElement.G
35bd0 65 74 41 74 74 72 69 62 75 74 65 28 22 74 79 70  etAttribute("typ
35be0 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e"),..          
35bf0 20 20 20 20 20 20 20 20 20 20 66 75 6c 6c 54 79            fullTy
35c00 70 65 4e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f  peName, StringCo
35c10 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
35c20 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
35c30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
35c40 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65     addElement.Se
35c50 74 41 74 74 72 69 62 75 74 65 28 22 74 79 70 65  tAttribute("type
35c60 22 2c 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 29  ", fullTypeName)
35c70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
35c80 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
35c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
35ca0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
35cb0 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74  f (dirty || what
35cc0 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
35cd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35ce0 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
35cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35d00 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
35d10 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
35d20 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
35d30 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
35d40 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
35d50 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
35d60 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
35d70 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
35d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d90 20 20 20 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d     "addElement =
35da0 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {0}", ForDispla
35db0 79 28 61 64 64 45 6c 65 6d 65 6e 74 29 29 2c 0d  y(addElement)),.
35dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35dd0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
35de0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
35df0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
35e00 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
35e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
35e20 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65  cument.Save(file
35e30 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
35e40 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 73 4d            filesM
35e50 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20  odified++;....  
35e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61                sa
35e70 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ved = true;..   
35e80 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
35e90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
35ea0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
35eb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
35ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f00 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
35f10 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
35f20 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
35f30 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
35f40 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
35f50 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 44 62  ic bool RemoveDb
35f60 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
35f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
35f80 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
35f90 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
35fa0 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65  ng invariantName
35fb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
35fc0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
35fd0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
35fe0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
35ff0 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76      ref bool sav
36000 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
36010 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
36020 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
36030 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
36040 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69           bool di
36050 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  rty = false;..  
36060 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63            XmlDoc
36070 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d  ument document =
36080 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74   new XmlDocument
36090 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
360a0 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73     document.Pres
360b0 65 72 76 65 57 68 69 74 65 73 70 61 63 65 20 3d  erveWhitespace =
360c0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
360d0 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61      document.Loa
360e0 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  d(fileName);....
360f0 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
36100 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65 6e  lement addElemen
36110 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c  t = document.Sel
36120 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a  ectSingleNode(..
36130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36140 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50  String.Format(XP
36150 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74  athForAddElement
36160 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 29  , invariantName)
36170 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b  ) as XmlElement;
36180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36190 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74 20 21  if (addElement !
361a0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
361b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
361c0 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65          addEleme
361d0 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52 65  nt.ParentNode.Re
361e0 6d 6f 76 65 43 68 69 6c 64 28 61 64 64 45 6c 65  moveChild(addEle
361f0 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ment);..        
36200 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20          dirty = 
36210 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
36220 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
36230 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 72      XmlElement r
36240 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 20 64  emoveElement = d
36250 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69  ocument.SelectSi
36260 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20  ngleNode(..     
36270 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
36280 67 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f  g.Format(XPathFo
36290 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2c 20  rRemoveElement, 
362a0 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 29 29 20  invariantName)) 
362b0 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a  as XmlElement;..
362c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
362d0 20 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20   (removeElement 
362e0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
362f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
36300 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 45           removeE
36310 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64  lement.ParentNod
36320 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 72 65  e.RemoveChild(re
36330 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20  moveElement);.. 
36340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
36350 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
36360 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
36370 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
36380 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d  irty || whatIf).
36390 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
363a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363b0 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
363c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363d0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
363e0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
363f0 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
36400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36410 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
36420 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
36430 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
36440 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
36450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
36460 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d  addElement = {0}
36470 2c 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20  , removeElement 
36480 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {1}",..       
36490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364a0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64 45   ForDisplay(addE
364b0 6c 65 6d 65 6e 74 29 2c 20 46 6f 72 44 69 73 70  lement), ForDisp
364c0 6c 61 79 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e  lay(removeElemen
364d0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
364e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
364f0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
36500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36510 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
36520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36530 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65     document.Save
36540 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  (fileName);.... 
36550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
36560 69 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d  ilesModified++;.
36570 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
36580 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b     saved = true;
36590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
365a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
365b0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
365c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
365d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
365e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
365f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36610 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
36620 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
36630 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
36640 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
36650 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
36660 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
36670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
36680 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61  ring invariantNa
36690 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
366a0 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
366b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
366c0 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a  g description,..
366d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
366e0 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  ng typeName,..  
366f0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
36700 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e  lyName assemblyN
36710 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
36720 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
36730 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
36740 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
36750 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
36760 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
36770 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
36780 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
36790 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
367a0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
367b0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
367c0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
367d0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
367e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
367f0 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20  bool saved,..   
36800 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
36810 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
36820 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
36830 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36840 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
36850 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c   bool> pair = cl
36860 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50  ientData as AnyP
36870 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
36880 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  >;....          
36890 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75    if (pair == nu
368a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
368b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
368c0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
368d0 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63  alid framework c
368e0 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b 20 64  onfig callback d
368f0 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata";..         
36900 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
36910 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
36920 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
36930 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a     if (pair.Y)..
36940 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
36950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
36960 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72  eturn RemoveDbPr
36970 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a  oviderFactory(..
36980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36990 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e      fileName, in
369a0 76 61 72 69 61 6e 74 4e 61 6d 65 2c 20 77 68 61  variantName, wha
369b0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
369c0 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20  f saved,..      
369d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
369e0 66 20 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20  f error) &&..   
369f0 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64 64               Add
36a00 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
36a10 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
36a20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
36a30 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c  , invariantName,
36a40 20 6e 61 6d 65 2c 20 64 65 73 63 72 69 70 74 69   name, descripti
36a50 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20  on, typeName,.. 
36a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a70 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c     assemblyName,
36a80 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
36a90 2c 20 72 65 66 20 73 61 76 65 64 2c 20 72 65 66  , ref saved, ref
36aa0 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
36ab0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
36ac0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
36ad0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36ae0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
36af0 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65   RemoveDbProvide
36b00 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  rFactory(..     
36b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
36b20 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61  ileName, invaria
36b30 6e 74 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  ntName, whatIf, 
36b40 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76  verbose, ref sav
36b50 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
36b60 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
36b70 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
36b80 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
36b90 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
36ba0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
36bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36bf0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
36c00 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c   #region Assembl
36c10 79 20 46 6f 6c 64 65 72 73 20 48 61 6e 64 6c 69  y Folders Handli
36c20 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
36c30 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
36c40 67 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c  g GetAssemblyFol
36c50 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  dersKeyName(..  
36c60 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
36c70 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
36c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
36c90 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
36ca0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
36cb0 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
36cc0 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
36cd0 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
36ce0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
36cf0 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
36d00 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
36d10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36d20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
36d30 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
36d40 20 72 65 67 69 73 74 72 79 20 6b 65 79 20 61 70   registry key ap
36d50 70 65 61 72 73 20 74 6f 20 61 6c 77 61 79 73 20  pears to always 
36d60 62 65 20 33 32 2d 62 69 74 20 6f 6e 6c 79 0d 0a  be 32-bit only..
36d70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
36d80 20 20 20 20 20 28 69 2e 65 2e 20 70 72 6f 62 61       (i.e. proba
36d90 62 6c 79 20 62 65 63 61 75 73 65 20 69 74 20 69  bly because it i
36da0 73 20 6f 6e 6c 79 20 75 73 65 64 20 62 79 20 56  s only used by V
36db0 69 73 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 20  isual..         
36dc0 20 20 20 2f 2f 20 20 20 20 20 20 20 53 74 75 64     //       Stud
36dd0 69 6f 2c 20 77 68 69 63 68 20 69 73 20 63 75 72  io, which is cur
36de0 72 65 6e 74 6c 79 20 61 6c 77 61 79 73 20 33 32  rently always 32
36df0 2d 62 69 74 20 6f 6e 6c 79 29 2e 0d 0a 20 20 20  -bit only)...   
36e00 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
36e10 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
36e20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e 67  format = !String
36e30 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70  .IsNullOrEmpty(p
36e40 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a  latformName) ?..
36e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e60 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
36e70 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 5c  \{1}\\v{2}\\{3}\
36e80 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  \AssemblyFolders
36e90 45 78 22 20 3a 0d 0a 20 20 20 20 20 20 20 20 20  Ex" :..         
36ea0 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63         "{0}\\Mic
36eb0 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32  rosoft\\{1}\\v{2
36ec0 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  }\\AssemblyFolde
36ed0 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsEx";....      
36ee0 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
36ef0 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61  ing.Format(forma
36f00 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d  t, GetRootKeyNam
36f10 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  e(perUser, wow64
36f20 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
36f30 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
36f40 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
36f50 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
36f60 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
36f70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
36f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36fc0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
36fd0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
36fe0 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f   AddToAssemblyFo
36ff0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
37000 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
37010 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
37020 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
37030 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
37040 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
37050 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
37060 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
37070 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
37080 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
37090 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
370a0 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
370b0 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
370c0 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
370d0 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
370e0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
370f0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
37100 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
37110 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
37120 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
37130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
37140 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
37150 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
37160 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
37170 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
37180 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62  Name = GetAssemb
37190 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65  lyFoldersKeyName
371a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
371b0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
371c0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
371d0 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
371e0 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  , perUser,..    
371f0 20 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36              wow6
37200 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
37210 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
37220 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
37230 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
37240 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
37250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37260 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
37270 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
37280 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
37290 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
372a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
372b0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
372c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
372d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372e0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
372f0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
37300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37310 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
37320 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
37330 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
37340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37350 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
37360 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
37370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
37380 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
37390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
373a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
373b0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
373c0 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
373d0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
373e0 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d  r.CreateSubKey(.
373f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37400 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75           key, su
37410 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
37420 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
37430 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
37440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37450 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
37460 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
37470 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
37480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37490 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
374a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
374b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374c0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
374d0 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
374e0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
374f0 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
37500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37510 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
37520 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
37530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37540 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
37550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37560 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
37570 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
37580 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
37590 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
375a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
375b0 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64 69 72  ubKey, null, dir
375c0 65 63 74 6f 72 79 2c 20 77 68 61 74 49 66 2c 20  ectory, whatIf, 
375d0 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
375e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
375f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
37600 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
37610 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
37620 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
37630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37670 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
37680 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
37690 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72 6f 6d 41  bool RemoveFromA
376a0 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
376b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
376c0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
376d0 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
376e0 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
376f0 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
37700 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
37710 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
37720 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
37730 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
37740 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
37750 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
37760 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
37770 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
37780 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
37790 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
377a0 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
377b0 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
377c0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
377d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
377e0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
377f0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
37800 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
37810 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
37820 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
37830 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
37840 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f   = GetAssemblyFo
37850 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20  ldersKeyName(.. 
37860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
37870 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
37880 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
37890 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65  platformName, pe
378a0 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
378b0 20 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d          wow64);.
378c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
378d0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
378e0 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
378f0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
37900 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
37910 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
37920 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72  Key, keyName, tr
37930 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
37940 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
37950 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
37960 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
37970 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
37980 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
379a0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
379b0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
379c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
379d0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
379e0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
379f0 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
37a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a10 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
37a20 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
37a30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
37a40 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
37a50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
37a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
37a70 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
37a80 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20  leteSubKey(..   
37a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37aa0 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65   key, subKeyName
37ab0 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
37ac0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
37ad0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
37ae0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
37af0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
37b00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
37b10 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
37b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
37b60 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
37b70 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63  static bool Proc
37b80 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  essAssemblyFolde
37b90 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
37ba0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
37bb0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
37bc0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
37bd0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20  ameworkName,..  
37be0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
37bf0 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
37c00 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
37c10 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
37c20 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
37c30 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
37c40 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
37c50 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
37c60 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
37c70 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
37c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
37c90 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
37ca0 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
37cb0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
37cc0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
37cd0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
37ce0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
37cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
37d00 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
37d10 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
37d20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37d30 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
37d40 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
37d50 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
37d60 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
37d70 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
37d80 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
37d90 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
37da0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
37db0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
37dc0 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f  "invalid framewo
37dd0 72 6b 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  rk callback data
37de0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
37df0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
37e00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
37e10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37e20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20  if (pair.Y)..   
37e30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
37e40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
37e50 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73  rn RemoveFromAss
37e60 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20  emblyFolders(.. 
37e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e80 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
37e90 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
37ea0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
37eb0 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
37ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ed0 4c 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d  LegacyProjectNam
37ee0 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  e, perUser, wow6
37ef0 34 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  4, false, whatIf
37f00 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  , verbose,..    
37f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f20 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a 20  ref error) &&.. 
37f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
37f40 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c 64  ddToAssemblyFold
37f50 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ers(..          
37f60 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
37f70 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  y, frameworkName
37f80 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
37f90 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
37fa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37fb0 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e 61         ProjectNa
37fc0 6d 65 2c 20 70 61 69 72 2e 58 2c 20 70 65 72 55  me, pair.X, perU
37fd0 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74  ser, wow64, what
37fe0 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  If, verbose,..  
37ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38000 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20    ref error);.. 
38010 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
38020 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
38030 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
38040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
38050 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d  eturn RemoveFrom
38060 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
38070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38080 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
38090 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
380a0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
380b0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
380c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380d0 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20     ProjectName, 
380e0 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20  perUser, wow64, 
380f0 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20  throwOnMissing, 
38100 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
38110 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
38120 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29  bose, ref error)
38130 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
38140 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
38150 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
38160 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
38170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
381a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
381b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
381c0 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75  egion Visual Stu
381d0 64 69 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  dio Handling..  
381e0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
381f0 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 56  atic string GetV
38200 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20  sRootKeyName(.. 
38210 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
38220 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
38230 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
38240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
38250 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
38260 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
38270 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
38280 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 56 69  }\\Microsoft\\Vi
38290 73 75 61 6c 53 74 75 64 69 6f 22 2c 0d 0a 20 20  sualStudio",..  
382a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65                Ge
382b0 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72  tRootKeyName(per
382c0 55 73 65 72 2c 20 77 6f 77 36 34 29 29 3b 0d 0a  User, wow64));..
382d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
382e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
382f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
38330 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
38340 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
38350 74 56 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  tVsKeyName(..   
38360 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
38370 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
38380 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
38390 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20  suffix,..       
383a0 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
383b0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
383c0 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20  bool wow64..    
383d0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
383e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
383f0 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
38400 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
38410 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
38420 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
38430 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
38440 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
38450 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
38460 7d 5c 5c 7b 31 7d 7b 32 7d 22 2c 20 47 65 74 56  }\\{1}{2}", GetV
38470 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72  sRootKeyName(per
38480 55 73 65 72 2c 20 77 6f 77 36 34 29 2c 20 76 73  User, wow64), vs
38490 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
384a0 20 20 20 20 20 20 20 20 20 20 73 75 66 66 69 78            suffix
384b0 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
384c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
384d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
384e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
384f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38510 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
38520 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69  ion Visual Studi
38530 6f 20 44 61 74 61 20 53 6f 75 72 63 65 20 48 61  o Data Source Ha
38540 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
38550 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
38560 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 53 6f 75  ool AddVsDataSou
38570 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rce(..          
38580 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
38590 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
385a0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
385b0 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
385c0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
385d0 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
385e0 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
385f0 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
38600 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
38610 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
38620 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
38630 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
38640 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
38650 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
38660 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
38670 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
38680 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
38690 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
386a0 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
386b0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
386c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
386d0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
386e0 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65  = "invalid VS ve
386f0 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20  rsion";..       
38700 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
38710 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
38720 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
38730 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65       if (package
38740 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
38750 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
38760 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
38770 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61  = "invalid VS pa
38780 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20  ckage";..       
38790 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
387a0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
387b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
387c0 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
387d0 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61  ame = GetVsKeyNa
387e0 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  me(vsVersion, su
387f0 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77  ffix, perUser, w
38800 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
38810 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
38820 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
38830 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
38840 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
38850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38860 20 20 20