[Unison-hackers] [unison-svn] r527 - in trunk/src: . lwt system ubase uimac14 uimac14/English.lproj uimac14/Frameworks uimac14/Frameworks/Growl.framework uimac14/Frameworks/Growl.framework/Headers uimac14/Frameworks/Growl.framework/Resources uimac14/Frameworks/Growl.framework/Versions uimac14/Frameworks/Growl.framework/Versions/A uimac14/Frameworks/Growl.framework/Versions/A/Headers uimac14/Frameworks/Growl.framework/Versions/A/Resources uimac14/Frameworks/Growl.framework/Versions/Current uimac14/Frameworks/Growl.framework/Versions/Current/Headers uimac14/Frameworks/Growl.framework/Versions/Current/Resources uimac14/progressicons uimac14/ssselectabletoolbar uimac14/tableicons uimac14/toolbar uimac14/uimacnew.xcodeproj uimacnew

bcpierce at seas.upenn.edu bcpierce at seas.upenn.edu
Sat Jul 5 17:55:21 EDT 2014


Author: bcpierce
Date: 2014-07-05 17:55:19 -0400 (Sat, 05 Jul 2014)
New Revision: 527

Added:
   trunk/src/uimac14/
   trunk/src/uimac14/Bridge.h
   trunk/src/uimac14/Bridge.m
   trunk/src/uimac14/ColorGradientView.h
   trunk/src/uimac14/ColorGradientView.m
   trunk/src/uimac14/English.lproj/
   trunk/src/uimac14/English.lproj/InfoPlist.strings
   trunk/src/uimac14/English.lproj/MainMenu.xib
   trunk/src/uimac14/Frameworks/
   trunk/src/uimac14/Frameworks/Growl.framework/
   trunk/src/uimac14/Frameworks/Growl.framework/Growl
   trunk/src/uimac14/Frameworks/Growl.framework/Headers/
   trunk/src/uimac14/Frameworks/Growl.framework/Headers/Growl.h
   trunk/src/uimac14/Frameworks/Growl.framework/Headers/GrowlApplicationBridge-Carbon.h
   trunk/src/uimac14/Frameworks/Growl.framework/Headers/GrowlApplicationBridge.h
   trunk/src/uimac14/Frameworks/Growl.framework/Headers/GrowlDefines.h
   trunk/src/uimac14/Frameworks/Growl.framework/Resources/
   trunk/src/uimac14/Frameworks/Growl.framework/Resources/Info.plist
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Growl
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/Growl.h
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/GrowlDefines.h
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Resources/
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Resources/Info.plist
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Growl
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/Growl.h
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/GrowlApplicationBridge-Carbon.h
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/GrowlApplicationBridge.h
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/GrowlDefines.h
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Resources/
   trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Resources/Info.plist
   trunk/src/uimac14/ImageAndTextCell.h
   trunk/src/uimac14/ImageAndTextCell.m
   trunk/src/uimac14/Info.plist
   trunk/src/uimac14/Info.plist.template
   trunk/src/uimac14/MyController.h
   trunk/src/uimac14/MyController.m
   trunk/src/uimac14/NotificationController.h
   trunk/src/uimac14/NotificationController.m
   trunk/src/uimac14/PreferencesController.h
   trunk/src/uimac14/PreferencesController.m
   trunk/src/uimac14/ProfileController.h
   trunk/src/uimac14/ProfileController.m
   trunk/src/uimac14/ProfileTableView.h
   trunk/src/uimac14/ProfileTableView.m
   trunk/src/uimac14/ProgressCell.h
   trunk/src/uimac14/ProgressCell.m
   trunk/src/uimac14/ReconItem.h
   trunk/src/uimac14/ReconItem.m
   trunk/src/uimac14/ReconTableView.h
   trunk/src/uimac14/ReconTableView.m
   trunk/src/uimac14/TrevorsUnison.icns
   trunk/src/uimac14/Unison.icns
   trunk/src/uimac14/UnisonToolbar.h
   trunk/src/uimac14/UnisonToolbar.m
   trunk/src/uimac14/cltool.c
   trunk/src/uimac14/main.m
   trunk/src/uimac14/progressicons/
   trunk/src/uimac14/progressicons/ProgressBarAdvanced.png
   trunk/src/uimac14/progressicons/ProgressBarBlue.png
   trunk/src/uimac14/progressicons/ProgressBarEndAdvanced.png
   trunk/src/uimac14/progressicons/ProgressBarEndBlue.png
   trunk/src/uimac14/progressicons/ProgressBarEndGray.png
   trunk/src/uimac14/progressicons/ProgressBarEndGreen.png
   trunk/src/uimac14/progressicons/ProgressBarEndWhite.png
   trunk/src/uimac14/progressicons/ProgressBarGray.png
   trunk/src/uimac14/progressicons/ProgressBarGreen.png
   trunk/src/uimac14/progressicons/ProgressBarLightGreen.png
   trunk/src/uimac14/progressicons/ProgressBarWhite.png
   trunk/src/uimac14/ssselectabletoolbar/
   trunk/src/uimac14/ssselectabletoolbar/README
   trunk/src/uimac14/ssselectabletoolbar/SSSelectableToolbar.h
   trunk/src/uimac14/ssselectabletoolbar/SSSelectableToolbar.m
   trunk/src/uimac14/ssselectabletoolbar/SSSelectableToolbarItem.h
   trunk/src/uimac14/ssselectabletoolbar/SSSelectableToolbarItem.m
   trunk/src/uimac14/tableicons/
   trunk/src/uimac14/tableicons/Change_Absent.png
   trunk/src/uimac14/tableicons/Change_Created.png
   trunk/src/uimac14/tableicons/Change_Deleted.png
   trunk/src/uimac14/tableicons/Change_Modified.png
   trunk/src/uimac14/tableicons/Change_PropsChanged.png
   trunk/src/uimac14/tableicons/Change_Unmodified.png
   trunk/src/uimac14/tableicons/Outline-Deep.png
   trunk/src/uimac14/tableicons/Outline-Flat.png
   trunk/src/uimac14/tableicons/Outline-Flattened.png
   trunk/src/uimac14/tableicons/table-conflict.tif
   trunk/src/uimac14/tableicons/table-error.tif
   trunk/src/uimac14/tableicons/table-left-blue.tif
   trunk/src/uimac14/tableicons/table-left-green.tif
   trunk/src/uimac14/tableicons/table-merge.tif
   trunk/src/uimac14/tableicons/table-mixed.tif
   trunk/src/uimac14/tableicons/table-right-blue.tif
   trunk/src/uimac14/tableicons/table-right-green.tif
   trunk/src/uimac14/tableicons/table-skip.tif
   trunk/src/uimac14/toolbar/
   trunk/src/uimac14/toolbar/add.tif
   trunk/src/uimac14/toolbar/diff.tif
   trunk/src/uimac14/toolbar/go.tif
   trunk/src/uimac14/toolbar/left.tif
   trunk/src/uimac14/toolbar/merge.tif
   trunk/src/uimac14/toolbar/quit.tif
   trunk/src/uimac14/toolbar/rescan.tif
   trunk/src/uimac14/toolbar/restart.tif
   trunk/src/uimac14/toolbar/right.tif
   trunk/src/uimac14/toolbar/save.tif
   trunk/src/uimac14/toolbar/skip.tif
   trunk/src/uimac14/uimacnew.xcodeproj/
   trunk/src/uimac14/uimacnew.xcodeproj/project.pbxproj
Removed:
   trunk/src/uimac/
   trunk/src/uimacnew09/
Modified:
   trunk/src/Makefile.OCaml
   trunk/src/RECENTNEWS
   trunk/src/abort.ml
   trunk/src/bytearray.ml
   trunk/src/bytearray.mli
   trunk/src/bytearray_stubs.c
   trunk/src/case.ml
   trunk/src/case.mli
   trunk/src/checksum.ml
   trunk/src/checksum.mli
   trunk/src/clroot.ml
   trunk/src/clroot.mli
   trunk/src/common.ml
   trunk/src/common.mli
   trunk/src/copy.ml
   trunk/src/external.ml
   trunk/src/external.mli
   trunk/src/fileinfo.ml
   trunk/src/fileinfo.mli
   trunk/src/files.ml
   trunk/src/files.mli
   trunk/src/fileutil.ml
   trunk/src/fileutil.mli
   trunk/src/fingerprint.ml
   trunk/src/fingerprint.mli
   trunk/src/fpcache.ml
   trunk/src/fpcache.mli
   trunk/src/fs.ml
   trunk/src/fs.mli
   trunk/src/fspath.ml
   trunk/src/fspath.mli
   trunk/src/fswatch.ml
   trunk/src/fswatch.mli
   trunk/src/fswatchold.ml
   trunk/src/globals.ml
   trunk/src/globals.mli
   trunk/src/linkgtk.ml
   trunk/src/linkgtk2.ml
   trunk/src/linktext.ml
   trunk/src/lock.ml
   trunk/src/lock.mli
   trunk/src/lwt/depend
   trunk/src/lwt/pqueue.ml
   trunk/src/lwt/pqueue.mli
   trunk/src/main.ml
   trunk/src/mkProjectInfo.ml
   trunk/src/name.ml
   trunk/src/name.mli
   trunk/src/os.ml
   trunk/src/os.mli
   trunk/src/osx.ml
   trunk/src/osx.mli
   trunk/src/path.ml
   trunk/src/path.mli
   trunk/src/pixmaps.ml
   trunk/src/pred.ml
   trunk/src/pred.mli
   trunk/src/props.ml
   trunk/src/props.mli
   trunk/src/recon.ml
   trunk/src/recon.mli
   trunk/src/remote.ml
   trunk/src/remote.mli
   trunk/src/sortri.ml
   trunk/src/sortri.mli
   trunk/src/stasher.ml
   trunk/src/strings.ml
   trunk/src/strings.mli
   trunk/src/system.ml
   trunk/src/system.mli
   trunk/src/system/system_generic.ml
   trunk/src/system/system_intf.ml
   trunk/src/system/system_win.ml
   trunk/src/terminal.ml
   trunk/src/test.ml
   trunk/src/test.mli
   trunk/src/transfer.ml
   trunk/src/transfer.mli
   trunk/src/transport.ml
   trunk/src/transport.mli
   trunk/src/tree.ml
   trunk/src/tree.mli
   trunk/src/ubase/depend
   trunk/src/ubase/proplist.ml
   trunk/src/ubase/proplist.mli
   trunk/src/ubase/rx.ml
   trunk/src/ubase/rx.mli
   trunk/src/ubase/safelist.ml
   trunk/src/ubase/safelist.mli
   trunk/src/ubase/trace.ml
   trunk/src/ubase/trace.mli
   trunk/src/ubase/uarg.ml
   trunk/src/ubase/util.ml
   trunk/src/ubase/util.mli
   trunk/src/ui.mli
   trunk/src/uicommon.ml
   trunk/src/uicommon.mli
   trunk/src/uigtk2.ml
   trunk/src/uigtk2.mli
   trunk/src/uimacbridgenew.ml
   trunk/src/uimacnew/Info.plist.template
   trunk/src/uitext.ml
   trunk/src/uitext.mli
   trunk/src/unicode.ml
   trunk/src/unicode.mli
   trunk/src/update.ml
   trunk/src/update.mli
   trunk/src/uutil.ml
   trunk/src/uutil.mli
   trunk/src/xferhint.ml
   trunk/src/xferhint.mli
Log:
* Incorporated a refresh of the OSX GUI, contributed by Alan Shutko.

* Update dates in copyright notices

* Tidying for beta-release


Modified: trunk/src/Makefile.OCaml
===================================================================
--- trunk/src/Makefile.OCaml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/Makefile.OCaml	2014-07-05 21:55:19 UTC (rev 527)
@@ -71,7 +71,7 @@
 #     UISTYLE=gtk2
 #     UISTYLE=mac       (old and limited, but working)
 #     UISTYLE=macnew    (spiffier)
-#     UISTYLE=macnew09  (even spiffier, but not yet extensively tested)
+#     UISTYLE=mac14  (even spiffier, but not yet extensively tested)
 #
 # This should be set to an appropriate value automatically, depending
 # on whether the lablgtk library is available
@@ -80,7 +80,7 @@
 ##BCP [3/2007]: Removed temporarily, since the OSX UI is not working well 
 ## at the moment and we don't want to confuse people by building it by default
 ifeq ($(OSARCH),osx)
-  UISTYLE=macnew09
+  UISTYLE=mac14
 else
   ifeq ($(wildcard $(LABLGTK2LIB)),$(LABLGTK2LIB))
     UISTYLE=gtk2
@@ -178,9 +178,9 @@
   buildexecutable:: macexecutable
   UIMACDIR=uimacnew
 else
-ifeq ($(UISTYLE),macnew09)
+ifeq ($(UISTYLE),mac14)
   buildexecutable:: macexecutable
-  UIMACDIR=uimacnew09
+  UIMACDIR=uimac14
 else
   buildexecutable:: $(NAME)$(EXEC_EXT)
 endif
@@ -263,8 +263,8 @@
   INCLFLAGS+=-thread 
 endif
 
-## New Mac UI, 2009 version
-ifeq ($(UISTYLE),macnew09)
+## New Mac UI, 2014 version
+ifeq ($(UISTYLE),mac14)
   OCAMLOBJS+=uimacbridgenew.cmo
   THREADS=true
   OCAMLLIBS+=threads.cma

Modified: trunk/src/RECENTNEWS
===================================================================
--- trunk/src/RECENTNEWS	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/RECENTNEWS	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,3 +1,12 @@
+CHANGES FROM VERSION 2.47.0
+
+* Incorporated a refresh of the OSX GUI, contributed by Alan Shutko.
+
+* Update dates in copyright notices
+
+* Tidying for beta-release
+
+-------------------------------
 CHANGES FROM VERSION 2.46.20
 
 * Incorporated patch from Irányossy Knoblauch Artúr to make temp file

Modified: trunk/src/abort.ml
===================================================================
--- trunk/src/abort.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/abort.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/abort.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/bytearray.ml
===================================================================
--- trunk/src/bytearray.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/bytearray.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/bytearray.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/bytearray.mli
===================================================================
--- trunk/src/bytearray.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/bytearray.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/bytearray.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 type t =
   (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t

Modified: trunk/src/bytearray_stubs.c
===================================================================
--- trunk/src/bytearray_stubs.c	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/bytearray_stubs.c	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 /* Unison file synchronizer: src/bytearray_stubs.c */
-/* Copyright 1999-2012 (see COPYING for details) */
+/* Copyright 1999-2014 (see COPYING for details) */
 
 #include <string.h>
 

Modified: trunk/src/case.ml
===================================================================
--- trunk/src/case.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/case.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/case.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/case.mli
===================================================================
--- trunk/src/case.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/case.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/case.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 val caseInsensitiveMode : [`True|`False|`Default] Prefs.t
 val unicodeEncoding : bool Prefs.t

Modified: trunk/src/checksum.ml
===================================================================
--- trunk/src/checksum.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/checksum.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/checksum.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/checksum.mli
===================================================================
--- trunk/src/checksum.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/checksum.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/checksum.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 type t = int
 type u = int array

Modified: trunk/src/clroot.ml
===================================================================
--- trunk/src/clroot.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/clroot.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/clroot.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/clroot.mli
===================================================================
--- trunk/src/clroot.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/clroot.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/clroot.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* Command-line roots *)
 type clroot =

Modified: trunk/src/common.ml
===================================================================
--- trunk/src/common.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/common.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/common.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/common.mli
===================================================================
--- trunk/src/common.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/common.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/common.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (***************************************************************************)
 (*               COMMON TYPES USED BY ALL MODULES                          *)

Modified: trunk/src/copy.ml
===================================================================
--- trunk/src/copy.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/copy.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/copy.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/external.ml
===================================================================
--- trunk/src/external.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/external.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/external.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/external.mli
===================================================================
--- trunk/src/external.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/external.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/external.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 val runExternalProgram : string -> (Unix.process_status * string) Lwt.t
 val readChannelTillEof : in_channel -> string

Modified: trunk/src/fileinfo.ml
===================================================================
--- trunk/src/fileinfo.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/fileinfo.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/fileinfo.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/fileinfo.mli
===================================================================
--- trunk/src/fileinfo.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/fileinfo.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/fileinfo.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 type typ = [`ABSENT | `FILE | `DIRECTORY | `SYMLINK]
 val type2string : typ -> string

Modified: trunk/src/files.ml
===================================================================
--- trunk/src/files.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/files.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/files.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/files.mli
===================================================================
--- trunk/src/files.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/files.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/files.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* As usual, these functions should only be called by the client (i.e., in   *)
 (* the same address space as the user interface).                            *)

Modified: trunk/src/fileutil.ml
===================================================================
--- trunk/src/fileutil.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/fileutil.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/fileutil.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/fileutil.mli
===================================================================
--- trunk/src/fileutil.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/fileutil.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/fileutil.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* Convert backslashes in a string to forward slashes.  Useful in Windows. *)
 val backslashes2forwardslashes : string -> string

Modified: trunk/src/fingerprint.ml
===================================================================
--- trunk/src/fingerprint.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/fingerprint.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/fingerprint.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/fingerprint.mli
===================================================================
--- trunk/src/fingerprint.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/fingerprint.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/fingerprint.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 type t
 

Modified: trunk/src/fpcache.ml
===================================================================
--- trunk/src/fpcache.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/fpcache.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/fpcache.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce
+(* Copyright 1999-2014, Benjamin C. Pierce
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/fpcache.mli
===================================================================
--- trunk/src/fpcache.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/fpcache.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/fpcache.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* Initialize the cache *)
 val init : bool -> bool -> System.fspath -> unit

Modified: trunk/src/fs.ml
===================================================================
--- trunk/src/fs.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/fs.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/fs.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/fs.mli
===================================================================
--- trunk/src/fs.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/fs.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/fs.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* Operations on fspaths *)
 

Modified: trunk/src/fspath.ml
===================================================================
--- trunk/src/fspath.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/fspath.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/fspath.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/fspath.mli
===================================================================
--- trunk/src/fspath.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/fspath.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/fspath.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* Defines an abstract type of absolute filenames (fspaths) *)
 

Modified: trunk/src/fswatch.ml
===================================================================
--- trunk/src/fswatch.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/fswatch.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/fswatch.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/fswatch.mli
===================================================================
--- trunk/src/fswatch.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/fswatch.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/fswatch.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 type archiveHash = string
 

Modified: trunk/src/fswatchold.ml
===================================================================
--- trunk/src/fswatchold.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/fswatchold.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/fswatcherold.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/globals.ml
===================================================================
--- trunk/src/globals.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/globals.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/globals.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/globals.mli
===================================================================
--- trunk/src/globals.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/globals.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/globals.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* Global variables and functions needed by top-level modules and user       *)
 (* interfaces                                                                *)

Modified: trunk/src/linkgtk.ml
===================================================================
--- trunk/src/linkgtk.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/linkgtk.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/linkgtk.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/linkgtk2.ml
===================================================================
--- trunk/src/linkgtk2.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/linkgtk2.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/linkgtk2.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/linktext.ml
===================================================================
--- trunk/src/linktext.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/linktext.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/linktext.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/lock.ml
===================================================================
--- trunk/src/lock.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/lock.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/lock.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/lock.mli
===================================================================
--- trunk/src/lock.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/lock.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/lock.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* A simple utility module for setting and releasing inter-process locks
    using entries in the filesystem. *)

Modified: trunk/src/lwt/depend
===================================================================
--- trunk/src/lwt/depend	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/lwt/depend	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,12 +1,12 @@
-lwt.cmo: lwt.cmi 
-lwt.cmx: lwt.cmi 
-lwt_unix.cmo: lwt_unix.cmi 
-lwt_unix.cmx: lwt_unix.cmi 
-lwt_util.cmo: lwt.cmi lwt_util.cmi 
-lwt_util.cmx: lwt.cmx lwt_util.cmi 
-pqueue.cmo: pqueue.cmi 
-pqueue.cmx: pqueue.cmi 
-lwt.cmi: 
-lwt_unix.cmi: lwt.cmi 
-lwt_util.cmi: lwt.cmi 
-pqueue.cmi: 
+lwt.cmo : lwt.cmi
+lwt.cmx : lwt.cmi
+lwt_unix.cmo : lwt_unix.cmi
+lwt_unix.cmx : lwt_unix.cmi
+lwt_util.cmo : lwt.cmi lwt_util.cmi
+lwt_util.cmx : lwt.cmx lwt_util.cmi
+pqueue.cmo : pqueue.cmi
+pqueue.cmx : pqueue.cmi
+lwt.cmi :
+lwt_unix.cmi : lwt.cmi
+lwt_util.cmi : lwt.cmi
+pqueue.cmi :

Modified: trunk/src/lwt/pqueue.ml
===================================================================
--- trunk/src/lwt/pqueue.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/lwt/pqueue.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/lwt/pqueue.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/lwt/pqueue.mli
===================================================================
--- trunk/src/lwt/pqueue.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/lwt/pqueue.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/lwt/pqueue.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 module type OrderedType =
   sig

Modified: trunk/src/main.ml
===================================================================
--- trunk/src/main.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/main.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/main.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -127,9 +127,9 @@
 
 let catch_all f = 
   try
-    Util.msg "Starting catch_all...\n";
+    (* Util.msg "Starting catch_all...\n"; *)
     f ();
-    Util.msg "Done catch_all...\n";
+    (* Util.msg "Done catch_all...\n"; *)
   with e ->
     Util.msg "Unison failed: %s\n" (Uicommon.exn2string e); exit 1;;
 

Modified: trunk/src/mkProjectInfo.ml
===================================================================
--- trunk/src/mkProjectInfo.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/mkProjectInfo.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -5,8 +5,8 @@
 
 let projectName = "unison"
 let majorVersion = 2
-let minorVersion = 46
-let pointVersionOrigin = 504 (* Revision that corresponds to point version 0 *)
+let minorVersion = 47
+let pointVersionOrigin = 526 (* Revision that corresponds to point version 0 *)
 
 (* Documentation:
    This is a program to construct a version of the form Major.Minor.Point,
@@ -92,3 +92,4 @@
 
 
 
+

Modified: trunk/src/name.ml
===================================================================
--- trunk/src/name.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/name.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/name.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/name.mli
===================================================================
--- trunk/src/name.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/name.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/name.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 type t
 

Modified: trunk/src/os.ml
===================================================================
--- trunk/src/os.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/os.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/os.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/os.mli
===================================================================
--- trunk/src/os.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/os.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/os.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 val myCanonicalHostName : unit -> string
 

Modified: trunk/src/osx.ml
===================================================================
--- trunk/src/osx.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/osx.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/osx.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/osx.mli
===================================================================
--- trunk/src/osx.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/osx.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/osx.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 val init : bool -> unit
 val isMacOSX : bool

Modified: trunk/src/path.ml
===================================================================
--- trunk/src/path.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/path.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/path.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/path.mli
===================================================================
--- trunk/src/path.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/path.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/path.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* Abstract type of relative pathnames *)
 type 'a path

Modified: trunk/src/pixmaps.ml
===================================================================
--- trunk/src/pixmaps.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/pixmaps.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/pixmaps.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/pred.ml
===================================================================
--- trunk/src/pred.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/pred.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/pred.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/pred.mli
===================================================================
--- trunk/src/pred.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/pred.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/pred.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* Predicates over paths.
    

Modified: trunk/src/props.ml
===================================================================
--- trunk/src/props.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/props.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/props.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/props.mli
===================================================================
--- trunk/src/props.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/props.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/props.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* File properties: time, permission, length, etc. *)
 

Modified: trunk/src/recon.ml
===================================================================
--- trunk/src/recon.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/recon.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/recon.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/recon.mli
===================================================================
--- trunk/src/recon.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/recon.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/recon.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 val reconcileAll :
      ?allowPartial:bool         (* whether we allow partial synchronization

Modified: trunk/src/remote.ml
===================================================================
--- trunk/src/remote.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/remote.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/remote.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/remote.mli
===================================================================
--- trunk/src/remote.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/remote.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/remote.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 module Thread : sig
   val unwindProtect : (unit -> 'a Lwt.t) -> (exn -> unit Lwt.t) -> 'a Lwt.t

Modified: trunk/src/sortri.ml
===================================================================
--- trunk/src/sortri.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/sortri.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/sortri.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/sortri.mli
===================================================================
--- trunk/src/sortri.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/sortri.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/sortri.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* Sort a list of recon items according to the current setting of 
    various preferences (defined in sort.ml, and accessible from the

Modified: trunk/src/stasher.ml
===================================================================
--- trunk/src/stasher.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/stasher.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,6 +1,6 @@
 (* Unison file synchronizer: src/stasher.ml *)
 (* $I2: Last modified by lescuyer *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/strings.ml
===================================================================
--- trunk/src/strings.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/strings.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -7,4 +7,5 @@
       Version 2.46.6\n\
       \n\
       "))
-::
+:: []
+

Modified: trunk/src/strings.mli
===================================================================
--- trunk/src/strings.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/strings.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,4 +1,4 @@
 (* Unison file synchronizer: src/strings.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 val docs : (string * (string * string)) list

Modified: trunk/src/system/system_generic.ml
===================================================================
--- trunk/src/system/system_generic.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/system/system_generic.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/system/system_generic.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/system/system_intf.ml
===================================================================
--- trunk/src/system/system_intf.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/system/system_intf.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/system/system_intf.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/system/system_win.ml
===================================================================
--- trunk/src/system/system_win.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/system/system_win.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/system/system_win.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/system.ml
===================================================================
--- trunk/src/system.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/system.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/system.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/system.mli
===================================================================
--- trunk/src/system.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/system.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/system.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* Operations on filesystem path *)
 

Modified: trunk/src/terminal.ml
===================================================================
--- trunk/src/terminal.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/terminal.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/terminal.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/test.ml
===================================================================
--- trunk/src/test.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/test.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/test.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/test.mli
===================================================================
--- trunk/src/test.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/test.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/test.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* Internal self-tests *)
 

Modified: trunk/src/transfer.ml
===================================================================
--- trunk/src/transfer.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/transfer.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/transfer.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/transfer.mli
===================================================================
--- trunk/src/transfer.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/transfer.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/transfer.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (*
    Rsync : general algorithm description

Modified: trunk/src/transport.ml
===================================================================
--- trunk/src/transport.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/transport.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/transport.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/transport.mli
===================================================================
--- trunk/src/transport.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/transport.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/transport.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* Executes the actions implied by the reconItem list. *)
 val transportItem :

Modified: trunk/src/tree.ml
===================================================================
--- trunk/src/tree.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/tree.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/tree.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/tree.mli
===================================================================
--- trunk/src/tree.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/tree.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/tree.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* An ('a, 'b) t is a tree with 'a-labeled arcs and 'b-labeled nodes.        *)
 (* Labeling for the internal nodes is optional                               *)

Modified: trunk/src/ubase/depend
===================================================================
--- trunk/src/ubase/depend	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/ubase/depend	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,27 +1,27 @@
-myMap.cmo: myMap.cmi 
-myMap.cmx: myMap.cmi 
-prefs.cmo: util.cmi uarg.cmi safelist.cmi prefs.cmi 
-prefs.cmx: util.cmx uarg.cmx safelist.cmx prefs.cmi 
-proplist.cmo: util.cmi proplist.cmi 
-proplist.cmx: util.cmx proplist.cmi 
-rx.cmo: rx.cmi 
-rx.cmx: rx.cmi 
-safelist.cmo: safelist.cmi 
-safelist.cmx: safelist.cmi 
-trace.cmo: util.cmi safelist.cmi prefs.cmi trace.cmi 
-trace.cmx: util.cmx safelist.cmx prefs.cmx trace.cmi 
-uarg.cmo: util.cmi safelist.cmi uarg.cmi 
-uarg.cmx: util.cmx safelist.cmx uarg.cmi 
-uprintf.cmo: uprintf.cmi 
-uprintf.cmx: uprintf.cmi 
-util.cmo: uprintf.cmi safelist.cmi util.cmi 
-util.cmx: uprintf.cmx safelist.cmx util.cmi 
-myMap.cmi: 
-prefs.cmi: util.cmi 
-proplist.cmi: 
-rx.cmi: 
-safelist.cmi: 
-trace.cmi: prefs.cmi 
-uarg.cmi: 
-uprintf.cmi: 
-util.cmi: 
+myMap.cmo : myMap.cmi
+myMap.cmx : myMap.cmi
+prefs.cmo : util.cmi uarg.cmi safelist.cmi prefs.cmi
+prefs.cmx : util.cmx uarg.cmx safelist.cmx prefs.cmi
+proplist.cmo : util.cmi proplist.cmi
+proplist.cmx : util.cmx proplist.cmi
+rx.cmo : rx.cmi
+rx.cmx : rx.cmi
+safelist.cmo : safelist.cmi
+safelist.cmx : safelist.cmi
+trace.cmo : util.cmi safelist.cmi prefs.cmi trace.cmi
+trace.cmx : util.cmx safelist.cmx prefs.cmx trace.cmi
+uarg.cmo : util.cmi safelist.cmi uarg.cmi
+uarg.cmx : util.cmx safelist.cmx uarg.cmi
+uprintf.cmo : uprintf.cmi
+uprintf.cmx : uprintf.cmi
+util.cmo : uprintf.cmi safelist.cmi util.cmi
+util.cmx : uprintf.cmx safelist.cmx util.cmi
+myMap.cmi :
+prefs.cmi : util.cmi
+proplist.cmi :
+rx.cmi :
+safelist.cmi :
+trace.cmi : prefs.cmi
+uarg.cmi :
+uprintf.cmi :
+util.cmi :

Modified: trunk/src/ubase/proplist.ml
===================================================================
--- trunk/src/ubase/proplist.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/ubase/proplist.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/ubase/proplist.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce
+(* Copyright 1999-2014, Benjamin C. Pierce
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/ubase/proplist.mli
===================================================================
--- trunk/src/ubase/proplist.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/ubase/proplist.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/ubase/proplist.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 type 'a key
 type t

Modified: trunk/src/ubase/rx.ml
===================================================================
--- trunk/src/ubase/rx.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/ubase/rx.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/ubase/rx.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/ubase/rx.mli
===================================================================
--- trunk/src/ubase/rx.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/ubase/rx.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/ubase/rx.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 type t
 

Modified: trunk/src/ubase/safelist.ml
===================================================================
--- trunk/src/ubase/safelist.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/ubase/safelist.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/ubase/safelist.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/ubase/safelist.mli
===================================================================
--- trunk/src/ubase/safelist.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/ubase/safelist.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/ubase/safelist.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* All functions here are tail recursive and will work for arbitrary
    sized lists (unlike some of the standard ones).  The intention is that

Modified: trunk/src/ubase/trace.ml
===================================================================
--- trunk/src/ubase/trace.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/ubase/trace.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/ubase/trace.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/ubase/trace.mli
===================================================================
--- trunk/src/ubase/trace.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/ubase/trace.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/ubase/trace.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* ---------------------------------------------------------------------- *)
 (* Debugging support *)

Modified: trunk/src/ubase/uarg.ml
===================================================================
--- trunk/src/ubase/uarg.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/ubase/uarg.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/ubase/uarg.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* by Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
 (* Slightly modified by BCP, July 1999 *)

Modified: trunk/src/ubase/util.ml
===================================================================
--- trunk/src/ubase/util.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/ubase/util.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/ubase/util.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/ubase/util.mli
===================================================================
--- trunk/src/ubase/util.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/ubase/util.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/ubase/util.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* Miscellaneous utility functions and datatypes *)
 

Modified: trunk/src/ui.mli
===================================================================
--- trunk/src/ui.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/ui.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/ui.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* The module Ui provides only the user interface signature.
    Implementations are provided by Uitext and Uitk. *)

Modified: trunk/src/uicommon.ml
===================================================================
--- trunk/src/uicommon.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uicommon.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/uicommon.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/uicommon.mli
===================================================================
--- trunk/src/uicommon.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uicommon.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/uicommon.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* Kinds of UI *)
 type interface =

Modified: trunk/src/uigtk2.ml
===================================================================
--- trunk/src/uigtk2.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uigtk2.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/uigtk2.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/uigtk2.mli
===================================================================
--- trunk/src/uigtk2.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uigtk2.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,4 +1,4 @@
 (* Unison file synchronizer: src/uigtk2.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 module Body : Uicommon.UI

Added: trunk/src/uimac14/Bridge.h
===================================================================
--- trunk/src/uimac14/Bridge.h	                        (rev 0)
+++ trunk/src/uimac14/Bridge.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,58 @@
+//
+//  Bridge.h
+//  uimac
+//
+//  Created by Craig Federighi on 4/25/07.
+//  Copyright 2007 __MyCompanyName__. All rights reserved.
+//
+#import <Cocoa/Cocoa.h>
+
+/*
+	Bridge supports safe calling from C back to OCaml by using daemon threads
+	spawned from OCaml to make the actual calls and converting all argument / return values
+	in the OCaml thread (when in possession of the OCaml lock)
+*/
+ at interface Bridge : NSObject {
+}
++ (void)startup:(const char **)argv;	
+ at end
+
+/*
+	ocamlCall(sig, funcName, [args...]);
+	
+	Call ocaml function (via safe thread handoff mechanism).
+	Args/return values are converted to/from C/OCaml according to the
+	supplied type signture string.  Type codes are:
+		x	- void (for return type)
+		i	- long
+		s	- char *
+		S	- NSString *
+                N       - NSNumber *
+		@	- OCamlValue (see below)
+		
+	Examples:
+		long count = (long)ocamlCall("iS", "lengthOfString", @"Some String");
+		
+		(void)ocamlCall("x", "someVoidOCamlFunction");
+		
+		OCamlValue *v = (id)ocamlCall("@Si", "makeArray", @"Some String", 10);
+		NSString s = [v getField:0 withType:'S'];
+*/
+extern void *ocamlCall(const char *argTypes, ...);
+
+// Wrapper/proxy for unconverted OCaml values
+ at interface OCamlValue : NSObject {
+	long _v;
+}
+- initWithValue:(long)v;
+
+- (void *)getField:(long)i withType:(char)t;
+	// get value by position.  See ocamlCall for list of type conversion codes
+	
+- (long)count;
+	// count of items in array
+	
+- (long)value;
+	// returns Ocaml value directly -- not safe to use except in direct callback from OCaml
+	// (i.e. in the OCaml thread)
+ at end

Added: trunk/src/uimac14/Bridge.m
===================================================================
--- trunk/src/uimac14/Bridge.m	                        (rev 0)
+++ trunk/src/uimac14/Bridge.m	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,418 @@
+//
+//  Bridge.m
+//  uimac
+//
+//  Created by Craig Federighi on 4/25/07.
+//  Copyright 1999-2008 (see COPYING for details)
+//
+
+#import "Bridge.h"
+
+/* The following two define are a workaround for an incompatibility between
+ Ocaml 3.11.2 (and older) and the Mac OS X header files */
+#define uint64 uint64_caml
+#define int64 int64_caml
+
+#define CAML_NAME_SPACE
+#include <caml/callback.h>
+#include <caml/alloc.h>
+#include <caml/mlvalues.h>
+#include <caml/memory.h>
+#include <caml/signals.h>
+#import <ExceptionHandling/NSExceptionHandler.h>
+
+#include <pthread.h>
+#include <stdarg.h>
+
+/*
+ CMF, April 2007:  Alternate strategy for solving UI crashes based on 
+ http://alan.petitepomme.net/cwn/2005.03.08.html#9:
+ 1) Run OCaml in a separate thread from the Cocoa main run loop.
+ 2) Handle all calls to OCaml as callbacks -- have an OCaml thread
+    hang in C-land and use mutexes and conditions to pass control from the
+    C calling thread to the OCaml callback thread.
+	
+ Value Conversion Done in Bridge Thread:
+ Value creation/conversion (like calls to caml_named_value or caml_copy_string) 
+ or access calls (like Field) need to occur in the OCaml thread.  We do this by
+ passing C args for conversion to the bridgeThreadWait() thread.
+ 
+ Example of vulnerability:
+ Field(caml_reconItems,j) could dereference caml_reconItems
+ when the GC (running independently in an OCaml thread) could be moving it.
+*/
+
+pthread_mutex_t init_lock = PTHREAD_MUTEX_INITIALIZER;
+pthread_cond_t init_cond = PTHREAD_COND_INITIALIZER;
+static BOOL doneInit = NO;
+
+pthread_mutex_t global_call_lock = PTHREAD_MUTEX_INITIALIZER;
+pthread_cond_t global_call_cond = PTHREAD_COND_INITIALIZER;
+pthread_mutex_t global_res_lock = PTHREAD_MUTEX_INITIALIZER;
+pthread_cond_t global_res_cond = PTHREAD_COND_INITIALIZER;
+
+ at implementation Bridge
+static Bridge *_instance = NULL;
+
+const char **the_argv;
+
+- (void)_ocamlStartup:(id)ignore
+{
+
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+   	pthread_mutex_lock(&init_lock);
+
+    /* Initialize ocaml gc, etc. */
+    caml_startup((char **)the_argv); // cast to avoid warning, caml_startup assumes non-const,
+                                 // NSApplicationMain assumes const
+	
+	// Register these with the collector
+	// NSLog(@"*** _ocamlStartup - back from startup; signalling! (%d)", pthread_self());
+    doneInit = TRUE;
+	pthread_cond_signal(&init_cond);
+   	pthread_mutex_unlock(&init_lock);
+			 
+	// now start the callback thread
+	// NSLog(@"*** _ocamlStartup - calling callbackThreadCreate (%d)", pthread_self());
+	value *f = caml_named_value("callbackThreadCreate");
+	(void)caml_callback_exn(*f,Val_unit);
+    [pool release];
+}
+
++ (void)startup:(const char **)argv
+{
+	if (_instance) return;
+	
+	_instance = [[Bridge alloc] init];
+
+	[[NSExceptionHandler defaultExceptionHandler] setDelegate:_instance];
+	[[NSExceptionHandler defaultExceptionHandler] setExceptionHandlingMask:
+		(NSLogUncaughtExceptionMask  | NSLogTopLevelExceptionMask)];
+
+	// Init OCaml in another thread and wait for it to be ready
+   	pthread_mutex_lock(&init_lock);
+	the_argv = argv;
+	[NSThread detachNewThreadSelector:@selector(_ocamlStartup:)
+		toTarget:_instance withObject:nil];
+
+	// NSLog(@"*** waiting for completion of caml_init");
+	while (!doneInit) pthread_cond_wait(&init_cond, &init_lock);
+   	pthread_mutex_unlock(&init_lock);
+	// NSLog(@"*** caml_init complete!");
+}
+
+#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
+typedef unsigned int NSUInteger;
+#endif
+- (BOOL)exceptionHandler:(NSExceptionHandler *)sender shouldLogException:(NSException *)exception mask:(NSUInteger)aMask
+{
+	// if (![[exception name] isEqual:@"OCamlException"]) return YES;
+	
+    NSString *msg = [NSString stringWithFormat:@"Uncaught exception: %@", [exception reason]];
+    msg = [[msg componentsSeparatedByString:@"\n"] componentsJoinedByString:@" "];
+    NSLog(@"%@", msg);
+    NSRunAlertPanel(@"Fatal error", msg, @"Exit", nil, nil);
+	exit(1);
+	return FALSE;
+}
+
+ at end
+
+
+// CallState struct is allocated on the C thread stack and then handed
+// to the OCaml callback thread to perform value conversion and issue the call
+typedef struct  {
+	enum { SafeCall, OldCall, FieldAccess } opCode;
+	
+	// New style calls
+	const char *argTypes;
+	va_list args;
+
+	// Field access
+	value *valueP;
+	long fieldIndex;
+	char fieldType;
+	
+	// Return values
+	char *exception;
+	void *retV;
+	BOOL _autorelease;
+	
+	// for old style (unsafe) calls
+	value call, a1, a2, a3, ret;
+	int argCount;
+} CallState;
+
+static CallState *_CallState = NULL;
+static CallState *_RetState = NULL;
+
+// Our OCaml callback server thread -- waits for call then makes them
+// Called from thread spawned from OCaml
+CAMLprim value bridgeThreadWait(value ignore)
+{
+        CAMLparam0();
+        CAMLlocal1 (args);
+        args = caml_alloc_tuple(3);
+	
+	// NSLog(@"*** bridgeThreadWait init!  (%d) Taking lock...", pthread_self());
+	while (TRUE) {
+		// unblock ocaml while we wait for work
+		caml_enter_blocking_section();
+		
+		pthread_mutex_lock(&global_call_lock);
+		while (!_CallState) pthread_cond_wait(&global_call_cond, &global_call_lock);
+
+		// pick up our work and free up the call lock for other threads
+		CallState *cs = _CallState;
+		_CallState = NULL;		
+		pthread_mutex_unlock(&global_call_lock);
+		
+     	// NSLog(@"*** bridgeThreadWait: have call -- leaving caml_blocking_section");
+		
+		// we have a call to do -- get the ocaml lock
+		caml_leave_blocking_section();
+		
+    	// NSLog(@"*** bridgeThreadWait: doing call");
+
+        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+		char retType = 'v';
+		value e = Val_unit;
+		if (cs->opCode == SafeCall) {
+                        int i;
+			char *fname = va_arg(cs->args, char *);
+			value *f = caml_named_value(fname);
+			// varargs with C-based args -- convert them to OCaml values based on type code string
+			const char *p = cs->argTypes;
+			retType = *p++;
+			int argCount = 0;
+			for(; *p != '\0'; p++) {
+				const char *str;
+				switch (*p) {
+					case 's':
+						str = va_arg(cs->args, const char *);
+						Store_field (args, argCount, caml_copy_string(str));
+						break;
+					case 'S':
+						str = [va_arg(cs->args, NSString *) UTF8String];
+						Store_field (args, argCount, caml_copy_string(str));
+						break;
+					case 'i':
+                                                Store_field (args, argCount, Val_long(va_arg(cs->args, long)));
+						break;
+					case '@':
+                                                Store_field (args, argCount, [va_arg(cs->args, OCamlValue *) value]);
+						break;
+                                        default:
+                                                NSCAssert1(0, @"Unknown input type '%c'", *p);
+						break;
+				}
+				argCount++;
+                                NSCAssert(argCount <= 3, @"More than 3 arguments");
+			}
+			// Call OCaml -- TODO: add support for > 3 args
+			if (argCount == 3) e = caml_callback3_exn(*f,Field(args,0),Field(args,1),Field(args,2));
+			else if (argCount == 2) e = caml_callback2_exn(*f,Field(args,0),Field(args,1));
+			else if (argCount == 1) e = caml_callback_exn(*f,Field(args,0));
+			else e = caml_callback_exn(*f,Val_unit);			
+                        for (i = 0; i < argCount; i++) Store_field (args, i, Val_unit);
+		} else if (cs->opCode == OldCall) {
+			// old style (unsafe) version where OCaml values were passed directly from C thread
+			if (cs->argCount == 3) e = caml_callback3_exn(cs->call,cs->a1,cs->a2,cs->a3);
+			else if (cs->argCount == 2) e = caml_callback2_exn(cs->call,cs->a1,cs->a2);
+			else e = caml_callback_exn(cs->call,cs->a1);
+			retType = 'v';
+		} else if (cs->opCode == FieldAccess) {
+			long index = cs->fieldIndex;
+			e = (index == -1) ? Val_long(Wosize_val(*cs->valueP)) : Field(*cs->valueP, index);
+			retType = cs->fieldType;
+		}
+		
+		// Process return value
+		cs->_autorelease = FALSE;
+		cs->ret = e; // OCaml return type -- unsafe...
+		if (!Is_exception_result(e)) {
+			switch (retType) {
+				case 'S':
+					*((NSString **)&cs->retV) = (e == Val_unit) ? NULL : [[NSString alloc] initWithUTF8String:String_val(e)];
+					cs->_autorelease = TRUE;
+					break;
+				case 'N':
+                                        if (Is_long (e)) {
+					        *((NSNumber **)&cs->retV) = [[NSNumber alloc] initWithLong:Long_val(e)];
+                                        } else {
+					        *((NSNumber **)&cs->retV) = [[NSNumber alloc] initWithDouble:Double_val(e)];
+                                        }
+					cs->_autorelease = TRUE;
+					break;
+				case '@':
+					*((NSObject **)&cs->retV) = (e == Val_unit) ? NULL : [[OCamlValue alloc] initWithValue:e];
+					cs->_autorelease = TRUE;
+					break;
+				case 'i':
+					*((long *)&cs->retV) = Long_val(e);
+					break;
+				case 'x':
+                                        break;
+                                default:
+                                        NSCAssert1(0, @"Unknown return type '%c'", retType);
+                                        break;
+			}
+		}
+
+		if (Is_exception_result(e)) {
+			// get exception string -- it will get thrown back in the calling thread
+		    value *f = caml_named_value("unisonExnInfo");
+                    // We leak memory here...
+                    cs->exception = strdup(String_val(caml_callback(*f,Extract_exception(e))));
+		}
+		
+ 	    [pool release];
+
+    	// NSLog(@"*** bridgeThreadWait: returning");
+
+		// we're done, signal back
+		pthread_mutex_lock(&global_res_lock);
+		_RetState = cs;
+		pthread_cond_signal(&global_res_cond);
+		pthread_mutex_unlock(&global_res_lock);
+	}
+	// Never get here...
+        CAMLreturn (Val_unit);
+}
+
+void *_passCall(CallState *cs)
+{
+    pthread_mutex_lock(&global_call_lock);
+	_CallState = cs;
+
+	// signal so call can happen on other thread
+	pthread_mutex_lock(&global_res_lock);
+	pthread_cond_signal(&global_call_cond);
+	pthread_mutex_unlock(&global_call_lock);
+
+	// NSLog(@"*** _passCall (%d) -- performing signal and waiting", pthread_self());
+
+	// wait until done -- make sure the result is for our call
+	while (_RetState != cs) pthread_cond_wait(&global_res_cond, &global_res_lock);
+	_RetState = NULL;
+	pthread_mutex_unlock(&global_res_lock);
+
+	// NSLog(@"*** doCallback -- back with result");
+	if (cs->exception) {
+		@throw [NSException exceptionWithName:@"OCamlException"
+				reason:[NSString stringWithUTF8String:cs->exception]
+				userInfo:nil];
+	}
+	if (cs->_autorelease) [((id)cs->retV) autorelease];
+    return cs->retV;
+}
+
+void *ocamlCall(const char *argTypes, ...)
+{
+	CallState cs;
+	cs.opCode = SafeCall;
+	cs.exception = NULL;
+	cs.argTypes = argTypes;
+	va_start(cs.args, argTypes);
+	void * res = _passCall(&cs);
+	
+	va_end(cs.args);
+	return res;
+}
+
+void *getField(value *vP, long index, char type)
+{
+	CallState cs;
+	cs.opCode = FieldAccess;
+	cs.valueP = vP;
+	cs.fieldIndex = index;
+	cs.fieldType = type;
+	cs.exception = NULL;
+	return _passCall(&cs);
+}
+
+ at implementation OCamlValue
+
+- initWithValue:(long)v
+{
+	[super init];
+	_v = v;
+	caml_register_global_root((value *)&_v);
+	return self;
+}
+
+- (long)count
+{
+        return (long)getField((value *) &_v, -1, 'i');
+}
+
+- (void *)getField:(long)i withType:(char)t
+{
+        return getField((value *)&_v, i, t);
+}
+
+- (long)value
+{
+	// Unsafe to use!
+	return _v;
+}
+
+- (void)dealloc
+{
+	_v = Val_unit;
+    caml_remove_global_root((value *)&_v);
+	[super dealloc];
+}
+ at end
+
+
+// Legacy OCaml call API -- no longer needed
+#if 0
+
+extern value doCallback (value c, int argcount, value v1, value v2, value v3, BOOL exitOnException);
+extern value Callback_checkexn(value c,value v);
+extern value Callback2_checkexn(value c,value v1,value v2);
+extern value Callback3_checkexn(value c,value v1,value v2,value v3);
+
+void reportExn(const char *msg) {
+    NSString *s = [NSString stringWithFormat:@"Uncaught exception: %s", msg];
+    s = [[s componentsSeparatedByString:@"\n"] componentsJoinedByString:@" "];
+    NSLog(@"%@",s);
+    NSRunAlertPanel(@"Fatal error",s,@"Exit",nil,nil);
+}
+
+// FIXME!  Claim is that value conversion must also happen in the OCaml thread...
+value doCallback (value c, int argcount, value v1, value v2, value v3, BOOL exitOnException) {
+	// NSLog(@"*** doCallback: (%d) -- trying to acquire global lock", pthread_self());
+	CallState cs;
+	cs.opCode = OldCall;
+	cs.exception = NULL;
+	cs.call = c;
+	cs.a1 = v1;
+	cs.a2 = v2;
+	cs.a3 = v3;
+	cs.argCount = argcount;
+	@try {
+		return _passCall(&cs);
+	} @catch (NSException *ex) {
+		if (exitOnException) {
+			reportExn(cs.exception);
+			exit(1);
+		}
+		@throw ex;
+	}
+}
+
+value Callback_checkexn(value c,value v) {
+    return doCallback(c, 1, v, 0, 0, TRUE);
+}
+
+value Callback2_checkexn(value c,value v1,value v2) {
+    return doCallback(c, 2, v1, v2, 0, TRUE);
+}
+
+value Callback3_checkexn(value c,value v1,value v2,value v3) {
+    return doCallback(c, 3, v1, v2, v3, TRUE);
+}
+#endif

Added: trunk/src/uimac14/ColorGradientView.h
===================================================================
--- trunk/src/uimac14/ColorGradientView.h	                        (rev 0)
+++ trunk/src/uimac14/ColorGradientView.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,22 @@
+//
+//  ColorGradientView.h
+//  uimacnew
+//
+//  From http://www.katoemba.net/makesnosenseatall/2008/01/09/nsview-with-gradient-background/
+//
+
+#import <Cocoa/Cocoa.h>
+
+ at interface ColorGradientView : NSView
+{
+    NSColor *startingColor;
+    NSColor *endingColor;
+    int angle;
+}
+
+// Define the variables as properties
+ at property(nonatomic, retain) NSColor *startingColor;
+ at property(nonatomic, retain) NSColor *endingColor;
+ at property(assign) int angle;
+
+ at end

Added: trunk/src/uimac14/ColorGradientView.m
===================================================================
--- trunk/src/uimac14/ColorGradientView.m	                        (rev 0)
+++ trunk/src/uimac14/ColorGradientView.m	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,46 @@
+//
+//  ColorGradientView.m
+//  uimacnew
+//
+//  From http://www.katoemba.net/makesnosenseatall/2008/01/09/nsview-with-gradient-background/
+//
+//
+
+#import "ColorGradientView.h"
+
+ at implementation ColorGradientView
+
+// Automatically create accessor methods		
+ at synthesize startingColor;
+ at synthesize endingColor;
+ at synthesize angle;
+
+- (id)initWithFrame:(NSRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        // Initialization code here.
+        [self setStartingColor:[NSColor gridColor]];
+        [self setEndingColor:[NSColor controlShadowColor]];
+        [self setAngle:270];
+    }
+    return self;
+}
+
+- (void)drawRect:(NSRect)rect {
+    if (endingColor == nil || [startingColor isEqual:endingColor]) {
+        // Fill view with a standard background color
+        [startingColor set];
+        NSRectFill(rect);
+    }
+    else {
+        // Fill view with a top-down gradient
+        // from startingColor to endingColor
+        NSGradient* aGradient = [[NSGradient alloc]
+                                 initWithStartingColor:startingColor
+                                 endingColor:endingColor];
+        [aGradient drawInRect:[self bounds] angle:angle];
+	[aGradient release];
+    }
+}
+
+ at end

Added: trunk/src/uimac14/English.lproj/InfoPlist.strings
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/English.lproj/InfoPlist.strings
===================================================================
--- trunk/src/uimac14/English.lproj/InfoPlist.strings	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/English.lproj/InfoPlist.strings	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/English.lproj/InfoPlist.strings
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/English.lproj/MainMenu.xib
===================================================================
--- trunk/src/uimac14/English.lproj/MainMenu.xib	                        (rev 0)
+++ trunk/src/uimac14/English.lproj/MainMenu.xib	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,6239 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
+	<data>
+		<int key="IBDocument.SystemTarget">1050</int>
+		<string key="IBDocument.SystemVersion">10K549</string>
+		<string key="IBDocument.InterfaceBuilderVersion">851</string>
+		<string key="IBDocument.AppKitVersion">1038.36</string>
+		<string key="IBDocument.HIToolboxVersion">461.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+			<string key="NS.object.0">851</string>
+		</object>
+		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<integer value="29"/>
+			<integer value="619"/>
+		</object>
+		<object class="NSArray" key="IBDocument.PluginDependencies">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableArray" key="IBDocument.RootObjects" id="892182555">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<object class="NSCustomObject" id="37863316">
+				<object class="NSMutableString" key="NSClassName">
+					<characters key="NS.bytes">NSApplication</characters>
+				</object>
+			</object>
+			<object class="NSCustomObject" id="279913758">
+				<string key="NSClassName">FirstResponder</string>
+			</object>
+			<object class="NSCustomObject" id="878192733">
+				<string key="NSClassName">NSApplication</string>
+			</object>
+			<object class="NSWindowTemplate" id="355605687">
+				<int key="NSWindowStyleMask">4111</int>
+				<int key="NSWindowBacking">2</int>
+				<string key="NSWindowRect">{{0, 364}, {480, 360}}</string>
+				<int key="NSWTFlags">1881669632</int>
+				<string key="NSWindowTitle">Unison</string>
+				<string key="NSWindowClass">NSWindow</string>
+				<object class="NSMutableString" key="NSViewClass">
+					<characters key="NS.bytes">View</characters>
+				</object>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<string key="NSWindowContentMinSize">{213, 107}</string>
+				<object class="NSView" key="NSWindowView" id="232668648">
+					<nil key="NSNextResponder"/>
+					<int key="NSvFlags">256</int>
+					<object class="NSMutableArray" key="NSSubviews">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSSegmentedControl" id="384288444">
+							<reference key="NSNextResponder" ref="232668648"/>
+							<int key="NSvFlags">296</int>
+							<string key="NSFrame">{{370, 317}, {83, 24}}</string>
+							<reference key="NSSuperview" ref="232668648"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSSegmentedCell" key="NSCell" id="673426767">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">0</int>
+								<object class="NSFont" key="NSSupport" id="599111291">
+									<string key="NSName">LucidaGrande</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">1044</int>
+								</object>
+								<reference key="NSControlView" ref="384288444"/>
+								<object class="NSMutableArray" key="NSSegmentImages">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<object class="NSSegmentItem">
+										<double key="NSSegmentItemWidth">24</double>
+										<object class="NSCustomResource" key="NSSegmentItemImage">
+											<string key="NSClassName">NSImage</string>
+											<string key="NSResourceName">Outline-Flat</string>
+										</object>
+										<string key="NSSegmentItemLabel"/>
+										<int key="NSSegmentItemTag">1</int>
+										<int key="NSSegmentItemImageScaling">2</int>
+									</object>
+									<object class="NSSegmentItem">
+										<double key="NSSegmentItemWidth">25.333333969116211</double>
+										<object class="NSCustomResource" key="NSSegmentItemImage">
+											<string key="NSClassName">NSImage</string>
+											<string key="NSResourceName">Outline-Flattened</string>
+										</object>
+										<string key="NSSegmentItemLabel">O</string>
+										<int key="NSSegmentItemTag">2</int>
+										<bool key="NSSegmentItemSelected">YES</bool>
+										<int key="NSSegmentItemImageScaling">2</int>
+									</object>
+									<object class="NSSegmentItem">
+										<double key="NSSegmentItemWidth">25.333333969116211</double>
+										<object class="NSCustomResource" key="NSSegmentItemImage">
+											<string key="NSClassName">NSImage</string>
+											<string key="NSResourceName">Outline-Deep</string>
+										</object>
+										<string key="NSSegmentItemLabel">D</string>
+										<int key="NSSegmentItemTag">3</int>
+										<int key="NSSegmentItemImageScaling">2</int>
+									</object>
+								</object>
+								<int key="NSSelectedSegment">1</int>
+							</object>
+						</object>
+					</object>
+					<string key="NSFrameSize">{480, 360}</string>
+				</object>
+				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
+				<string key="NSMinSize">{213, 129}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<string key="NSFrameAutosaveName">mainWindow</string>
+			</object>
+			<object class="NSMenu" id="395658688">
+				<string key="NSTitle">MainMenu</string>
+				<object class="NSMutableArray" key="NSMenuItems">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<object class="NSMenuItem" id="639283572">
+						<reference key="NSMenu" ref="395658688"/>
+						<string key="NSTitle">Unison</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<object class="NSCustomResource" key="NSOnImage" id="151838310">
+							<string key="NSClassName">NSImage</string>
+							<string key="NSResourceName">NSMenuCheckmark</string>
+						</object>
+						<object class="NSCustomResource" key="NSMixedImage" id="1045142073">
+							<string key="NSClassName">NSImage</string>
+							<string key="NSResourceName">NSMenuMixedState</string>
+						</object>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="77554793">
+							<string key="NSTitle">Unison</string>
+							<object class="NSMutableArray" key="NSMenuItems">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSMenuItem" id="551642701">
+									<reference key="NSMenu" ref="77554793"/>
+									<string key="NSTitle">About Unison</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="671453401">
+									<reference key="NSMenu" ref="77554793"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="837410352">
+									<reference key="NSMenu" ref="77554793"/>
+									<string key="NSTitle">Preferences...</string>
+									<string key="NSKeyEquiv">,</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="251970986">
+									<reference key="NSMenu" ref="77554793"/>
+									<string key="NSTitle">Install command-line tool</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="227484062">
+									<reference key="NSMenu" ref="77554793"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="422290158">
+									<reference key="NSMenu" ref="77554793"/>
+									<string key="NSTitle">Hide Unison</string>
+									<string key="NSKeyEquiv">h</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="693945174">
+									<reference key="NSMenu" ref="77554793"/>
+									<string key="NSTitle">Hide Others</string>
+									<string key="NSKeyEquiv">h</string>
+									<int key="NSKeyEquivModMask">1572864</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="67252353">
+									<reference key="NSMenu" ref="77554793"/>
+									<string key="NSTitle">Show All</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="264975518">
+									<reference key="NSMenu" ref="77554793"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="526625829">
+									<reference key="NSMenu" ref="77554793"/>
+									<string key="NSTitle">Quit Unison</string>
+									<string key="NSKeyEquiv">q</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+							</object>
+							<string key="NSName">_NSAppleMenu</string>
+						</object>
+					</object>
+					<object class="NSMenuItem" id="972866920">
+						<reference key="NSMenu" ref="395658688"/>
+						<string key="NSTitle">Edit</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<reference key="NSOnImage" ref="151838310"/>
+						<reference key="NSMixedImage" ref="1045142073"/>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="1003509484">
+							<object class="NSMutableString" key="NSTitle">
+								<characters key="NS.bytes">Edit</characters>
+							</object>
+							<object class="NSMutableArray" key="NSMenuItems">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSMenuItem" id="73613290">
+									<reference key="NSMenu" ref="1003509484"/>
+									<string key="NSTitle">Cut</string>
+									<string key="NSKeyEquiv">x</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="918382228">
+									<reference key="NSMenu" ref="1003509484"/>
+									<string key="NSTitle">Copy</string>
+									<string key="NSKeyEquiv">c</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="335015660">
+									<reference key="NSMenu" ref="1003509484"/>
+									<string key="NSTitle">Paste</string>
+									<string key="NSKeyEquiv">v</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="232124595">
+									<reference key="NSMenu" ref="1003509484"/>
+									<string key="NSTitle">Select All</string>
+									<string key="NSKeyEquiv">a</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="833907567">
+									<reference key="NSMenu" ref="1003509484"/>
+									<string key="NSTitle">Select Conflicts</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+							</object>
+						</object>
+					</object>
+					<object class="NSMenuItem" id="504811774">
+						<reference key="NSMenu" ref="395658688"/>
+						<string key="NSTitle">Actions</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<reference key="NSOnImage" ref="151838310"/>
+						<reference key="NSMixedImage" ref="1045142073"/>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="982210092">
+							<string key="NSTitle">Actions</string>
+							<object class="NSMutableArray" key="NSMenuItems">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSMenuItem" id="938287255">
+									<reference key="NSMenu" ref="982210092"/>
+									<string key="NSTitle">Propagate Left to Right</string>
+									<string key="NSKeyEquiv">></string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="473554979">
+									<reference key="NSMenu" ref="982210092"/>
+									<string key="NSTitle">Propagate Right to Left</string>
+									<string key="NSKeyEquiv"><</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="273929861">
+									<reference key="NSMenu" ref="982210092"/>
+									<string key="NSTitle">Propagate Newer to Older</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="502496676">
+									<reference key="NSMenu" ref="982210092"/>
+									<string key="NSTitle">Propagate Older to Newer</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="170126817">
+									<reference key="NSMenu" ref="982210092"/>
+									<string key="NSTitle">Leave Alone</string>
+									<string key="NSKeyEquiv">/</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="907786872">
+									<reference key="NSMenu" ref="982210092"/>
+									<string key="NSTitle">Revert to Unison's Recommendation</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="879528549">
+									<reference key="NSMenu" ref="982210092"/>
+									<string key="NSTitle">Merge</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="973931859">
+									<reference key="NSMenu" ref="982210092"/>
+									<string key="NSTitle">Diff</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="501412924">
+									<reference key="NSMenu" ref="982210092"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="396820968">
+									<reference key="NSMenu" ref="982210092"/>
+									<string key="NSTitle">Restart</string>
+									<string key="NSKeyEquiv">r</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="990697150">
+									<reference key="NSMenu" ref="982210092"/>
+									<string key="NSTitle">Rescan</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="513780384">
+									<reference key="NSMenu" ref="982210092"/>
+									<string key="NSTitle">Synchronize all</string>
+									<string key="NSKeyEquiv">g</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+							</object>
+						</object>
+					</object>
+					<object class="NSMenuItem" id="827672906">
+						<reference key="NSMenu" ref="395658688"/>
+						<string key="NSTitle">Ignore</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<reference key="NSOnImage" ref="151838310"/>
+						<reference key="NSMixedImage" ref="1045142073"/>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="366294269">
+							<string key="NSTitle">Ignore</string>
+							<object class="NSMutableArray" key="NSMenuItems">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSMenuItem" id="299441153">
+									<reference key="NSMenu" ref="366294269"/>
+									<string key="NSTitle">Ignore Path</string>
+									<string key="NSKeyEquiv">i</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="188392331">
+									<reference key="NSMenu" ref="366294269"/>
+									<string key="NSTitle">Ignore Extension</string>
+									<string key="NSKeyEquiv">e</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+								<object class="NSMenuItem" id="78895812">
+									<reference key="NSMenu" ref="366294269"/>
+									<string key="NSTitle">Ignore Name</string>
+									<string key="NSKeyEquiv">n</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+							</object>
+						</object>
+					</object>
+					<object class="NSMenuItem" id="425916962">
+						<reference key="NSMenu" ref="395658688"/>
+						<string key="NSTitle">Help</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<reference key="NSOnImage" ref="151838310"/>
+						<reference key="NSMixedImage" ref="1045142073"/>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="75568110">
+							<string key="NSTitle">Help</string>
+							<object class="NSMutableArray" key="NSMenuItems">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSMenuItem" id="411336073">
+									<reference key="NSMenu" ref="75568110"/>
+									<string key="NSTitle">Unison Online Help</string>
+									<string key="NSKeyEquiv">?</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+							</object>
+						</object>
+					</object>
+				</object>
+				<string key="NSName">_NSMainMenu</string>
+			</object>
+			<object class="NSCustomView" id="585072836">
+				<nil key="NSNextResponder"/>
+				<int key="NSvFlags">256</int>
+				<object class="NSMutableArray" key="NSSubviews">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<object class="NSTextField" id="568004388">
+						<reference key="NSNextResponder" ref="585072836"/>
+						<int key="NSvFlags">266</int>
+						<string key="NSFrame">{{17, 236}, {329, 25}}</string>
+						<reference key="NSSuperview" ref="585072836"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="767469197">
+							<int key="NSCellFlags">67239424</int>
+							<int key="NSCellFlags2">138412032</int>
+							<string type="base64-UTF8" key="NSContents">UGxlYXNlIGNob29zZSBhIHByb2ZpbGUgb3IgY3JlYXRlIGEgbmV3IG9uZQo</string>
+							<reference key="NSSupport" ref="599111291"/>
+							<reference key="NSControlView" ref="568004388"/>
+							<object class="NSColor" key="NSBackgroundColor" id="339352646">
+								<int key="NSColorSpace">6</int>
+								<string key="NSCatalogName">System</string>
+								<string key="NSColorName">controlColor</string>
+								<object class="NSColor" key="NSColor" id="176647248">
+									<int key="NSColorSpace">3</int>
+									<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+								</object>
+							</object>
+							<object class="NSColor" key="NSTextColor" id="274191033">
+								<int key="NSColorSpace">6</int>
+								<string key="NSCatalogName">System</string>
+								<string key="NSColorName">controlTextColor</string>
+								<object class="NSColor" key="NSColor" id="465092439">
+									<int key="NSColorSpace">3</int>
+									<bytes key="NSWhite">MAA</bytes>
+								</object>
+							</object>
+						</object>
+					</object>
+					<object class="NSButton" id="965369806">
+						<reference key="NSNextResponder" ref="585072836"/>
+						<int key="NSvFlags">256</int>
+						<string key="NSFrame">{{651, -524}, {84, 32}}</string>
+						<reference key="NSSuperview" ref="585072836"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSButtonCell" key="NSCell" id="841579218">
+							<int key="NSCellFlags">67239424</int>
+							<int key="NSCellFlags2">134217728</int>
+							<string key="NSContents">Quit</string>
+							<reference key="NSSupport" ref="599111291"/>
+							<reference key="NSControlView" ref="965369806"/>
+							<int key="NSButtonFlags">-2038284033</int>
+							<int key="NSButtonFlags2">1</int>
+							<reference key="NSAlternateImage" ref="599111291"/>
+							<string key="NSAlternateContents"/>
+							<object class="NSMutableString" key="NSKeyEquivalent">
+								<characters key="NS.bytes"/>
+							</object>
+							<int key="NSPeriodicDelay">200</int>
+							<int key="NSPeriodicInterval">25</int>
+						</object>
+					</object>
+					<object class="NSScrollView" id="335527590">
+						<reference key="NSNextResponder" ref="585072836"/>
+						<int key="NSvFlags">274</int>
+						<object class="NSMutableArray" key="NSSubviews">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="NSClipView" id="629016622">
+								<reference key="NSNextResponder" ref="335527590"/>
+								<int key="NSvFlags">2304</int>
+								<object class="NSMutableArray" key="NSSubviews">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<object class="NSTableView" id="446416594">
+										<reference key="NSNextResponder" ref="629016622"/>
+										<int key="NSvFlags">274</int>
+										<string key="NSFrameSize">{306, 190}</string>
+										<reference key="NSSuperview" ref="629016622"/>
+										<bool key="NSEnabled">YES</bool>
+										<object class="NSTableHeaderView" key="NSHeaderView" id="1286469">
+											<reference key="NSNextResponder" ref="214885356"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrameSize">{306, 17}</string>
+											<reference key="NSSuperview" ref="214885356"/>
+											<reference key="NSTableView" ref="446416594"/>
+										</object>
+										<object class="_NSCornerView" key="NSCornerView" id="626227720">
+											<reference key="NSNextResponder" ref="335527590"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrame">{{307, 0}, {16, 17}}</string>
+											<reference key="NSSuperview" ref="335527590"/>
+										</object>
+										<object class="NSMutableArray" key="NSTableColumns">
+											<bool key="EncodedWithXMLCoder">YES</bool>
+											<object class="NSTableColumn" id="347342635">
+												<string key="NSIdentifier">profiles</string>
+												<double key="NSWidth">303.47698974609375</double>
+												<double key="NSMinWidth">47.477001190185547</double>
+												<double key="NSMaxWidth">1000</double>
+												<object class="NSTableHeaderCell" key="NSHeaderCell">
+													<int key="NSCellFlags">75628096</int>
+													<int key="NSCellFlags2">2048</int>
+													<string key="NSContents">Profiles</string>
+													<object class="NSFont" key="NSSupport" id="26">
+														<string key="NSName">LucidaGrande</string>
+														<double key="NSSize">11</double>
+														<int key="NSfFlags">3100</int>
+													</object>
+													<object class="NSColor" key="NSBackgroundColor">
+														<int key="NSColorSpace">3</int>
+														<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
+													</object>
+													<object class="NSColor" key="NSTextColor" id="761657717">
+														<int key="NSColorSpace">6</int>
+														<string key="NSCatalogName">System</string>
+														<string key="NSColorName">headerTextColor</string>
+														<reference key="NSColor" ref="465092439"/>
+													</object>
+												</object>
+												<object class="NSTextFieldCell" key="NSDataCell" id="214722634">
+													<int key="NSCellFlags">338820672</int>
+													<int key="NSCellFlags2">1024</int>
+													<reference key="NSSupport" ref="599111291"/>
+													<reference key="NSControlView" ref="446416594"/>
+													<object class="NSColor" key="NSBackgroundColor" id="268561989">
+														<int key="NSColorSpace">3</int>
+														<bytes key="NSWhite">MQA</bytes>
+													</object>
+													<reference key="NSTextColor" ref="274191033"/>
+												</object>
+												<int key="NSResizingMask">3</int>
+												<bool key="NSIsResizeable">YES</bool>
+												<reference key="NSTableView" ref="446416594"/>
+											</object>
+										</object>
+										<double key="NSIntercellSpacingWidth">3</double>
+										<double key="NSIntercellSpacingHeight">2</double>
+										<reference key="NSBackgroundColor" ref="268561989"/>
+										<object class="NSColor" key="NSGridColor" id="837222830">
+											<int key="NSColorSpace">6</int>
+											<string key="NSCatalogName">System</string>
+											<string key="NSColorName">gridColor</string>
+											<object class="NSColor" key="NSColor">
+												<int key="NSColorSpace">3</int>
+												<bytes key="NSWhite">MC41AA</bytes>
+											</object>
+										</object>
+										<double key="NSRowHeight">17</double>
+										<int key="NSTvFlags">-1035993088</int>
+										<reference key="NSDelegate"/>
+										<reference key="NSDataSource"/>
+										<int key="NSColumnAutoresizingStyle">4</int>
+										<int key="NSDraggingSourceMaskForLocal">15</int>
+										<int key="NSDraggingSourceMaskForNonLocal">0</int>
+										<bool key="NSAllowsTypeSelect">YES</bool>
+										<int key="NSTableViewDraggingDestinationStyle">0</int>
+									</object>
+								</object>
+								<string key="NSFrame">{{1, 17}, {306, 190}}</string>
+								<reference key="NSSuperview" ref="335527590"/>
+								<reference key="NSNextKeyView" ref="446416594"/>
+								<reference key="NSDocView" ref="446416594"/>
+								<object class="NSColor" key="NSBGColor" id="571804419">
+									<int key="NSColorSpace">6</int>
+									<string key="NSCatalogName">System</string>
+									<string key="NSColorName">controlBackgroundColor</string>
+									<reference key="NSColor" ref="176647248"/>
+								</object>
+								<int key="NScvFlags">4</int>
+							</object>
+							<object class="NSScroller" id="852809690">
+								<reference key="NSNextResponder" ref="335527590"/>
+								<int key="NSvFlags">256</int>
+								<string key="NSFrame">{{307, 17}, {15, 190}}</string>
+								<reference key="NSSuperview" ref="335527590"/>
+								<reference key="NSTarget" ref="335527590"/>
+								<string key="NSAction">_doScroller:</string>
+								<double key="NSPercent">0.99473685026168823</double>
+							</object>
+							<object class="NSScroller" id="370050818">
+								<reference key="NSNextResponder" ref="335527590"/>
+								<int key="NSvFlags">-2147483392</int>
+								<string key="NSFrame">{{-100, -100}, {113, 15}}</string>
+								<reference key="NSSuperview" ref="335527590"/>
+								<int key="NSsFlags">1</int>
+								<reference key="NSTarget" ref="335527590"/>
+								<string key="NSAction">_doScroller:</string>
+								<double key="NSPercent">0.99047619104385376</double>
+							</object>
+							<object class="NSClipView" id="214885356">
+								<reference key="NSNextResponder" ref="335527590"/>
+								<int key="NSvFlags">2304</int>
+								<object class="NSMutableArray" key="NSSubviews">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<reference ref="1286469"/>
+								</object>
+								<string key="NSFrame">{{1, 0}, {306, 17}}</string>
+								<reference key="NSSuperview" ref="335527590"/>
+								<reference key="NSNextKeyView" ref="1286469"/>
+								<reference key="NSDocView" ref="1286469"/>
+								<reference key="NSBGColor" ref="571804419"/>
+								<int key="NScvFlags">4</int>
+							</object>
+							<reference ref="626227720"/>
+						</object>
+						<string key="NSFrame">{{20, 20}, {323, 208}}</string>
+						<reference key="NSSuperview" ref="585072836"/>
+						<reference key="NSNextKeyView" ref="629016622"/>
+						<int key="NSsFlags">18</int>
+						<reference key="NSVScroller" ref="852809690"/>
+						<reference key="NSHScroller" ref="370050818"/>
+						<reference key="NSContentView" ref="629016622"/>
+						<reference key="NSHeaderClipView" ref="214885356"/>
+						<bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
+					</object>
+				</object>
+				<string key="NSFrameSize">{363, 281}</string>
+				<string key="NSClassName">NSView</string>
+				<string key="NSExtension">NSResponder</string>
+			</object>
+			<object class="NSCustomView" id="754336264">
+				<nil key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<object class="NSMutableArray" key="NSSubviews">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<object class="NSSplitView" id="398078791">
+						<reference key="NSNextResponder" ref="754336264"/>
+						<int key="NSvFlags">274</int>
+						<object class="NSMutableArray" key="NSSubviews">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="NSScrollView" id="319719388">
+								<reference key="NSNextResponder" ref="398078791"/>
+								<int key="NSvFlags">274</int>
+								<object class="NSMutableArray" key="NSSubviews">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<object class="NSClipView" id="674056095">
+										<reference key="NSNextResponder" ref="319719388"/>
+										<int key="NSvFlags">2304</int>
+										<object class="NSMutableArray" key="NSSubviews">
+											<bool key="EncodedWithXMLCoder">YES</bool>
+											<object class="NSTableView" id="809169243">
+												<reference key="NSNextResponder" ref="674056095"/>
+												<int key="NSvFlags">256</int>
+												<string key="NSFrameSize">{730, 411}</string>
+												<reference key="NSSuperview" ref="674056095"/>
+												<bool key="NSEnabled">YES</bool>
+												<object class="NSTableHeaderView" key="NSHeaderView" id="285438200">
+													<reference key="NSNextResponder" ref="34763187"/>
+													<int key="NSvFlags">256</int>
+													<string key="NSFrameSize">{730, 17}</string>
+													<reference key="NSSuperview" ref="34763187"/>
+													<reference key="NSTableView" ref="809169243"/>
+												</object>
+												<object class="_NSCornerView" key="NSCornerView" id="971941000">
+													<reference key="NSNextResponder" ref="319719388"/>
+													<int key="NSvFlags">-2147483392</int>
+													<string key="NSFrame">{{-26, 0}, {16, 17}}</string>
+													<reference key="NSSuperview" ref="319719388"/>
+												</object>
+												<object class="NSMutableArray" key="NSTableColumns">
+													<bool key="EncodedWithXMLCoder">YES</bool>
+													<object class="NSTableColumn" id="831965848">
+														<string key="NSIdentifier">path</string>
+														<double key="NSWidth">426</double>
+														<double key="NSMinWidth">27.095703125</double>
+														<double key="NSMaxWidth">1000</double>
+														<object class="NSTableHeaderCell" key="NSHeaderCell">
+															<int key="NSCellFlags">75628096</int>
+															<int key="NSCellFlags2">2048</int>
+															<string key="NSContents">Path</string>
+															<reference key="NSSupport" ref="26"/>
+															<object class="NSColor" key="NSBackgroundColor" id="783127527">
+																<int key="NSColorSpace">6</int>
+																<string key="NSCatalogName">System</string>
+																<string key="NSColorName">headerColor</string>
+																<reference key="NSColor" ref="268561989"/>
+															</object>
+															<reference key="NSTextColor" ref="761657717"/>
+														</object>
+														<object class="NSTextFieldCell" key="NSDataCell" id="168643022">
+															<int key="NSCellFlags">338820672</int>
+															<int key="NSCellFlags2">1024</int>
+															<object class="NSFont" key="NSSupport" id="745083723">
+																<string key="NSName">LucidaGrande</string>
+																<double key="NSSize">12</double>
+																<int key="NSfFlags">16</int>
+															</object>
+															<reference key="NSControlView" ref="809169243"/>
+															<reference key="NSBackgroundColor" ref="571804419"/>
+															<reference key="NSTextColor" ref="274191033"/>
+														</object>
+														<int key="NSResizingMask">3</int>
+														<bool key="NSIsResizeable">YES</bool>
+														<reference key="NSTableView" ref="809169243"/>
+														<object class="NSSortDescriptor" key="NSSortDescriptorPrototype">
+															<string key="NSKey">pathSortKey</string>
+															<bool key="NSAscending">YES</bool>
+															<string key="NSSelector">compare:</string>
+														</object>
+													</object>
+													<object class="NSTableColumn" id="1030582640">
+														<string key="NSIdentifier">fileSizeString</string>
+														<double key="NSWidth">70</double>
+														<double key="NSMinWidth">70</double>
+														<double key="NSMaxWidth">70</double>
+														<object class="NSTableHeaderCell" key="NSHeaderCell">
+															<int key="NSCellFlags">75628096</int>
+															<int key="NSCellFlags2">134219776</int>
+															<string key="NSContents">Size</string>
+															<reference key="NSSupport" ref="26"/>
+															<reference key="NSBackgroundColor" ref="783127527"/>
+															<reference key="NSTextColor" ref="761657717"/>
+														</object>
+														<object class="NSTextFieldCell" key="NSDataCell" id="1026449157">
+															<int key="NSCellFlags">338820672</int>
+															<int key="NSCellFlags2">67109888</int>
+															<reference key="NSSupport" ref="745083723"/>
+															<reference key="NSControlView" ref="809169243"/>
+															<reference key="NSBackgroundColor" ref="571804419"/>
+															<reference key="NSTextColor" ref="274191033"/>
+														</object>
+														<int key="NSResizingMask">3</int>
+														<bool key="NSIsResizeable">YES</bool>
+														<reference key="NSTableView" ref="809169243"/>
+														<object class="NSSortDescriptor" key="NSSortDescriptorPrototype">
+															<string key="NSKey">fileSize</string>
+															<bool key="NSAscending">NO</bool>
+															<string key="NSSelector">compare:</string>
+														</object>
+													</object>
+													<object class="NSTableColumn" id="517689164">
+														<string key="NSIdentifier">leftIcon</string>
+														<double key="NSWidth">16</double>
+														<double key="NSMinWidth">16</double>
+														<double key="NSMaxWidth">16</double>
+														<object class="NSTableHeaderCell" key="NSHeaderCell">
+															<int key="NSCellFlags">75628096</int>
+															<int key="NSCellFlags2">2048</int>
+															<string key="NSContents"><</string>
+															<reference key="NSSupport" ref="26"/>
+															<object class="NSColor" key="NSBackgroundColor">
+																<int key="NSColorSpace">3</int>
+																<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
+															</object>
+															<reference key="NSTextColor" ref="761657717"/>
+														</object>
+														<object class="NSImageCell" key="NSDataCell" id="129611902">
+															<int key="NSCellFlags">130560</int>
+															<int key="NSCellFlags2">33554432</int>
+															<int key="NSAlign">0</int>
+															<int key="NSScale">0</int>
+															<int key="NSStyle">0</int>
+															<bool key="NSAnimates">YES</bool>
+														</object>
+														<reference key="NSTableView" ref="809169243"/>
+														<object class="NSSortDescriptor" key="NSSortDescriptorPrototype">
+															<string key="NSKey">leftSortKey</string>
+															<bool key="NSAscending">YES</bool>
+															<string key="NSSelector">compare:</string>
+														</object>
+													</object>
+													<object class="NSTableColumn" id="174176934">
+														<string key="NSIdentifier">percentTransferred</string>
+														<double key="NSWidth">76.63916015625</double>
+														<double key="NSMinWidth">42.10107421875</double>
+														<double key="NSMaxWidth">100</double>
+														<object class="NSTableHeaderCell" key="NSHeaderCell">
+															<int key="NSCellFlags">75628096</int>
+															<int key="NSCellFlags2">134219776</int>
+															<string key="NSContents">Action</string>
+															<reference key="NSSupport" ref="26"/>
+															<reference key="NSBackgroundColor" ref="783127527"/>
+															<reference key="NSTextColor" ref="761657717"/>
+														</object>
+														<object class="NSTextFieldCell" key="NSDataCell" id="802031427">
+															<int key="NSCellFlags">338820672</int>
+															<int key="NSCellFlags2">67109888</int>
+															<reference key="NSSupport" ref="745083723"/>
+															<reference key="NSControlView" ref="809169243"/>
+															<reference key="NSBackgroundColor" ref="571804419"/>
+															<reference key="NSTextColor" ref="274191033"/>
+														</object>
+														<reference key="NSTableView" ref="809169243"/>
+														<object class="NSSortDescriptor" key="NSSortDescriptorPrototype">
+															<string key="NSKey">directionSortKey</string>
+															<bool key="NSAscending">YES</bool>
+															<string key="NSSelector">compare:</string>
+														</object>
+													</object>
+													<object class="NSTableColumn" id="36867386">
+														<string key="NSIdentifier">rightIcon</string>
+														<double key="NSWidth">16</double>
+														<double key="NSMinWidth">16</double>
+														<double key="NSMaxWidth">16</double>
+														<object class="NSTableHeaderCell" key="NSHeaderCell">
+															<int key="NSCellFlags">75628096</int>
+															<int key="NSCellFlags2">2048</int>
+															<string key="NSContents">></string>
+															<reference key="NSSupport" ref="26"/>
+															<reference key="NSBackgroundColor" ref="783127527"/>
+															<reference key="NSTextColor" ref="761657717"/>
+														</object>
+														<object class="NSImageCell" key="NSDataCell" id="233842594">
+															<int key="NSCellFlags">130560</int>
+															<int key="NSCellFlags2">33554432</int>
+															<int key="NSAlign">0</int>
+															<int key="NSScale">0</int>
+															<int key="NSStyle">0</int>
+															<bool key="NSAnimates">YES</bool>
+														</object>
+														<reference key="NSTableView" ref="809169243"/>
+														<object class="NSSortDescriptor" key="NSSortDescriptorPrototype">
+															<string key="NSKey">rightSortKey</string>
+															<bool key="NSAscending">YES</bool>
+															<string key="NSSelector">compare:</string>
+														</object>
+													</object>
+												</object>
+												<double key="NSIntercellSpacingWidth">3</double>
+												<double key="NSIntercellSpacingHeight">2</double>
+												<reference key="NSBackgroundColor" ref="268561989"/>
+												<reference key="NSGridColor" ref="837222830"/>
+												<double key="NSRowHeight">18</double>
+												<int key="NSTvFlags">-635437056</int>
+												<reference key="NSDelegate"/>
+												<reference key="NSDataSource"/>
+												<int key="NSColumnAutoresizingStyle">4</int>
+												<int key="NSDraggingSourceMaskForLocal">15</int>
+												<int key="NSDraggingSourceMaskForNonLocal">0</int>
+												<bool key="NSAllowsTypeSelect">YES</bool>
+												<int key="NSTableViewDraggingDestinationStyle">0</int>
+											</object>
+										</object>
+										<string key="NSFrame">{{0, 17}, {730, 411}}</string>
+										<reference key="NSSuperview" ref="319719388"/>
+										<reference key="NSNextKeyView" ref="809169243"/>
+										<reference key="NSDocView" ref="809169243"/>
+										<reference key="NSBGColor" ref="571804419"/>
+										<int key="NScvFlags">4</int>
+									</object>
+									<object class="NSScroller" id="626547980">
+										<reference key="NSNextResponder" ref="319719388"/>
+										<int key="NSvFlags">-2147483392</int>
+										<string key="NSFrame">{{-30, 17}, {15, 391}}</string>
+										<reference key="NSSuperview" ref="319719388"/>
+										<reference key="NSTarget" ref="319719388"/>
+										<string key="NSAction">_doScroller:</string>
+										<double key="NSPercent">0.96419435739517212</double>
+									</object>
+									<object class="NSScroller" id="280329492">
+										<reference key="NSNextResponder" ref="319719388"/>
+										<int key="NSvFlags">-2147483392</int>
+										<string key="NSFrame">{{-100, -100}, {629, 15}}</string>
+										<reference key="NSSuperview" ref="319719388"/>
+										<int key="NSsFlags">1</int>
+										<reference key="NSTarget" ref="319719388"/>
+										<string key="NSAction">_doScroller:</string>
+										<double key="NSPercent">0.99841266870498657</double>
+									</object>
+									<object class="NSClipView" id="34763187">
+										<reference key="NSNextResponder" ref="319719388"/>
+										<int key="NSvFlags">2304</int>
+										<object class="NSMutableArray" key="NSSubviews">
+											<bool key="EncodedWithXMLCoder">YES</bool>
+											<reference ref="285438200"/>
+										</object>
+										<string key="NSFrameSize">{730, 17}</string>
+										<reference key="NSSuperview" ref="319719388"/>
+										<reference key="NSNextKeyView" ref="285438200"/>
+										<reference key="NSDocView" ref="285438200"/>
+										<reference key="NSBGColor" ref="571804419"/>
+										<int key="NScvFlags">4</int>
+									</object>
+									<reference ref="971941000"/>
+								</object>
+								<string key="NSFrameSize">{730, 428}</string>
+								<reference key="NSSuperview" ref="398078791"/>
+								<reference key="NSNextKeyView" ref="674056095"/>
+								<int key="NSsFlags">528</int>
+								<reference key="NSVScroller" ref="626547980"/>
+								<reference key="NSHScroller" ref="280329492"/>
+								<reference key="NSContentView" ref="674056095"/>
+								<reference key="NSHeaderClipView" ref="34763187"/>
+								<reference key="NSCornerView" ref="971941000"/>
+								<bytes key="NSScrollAmts">AAAAAAAAAABBoAAAQaAAAA</bytes>
+							</object>
+							<object class="NSView" id="700068909">
+								<reference key="NSNextResponder" ref="398078791"/>
+								<int key="NSvFlags">274</int>
+								<object class="NSMutableArray" key="NSSubviews">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<object class="NSTextField" id="173308938">
+										<reference key="NSNextResponder" ref="700068909"/>
+										<int key="NSvFlags">274</int>
+										<string key="NSFrame">{{2, 5}, {726, 74}}</string>
+										<reference key="NSSuperview" ref="700068909"/>
+										<bool key="NSEnabled">YES</bool>
+										<object class="NSTextFieldCell" key="NSCell" id="900780132">
+											<int key="NSCellFlags">69336577</int>
+											<int key="NSCellFlags2">272760832</int>
+											<string key="NSContents">Label</string>
+											<reference key="NSSupport" ref="26"/>
+											<reference key="NSControlView" ref="173308938"/>
+											<reference key="NSBackgroundColor" ref="339352646"/>
+											<reference key="NSTextColor" ref="274191033"/>
+										</object>
+									</object>
+								</object>
+								<string key="NSFrame">{{0, 437}, {730, 85}}</string>
+								<reference key="NSSuperview" ref="398078791"/>
+							</object>
+						</object>
+						<string key="NSFrame">{{0, 24}, {730, 522}}</string>
+						<reference key="NSSuperview" ref="754336264"/>
+					</object>
+					<object class="NSProgressIndicator" id="85700482">
+						<reference key="NSNextResponder" ref="754336264"/>
+						<int key="NSvFlags">1314</int>
+						<object class="NSPSMatrix" key="NSDrawMatrix"/>
+						<string key="NSFrame">{{589, 6}, {122, 12}}</string>
+						<reference key="NSSuperview" ref="754336264"/>
+						<int key="NSpiFlags">16652</int>
+						<double key="NSMaxValue">100</double>
+					</object>
+					<object class="NSTextField" id="845737300">
+						<reference key="NSNextResponder" ref="754336264"/>
+						<int key="NSvFlags">258</int>
+						<string key="NSFrame">{{3, 6}, {582, 14}}</string>
+						<reference key="NSSuperview" ref="754336264"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="145074830">
+							<int key="NSCellFlags">67239488</int>
+							<int key="NSCellFlags2">272762880</int>
+							<string key="NSContents">Idle</string>
+							<reference key="NSSupport" ref="26"/>
+							<reference key="NSControlView" ref="845737300"/>
+							<reference key="NSBackgroundColor" ref="339352646"/>
+							<reference key="NSTextColor" ref="274191033"/>
+						</object>
+					</object>
+				</object>
+				<string key="NSFrameSize">{730, 546}</string>
+				<string key="NSClassName">NSView</string>
+				<string key="NSExtension">NSResponder</string>
+			</object>
+			<object class="NSCustomObject" id="626222747">
+				<string key="NSClassName">MyController</string>
+			</object>
+			<object class="NSCustomObject" id="820844840">
+				<string key="NSClassName">ProfileController</string>
+			</object>
+			<object class="NSCustomObject" id="919673534">
+				<string key="NSClassName">PreferencesController</string>
+			</object>
+			<object class="NSCustomObject" id="185584375">
+				<string key="NSClassName">NotificationController</string>
+			</object>
+			<object class="NSCustomView" id="131437498">
+				<nil key="NSNextResponder"/>
+				<int key="NSvFlags">256</int>
+				<object class="NSMutableArray" key="NSSubviews">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<object class="NSBox" id="777780043">
+						<reference key="NSNextResponder" ref="131437498"/>
+						<int key="NSvFlags">258</int>
+						<object class="NSMutableArray" key="NSSubviews">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="NSView" id="894096199">
+								<reference key="NSNextResponder" ref="777780043"/>
+								<int key="NSvFlags">256</int>
+								<object class="NSMutableArray" key="NSSubviews">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<object class="NSTextField" id="538828701">
+										<reference key="NSNextResponder" ref="894096199"/>
+										<int key="NSvFlags">256</int>
+										<string key="NSFrame">{{11, 20}, {30, 17}}</string>
+										<reference key="NSSuperview" ref="894096199"/>
+										<bool key="NSEnabled">YES</bool>
+										<object class="NSTextFieldCell" key="NSCell" id="855328737">
+											<int key="NSCellFlags">67239424</int>
+											<int key="NSCellFlags2">4194304</int>
+											<string type="base64-UTF8" key="NSContents">RmlsZToKA</string>
+											<reference key="NSSupport" ref="599111291"/>
+											<reference key="NSControlView" ref="538828701"/>
+											<reference key="NSBackgroundColor" ref="339352646"/>
+											<reference key="NSTextColor" ref="274191033"/>
+										</object>
+									</object>
+									<object class="NSTextField" id="535928276">
+										<reference key="NSNextResponder" ref="894096199"/>
+										<int key="NSvFlags">258</int>
+										<string key="NSFrame">{{46, 18}, {427, 22}}</string>
+										<reference key="NSSuperview" ref="894096199"/>
+										<bool key="NSEnabled">YES</bool>
+										<object class="NSTextFieldCell" key="NSCell" id="294533446">
+											<int key="NSCellFlags">-1804468671</int>
+											<int key="NSCellFlags2">4195328</int>
+											<string key="NSContents"/>
+											<reference key="NSSupport" ref="599111291"/>
+											<reference key="NSControlView" ref="535928276"/>
+											<bool key="NSDrawsBackground">YES</bool>
+											<object class="NSColor" key="NSBackgroundColor" id="695013634">
+												<int key="NSColorSpace">6</int>
+												<string key="NSCatalogName">System</string>
+												<string key="NSColorName">textBackgroundColor</string>
+												<reference key="NSColor" ref="268561989"/>
+											</object>
+											<object class="NSColor" key="NSTextColor" id="917616157">
+												<int key="NSColorSpace">6</int>
+												<string key="NSCatalogName">System</string>
+												<string key="NSColorName">textColor</string>
+												<reference key="NSColor" ref="465092439"/>
+											</object>
+										</object>
+									</object>
+								</object>
+								<string key="NSFrame">{{2, 2}, {493, 51}}</string>
+								<reference key="NSSuperview" ref="777780043"/>
+							</object>
+						</object>
+						<string key="NSFrame">{{20, 129}, {497, 71}}</string>
+						<reference key="NSSuperview" ref="131437498"/>
+						<string key="NSOffsets">{0, 0}</string>
+						<object class="NSTextFieldCell" key="NSTitleCell">
+							<int key="NSCellFlags">67239424</int>
+							<int key="NSCellFlags2">0</int>
+							<string key="NSContents">First root</string>
+							<reference key="NSSupport" ref="599111291"/>
+							<reference key="NSBackgroundColor" ref="695013634"/>
+							<object class="NSColor" key="NSTextColor">
+								<int key="NSColorSpace">3</int>
+								<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+							</object>
+						</object>
+						<reference key="NSContentView" ref="894096199"/>
+						<int key="NSBorderType">3</int>
+						<int key="NSBoxType">0</int>
+						<int key="NSTitlePosition">2</int>
+						<bool key="NSTransparent">NO</bool>
+					</object>
+					<object class="NSBox" id="223842171">
+						<reference key="NSNextResponder" ref="131437498"/>
+						<int key="NSvFlags">258</int>
+						<object class="NSMutableArray" key="NSSubviews">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="NSView" id="404397338">
+								<reference key="NSNextResponder" ref="223842171"/>
+								<int key="NSvFlags">256</int>
+								<object class="NSMutableArray" key="NSSubviews">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<object class="NSMatrix" id="588956057">
+										<reference key="NSNextResponder" ref="404397338"/>
+										<int key="NSvFlags">256</int>
+										<string key="NSFrame">{{12, 39}, {70, 38}}</string>
+										<reference key="NSSuperview" ref="404397338"/>
+										<bool key="NSEnabled">YES</bool>
+										<int key="NSNumRows">2</int>
+										<int key="NSNumCols">1</int>
+										<object class="NSMutableArray" key="NSCells">
+											<bool key="EncodedWithXMLCoder">YES</bool>
+											<object class="NSButtonCell" id="845367793">
+												<int key="NSCellFlags">-2080244224</int>
+												<int key="NSCellFlags2">0</int>
+												<string key="NSContents">Remote</string>
+												<reference key="NSSupport" ref="599111291"/>
+												<reference key="NSControlView" ref="588956057"/>
+												<int key="NSButtonFlags">1211912703</int>
+												<int key="NSButtonFlags2">0</int>
+												<object class="NSButtonImageSource" key="NSAlternateImage" id="366582153">
+													<string key="NSImageName">NSRadioButton</string>
+												</object>
+												<object class="NSMutableString" key="NSAlternateContents" id="1061064001">
+													<characters key="NS.bytes"/>
+												</object>
+												<reference key="NSKeyEquivalent" ref="1061064001"/>
+												<int key="NSPeriodicDelay">200</int>
+												<int key="NSPeriodicInterval">25</int>
+											</object>
+											<object class="NSButtonCell" id="520995262">
+												<int key="NSCellFlags">67239424</int>
+												<int key="NSCellFlags2">0</int>
+												<string key="NSContents">Local</string>
+												<reference key="NSSupport" ref="599111291"/>
+												<reference key="NSControlView" ref="588956057"/>
+												<int key="NSTag">1</int>
+												<int key="NSButtonFlags">1211912703</int>
+												<int key="NSButtonFlags2">0</int>
+												<reference key="NSAlternateImage" ref="366582153"/>
+												<reference key="NSAlternateContents" ref="1061064001"/>
+												<reference key="NSKeyEquivalent" ref="1061064001"/>
+												<int key="NSPeriodicDelay">200</int>
+												<int key="NSPeriodicInterval">25</int>
+											</object>
+										</object>
+										<string key="NSCellSize">{70, 18}</string>
+										<string key="NSIntercellSpacing">{4, 2}</string>
+										<int key="NSMatrixFlags">1143472128</int>
+										<string key="NSCellClass">NSActionCell</string>
+										<object class="NSButtonCell" key="NSProtoCell" id="347365126">
+											<int key="NSCellFlags">67239424</int>
+											<int key="NSCellFlags2">0</int>
+											<string key="NSContents">Radio</string>
+											<reference key="NSSupport" ref="599111291"/>
+											<int key="NSButtonFlags">1211912703</int>
+											<int key="NSButtonFlags2">0</int>
+											<reference key="NSAlternateImage" ref="366582153"/>
+											<string key="NSKeyEquivalent"/>
+											<int key="NSPeriodicDelay">400</int>
+											<int key="NSPeriodicInterval">75</int>
+										</object>
+										<reference key="NSSelectedCell" ref="845367793"/>
+										<reference key="NSBackgroundColor" ref="339352646"/>
+										<reference key="NSCellBackgroundColor" ref="268561989"/>
+										<reference key="NSFont" ref="599111291"/>
+									</object>
+									<object class="NSTextField" id="349912474">
+										<reference key="NSNextResponder" ref="404397338"/>
+										<int key="NSvFlags">256</int>
+										<string key="NSFrame">{{97, 58}, {37, 17}}</string>
+										<reference key="NSSuperview" ref="404397338"/>
+										<bool key="NSEnabled">YES</bool>
+										<object class="NSTextFieldCell" key="NSCell" id="952393256">
+											<int key="NSCellFlags">67239424</int>
+											<int key="NSCellFlags2">4194304</int>
+											<string key="NSContents">User:</string>
+											<reference key="NSSupport" ref="599111291"/>
+											<reference key="NSControlView" ref="349912474"/>
+											<reference key="NSBackgroundColor" ref="339352646"/>
+											<reference key="NSTextColor" ref="274191033"/>
+										</object>
+									</object>
+									<object class="NSTextField" id="896768358">
+										<reference key="NSNextResponder" ref="404397338"/>
+										<int key="NSvFlags">256</int>
+										<string key="NSFrame">{{134, 56}, {91, 22}}</string>
+										<reference key="NSSuperview" ref="404397338"/>
+										<bool key="NSEnabled">YES</bool>
+										<object class="NSTextFieldCell" key="NSCell" id="1053210155">
+											<int key="NSCellFlags">-1804468671</int>
+											<int key="NSCellFlags2">4195328</int>
+											<string key="NSContents"/>
+											<reference key="NSSupport" ref="599111291"/>
+											<reference key="NSControlView" ref="896768358"/>
+											<bool key="NSDrawsBackground">YES</bool>
+											<reference key="NSBackgroundColor" ref="695013634"/>
+											<reference key="NSTextColor" ref="917616157"/>
+										</object>
+									</object>
+									<object class="NSTextField" id="993405512">
+										<reference key="NSNextResponder" ref="404397338"/>
+										<int key="NSvFlags">256</int>
+										<string key="NSFrame">{{236, 58}, {38, 17}}</string>
+										<reference key="NSSuperview" ref="404397338"/>
+										<bool key="NSEnabled">YES</bool>
+										<object class="NSTextFieldCell" key="NSCell" id="2123321">
+											<int key="NSCellFlags">67239424</int>
+											<int key="NSCellFlags2">4194304</int>
+											<string key="NSContents">Host:</string>
+											<reference key="NSSupport" ref="599111291"/>
+											<reference key="NSControlView" ref="993405512"/>
+											<reference key="NSBackgroundColor" ref="339352646"/>
+											<reference key="NSTextColor" ref="274191033"/>
+										</object>
+									</object>
+									<object class="NSTextField" id="1048028362">
+										<reference key="NSNextResponder" ref="404397338"/>
+										<int key="NSvFlags">258</int>
+										<string key="NSFrame">{{274, 56}, {199, 22}}</string>
+										<reference key="NSSuperview" ref="404397338"/>
+										<bool key="NSEnabled">YES</bool>
+										<object class="NSTextFieldCell" key="NSCell" id="372536919">
+											<int key="NSCellFlags">-1804468671</int>
+											<int key="NSCellFlags2">4195328</int>
+											<string key="NSContents"/>
+											<reference key="NSSupport" ref="599111291"/>
+											<reference key="NSControlView" ref="1048028362"/>
+											<bool key="NSDrawsBackground">YES</bool>
+											<reference key="NSBackgroundColor" ref="695013634"/>
+											<reference key="NSTextColor" ref="917616157"/>
+										</object>
+									</object>
+									<object class="NSTextField" id="982227363">
+										<reference key="NSNextResponder" ref="404397338"/>
+										<int key="NSvFlags">256</int>
+										<string key="NSFrame">{{11, 16}, {30, 17}}</string>
+										<reference key="NSSuperview" ref="404397338"/>
+										<bool key="NSEnabled">YES</bool>
+										<object class="NSTextFieldCell" key="NSCell" id="923729414">
+											<int key="NSCellFlags">67239424</int>
+											<int key="NSCellFlags2">4194304</int>
+											<string key="NSContents">File:</string>
+											<reference key="NSSupport" ref="599111291"/>
+											<reference key="NSControlView" ref="982227363"/>
+											<reference key="NSBackgroundColor" ref="339352646"/>
+											<reference key="NSTextColor" ref="274191033"/>
+										</object>
+									</object>
+									<object class="NSTextField" id="282586762">
+										<reference key="NSNextResponder" ref="404397338"/>
+										<int key="NSvFlags">258</int>
+										<string key="NSFrame">{{46, 14}, {427, 22}}</string>
+										<reference key="NSSuperview" ref="404397338"/>
+										<bool key="NSEnabled">YES</bool>
+										<object class="NSTextFieldCell" key="NSCell" id="208523218">
+											<int key="NSCellFlags">-1804468671</int>
+											<int key="NSCellFlags2">4195328</int>
+											<string key="NSContents"/>
+											<reference key="NSSupport" ref="599111291"/>
+											<reference key="NSControlView" ref="282586762"/>
+											<bool key="NSDrawsBackground">YES</bool>
+											<reference key="NSBackgroundColor" ref="695013634"/>
+											<reference key="NSTextColor" ref="917616157"/>
+										</object>
+									</object>
+								</object>
+								<string key="NSFrame">{{2, 2}, {493, 86}}</string>
+								<reference key="NSSuperview" ref="223842171"/>
+							</object>
+						</object>
+						<string key="NSFrame">{{20, 16}, {497, 106}}</string>
+						<reference key="NSSuperview" ref="131437498"/>
+						<string key="NSOffsets">{0, 0}</string>
+						<object class="NSTextFieldCell" key="NSTitleCell">
+							<int key="NSCellFlags">67239424</int>
+							<int key="NSCellFlags2">0</int>
+							<string key="NSContents">Second root</string>
+							<reference key="NSSupport" ref="599111291"/>
+							<reference key="NSBackgroundColor" ref="695013634"/>
+							<object class="NSColor" key="NSTextColor">
+								<int key="NSColorSpace">3</int>
+								<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+							</object>
+						</object>
+						<reference key="NSContentView" ref="404397338"/>
+						<int key="NSBorderType">3</int>
+						<int key="NSBoxType">0</int>
+						<int key="NSTitlePosition">2</int>
+						<bool key="NSTransparent">NO</bool>
+					</object>
+					<object class="NSTextField" id="45078194">
+						<reference key="NSNextResponder" ref="131437498"/>
+						<int key="NSvFlags">256</int>
+						<string key="NSFrame">{{20, 213}, {87, 17}}</string>
+						<reference key="NSSuperview" ref="131437498"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="972568817">
+							<int key="NSCellFlags">67239424</int>
+							<int key="NSCellFlags2">4194304</int>
+							<string key="NSContents">Profile name:</string>
+							<reference key="NSSupport" ref="599111291"/>
+							<reference key="NSControlView" ref="45078194"/>
+							<reference key="NSBackgroundColor" ref="339352646"/>
+							<reference key="NSTextColor" ref="274191033"/>
+						</object>
+					</object>
+					<object class="NSTextField" id="459036983">
+						<reference key="NSNextResponder" ref="131437498"/>
+						<int key="NSvFlags">258</int>
+						<string key="NSFrame">{{106, 208}, {408, 22}}</string>
+						<reference key="NSSuperview" ref="131437498"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="316961684">
+							<int key="NSCellFlags">-1804468671</int>
+							<int key="NSCellFlags2">4195328</int>
+							<string key="NSContents"/>
+							<reference key="NSSupport" ref="599111291"/>
+							<reference key="NSControlView" ref="459036983"/>
+							<bool key="NSDrawsBackground">YES</bool>
+							<reference key="NSBackgroundColor" ref="695013634"/>
+							<reference key="NSTextColor" ref="917616157"/>
+						</object>
+					</object>
+				</object>
+				<string key="NSFrameSize">{534, 250}</string>
+				<object class="NSMutableString" key="NSClassName">
+					<characters key="NS.bytes">NSView</characters>
+				</object>
+				<string key="NSExtension">NSResponder</string>
+			</object>
+			<object class="NSCustomView" id="976206435">
+				<nil key="NSNextResponder"/>
+				<int key="NSvFlags">256</int>
+				<object class="NSMutableArray" key="NSSubviews">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<object class="NSProgressIndicator" id="899688332">
+						<reference key="NSNextResponder" ref="976206435"/>
+						<int key="NSvFlags">1325</int>
+						<object class="NSPSMatrix" key="NSDrawMatrix"/>
+						<string key="NSFrame">{{419, 263}, {32, 32}}</string>
+						<reference key="NSSuperview" ref="976206435"/>
+						<int key="NSpiFlags">20490</int>
+						<double key="NSMaxValue">100</double>
+					</object>
+					<object class="NSView" id="14416367">
+						<reference key="NSNextResponder" ref="976206435"/>
+						<int key="NSvFlags">274</int>
+						<object class="NSMutableArray" key="NSSubviews">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="NSTextField" id="894337796">
+								<reference key="NSNextResponder" ref="14416367"/>
+								<int key="NSvFlags">301</int>
+								<string key="NSFrame">{{304, 254}, {263, 19}}</string>
+								<reference key="NSSuperview" ref="14416367"/>
+								<bool key="NSEnabled">YES</bool>
+								<object class="NSTextFieldCell" key="NSCell" id="687143868">
+									<int key="NSCellFlags">68288064</int>
+									<int key="NSCellFlags2">138544128</int>
+									<string key="NSContents">Connecting...</string>
+									<object class="NSFont" key="NSSupport">
+										<string key="NSName">LucidaGrande</string>
+										<double key="NSSize">16</double>
+										<int key="NSfFlags">16</int>
+									</object>
+									<reference key="NSControlView" ref="894337796"/>
+									<reference key="NSBackgroundColor" ref="339352646"/>
+									<reference key="NSTextColor" ref="274191033"/>
+								</object>
+							</object>
+						</object>
+						<string key="NSFrameSize">{871, 577}</string>
+						<reference key="NSSuperview" ref="976206435"/>
+					</object>
+				</object>
+				<string key="NSFrameSize">{871, 577}</string>
+				<object class="NSMutableString" key="NSClassName">
+					<characters key="NS.bytes">NSView</characters>
+				</object>
+				<string key="NSExtension">NSResponder</string>
+			</object>
+			<object class="NSWindowTemplate" id="621468052">
+				<int key="NSWindowStyleMask">7</int>
+				<int key="NSWindowBacking">2</int>
+				<string key="NSWindowRect">{{2, 118}, {227, 128}}</string>
+				<int key="NSWTFlags">1886912512</int>
+				<string key="NSWindowTitle">PasswordWindow</string>
+				<string key="NSWindowClass">NSWindow</string>
+				<object class="NSMutableString" key="NSViewClass">
+					<characters key="NS.bytes">View</characters>
+				</object>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<string key="NSWindowContentMinSize">{213, 107}</string>
+				<object class="NSView" key="NSWindowView" id="813757358">
+					<nil key="NSNextResponder"/>
+					<int key="NSvFlags">256</int>
+					<object class="NSMutableArray" key="NSSubviews">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSTextField" id="340638115">
+							<reference key="NSNextResponder" ref="813757358"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{20, 60}, {187, 22}}</string>
+							<reference key="NSSuperview" ref="813757358"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSTextFieldCell" key="NSCell" id="835745293">
+								<int key="NSCellFlags">-1804468671</int>
+								<int key="NSCellFlags2">4195328</int>
+								<string key="NSContents"/>
+								<reference key="NSSupport" ref="599111291"/>
+								<reference key="NSControlView" ref="340638115"/>
+								<bool key="NSDrawsBackground">YES</bool>
+								<reference key="NSBackgroundColor" ref="695013634"/>
+								<reference key="NSTextColor" ref="917616157"/>
+							</object>
+						</object>
+						<object class="NSButton" id="727137783">
+							<reference key="NSNextResponder" ref="813757358"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{115, 12}, {98, 32}}</string>
+							<reference key="NSSuperview" ref="813757358"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="80389260">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">137887744</int>
+								<string key="NSContents">Continue</string>
+								<reference key="NSSupport" ref="599111291"/>
+								<reference key="NSControlView" ref="727137783"/>
+								<int key="NSButtonFlags">-2038284033</int>
+								<int key="NSButtonFlags2">1</int>
+								<object class="NSFont" key="NSAlternateImage" id="119703982">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
+								<object class="NSMutableString" key="NSAlternateContents">
+									<characters key="NS.bytes"/>
+								</object>
+								<object class="NSMutableString" key="NSKeyEquivalent">
+									<characters key="NS.bytes"/>
+								</object>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+						</object>
+						<object class="NSButton" id="366243254">
+							<reference key="NSNextResponder" ref="813757358"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{14, 12}, {84, 32}}</string>
+							<reference key="NSSuperview" ref="813757358"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="512512774">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">137887744</int>
+								<string key="NSContents">Cancel</string>
+								<reference key="NSSupport" ref="599111291"/>
+								<reference key="NSControlView" ref="366243254"/>
+								<int key="NSButtonFlags">-2038284033</int>
+								<int key="NSButtonFlags2">1</int>
+								<reference key="NSAlternateImage" ref="119703982"/>
+								<object class="NSMutableString" key="NSAlternateContents">
+									<characters key="NS.bytes"/>
+								</object>
+								<object class="NSMutableString" key="NSKeyEquivalent">
+									<characters key="NS.bytes"/>
+								</object>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+						</object>
+						<object class="NSTextField" id="23444779">
+							<reference key="NSNextResponder" ref="813757358"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{17, 90}, {193, 17}}</string>
+							<reference key="NSSuperview" ref="813757358"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSTextFieldCell" key="NSCell" id="79825548">
+								<int key="NSCellFlags">67239488</int>
+								<int key="NSCellFlags2">4196352</int>
+								<string type="base64-UTF8" key="NSContents">UGxlYXNlIGVudGVyIHlvdXIgcGFzc3dvcmQKA</string>
+								<reference key="NSSupport" ref="599111291"/>
+								<reference key="NSControlView" ref="23444779"/>
+								<reference key="NSBackgroundColor" ref="339352646"/>
+								<reference key="NSTextColor" ref="274191033"/>
+							</object>
+						</object>
+					</object>
+					<string key="NSFrameSize">{227, 128}</string>
+				</object>
+				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
+				<string key="NSMinSize">{213, 129}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+			</object>
+			<object class="NSWindowTemplate" id="329232122">
+				<int key="NSWindowStyleMask">3</int>
+				<int key="NSWindowBacking">2</int>
+				<string key="NSWindowRect">{{194, 458}, {262, 266}}</string>
+				<int key="NSWTFlags">1886912512</int>
+				<string key="NSWindowTitle"/>
+				<string key="NSWindowClass">NSWindow</string>
+				<object class="NSMutableString" key="NSViewClass">
+					<characters key="NS.bytes">View</characters>
+				</object>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<string key="NSWindowContentMinSize">{213, 107}</string>
+				<object class="NSView" key="NSWindowView" id="614370347">
+					<nil key="NSNextResponder"/>
+					<int key="NSvFlags">256</int>
+					<object class="NSMutableArray" key="NSSubviews">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSTextField" id="659712406">
+							<reference key="NSNextResponder" ref="614370347"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{22, 152}, {220, 22}}</string>
+							<reference key="NSSuperview" ref="614370347"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSTextFieldCell" key="NSCell" id="538108566">
+								<int key="NSCellFlags">-2079195584</int>
+								<int key="NSCellFlags2">138413056</int>
+								<string key="NSContents">Unison</string>
+								<object class="NSFont" key="NSSupport">
+									<string key="NSName">LucidaGrande-Bold</string>
+									<double key="NSSize">18</double>
+									<int key="NSfFlags">16</int>
+								</object>
+								<reference key="NSControlView" ref="659712406"/>
+								<reference key="NSBackgroundColor" ref="695013634"/>
+								<reference key="NSTextColor" ref="917616157"/>
+							</object>
+						</object>
+						<object class="NSTextField" id="267764307">
+							<reference key="NSNextResponder" ref="614370347"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{22, 20}, {224, 52}}</string>
+							<reference key="NSSuperview" ref="614370347"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSTextFieldCell" key="NSCell" id="742877646">
+								<int key="NSCellFlags">-2080244224</int>
+								<int key="NSCellFlags2">138412032</int>
+								<string type="base64-UTF8" key="NSContents">wqkgQ29weXJpZ2h0IDE5OTktMjAwNi4KClRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhl
+IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLg</string>
+								<object class="NSFont" key="NSSupport">
+									<string key="NSName">LucidaGrande</string>
+									<double key="NSSize">10</double>
+									<int key="NSfFlags">2843</int>
+								</object>
+								<reference key="NSControlView" ref="267764307"/>
+								<reference key="NSBackgroundColor" ref="695013634"/>
+								<reference key="NSTextColor" ref="917616157"/>
+							</object>
+						</object>
+						<object class="NSImageView" id="753251315">
+							<reference key="NSNextResponder" ref="614370347"/>
+							<int key="NSvFlags">256</int>
+							<object class="NSMutableSet" key="NSDragTypes">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSArray" key="set.sortedObjects">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<string>Apple PDF pasteboard type</string>
+									<string>Apple PICT pasteboard type</string>
+									<string>Apple PNG pasteboard type</string>
+									<string>NSFilenamesPboardType</string>
+									<string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
+									<string>NeXT TIFF v4.0 pasteboard type</string>
+								</object>
+							</object>
+							<string key="NSFrame">{{20, 182}, {224, 64}}</string>
+							<reference key="NSSuperview" ref="614370347"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSImageCell" key="NSCell" id="652374412">
+								<int key="NSCellFlags">130560</int>
+								<int key="NSCellFlags2">33554432</int>
+								<object class="NSCustomResource" key="NSContents">
+									<string key="NSClassName">NSImage</string>
+									<string key="NSResourceName">Unison</string>
+								</object>
+								<int key="NSAlign">0</int>
+								<int key="NSScale">0</int>
+								<int key="NSStyle">0</int>
+								<bool key="NSAnimates">NO</bool>
+							</object>
+							<bool key="NSEditable">YES</bool>
+						</object>
+						<object class="NSTextField" id="1025952662">
+							<reference key="NSNextResponder" ref="614370347"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{22, 101}, {224, 18}}</string>
+							<reference key="NSSuperview" ref="614370347"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSTextFieldCell" key="NSCell" id="292039647">
+								<int key="NSCellFlags">-2079195584</int>
+								<int key="NSCellFlags2">138413056</int>
+								<string key="NSContents">Sync you very much!</string>
+								<object class="NSFont" key="NSSupport">
+									<string key="NSName">Optima-Italic</string>
+									<double key="NSSize">12</double>
+									<int key="NSfFlags">16</int>
+								</object>
+								<reference key="NSControlView" ref="1025952662"/>
+								<reference key="NSBackgroundColor" ref="695013634"/>
+								<reference key="NSTextColor" ref="917616157"/>
+							</object>
+						</object>
+						<object class="NSTextField" id="844769937">
+							<reference key="NSNextResponder" ref="614370347"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{22, 127}, {220, 17}}</string>
+							<reference key="NSSuperview" ref="614370347"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSTextFieldCell" key="NSCell" id="173945597">
+								<int key="NSCellFlags">-2079195584</int>
+								<int key="NSCellFlags2">138413056</int>
+								<string key="NSContents">?.?.?</string>
+								<reference key="NSSupport" ref="745083723"/>
+								<reference key="NSControlView" ref="844769937"/>
+								<reference key="NSBackgroundColor" ref="695013634"/>
+								<reference key="NSTextColor" ref="917616157"/>
+							</object>
+						</object>
+					</object>
+					<string key="NSFrameSize">{262, 266}</string>
+				</object>
+				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
+				<string key="NSMinSize">{213, 129}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+			</object>
+			<object class="NSWindowTemplate" id="923445797">
+				<int key="NSWindowStyleMask">15</int>
+				<int key="NSWindowBacking">2</int>
+				<string key="NSWindowRect">{{519, 382}, {505, 342}}</string>
+				<int key="NSWTFlags">1886912512</int>
+				<string key="NSWindowTitle">Diff</string>
+				<object class="NSMutableString" key="NSWindowClass">
+					<characters key="NS.bytes">NSWindow</characters>
+				</object>
+				<object class="NSMutableString" key="NSViewClass">
+					<characters key="NS.bytes">View</characters>
+				</object>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<string key="NSWindowContentMinSize">{213, 107}</string>
+				<object class="NSView" key="NSWindowView" id="441291314">
+					<nil key="NSNextResponder"/>
+					<int key="NSvFlags">256</int>
+					<object class="NSMutableArray" key="NSSubviews">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSScrollView" id="531171583">
+							<reference key="NSNextResponder" ref="441291314"/>
+							<int key="NSvFlags">319</int>
+							<object class="NSMutableArray" key="NSSubviews">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSClipView" id="638847102">
+									<reference key="NSNextResponder" ref="531171583"/>
+									<int key="NSvFlags">2304</int>
+									<object class="NSMutableArray" key="NSSubviews">
+										<bool key="EncodedWithXMLCoder">YES</bool>
+										<object class="NSTextView" id="755012754">
+											<reference key="NSNextResponder" ref="638847102"/>
+											<int key="NSvFlags">2322</int>
+											<string key="NSFrameSize">{505, 14}</string>
+											<reference key="NSSuperview" ref="638847102"/>
+											<object class="NSTextContainer" key="NSTextContainer" id="285163648">
+												<object class="NSLayoutManager" key="NSLayoutManager">
+													<object class="NSTextStorage" key="NSTextStorage">
+														<object class="NSMutableString" key="NSString">
+															<characters key="NS.bytes"/>
+														</object>
+														<nil key="NSDelegate"/>
+													</object>
+													<object class="NSMutableArray" key="NSTextContainers">
+														<bool key="EncodedWithXMLCoder">YES</bool>
+														<reference ref="285163648"/>
+													</object>
+													<int key="NSLMFlags">6</int>
+													<nil key="NSDelegate"/>
+												</object>
+												<reference key="NSTextView" ref="755012754"/>
+												<double key="NSWidth">505</double>
+												<int key="NSTCFlags">1</int>
+											</object>
+											<object class="NSTextViewSharedData" key="NSSharedData">
+												<int key="NSFlags">11236</int>
+												<int key="NSTextCheckingTypes">0</int>
+												<nil key="NSMarkedAttributes"/>
+												<reference key="NSBackgroundColor" ref="268561989"/>
+												<object class="NSDictionary" key="NSSelectedAttributes">
+													<bool key="EncodedWithXMLCoder">YES</bool>
+													<object class="NSArray" key="dict.sortedKeys">
+														<bool key="EncodedWithXMLCoder">YES</bool>
+														<string>NSBackgroundColor</string>
+														<string>NSColor</string>
+													</object>
+													<object class="NSMutableArray" key="dict.values">
+														<bool key="EncodedWithXMLCoder">YES</bool>
+														<object class="NSColor">
+															<int key="NSColorSpace">6</int>
+															<string key="NSCatalogName">System</string>
+															<string key="NSColorName">selectedTextBackgroundColor</string>
+															<reference key="NSColor" ref="176647248"/>
+														</object>
+														<object class="NSColor">
+															<int key="NSColorSpace">6</int>
+															<string key="NSCatalogName">System</string>
+															<string key="NSColorName">selectedTextColor</string>
+															<reference key="NSColor" ref="465092439"/>
+														</object>
+													</object>
+												</object>
+												<reference key="NSInsertionColor" ref="465092439"/>
+												<object class="NSDictionary" key="NSLinkAttributes">
+													<bool key="EncodedWithXMLCoder">YES</bool>
+													<object class="NSArray" key="dict.sortedKeys">
+														<bool key="EncodedWithXMLCoder">YES</bool>
+														<string>NSColor</string>
+														<string>NSUnderline</string>
+													</object>
+													<object class="NSMutableArray" key="dict.values">
+														<bool key="EncodedWithXMLCoder">YES</bool>
+														<object class="NSColor" id="438358543">
+															<int key="NSColorSpace">1</int>
+															<bytes key="NSRGB">MCAwIDEAA</bytes>
+														</object>
+														<integer value="1"/>
+													</object>
+												</object>
+												<nil key="NSDefaultParagraphStyle"/>
+											</object>
+											<int key="NSTVFlags">6</int>
+											<string key="NSMaxSize">{1010, 1e+07}</string>
+											<string key="NSMinize">{114, 0}</string>
+											<nil key="NSDelegate"/>
+										</object>
+									</object>
+									<string key="NSFrameSize">{505, 342}</string>
+									<reference key="NSSuperview" ref="531171583"/>
+									<reference key="NSNextKeyView" ref="755012754"/>
+									<reference key="NSDocView" ref="755012754"/>
+									<reference key="NSBGColor" ref="268561989"/>
+									<object class="NSCursor" key="NSCursor">
+										<string key="NSHotSpot">{1, -1}</string>
+										<int key="NSCursorType">0</int>
+									</object>
+									<int key="NScvFlags">4</int>
+								</object>
+								<object class="NSScroller" id="336081770">
+									<reference key="NSNextResponder" ref="531171583"/>
+									<int key="NSvFlags">-2147483392</int>
+									<string key="NSFrame">{{-30, 1}, {15, 356}}</string>
+									<reference key="NSSuperview" ref="531171583"/>
+									<reference key="NSTarget" ref="531171583"/>
+									<string key="NSAction">_doScroller:</string>
+									<double key="NSCurValue">1</double>
+								</object>
+								<object class="NSScroller" id="645744673">
+									<reference key="NSNextResponder" ref="531171583"/>
+									<int key="NSvFlags">-2147483392</int>
+									<string key="NSFrame">{{-100, -100}, {87, 18}}</string>
+									<reference key="NSSuperview" ref="531171583"/>
+									<int key="NSsFlags">1</int>
+									<reference key="NSTarget" ref="531171583"/>
+									<string key="NSAction">_doScroller:</string>
+									<double key="NSCurValue">1</double>
+									<double key="NSPercent">0.94565218687057495</double>
+								</object>
+							</object>
+							<string key="NSFrameSize">{505, 342}</string>
+							<reference key="NSSuperview" ref="441291314"/>
+							<reference key="NSNextKeyView" ref="638847102"/>
+							<int key="NSsFlags">528</int>
+							<reference key="NSVScroller" ref="336081770"/>
+							<reference key="NSHScroller" ref="645744673"/>
+							<reference key="NSContentView" ref="638847102"/>
+						</object>
+					</object>
+					<string key="NSFrameSize">{505, 342}</string>
+				</object>
+				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
+				<string key="NSMinSize">{213, 129}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+			</object>
+			<object class="NSWindowTemplate" id="1047544150">
+				<int key="NSWindowStyleMask">1</int>
+				<int key="NSWindowBacking">2</int>
+				<string key="NSWindowRect">{{163, 135}, {400, 229}}</string>
+				<int key="NSWTFlags">1886912512</int>
+				<string key="NSWindowTitle">Unison</string>
+				<string key="NSWindowClass">NSWindow</string>
+				<object class="NSMutableString" key="NSViewClass">
+					<characters key="NS.bytes">View</characters>
+				</object>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<string key="NSWindowContentMinSize">{213, 107}</string>
+				<object class="NSView" key="NSWindowView" id="18501583">
+					<nil key="NSNextResponder"/>
+					<int key="NSvFlags">256</int>
+					<object class="NSMutableArray" key="NSSubviews">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSButton" id="159106305">
+							<reference key="NSNextResponder" ref="18501583"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{302, 12}, {84, 32}}</string>
+							<reference key="NSSuperview" ref="18501583"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="519522710">
+								<int key="NSCellFlags">-2080244224</int>
+								<int key="NSCellFlags2">134217728</int>
+								<string key="NSContents">Yes</string>
+								<reference key="NSSupport" ref="599111291"/>
+								<reference key="NSControlView" ref="159106305"/>
+								<int key="NSButtonFlags">-2038284033</int>
+								<int key="NSButtonFlags2">1</int>
+								<reference key="NSAlternateImage" ref="599111291"/>
+								<string key="NSAlternateContents"/>
+								<object class="NSMutableString" key="NSKeyEquivalent">
+									<characters key="NS.bytes"/>
+								</object>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+						</object>
+						<object class="NSTextField" id="565406362">
+							<reference key="NSNextResponder" ref="18501583"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{20, 188}, {383, 21}}</string>
+							<reference key="NSSuperview" ref="18501583"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSTextFieldCell" key="NSCell" id="438918118">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">4194304</int>
+								<string key="NSContents">Would you like to install the Unison command-line tool?</string>
+								<object class="NSFont" key="NSSupport">
+									<string key="NSName">LucidaGrande-Bold</string>
+									<double key="NSSize">12</double>
+									<int key="NSfFlags">16</int>
+								</object>
+								<reference key="NSControlView" ref="565406362"/>
+								<reference key="NSBackgroundColor" ref="339352646"/>
+								<reference key="NSTextColor" ref="274191033"/>
+							</object>
+						</object>
+						<object class="NSButton" id="1066528945">
+							<reference key="NSNextResponder" ref="18501583"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{17, 36}, {145, 18}}</string>
+							<reference key="NSSuperview" ref="18501583"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="13750519">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">131072</int>
+								<string key="NSContents">Don't ask me again</string>
+								<reference key="NSSupport" ref="26"/>
+								<reference key="NSControlView" ref="1066528945"/>
+								<int key="NSButtonFlags">1211912703</int>
+								<int key="NSButtonFlags2">2</int>
+								<object class="NSButtonImageSource" key="NSAlternateImage" id="478087450">
+									<string key="NSImageName">NSSwitch</string>
+								</object>
+								<string key="NSAlternateContents"/>
+								<string key="NSKeyEquivalent"/>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+						</object>
+						<object class="NSButton" id="67591844">
+							<reference key="NSNextResponder" ref="18501583"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{218, 12}, {84, 32}}</string>
+							<reference key="NSSuperview" ref="18501583"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="1020934634">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">134217728</int>
+								<string key="NSContents">No</string>
+								<reference key="NSSupport" ref="599111291"/>
+								<reference key="NSControlView" ref="67591844"/>
+								<int key="NSButtonFlags">-2038284033</int>
+								<int key="NSButtonFlags2">1</int>
+								<reference key="NSAlternateImage" ref="599111291"/>
+								<string key="NSAlternateContents"/>
+								<object class="NSMutableString" key="NSKeyEquivalent">
+									<characters key="NS.bytes"/>
+								</object>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+						</object>
+						<object class="NSTextField" id="847992124">
+							<reference key="NSNextResponder" ref="18501583"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{17, 60}, {366, 120}}</string>
+							<reference key="NSSuperview" ref="18501583"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSTextFieldCell" key="NSCell" id="132645490">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">272629760</int>
+								<string type="base64-UTF8" key="NSContents">VGhlIGNvbW1hbmQtbGluZSB0b29sIGlzIGEgc21hbGwgcHJvZ3JhbSB0aGF0IGNhbiBiZSBpbnN0YWxs
+ZWQgaW4gYSBzdGFuZGFyZCBwbGFjZSBvbiB5b3VyIGNvbXB1dGVyICgvdXNyL2Jpbi91bmlzb24pIHNv
+IFVuaXNvbiBjYW4gZWFzaWx5IGJlIGZvdW5kLiBJZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHN5bmNo
+cm9uaXplIGZpbGVzIG9uIHRoaXMgY29tcHV0ZXIgYnkgcnVubmluZyBVbmlzb24gb24gYSByZW1vdGUg
+Y29tcHV0ZXIsIHlvdSBzaG91bGQgcHJvYmFibHkgaW5zdGFsbCBpdC4KCklmIHlvdSBkb24ndCBpbnN0
+YWxsIGl0IG5vdywgeW91IGNhbiBkbyBzbyBsYXRlciBieSBjaG9vc2luZyAnSW5zdGFsbCBjb21tYW5k
+LWxpbmUgdG9vbCcgZnJvbSB0aGUgVW5pc29uIG1lbnUuCg</string>
+								<reference key="NSSupport" ref="26"/>
+								<reference key="NSControlView" ref="847992124"/>
+								<reference key="NSBackgroundColor" ref="339352646"/>
+								<reference key="NSTextColor" ref="274191033"/>
+							</object>
+						</object>
+					</object>
+					<string key="NSFrameSize">{400, 229}</string>
+				</object>
+				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
+				<string key="NSMinSize">{213, 129}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+			</object>
+			<object class="NSWindowTemplate" id="140516394">
+				<int key="NSWindowStyleMask">3</int>
+				<int key="NSWindowBacking">2</int>
+				<string key="NSWindowRect">{{235, 475}, {446, 84}}</string>
+				<int key="NSWTFlags">1954022400</int>
+				<string key="NSWindowTitle">General</string>
+				<string key="NSWindowClass">NSWindow</string>
+				<object class="NSToolbar" key="NSViewClass" id="131341969">
+					<object class="NSMutableString" key="NSToolbarIdentifier">
+						<characters key="NS.bytes">2780CC9C-D44A-4484-8D03-C65609351E57</characters>
+					</object>
+					<nil key="NSToolbarDelegate"/>
+					<bool key="NSToolbarPrefersToBeShown">YES</bool>
+					<bool key="NSToolbarShowsBaselineSeparator">YES</bool>
+					<bool key="NSToolbarAllowsUserCustomization">YES</bool>
+					<bool key="NSToolbarAutosavesConfiguration">NO</bool>
+					<int key="NSToolbarDisplayMode">1</int>
+					<int key="NSToolbarSizeMode">1</int>
+					<object class="NSMutableDictionary" key="NSToolbarIBIdentifiedItems">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>4A97E608-13A1-41D8-B077-1360865DB1A4</string>
+							<string>D5D59D5F-DFD1-4F67-8724-69D88EF5E355</string>
+							<string>NSToolbarFlexibleSpaceItem</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="NSToolbarItem" id="342729370">
+								<object class="NSMutableString" key="NSToolbarItemIdentifier">
+									<characters key="NS.bytes">4A97E608-13A1-41D8-B077-1360865DB1A4</characters>
+								</object>
+								<string key="NSToolbarItemLabel">General</string>
+								<string key="NSToolbarItemPaletteLabel">General</string>
+								<string key="NSToolbarItemToolTip"/>
+								<nil key="NSToolbarItemView"/>
+								<object class="NSCustomResource" key="NSToolbarItemImage">
+									<string key="NSClassName">NSImage</string>
+									<string key="NSResourceName">NSPreferencesGeneral</string>
+								</object>
+								<nil key="NSToolbarItemTarget"/>
+								<nil key="NSToolbarItemAction"/>
+								<string key="NSToolbarItemMinSize">{0, 0}</string>
+								<string key="NSToolbarItemMaxSize">{0, 0}</string>
+								<bool key="NSToolbarItemEnabled">YES</bool>
+								<bool key="NSToolbarItemAutovalidates">YES</bool>
+								<int key="NSToolbarItemTag">-1</int>
+								<bool key="NSToolbarIsUserRemovable">YES</bool>
+								<int key="NSToolbarItemVisibilityPriority">0</int>
+							</object>
+							<object class="NSToolbarItem" id="576257785">
+								<object class="NSMutableString" key="NSToolbarItemIdentifier">
+									<characters key="NS.bytes">D5D59D5F-DFD1-4F67-8724-69D88EF5E355</characters>
+								</object>
+								<string key="NSToolbarItemLabel">Fonts</string>
+								<string key="NSToolbarItemPaletteLabel">Fonts</string>
+								<string key="NSToolbarItemToolTip">Show Font Panel</string>
+								<nil key="NSToolbarItemView"/>
+								<object class="NSCustomResource" key="NSToolbarItemImage">
+									<string key="NSClassName">NSImage</string>
+									<string key="NSResourceName">NSFontPanel</string>
+								</object>
+								<nil key="NSToolbarItemTarget"/>
+								<nil key="NSToolbarItemAction"/>
+								<string key="NSToolbarItemMinSize">{0, 0}</string>
+								<string key="NSToolbarItemMaxSize">{0, 0}</string>
+								<bool key="NSToolbarItemEnabled">YES</bool>
+								<bool key="NSToolbarItemAutovalidates">YES</bool>
+								<int key="NSToolbarItemTag">-1</int>
+								<bool key="NSToolbarIsUserRemovable">YES</bool>
+								<int key="NSToolbarItemVisibilityPriority">0</int>
+							</object>
+							<object class="NSToolbarFlexibleSpaceItem" id="286400661">
+								<string key="NSToolbarItemIdentifier">NSToolbarFlexibleSpaceItem</string>
+								<string key="NSToolbarItemLabel"/>
+								<string key="NSToolbarItemPaletteLabel">Flexible Space</string>
+								<nil key="NSToolbarItemToolTip"/>
+								<nil key="NSToolbarItemView"/>
+								<nil key="NSToolbarItemImage"/>
+								<nil key="NSToolbarItemTarget"/>
+								<nil key="NSToolbarItemAction"/>
+								<string key="NSToolbarItemMinSize">{1, 5}</string>
+								<string key="NSToolbarItemMaxSize">{20000, 32}</string>
+								<bool key="NSToolbarItemEnabled">YES</bool>
+								<bool key="NSToolbarItemAutovalidates">YES</bool>
+								<int key="NSToolbarItemTag">-1</int>
+								<bool key="NSToolbarIsUserRemovable">YES</bool>
+								<int key="NSToolbarItemVisibilityPriority">0</int>
+								<object class="NSMenuItem" key="NSToolbarItemMenuFormRepresentation">
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="151838310"/>
+									<reference key="NSMixedImage" ref="1045142073"/>
+								</object>
+							</object>
+						</object>
+					</object>
+					<object class="NSArray" key="NSToolbarIBAllowedItems">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<reference ref="342729370"/>
+						<reference ref="576257785"/>
+						<reference ref="286400661"/>
+					</object>
+					<object class="NSMutableArray" key="NSToolbarIBDefaultItems">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<reference ref="342729370"/>
+						<reference ref="576257785"/>
+						<reference ref="286400661"/>
+					</object>
+					<object class="NSMutableArray" key="NSToolbarIBSelectableItems">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+					</object>
+				</object>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<object class="NSView" key="NSWindowView" id="455994853">
+					<reference key="NSNextResponder"/>
+					<int key="NSvFlags">256</int>
+					<string key="NSFrameSize">{446, 84}</string>
+					<reference key="NSSuperview"/>
+				</object>
+				<string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+			</object>
+			<object class="NSUserDefaultsController" id="977013255">
+				<bool key="NSSharedInstance">YES</bool>
+			</object>
+			<object class="NSView" id="939529328">
+				<nil key="NSNextResponder"/>
+				<int key="NSvFlags">256</int>
+				<object class="NSMutableArray" key="NSSubviews">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<object class="NSButton" id="816515478">
+						<reference key="NSNextResponder" ref="939529328"/>
+						<int key="NSvFlags">268</int>
+						<string key="NSFrame">{{18, 45}, {174, 18}}</string>
+						<reference key="NSSuperview" ref="939529328"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSButtonCell" key="NSCell" id="248509277">
+							<int key="NSCellFlags">-2080244224</int>
+							<int key="NSCellFlags2">0</int>
+							<string key="NSContents">Open profile on startup:</string>
+							<reference key="NSSupport" ref="599111291"/>
+							<reference key="NSControlView" ref="816515478"/>
+							<int key="NSButtonFlags">1211912703</int>
+							<int key="NSButtonFlags2">2</int>
+							<object class="NSCustomResource" key="NSNormalImage" id="616587014">
+								<string key="NSClassName">NSImage</string>
+								<string key="NSResourceName">NSSwitch</string>
+							</object>
+							<reference key="NSAlternateImage" ref="478087450"/>
+							<string key="NSAlternateContents"/>
+							<string key="NSKeyEquivalent"/>
+							<int key="NSPeriodicDelay">200</int>
+							<int key="NSPeriodicInterval">25</int>
+						</object>
+					</object>
+					<object class="NSButton" id="899290600">
+						<reference key="NSNextResponder" ref="939529328"/>
+						<int key="NSvFlags">268</int>
+						<string key="NSFrame">{{18, 18}, {410, 18}}</string>
+						<reference key="NSSuperview" ref="939529328"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSButtonCell" key="NSCell" id="606603162">
+							<int key="NSCellFlags">67239424</int>
+							<int key="NSCellFlags2">0</int>
+							<string key="NSContents">Delete log-file (~/unison.log) automatically on complete sync</string>
+							<reference key="NSSupport" ref="599111291"/>
+							<reference key="NSControlView" ref="899290600"/>
+							<int key="NSButtonFlags">1211912703</int>
+							<int key="NSButtonFlags2">2</int>
+							<reference key="NSNormalImage" ref="616587014"/>
+							<reference key="NSAlternateImage" ref="478087450"/>
+							<string key="NSAlternateContents"/>
+							<string key="NSKeyEquivalent"/>
+							<int key="NSPeriodicDelay">200</int>
+							<int key="NSPeriodicInterval">25</int>
+						</object>
+					</object>
+					<object class="NSComboBox" id="357365612">
+						<reference key="NSNextResponder" ref="939529328"/>
+						<int key="NSvFlags">268</int>
+						<string key="NSFrame">{{198, 40}, {231, 26}}</string>
+						<reference key="NSSuperview" ref="939529328"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSComboBoxCell" key="NSCell" id="551363216">
+							<int key="NSCellFlags">72482368</int>
+							<int key="NSCellFlags2">272630784</int>
+							<string key="NSContents"/>
+							<reference key="NSSupport" ref="599111291"/>
+							<reference key="NSControlView" ref="357365612"/>
+							<bool key="NSDrawsBackground">YES</bool>
+							<reference key="NSBackgroundColor" ref="695013634"/>
+							<reference key="NSTextColor" ref="274191033"/>
+							<int key="NSVisibleItemCount">5</int>
+							<bool key="NSHasVerticalScroller">YES</bool>
+							<bool key="NSCompletes">YES</bool>
+							<reference key="NSDelegate" ref="357365612"/>
+							<object class="NSComboTableView" key="NSTableView" id="931508487">
+								<reference key="NSNextResponder"/>
+								<int key="NSvFlags">274</int>
+								<string key="NSFrameSize">{15, 0}</string>
+								<reference key="NSSuperview"/>
+								<reference key="NSWindow"/>
+								<bool key="NSEnabled">YES</bool>
+								<object class="NSMutableArray" key="NSTableColumns">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<object class="NSTableColumn">
+										<integer value="0" key="NSIdentifier"/>
+										<double key="NSWidth">12</double>
+										<double key="NSMinWidth">10</double>
+										<double key="NSMaxWidth">1000</double>
+										<object class="NSTableHeaderCell" key="NSHeaderCell">
+											<int key="NSCellFlags">75628032</int>
+											<int key="NSCellFlags2">0</int>
+											<string key="NSContents"/>
+											<reference key="NSSupport" ref="745083723"/>
+											<object class="NSColor" key="NSBackgroundColor">
+												<int key="NSColorSpace">3</int>
+												<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+											</object>
+											<reference key="NSTextColor" ref="268561989"/>
+										</object>
+										<object class="NSTextFieldCell" key="NSDataCell">
+											<int key="NSCellFlags">338820672</int>
+											<int key="NSCellFlags2">1024</int>
+											<reference key="NSSupport" ref="599111291"/>
+											<reference key="NSControlView" ref="931508487"/>
+											<bool key="NSDrawsBackground">YES</bool>
+											<reference key="NSBackgroundColor" ref="571804419"/>
+											<reference key="NSTextColor" ref="274191033"/>
+										</object>
+										<int key="NSResizingMask">3</int>
+										<bool key="NSIsResizeable">YES</bool>
+										<reference key="NSTableView" ref="931508487"/>
+									</object>
+								</object>
+								<double key="NSIntercellSpacingWidth">3</double>
+								<double key="NSIntercellSpacingHeight">2</double>
+								<reference key="NSBackgroundColor" ref="571804419"/>
+								<reference key="NSGridColor" ref="837222830"/>
+								<double key="NSRowHeight">19</double>
+								<string key="NSAction">tableViewAction:</string>
+								<int key="NSTvFlags">-767524864</int>
+								<reference key="NSDelegate" ref="551363216"/>
+								<reference key="NSDataSource" ref="551363216"/>
+								<reference key="NSTarget" ref="551363216"/>
+								<int key="NSColumnAutoresizingStyle">1</int>
+								<int key="NSDraggingSourceMaskForLocal">15</int>
+								<int key="NSDraggingSourceMaskForNonLocal">0</int>
+								<bool key="NSAllowsTypeSelect">YES</bool>
+								<int key="NSTableViewDraggingDestinationStyle">0</int>
+							</object>
+						</object>
+					</object>
+				</object>
+				<string key="NSFrameSize">{446, 84}</string>
+			</object>
+			<object class="NSView" id="439327882">
+				<nil key="NSNextResponder"/>
+				<int key="NSvFlags">256</int>
+				<object class="NSMutableArray" key="NSSubviews">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<object class="NSTextField" id="678202428">
+						<reference key="NSNextResponder" ref="439327882"/>
+						<int key="NSvFlags">268</int>
+						<string key="NSFrame">{{125, 50}, {213, 17}}</string>
+						<reference key="NSSuperview" ref="439327882"/>
+						<reference key="NSNextKeyView" ref="1065369439"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="751646106">
+							<int key="NSCellFlags">68288064</int>
+							<int key="NSCellFlags2">272630784</int>
+							<string key="NSContents">xxxx</string>
+							<reference key="NSSupport" ref="599111291"/>
+							<reference key="NSControlView" ref="678202428"/>
+							<reference key="NSBackgroundColor" ref="339352646"/>
+							<reference key="NSTextColor" ref="274191033"/>
+						</object>
+					</object>
+					<object class="NSButton" id="1065369439">
+						<reference key="NSNextResponder" ref="439327882"/>
+						<int key="NSvFlags">268</int>
+						<string key="NSFrame">{{343, 45}, {59, 25}}</string>
+						<reference key="NSSuperview" ref="439327882"/>
+						<reference key="NSNextKeyView" ref="760006057"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSButtonCell" key="NSCell" id="84059826">
+							<int key="NSCellFlags">-2080244224</int>
+							<int key="NSCellFlags2">134217728</int>
+							<string key="NSContents">choose</string>
+							<reference key="NSSupport" ref="599111291"/>
+							<reference key="NSControlView" ref="1065369439"/>
+							<int key="NSButtonFlags">-2038152961</int>
+							<int key="NSButtonFlags2">163</int>
+							<string key="NSAlternateContents"/>
+							<string key="NSKeyEquivalent"/>
+							<int key="NSPeriodicDelay">400</int>
+							<int key="NSPeriodicInterval">75</int>
+						</object>
+					</object>
+					<object class="NSTextField" id="28911990">
+						<reference key="NSNextResponder" ref="439327882"/>
+						<int key="NSvFlags">268</int>
+						<string key="NSFrame">{{125, 20}, {213, 17}}</string>
+						<reference key="NSSuperview" ref="439327882"/>
+						<reference key="NSNextKeyView" ref="364632432"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="400249441">
+							<int key="NSCellFlags">68288064</int>
+							<int key="NSCellFlags2">272630784</int>
+							<string key="NSContents">xxxx</string>
+							<reference key="NSSupport" ref="599111291"/>
+							<reference key="NSControlView" ref="28911990"/>
+							<reference key="NSBackgroundColor" ref="339352646"/>
+							<reference key="NSTextColor" ref="274191033"/>
+						</object>
+					</object>
+					<object class="NSButton" id="364632432">
+						<reference key="NSNextResponder" ref="439327882"/>
+						<int key="NSvFlags">268</int>
+						<string key="NSFrame">{{343, 15}, {59, 25}}</string>
+						<reference key="NSSuperview" ref="439327882"/>
+						<reference key="NSNextKeyView" ref="455994853"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSButtonCell" key="NSCell" id="129627026">
+							<int key="NSCellFlags">-2080244224</int>
+							<int key="NSCellFlags2">134217728</int>
+							<string key="NSContents">choose</string>
+							<reference key="NSSupport" ref="599111291"/>
+							<reference key="NSControlView" ref="364632432"/>
+							<int key="NSButtonFlags">-2038152961</int>
+							<int key="NSButtonFlags2">163</int>
+							<string key="NSAlternateContents"/>
+							<string key="NSKeyEquivalent"/>
+							<int key="NSPeriodicDelay">400</int>
+							<int key="NSPeriodicInterval">75</int>
+						</object>
+					</object>
+					<object class="NSTextField" id="760006057">
+						<reference key="NSNextResponder" ref="439327882"/>
+						<int key="NSvFlags">268</int>
+						<string key="NSFrame">{{17, 20}, {106, 17}}</string>
+						<reference key="NSSuperview" ref="439327882"/>
+						<reference key="NSNextKeyView" ref="28911990"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="112946638">
+							<int key="NSCellFlags">68288064</int>
+							<int key="NSCellFlags2">71304192</int>
+							<string key="NSContents">Diff font:</string>
+							<reference key="NSSupport" ref="599111291"/>
+							<reference key="NSControlView" ref="760006057"/>
+							<reference key="NSBackgroundColor" ref="339352646"/>
+							<reference key="NSTextColor" ref="274191033"/>
+						</object>
+					</object>
+					<object class="NSTextField" id="132542257">
+						<reference key="NSNextResponder" ref="439327882"/>
+						<int key="NSvFlags">268</int>
+						<string key="NSFrame">{{17, 50}, {106, 17}}</string>
+						<reference key="NSSuperview" ref="439327882"/>
+						<reference key="NSNextKeyView" ref="678202428"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="1695119">
+							<int key="NSCellFlags">68288064</int>
+							<int key="NSCellFlags2">71304192</int>
+							<string key="NSContents">Details font:</string>
+							<reference key="NSSupport" ref="599111291"/>
+							<reference key="NSControlView" ref="132542257"/>
+							<reference key="NSBackgroundColor" ref="339352646"/>
+							<reference key="NSTextColor" ref="274191033"/>
+						</object>
+					</object>
+				</object>
+				<string key="NSFrameSize">{422, 87}</string>
+			</object>
+		</object>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<object class="NSMutableArray" key="connectionRecords">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">terminate:</string>
+						<reference key="source" ref="37863316"/>
+						<reference key="destination" ref="526625829"/>
+					</object>
+					<int key="connectionID">139</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">hideOtherApplications:</string>
+						<reference key="source" ref="37863316"/>
+						<reference key="destination" ref="693945174"/>
+					</object>
+					<int key="connectionID">146</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">hide:</string>
+						<reference key="source" ref="37863316"/>
+						<reference key="destination" ref="422290158"/>
+					</object>
+					<int key="connectionID">152</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">unhideAllApplications:</string>
+						<reference key="source" ref="37863316"/>
+						<reference key="destination" ref="67252353"/>
+					</object>
+					<int key="connectionID">153</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">cut:</string>
+						<reference key="source" ref="279913758"/>
+						<reference key="destination" ref="73613290"/>
+					</object>
+					<int key="connectionID">175</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">paste:</string>
+						<reference key="source" ref="279913758"/>
+						<reference key="destination" ref="335015660"/>
+					</object>
+					<int key="connectionID">176</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">selectAll:</string>
+						<reference key="source" ref="279913758"/>
+						<reference key="destination" ref="232124595"/>
+					</object>
+					<int key="connectionID">179</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">copy:</string>
+						<reference key="source" ref="279913758"/>
+						<reference key="destination" ref="918382228"/>
+					</object>
+					<int key="connectionID">181</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">updatesView</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="754336264"/>
+					</object>
+					<int key="connectionID">210</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">chooseProfileView</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="585072836"/>
+					</object>
+					<int key="connectionID">211</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">mainWindow</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="355605687"/>
+					</object>
+					<int key="connectionID">216</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">tableView</string>
+						<reference key="source" ref="820844840"/>
+						<reference key="destination" ref="446416594"/>
+					</object>
+					<int key="connectionID">218</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">dataSource</string>
+						<reference key="source" ref="446416594"/>
+						<reference key="destination" ref="820844840"/>
+					</object>
+					<int key="connectionID">219</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">profileController</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="820844840"/>
+					</object>
+					<int key="connectionID">221</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">endPasswordWindow:</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="727137783"/>
+					</object>
+					<int key="connectionID">240</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">passwordWindow</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="621468052"/>
+					</object>
+					<int key="connectionID">241</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">passwordText</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="340638115"/>
+					</object>
+					<int key="connectionID">242</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">endPasswordWindow:</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="366243254"/>
+					</object>
+					<int key="connectionID">243</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">ignorePath:</string>
+						<reference key="source" ref="279913758"/>
+						<reference key="destination" ref="299441153"/>
+					</object>
+					<int key="connectionID">258</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">ignoreExt:</string>
+						<reference key="source" ref="279913758"/>
+						<reference key="destination" ref="188392331"/>
+					</object>
+					<int key="connectionID">259</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">ignoreName:</string>
+						<reference key="source" ref="279913758"/>
+						<reference key="destination" ref="78895812"/>
+					</object>
+					<int key="connectionID">260</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">copyLR:</string>
+						<reference key="source" ref="279913758"/>
+						<reference key="destination" ref="938287255"/>
+					</object>
+					<int key="connectionID">270</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">copyRL:</string>
+						<reference key="source" ref="279913758"/>
+						<reference key="destination" ref="473554979"/>
+					</object>
+					<int key="connectionID">271</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">selectConflicts:</string>
+						<reference key="source" ref="279913758"/>
+						<reference key="destination" ref="833907567"/>
+					</object>
+					<int key="connectionID">273</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">revert:</string>
+						<reference key="source" ref="279913758"/>
+						<reference key="destination" ref="907786872"/>
+					</object>
+					<int key="connectionID">274</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">forceNewer:</string>
+						<reference key="source" ref="279913758"/>
+						<reference key="destination" ref="273929861"/>
+					</object>
+					<int key="connectionID">282</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">forceOlder:</string>
+						<reference key="source" ref="279913758"/>
+						<reference key="destination" ref="502496676"/>
+					</object>
+					<int key="connectionID">283</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">leaveAlone:</string>
+						<reference key="source" ref="279913758"/>
+						<reference key="destination" ref="170126817"/>
+					</object>
+					<int key="connectionID">285</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">profileNameText</string>
+						<reference key="source" ref="919673534"/>
+						<reference key="destination" ref="459036983"/>
+					</object>
+					<int key="connectionID">332</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">preferencesController</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="919673534"/>
+					</object>
+					<int key="connectionID">350</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">preferencesView</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="131437498"/>
+					</object>
+					<int key="connectionID">358</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">firstRootText</string>
+						<reference key="source" ref="919673534"/>
+						<reference key="destination" ref="535928276"/>
+					</object>
+					<int key="connectionID">373</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">secondRootUser</string>
+						<reference key="source" ref="919673534"/>
+						<reference key="destination" ref="896768358"/>
+					</object>
+					<int key="connectionID">374</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">secondRootHost</string>
+						<reference key="source" ref="919673534"/>
+						<reference key="destination" ref="1048028362"/>
+					</object>
+					<int key="connectionID">375</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">secondRootText</string>
+						<reference key="source" ref="919673534"/>
+						<reference key="destination" ref="282586762"/>
+					</object>
+					<int key="connectionID">376</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">remoteButtonCell</string>
+						<reference key="source" ref="919673534"/>
+						<reference key="destination" ref="845367793"/>
+					</object>
+					<int key="connectionID">377</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">localButtonCell</string>
+						<reference key="source" ref="919673534"/>
+						<reference key="destination" ref="520995262"/>
+					</object>
+					<int key="connectionID">378</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="459036983"/>
+						<reference key="destination" ref="535928276"/>
+					</object>
+					<int key="connectionID">379</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="535928276"/>
+						<reference key="destination" ref="588956057"/>
+					</object>
+					<int key="connectionID">380</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="588956057"/>
+						<reference key="destination" ref="896768358"/>
+					</object>
+					<int key="connectionID">381</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="896768358"/>
+						<reference key="destination" ref="1048028362"/>
+					</object>
+					<int key="connectionID">382</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="1048028362"/>
+						<reference key="destination" ref="282586762"/>
+					</object>
+					<int key="connectionID">383</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">remoteClick:</string>
+						<reference key="source" ref="919673534"/>
+						<reference key="destination" ref="845367793"/>
+					</object>
+					<int key="connectionID">386</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">localClick:</string>
+						<reference key="source" ref="919673534"/>
+						<reference key="destination" ref="520995262"/>
+					</object>
+					<int key="connectionID">387</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">passwordCancelButton</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="366243254"/>
+					</object>
+					<int key="connectionID">395</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">delegate</string>
+						<reference key="source" ref="340638115"/>
+						<reference key="destination" ref="626222747"/>
+					</object>
+					<int key="connectionID">396</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">myController</string>
+						<reference key="source" ref="446416594"/>
+						<reference key="destination" ref="626222747"/>
+					</object>
+					<int key="connectionID">400</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">aboutWindow</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="329232122"/>
+					</object>
+					<int key="connectionID">412</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">versionText</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="844769937"/>
+					</object>
+					<int key="connectionID">413</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">onlineHelp:</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="411336073"/>
+					</object>
+					<int key="connectionID">416</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">syncButton:</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="513780384"/>
+					</object>
+					<int key="connectionID">421</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">ConnectingView</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="976206435"/>
+					</object>
+					<int key="connectionID">425</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">restartButton:</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="396820968"/>
+					</object>
+					<int key="connectionID">431</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">passwordPrompt</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="23444779"/>
+					</object>
+					<int key="connectionID">436</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">notificationController</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="185584375"/>
+					</object>
+					<int key="connectionID">438</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">raiseAboutWindow:</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="551642701"/>
+					</object>
+					<int key="connectionID">462</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">diffWindow</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="923445797"/>
+					</object>
+					<int key="connectionID">479</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">diffView</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="755012754"/>
+					</object>
+					<int key="connectionID">480</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">merge:</string>
+						<reference key="source" ref="279913758"/>
+						<reference key="destination" ref="879528549"/>
+					</object>
+					<int key="connectionID">482</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">showDiff:</string>
+						<reference key="source" ref="279913758"/>
+						<reference key="destination" ref="973931859"/>
+					</object>
+					<int key="connectionID">483</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">rescan:</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="990697150"/>
+					</object>
+					<int key="connectionID">485</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">progressBar</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="85700482"/>
+					</object>
+					<int key="connectionID">487</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">cltoolPref</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="1066528945"/>
+					</object>
+					<int key="connectionID">497</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">cltoolWindow</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="1047544150"/>
+					</object>
+					<int key="connectionID">500</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">cltoolNoButton:</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="67591844"/>
+					</object>
+					<int key="connectionID">503</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">cltoolYesButton:</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="159106305"/>
+					</object>
+					<int key="connectionID">505</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">initialFirstResponder</string>
+						<reference key="source" ref="1047544150"/>
+						<reference key="destination" ref="159106305"/>
+					</object>
+					<int key="connectionID">506</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">raiseCltoolWindow:</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="251970986"/>
+					</object>
+					<int key="connectionID">507</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">tableModeSelector</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="384288444"/>
+					</object>
+					<int key="connectionID">516</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">tableModeChanged:</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="384288444"/>
+					</object>
+					<int key="connectionID">517</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">delegate</string>
+						<reference key="source" ref="878192733"/>
+						<reference key="destination" ref="626222747"/>
+					</object>
+					<int key="connectionID">571</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">showPreferences:</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="837410352"/>
+					</object>
+					<int key="connectionID">572</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">connectingAnimation</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="899688332"/>
+					</object>
+					<int key="connectionID">578</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">statusText</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="845737300"/>
+					</object>
+					<int key="connectionID">585</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">delegate</string>
+						<reference key="source" ref="809169243"/>
+						<reference key="destination" ref="626222747"/>
+					</object>
+					<int key="connectionID">605</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">dataSource</string>
+						<reference key="source" ref="809169243"/>
+						<reference key="destination" ref="626222747"/>
+					</object>
+					<int key="connectionID">606</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">detailsTextView</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="173308938"/>
+					</object>
+					<int key="connectionID">609</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">tableView</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="809169243"/>
+					</object>
+					<int key="connectionID">610</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">preferencesWindow</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="140516394"/>
+					</object>
+					<int key="connectionID">659</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">detailsFontLabel</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="678202428"/>
+					</object>
+					<int key="connectionID">661</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">diffFontLabel</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="28911990"/>
+					</object>
+					<int key="connectionID">662</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">chooseFont:</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="1065369439"/>
+					</object>
+					<int key="connectionID">672</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">chooseFont:</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="364632432"/>
+					</object>
+					<int key="connectionID">673</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">chooseDetailsFont</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="1065369439"/>
+					</object>
+					<int key="connectionID">676</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">chooseDiffFont</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="364632432"/>
+					</object>
+					<int key="connectionID">677</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">splitView</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="398078791"/>
+					</object>
+					<int key="connectionID">684</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">connectingViewGradient</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="14416367"/>
+					</object>
+					<int key="connectionID">686</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">detailsTextViewGradient</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="700068909"/>
+					</object>
+					<int key="connectionID">687</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: values.deleteLogOnExit</string>
+						<reference key="source" ref="899290600"/>
+						<reference key="destination" ref="977013255"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="899290600"/>
+							<reference key="NSDestination" ref="977013255"/>
+							<string key="NSLabel">value: values.deleteLogOnExit</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">values.deleteLogOnExit</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">706</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: values.openProfileAtStartup</string>
+						<reference key="source" ref="816515478"/>
+						<reference key="destination" ref="977013255"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="816515478"/>
+							<reference key="NSDestination" ref="977013255"/>
+							<string key="NSLabel">value: values.openProfileAtStartup</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">values.openProfileAtStartup</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">707</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: values.profileToOpen</string>
+						<reference key="source" ref="357365612"/>
+						<reference key="destination" ref="977013255"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="357365612"/>
+							<reference key="NSDestination" ref="977013255"/>
+							<string key="NSLabel">value: values.profileToOpen</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">values.profileToOpen</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">708</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">checkOpenProfileChanged:</string>
+						<reference key="source" ref="626222747"/>
+						<reference key="destination" ref="816515478"/>
+					</object>
+					<int key="connectionID">709</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">window</string>
+						<reference key="source" ref="131341969"/>
+						<reference key="destination" ref="140516394"/>
+					</object>
+					<int key="connectionID">756</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">linkedView</string>
+						<reference key="source" ref="576257785"/>
+						<reference key="destination" ref="439327882"/>
+					</object>
+					<int key="connectionID">759</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">linkedView</string>
+						<reference key="source" ref="342729370"/>
+						<reference key="destination" ref="939529328"/>
+					</object>
+					<int key="connectionID">760</int>
+				</object>
+			</object>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<object class="NSArray" key="orderedObjects">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<object class="NSArray" key="object" id="0">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+						</object>
+						<reference key="children" ref="892182555"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="37863316"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="279913758"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">First Responder</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-3</int>
+						<reference key="object" ref="878192733"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Application</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">21</int>
+						<reference key="object" ref="355605687"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="232668648"/>
+						</object>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Window</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">2</int>
+						<reference key="object" ref="232668648"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="384288444"/>
+						</object>
+						<reference key="parent" ref="355605687"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">515</int>
+						<reference key="object" ref="384288444"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="673426767"/>
+						</object>
+						<reference key="parent" ref="232668648"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">29</int>
+						<reference key="object" ref="395658688"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="639283572"/>
+							<reference ref="425916962"/>
+							<reference ref="972866920"/>
+							<reference ref="827672906"/>
+							<reference ref="504811774"/>
+						</object>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">MainMenu</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">56</int>
+						<reference key="object" ref="639283572"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="77554793"/>
+						</object>
+						<reference key="parent" ref="395658688"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">57</int>
+						<reference key="object" ref="77554793"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="837410352"/>
+							<reference ref="422290158"/>
+							<reference ref="526625829"/>
+							<reference ref="227484062"/>
+							<reference ref="693945174"/>
+							<reference ref="264975518"/>
+							<reference ref="67252353"/>
+							<reference ref="671453401"/>
+							<reference ref="551642701"/>
+							<reference ref="251970986"/>
+						</object>
+						<reference key="parent" ref="639283572"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">129</int>
+						<reference key="object" ref="837410352"/>
+						<reference key="parent" ref="77554793"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">134</int>
+						<reference key="object" ref="422290158"/>
+						<reference key="parent" ref="77554793"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">136</int>
+						<reference key="object" ref="526625829"/>
+						<reference key="parent" ref="77554793"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">144</int>
+						<reference key="object" ref="227484062"/>
+						<reference key="parent" ref="77554793"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">145</int>
+						<reference key="object" ref="693945174"/>
+						<reference key="parent" ref="77554793"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">149</int>
+						<reference key="object" ref="264975518"/>
+						<reference key="parent" ref="77554793"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">150</int>
+						<reference key="object" ref="67252353"/>
+						<reference key="parent" ref="77554793"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">196</int>
+						<reference key="object" ref="671453401"/>
+						<reference key="parent" ref="77554793"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">414</int>
+						<reference key="object" ref="551642701"/>
+						<reference key="parent" ref="77554793"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">428</int>
+						<reference key="object" ref="251970986"/>
+						<reference key="parent" ref="77554793"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">103</int>
+						<reference key="object" ref="425916962"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="75568110"/>
+						</object>
+						<reference key="parent" ref="395658688"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">106</int>
+						<reference key="object" ref="75568110"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="411336073"/>
+						</object>
+						<reference key="parent" ref="425916962"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">111</int>
+						<reference key="object" ref="411336073"/>
+						<reference key="parent" ref="75568110"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">163</int>
+						<reference key="object" ref="972866920"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="1003509484"/>
+						</object>
+						<reference key="parent" ref="395658688"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">169</int>
+						<reference key="object" ref="1003509484"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="918382228"/>
+							<reference ref="73613290"/>
+							<reference ref="335015660"/>
+							<reference ref="232124595"/>
+							<reference ref="833907567"/>
+						</object>
+						<reference key="parent" ref="972866920"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">157</int>
+						<reference key="object" ref="918382228"/>
+						<reference key="parent" ref="1003509484"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">160</int>
+						<reference key="object" ref="73613290"/>
+						<reference key="parent" ref="1003509484"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">171</int>
+						<reference key="object" ref="335015660"/>
+						<reference key="parent" ref="1003509484"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">172</int>
+						<reference key="object" ref="232124595"/>
+						<reference key="parent" ref="1003509484"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">269</int>
+						<reference key="object" ref="833907567"/>
+						<reference key="parent" ref="1003509484"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">253</int>
+						<reference key="object" ref="827672906"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="366294269"/>
+						</object>
+						<reference key="parent" ref="395658688"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">254</int>
+						<reference key="object" ref="366294269"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="299441153"/>
+							<reference ref="188392331"/>
+							<reference ref="78895812"/>
+						</object>
+						<reference key="parent" ref="827672906"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">255</int>
+						<reference key="object" ref="299441153"/>
+						<reference key="parent" ref="366294269"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">256</int>
+						<reference key="object" ref="188392331"/>
+						<reference key="parent" ref="366294269"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">257</int>
+						<reference key="object" ref="78895812"/>
+						<reference key="parent" ref="366294269"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">261</int>
+						<reference key="object" ref="504811774"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="982210092"/>
+						</object>
+						<reference key="parent" ref="395658688"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">262</int>
+						<reference key="object" ref="982210092"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="938287255"/>
+							<reference ref="473554979"/>
+							<reference ref="502496676"/>
+							<reference ref="907786872"/>
+							<reference ref="273929861"/>
+							<reference ref="170126817"/>
+							<reference ref="973931859"/>
+							<reference ref="501412924"/>
+							<reference ref="513780384"/>
+							<reference ref="396820968"/>
+							<reference ref="879528549"/>
+							<reference ref="990697150"/>
+						</object>
+						<reference key="parent" ref="504811774"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">263</int>
+						<reference key="object" ref="938287255"/>
+						<reference key="parent" ref="982210092"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">266</int>
+						<reference key="object" ref="473554979"/>
+						<reference key="parent" ref="982210092"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">267</int>
+						<reference key="object" ref="502496676"/>
+						<reference key="parent" ref="982210092"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">268</int>
+						<reference key="object" ref="907786872"/>
+						<reference key="parent" ref="982210092"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">281</int>
+						<reference key="object" ref="273929861"/>
+						<reference key="parent" ref="982210092"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">284</int>
+						<reference key="object" ref="170126817"/>
+						<reference key="parent" ref="982210092"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">417</int>
+						<reference key="object" ref="973931859"/>
+						<reference key="parent" ref="982210092"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">419</int>
+						<reference key="object" ref="501412924"/>
+						<reference key="parent" ref="982210092"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">420</int>
+						<reference key="object" ref="513780384"/>
+						<reference key="parent" ref="982210092"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">430</int>
+						<reference key="object" ref="396820968"/>
+						<reference key="parent" ref="982210092"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">481</int>
+						<reference key="object" ref="879528549"/>
+						<reference key="parent" ref="982210092"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">484</int>
+						<reference key="object" ref="990697150"/>
+						<reference key="parent" ref="982210092"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">197</int>
+						<reference key="object" ref="585072836"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="568004388"/>
+							<reference ref="965369806"/>
+							<reference ref="335527590"/>
+						</object>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">chooseProfileView</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">199</int>
+						<reference key="object" ref="568004388"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="767469197"/>
+						</object>
+						<reference key="parent" ref="585072836"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">201</int>
+						<reference key="object" ref="965369806"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="841579218"/>
+						</object>
+						<reference key="parent" ref="585072836"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">203</int>
+						<reference key="object" ref="335527590"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="446416594"/>
+							<reference ref="852809690"/>
+							<reference ref="370050818"/>
+							<reference ref="1286469"/>
+						</object>
+						<reference key="parent" ref="585072836"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">205</int>
+						<reference key="object" ref="446416594"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="347342635"/>
+						</object>
+						<reference key="parent" ref="335527590"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">202</int>
+						<reference key="object" ref="347342635"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="214722634"/>
+						</object>
+						<reference key="parent" ref="446416594"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">198</int>
+						<reference key="object" ref="754336264"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="398078791"/>
+							<reference ref="85700482"/>
+							<reference ref="845737300"/>
+						</object>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">updatesView</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">209</int>
+						<reference key="object" ref="626222747"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">MyController</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">217</int>
+						<reference key="object" ref="820844840"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">ProfileController</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">234</int>
+						<reference key="object" ref="621468052"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="813757358"/>
+						</object>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">PasswordWindow</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">235</int>
+						<reference key="object" ref="813757358"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="340638115"/>
+							<reference ref="727137783"/>
+							<reference ref="366243254"/>
+							<reference ref="23444779"/>
+						</object>
+						<reference key="parent" ref="621468052"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">236</int>
+						<reference key="object" ref="340638115"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="835745293"/>
+						</object>
+						<reference key="parent" ref="813757358"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">237</int>
+						<reference key="object" ref="727137783"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="80389260"/>
+						</object>
+						<reference key="parent" ref="813757358"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">238</int>
+						<reference key="object" ref="366243254"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="512512774"/>
+						</object>
+						<reference key="parent" ref="813757358"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">239</int>
+						<reference key="object" ref="23444779"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="79825548"/>
+						</object>
+						<reference key="parent" ref="813757358"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">307</int>
+						<reference key="object" ref="131437498"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="777780043"/>
+							<reference ref="223842171"/>
+							<reference ref="45078194"/>
+							<reference ref="459036983"/>
+						</object>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">PreferencesView</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">321</int>
+						<reference key="object" ref="777780043"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="538828701"/>
+							<reference ref="535928276"/>
+						</object>
+						<reference key="parent" ref="131437498"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">323</int>
+						<reference key="object" ref="223842171"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="588956057"/>
+							<reference ref="349912474"/>
+							<reference ref="896768358"/>
+							<reference ref="993405512"/>
+							<reference ref="1048028362"/>
+							<reference ref="982227363"/>
+							<reference ref="282586762"/>
+						</object>
+						<reference key="parent" ref="131437498"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">329</int>
+						<reference key="object" ref="45078194"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="972568817"/>
+						</object>
+						<reference key="parent" ref="131437498"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">330</int>
+						<reference key="object" ref="459036983"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="316961684"/>
+						</object>
+						<reference key="parent" ref="131437498"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">331</int>
+						<reference key="object" ref="919673534"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">PreferencesController</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">402</int>
+						<reference key="object" ref="329232122"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="614370347"/>
+						</object>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">AboutWindow</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">401</int>
+						<reference key="object" ref="614370347"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="659712406"/>
+							<reference ref="267764307"/>
+							<reference ref="753251315"/>
+							<reference ref="1025952662"/>
+							<reference ref="844769937"/>
+						</object>
+						<reference key="parent" ref="329232122"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">406</int>
+						<reference key="object" ref="659712406"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="538108566"/>
+						</object>
+						<reference key="parent" ref="614370347"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">407</int>
+						<reference key="object" ref="267764307"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="742877646"/>
+						</object>
+						<reference key="parent" ref="614370347"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">409</int>
+						<reference key="object" ref="753251315"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="652374412"/>
+						</object>
+						<reference key="parent" ref="614370347"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">410</int>
+						<reference key="object" ref="1025952662"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="292039647"/>
+						</object>
+						<reference key="parent" ref="614370347"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">411</int>
+						<reference key="object" ref="844769937"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="173945597"/>
+						</object>
+						<reference key="parent" ref="614370347"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">437</int>
+						<reference key="object" ref="185584375"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">NotificationController</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">475</int>
+						<reference key="object" ref="923445797"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="441291314"/>
+						</object>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">DiffWindow</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">476</int>
+						<reference key="object" ref="441291314"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="531171583"/>
+						</object>
+						<reference key="parent" ref="923445797"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">477</int>
+						<reference key="object" ref="531171583"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="755012754"/>
+							<reference ref="336081770"/>
+							<reference ref="645744673"/>
+						</object>
+						<reference key="parent" ref="441291314"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">478</int>
+						<reference key="object" ref="755012754"/>
+						<reference key="parent" ref="531171583"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">488</int>
+						<reference key="object" ref="1047544150"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="18501583"/>
+						</object>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">CltoolWindow</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">489</int>
+						<reference key="object" ref="18501583"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="159106305"/>
+							<reference ref="565406362"/>
+							<reference ref="1066528945"/>
+							<reference ref="67591844"/>
+							<reference ref="847992124"/>
+						</object>
+						<reference key="parent" ref="1047544150"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">491</int>
+						<reference key="object" ref="159106305"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="519522710"/>
+						</object>
+						<reference key="parent" ref="18501583"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">493</int>
+						<reference key="object" ref="565406362"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="438918118"/>
+						</object>
+						<reference key="parent" ref="18501583"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">494</int>
+						<reference key="object" ref="1066528945"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="13750519"/>
+						</object>
+						<reference key="parent" ref="18501583"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">495</int>
+						<reference key="object" ref="67591844"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="1020934634"/>
+						</object>
+						<reference key="parent" ref="18501583"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">496</int>
+						<reference key="object" ref="847992124"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="132645490"/>
+						</object>
+						<reference key="parent" ref="18501583"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">527</int>
+						<reference key="object" ref="673426767"/>
+						<reference key="parent" ref="384288444"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">528</int>
+						<reference key="object" ref="767469197"/>
+						<reference key="parent" ref="568004388"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">529</int>
+						<reference key="object" ref="841579218"/>
+						<reference key="parent" ref="965369806"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">531</int>
+						<reference key="object" ref="835745293"/>
+						<reference key="parent" ref="340638115"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">532</int>
+						<reference key="object" ref="80389260"/>
+						<reference key="parent" ref="727137783"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">533</int>
+						<reference key="object" ref="512512774"/>
+						<reference key="parent" ref="366243254"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">534</int>
+						<reference key="object" ref="79825548"/>
+						<reference key="parent" ref="23444779"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">543</int>
+						<reference key="object" ref="972568817"/>
+						<reference key="parent" ref="45078194"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">544</int>
+						<reference key="object" ref="316961684"/>
+						<reference key="parent" ref="459036983"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">545</int>
+						<reference key="object" ref="538108566"/>
+						<reference key="parent" ref="659712406"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">546</int>
+						<reference key="object" ref="742877646"/>
+						<reference key="parent" ref="267764307"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">547</int>
+						<reference key="object" ref="652374412"/>
+						<reference key="parent" ref="753251315"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">548</int>
+						<reference key="object" ref="292039647"/>
+						<reference key="parent" ref="1025952662"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">549</int>
+						<reference key="object" ref="173945597"/>
+						<reference key="parent" ref="844769937"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">551</int>
+						<reference key="object" ref="519522710"/>
+						<reference key="parent" ref="159106305"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">552</int>
+						<reference key="object" ref="438918118"/>
+						<reference key="parent" ref="565406362"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">553</int>
+						<reference key="object" ref="13750519"/>
+						<reference key="parent" ref="1066528945"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">554</int>
+						<reference key="object" ref="1020934634"/>
+						<reference key="parent" ref="67591844"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">555</int>
+						<reference key="object" ref="132645490"/>
+						<reference key="parent" ref="847992124"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">557</int>
+						<reference key="object" ref="214722634"/>
+						<reference key="parent" ref="347342635"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">561</int>
+						<reference key="object" ref="852809690"/>
+						<reference key="parent" ref="335527590"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">562</int>
+						<reference key="object" ref="370050818"/>
+						<reference key="parent" ref="335527590"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">563</int>
+						<reference key="object" ref="1286469"/>
+						<reference key="parent" ref="335527590"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">569</int>
+						<reference key="object" ref="336081770"/>
+						<reference key="parent" ref="531171583"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">570</int>
+						<reference key="object" ref="645744673"/>
+						<reference key="parent" ref="531171583"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">362</int>
+						<reference key="object" ref="538828701"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="855328737"/>
+						</object>
+						<reference key="parent" ref="777780043"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">535</int>
+						<reference key="object" ref="855328737"/>
+						<reference key="parent" ref="538828701"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">363</int>
+						<reference key="object" ref="535928276"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="294533446"/>
+						</object>
+						<reference key="parent" ref="777780043"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">536</int>
+						<reference key="object" ref="294533446"/>
+						<reference key="parent" ref="535928276"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">364</int>
+						<reference key="object" ref="588956057"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="347365126"/>
+							<reference ref="520995262"/>
+							<reference ref="845367793"/>
+						</object>
+						<reference key="parent" ref="223842171"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">556</int>
+						<reference key="object" ref="347365126"/>
+						<reference key="parent" ref="588956057"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">366</int>
+						<reference key="object" ref="520995262"/>
+						<reference key="parent" ref="588956057"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">365</int>
+						<reference key="object" ref="845367793"/>
+						<reference key="parent" ref="588956057"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">367</int>
+						<reference key="object" ref="349912474"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="952393256"/>
+						</object>
+						<reference key="parent" ref="223842171"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">537</int>
+						<reference key="object" ref="952393256"/>
+						<reference key="parent" ref="349912474"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">368</int>
+						<reference key="object" ref="896768358"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="1053210155"/>
+						</object>
+						<reference key="parent" ref="223842171"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">538</int>
+						<reference key="object" ref="1053210155"/>
+						<reference key="parent" ref="896768358"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">369</int>
+						<reference key="object" ref="993405512"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="2123321"/>
+						</object>
+						<reference key="parent" ref="223842171"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">539</int>
+						<reference key="object" ref="2123321"/>
+						<reference key="parent" ref="993405512"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">370</int>
+						<reference key="object" ref="1048028362"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="372536919"/>
+						</object>
+						<reference key="parent" ref="223842171"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">540</int>
+						<reference key="object" ref="372536919"/>
+						<reference key="parent" ref="1048028362"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">371</int>
+						<reference key="object" ref="982227363"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="923729414"/>
+						</object>
+						<reference key="parent" ref="223842171"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">541</int>
+						<reference key="object" ref="923729414"/>
+						<reference key="parent" ref="982227363"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">372</int>
+						<reference key="object" ref="282586762"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="208523218"/>
+						</object>
+						<reference key="parent" ref="223842171"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">542</int>
+						<reference key="object" ref="208523218"/>
+						<reference key="parent" ref="282586762"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">586</int>
+						<reference key="object" ref="398078791"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="700068909"/>
+							<reference ref="319719388"/>
+						</object>
+						<reference key="parent" ref="754336264"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">589</int>
+						<reference key="object" ref="700068909"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="173308938"/>
+						</object>
+						<reference key="parent" ref="398078791"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">607</int>
+						<reference key="object" ref="173308938"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="900780132"/>
+						</object>
+						<reference key="parent" ref="700068909"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">608</int>
+						<reference key="object" ref="900780132"/>
+						<reference key="parent" ref="173308938"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">486</int>
+						<reference key="object" ref="85700482"/>
+						<reference key="parent" ref="754336264"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">590</int>
+						<reference key="object" ref="319719388"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="809169243"/>
+							<reference ref="626547980"/>
+							<reference ref="280329492"/>
+							<reference ref="285438200"/>
+						</object>
+						<reference key="parent" ref="398078791"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">594</int>
+						<reference key="object" ref="809169243"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="517689164"/>
+							<reference ref="36867386"/>
+							<reference ref="831965848"/>
+							<reference ref="1030582640"/>
+							<reference ref="174176934"/>
+						</object>
+						<reference key="parent" ref="319719388"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">599</int>
+						<reference key="object" ref="517689164"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="129611902"/>
+						</object>
+						<reference key="parent" ref="809169243"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">600</int>
+						<reference key="object" ref="129611902"/>
+						<reference key="parent" ref="517689164"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">598</int>
+						<reference key="object" ref="36867386"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="233842594"/>
+						</object>
+						<reference key="parent" ref="809169243"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">601</int>
+						<reference key="object" ref="233842594"/>
+						<reference key="parent" ref="36867386"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">597</int>
+						<reference key="object" ref="831965848"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="168643022"/>
+						</object>
+						<reference key="parent" ref="809169243"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">602</int>
+						<reference key="object" ref="168643022"/>
+						<reference key="parent" ref="831965848"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">596</int>
+						<reference key="object" ref="1030582640"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="1026449157"/>
+						</object>
+						<reference key="parent" ref="809169243"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">603</int>
+						<reference key="object" ref="1026449157"/>
+						<reference key="parent" ref="1030582640"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">595</int>
+						<reference key="object" ref="174176934"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="802031427"/>
+						</object>
+						<reference key="parent" ref="809169243"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">604</int>
+						<reference key="object" ref="802031427"/>
+						<reference key="parent" ref="174176934"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">593</int>
+						<reference key="object" ref="626547980"/>
+						<reference key="parent" ref="319719388"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">592</int>
+						<reference key="object" ref="280329492"/>
+						<reference key="parent" ref="319719388"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">591</int>
+						<reference key="object" ref="285438200"/>
+						<reference key="parent" ref="319719388"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">583</int>
+						<reference key="object" ref="845737300"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="145074830"/>
+						</object>
+						<reference key="parent" ref="754336264"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">584</int>
+						<reference key="object" ref="145074830"/>
+						<reference key="parent" ref="845737300"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">618</int>
+						<reference key="object" ref="140516394"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="455994853"/>
+							<reference ref="131341969"/>
+						</object>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">PreferencesWindow</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">619</int>
+						<reference key="object" ref="455994853"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+						</object>
+						<reference key="parent" ref="140516394"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">423</int>
+						<reference key="object" ref="976206435"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="899688332"/>
+							<reference ref="14416367"/>
+						</object>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">ConnectingView</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">576</int>
+						<reference key="object" ref="899688332"/>
+						<reference key="parent" ref="976206435"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">653</int>
+						<reference key="object" ref="977013255"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">681</int>
+						<reference key="object" ref="14416367"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="894337796"/>
+						</object>
+						<reference key="parent" ref="976206435"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">682</int>
+						<reference key="object" ref="894337796"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="687143868"/>
+						</object>
+						<reference key="parent" ref="14416367"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">683</int>
+						<reference key="object" ref="687143868"/>
+						<reference key="parent" ref="894337796"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">699</int>
+						<reference key="object" ref="939529328"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="357365612"/>
+							<reference ref="899290600"/>
+							<reference ref="816515478"/>
+						</object>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">700</int>
+						<reference key="object" ref="357365612"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="551363216"/>
+						</object>
+						<reference key="parent" ref="939529328"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">701</int>
+						<reference key="object" ref="899290600"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="606603162"/>
+						</object>
+						<reference key="parent" ref="939529328"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">702</int>
+						<reference key="object" ref="816515478"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="248509277"/>
+						</object>
+						<reference key="parent" ref="939529328"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">703</int>
+						<reference key="object" ref="248509277"/>
+						<reference key="parent" ref="816515478"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">704</int>
+						<reference key="object" ref="606603162"/>
+						<reference key="parent" ref="899290600"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">705</int>
+						<reference key="object" ref="551363216"/>
+						<reference key="parent" ref="357365612"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">678</int>
+						<reference key="object" ref="439327882"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="678202428"/>
+							<reference ref="1065369439"/>
+							<reference ref="28911990"/>
+							<reference ref="364632432"/>
+							<reference ref="760006057"/>
+							<reference ref="132542257"/>
+						</object>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Font View</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">636</int>
+						<reference key="object" ref="678202428"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="751646106"/>
+						</object>
+						<reference key="parent" ref="439327882"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">637</int>
+						<reference key="object" ref="1065369439"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="84059826"/>
+						</object>
+						<reference key="parent" ref="439327882"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">640</int>
+						<reference key="object" ref="28911990"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="400249441"/>
+						</object>
+						<reference key="parent" ref="439327882"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">641</int>
+						<reference key="object" ref="364632432"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="129627026"/>
+						</object>
+						<reference key="parent" ref="439327882"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">644</int>
+						<reference key="object" ref="760006057"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="112946638"/>
+						</object>
+						<reference key="parent" ref="439327882"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">646</int>
+						<reference key="object" ref="132542257"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="1695119"/>
+						</object>
+						<reference key="parent" ref="439327882"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">647</int>
+						<reference key="object" ref="1695119"/>
+						<reference key="parent" ref="132542257"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">645</int>
+						<reference key="object" ref="112946638"/>
+						<reference key="parent" ref="760006057"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">642</int>
+						<reference key="object" ref="129627026"/>
+						<reference key="parent" ref="364632432"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">643</int>
+						<reference key="object" ref="400249441"/>
+						<reference key="parent" ref="28911990"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">638</int>
+						<reference key="object" ref="84059826"/>
+						<reference key="parent" ref="1065369439"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">639</int>
+						<reference key="object" ref="751646106"/>
+						<reference key="parent" ref="678202428"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">737</int>
+						<reference key="object" ref="131341969"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="286400661"/>
+							<reference ref="576257785"/>
+							<reference ref="342729370"/>
+						</object>
+						<reference key="parent" ref="140516394"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">743</int>
+						<reference key="object" ref="286400661"/>
+						<reference key="parent" ref="131341969"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">757</int>
+						<reference key="object" ref="576257785"/>
+						<reference key="parent" ref="131341969"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">758</int>
+						<reference key="object" ref="342729370"/>
+						<reference key="parent" ref="131341969"/>
+					</object>
+				</object>
+			</object>
+			<object class="NSMutableDictionary" key="flattenedProperties">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<object class="NSArray" key="dict.sortedKeys">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<string>-3.IBPluginDependency</string>
+					<string>-3.ImportedFromIB2</string>
+					<string>103.IBPluginDependency</string>
+					<string>103.ImportedFromIB2</string>
+					<string>106.IBEditorWindowLastContentRect</string>
+					<string>106.IBPluginDependency</string>
+					<string>106.ImportedFromIB2</string>
+					<string>111.IBPluginDependency</string>
+					<string>111.ImportedFromIB2</string>
+					<string>129.IBPluginDependency</string>
+					<string>129.ImportedFromIB2</string>
+					<string>134.IBPluginDependency</string>
+					<string>134.ImportedFromIB2</string>
+					<string>136.IBPluginDependency</string>
+					<string>136.ImportedFromIB2</string>
+					<string>144.IBPluginDependency</string>
+					<string>144.ImportedFromIB2</string>
+					<string>145.IBPluginDependency</string>
+					<string>145.ImportedFromIB2</string>
+					<string>149.IBPluginDependency</string>
+					<string>149.ImportedFromIB2</string>
+					<string>150.IBPluginDependency</string>
+					<string>150.ImportedFromIB2</string>
+					<string>157.IBPluginDependency</string>
+					<string>157.ImportedFromIB2</string>
+					<string>160.IBPluginDependency</string>
+					<string>160.ImportedFromIB2</string>
+					<string>163.IBPluginDependency</string>
+					<string>163.ImportedFromIB2</string>
+					<string>169.IBEditorWindowLastContentRect</string>
+					<string>169.IBPluginDependency</string>
+					<string>169.ImportedFromIB2</string>
+					<string>171.IBPluginDependency</string>
+					<string>171.ImportedFromIB2</string>
+					<string>172.IBPluginDependency</string>
+					<string>172.ImportedFromIB2</string>
+					<string>196.IBPluginDependency</string>
+					<string>196.ImportedFromIB2</string>
+					<string>197.IBEditorWindowLastContentRect</string>
+					<string>197.IBPluginDependency</string>
+					<string>197.ImportedFromIB2</string>
+					<string>198.IBEditorWindowLastContentRect</string>
+					<string>198.IBPluginDependency</string>
+					<string>198.ImportedFromIB2</string>
+					<string>199.IBPluginDependency</string>
+					<string>199.ImportedFromIB2</string>
+					<string>2.IBPluginDependency</string>
+					<string>2.ImportedFromIB2</string>
+					<string>201.IBPluginDependency</string>
+					<string>201.ImportedFromIB2</string>
+					<string>202.IBPluginDependency</string>
+					<string>202.ImportedFromIB2</string>
+					<string>203.IBPluginDependency</string>
+					<string>203.ImportedFromIB2</string>
+					<string>205.CustomClassName</string>
+					<string>205.IBPluginDependency</string>
+					<string>205.ImportedFromIB2</string>
+					<string>209.ImportedFromIB2</string>
+					<string>21.IBEditorWindowLastContentRect</string>
+					<string>21.IBPluginDependency</string>
+					<string>21.IBWindowTemplateEditedContentRect</string>
+					<string>21.ImportedFromIB2</string>
+					<string>21.windowTemplate.hasMinSize</string>
+					<string>21.windowTemplate.minSize</string>
+					<string>217.ImportedFromIB2</string>
+					<string>234.IBEditorWindowLastContentRect</string>
+					<string>234.IBPluginDependency</string>
+					<string>234.IBWindowTemplateEditedContentRect</string>
+					<string>234.ImportedFromIB2</string>
+					<string>234.windowTemplate.hasMinSize</string>
+					<string>234.windowTemplate.minSize</string>
+					<string>235.IBPluginDependency</string>
+					<string>235.ImportedFromIB2</string>
+					<string>236.CustomClassName</string>
+					<string>236.IBPluginDependency</string>
+					<string>236.ImportedFromIB2</string>
+					<string>237.IBPluginDependency</string>
+					<string>237.ImportedFromIB2</string>
+					<string>238.IBPluginDependency</string>
+					<string>238.ImportedFromIB2</string>
+					<string>239.IBPluginDependency</string>
+					<string>239.ImportedFromIB2</string>
+					<string>253.IBPluginDependency</string>
+					<string>253.ImportedFromIB2</string>
+					<string>254.IBEditorWindowLastContentRect</string>
+					<string>254.IBPluginDependency</string>
+					<string>254.ImportedFromIB2</string>
+					<string>255.IBPluginDependency</string>
+					<string>255.ImportedFromIB2</string>
+					<string>256.IBPluginDependency</string>
+					<string>256.ImportedFromIB2</string>
+					<string>257.IBPluginDependency</string>
+					<string>257.ImportedFromIB2</string>
+					<string>261.IBPluginDependency</string>
+					<string>261.ImportedFromIB2</string>
+					<string>262.IBEditorWindowLastContentRect</string>
+					<string>262.IBPluginDependency</string>
+					<string>262.ImportedFromIB2</string>
+					<string>263.IBPluginDependency</string>
+					<string>263.ImportedFromIB2</string>
+					<string>266.IBPluginDependency</string>
+					<string>266.ImportedFromIB2</string>
+					<string>267.IBPluginDependency</string>
+					<string>267.ImportedFromIB2</string>
+					<string>268.IBPluginDependency</string>
+					<string>268.ImportedFromIB2</string>
+					<string>269.IBPluginDependency</string>
+					<string>269.ImportedFromIB2</string>
+					<string>281.IBPluginDependency</string>
+					<string>281.ImportedFromIB2</string>
+					<string>284.IBPluginDependency</string>
+					<string>284.ImportedFromIB2</string>
+					<string>29.IBEditorWindowLastContentRect</string>
+					<string>29.IBPluginDependency</string>
+					<string>29.ImportedFromIB2</string>
+					<string>307.IBEditorWindowLastContentRect</string>
+					<string>307.IBPluginDependency</string>
+					<string>307.ImportedFromIB2</string>
+					<string>321.IBPluginDependency</string>
+					<string>321.ImportedFromIB2</string>
+					<string>323.IBPluginDependency</string>
+					<string>323.ImportedFromIB2</string>
+					<string>329.IBPluginDependency</string>
+					<string>329.ImportedFromIB2</string>
+					<string>330.IBPluginDependency</string>
+					<string>330.ImportedFromIB2</string>
+					<string>331.ImportedFromIB2</string>
+					<string>362.IBPluginDependency</string>
+					<string>362.ImportedFromIB2</string>
+					<string>363.IBPluginDependency</string>
+					<string>363.ImportedFromIB2</string>
+					<string>364.IBPluginDependency</string>
+					<string>364.ImportedFromIB2</string>
+					<string>365.IBPluginDependency</string>
+					<string>365.ImportedFromIB2</string>
+					<string>366.IBPluginDependency</string>
+					<string>366.ImportedFromIB2</string>
+					<string>367.IBPluginDependency</string>
+					<string>367.ImportedFromIB2</string>
+					<string>368.IBPluginDependency</string>
+					<string>368.ImportedFromIB2</string>
+					<string>369.IBPluginDependency</string>
+					<string>369.ImportedFromIB2</string>
+					<string>370.IBPluginDependency</string>
+					<string>370.ImportedFromIB2</string>
+					<string>371.IBPluginDependency</string>
+					<string>371.ImportedFromIB2</string>
+					<string>372.IBPluginDependency</string>
+					<string>372.ImportedFromIB2</string>
+					<string>401.IBPluginDependency</string>
+					<string>401.ImportedFromIB2</string>
+					<string>402.IBEditorWindowLastContentRect</string>
+					<string>402.IBPluginDependency</string>
+					<string>402.IBWindowTemplateEditedContentRect</string>
+					<string>402.ImportedFromIB2</string>
+					<string>402.windowTemplate.hasMinSize</string>
+					<string>402.windowTemplate.minSize</string>
+					<string>406.IBPluginDependency</string>
+					<string>406.ImportedFromIB2</string>
+					<string>407.IBPluginDependency</string>
+					<string>407.ImportedFromIB2</string>
+					<string>409.IBPluginDependency</string>
+					<string>409.ImportedFromIB2</string>
+					<string>410.IBPluginDependency</string>
+					<string>410.ImportedFromIB2</string>
+					<string>411.IBPluginDependency</string>
+					<string>411.ImportedFromIB2</string>
+					<string>414.IBPluginDependency</string>
+					<string>414.ImportedFromIB2</string>
+					<string>417.IBPluginDependency</string>
+					<string>417.ImportedFromIB2</string>
+					<string>419.IBPluginDependency</string>
+					<string>419.ImportedFromIB2</string>
+					<string>420.IBPluginDependency</string>
+					<string>420.ImportedFromIB2</string>
+					<string>423.IBEditorWindowLastContentRect</string>
+					<string>423.IBPluginDependency</string>
+					<string>423.ImportedFromIB2</string>
+					<string>428.IBPluginDependency</string>
+					<string>428.ImportedFromIB2</string>
+					<string>430.IBPluginDependency</string>
+					<string>430.ImportedFromIB2</string>
+					<string>437.ImportedFromIB2</string>
+					<string>475.IBEditorWindowLastContentRect</string>
+					<string>475.IBPluginDependency</string>
+					<string>475.IBWindowTemplateEditedContentRect</string>
+					<string>475.ImportedFromIB2</string>
+					<string>475.windowTemplate.hasMinSize</string>
+					<string>475.windowTemplate.minSize</string>
+					<string>476.IBPluginDependency</string>
+					<string>476.ImportedFromIB2</string>
+					<string>477.IBPluginDependency</string>
+					<string>477.ImportedFromIB2</string>
+					<string>478.IBPluginDependency</string>
+					<string>478.ImportedFromIB2</string>
+					<string>481.IBPluginDependency</string>
+					<string>481.ImportedFromIB2</string>
+					<string>484.IBPluginDependency</string>
+					<string>484.ImportedFromIB2</string>
+					<string>486.IBPluginDependency</string>
+					<string>486.ImportedFromIB2</string>
+					<string>488.IBEditorWindowLastContentRect</string>
+					<string>488.IBPluginDependency</string>
+					<string>488.IBWindowTemplateEditedContentRect</string>
+					<string>488.ImportedFromIB2</string>
+					<string>488.windowTemplate.hasMinSize</string>
+					<string>488.windowTemplate.minSize</string>
+					<string>489.IBPluginDependency</string>
+					<string>489.ImportedFromIB2</string>
+					<string>491.IBPluginDependency</string>
+					<string>491.ImportedFromIB2</string>
+					<string>493.IBPluginDependency</string>
+					<string>493.ImportedFromIB2</string>
+					<string>494.IBPluginDependency</string>
+					<string>494.ImportedFromIB2</string>
+					<string>495.IBPluginDependency</string>
+					<string>495.ImportedFromIB2</string>
+					<string>496.IBPluginDependency</string>
+					<string>496.ImportedFromIB2</string>
+					<string>515.IBPluginDependency</string>
+					<string>515.ImportedFromIB2</string>
+					<string>527.IBPluginDependency</string>
+					<string>528.IBPluginDependency</string>
+					<string>529.IBPluginDependency</string>
+					<string>531.IBPluginDependency</string>
+					<string>532.IBPluginDependency</string>
+					<string>533.IBPluginDependency</string>
+					<string>534.IBPluginDependency</string>
+					<string>535.IBPluginDependency</string>
+					<string>536.IBPluginDependency</string>
+					<string>537.IBPluginDependency</string>
+					<string>538.IBPluginDependency</string>
+					<string>539.IBPluginDependency</string>
+					<string>540.IBPluginDependency</string>
+					<string>541.IBPluginDependency</string>
+					<string>542.IBPluginDependency</string>
+					<string>543.IBPluginDependency</string>
+					<string>544.IBPluginDependency</string>
+					<string>545.IBPluginDependency</string>
+					<string>546.IBPluginDependency</string>
+					<string>547.IBPluginDependency</string>
+					<string>548.IBPluginDependency</string>
+					<string>549.IBPluginDependency</string>
+					<string>551.IBPluginDependency</string>
+					<string>552.IBPluginDependency</string>
+					<string>553.IBPluginDependency</string>
+					<string>554.IBPluginDependency</string>
+					<string>555.IBPluginDependency</string>
+					<string>556.IBPluginDependency</string>
+					<string>557.IBPluginDependency</string>
+					<string>557.IBShouldRemoveOnLegacySave</string>
+					<string>56.IBPluginDependency</string>
+					<string>56.ImportedFromIB2</string>
+					<string>561.IBPluginDependency</string>
+					<string>561.IBShouldRemoveOnLegacySave</string>
+					<string>562.IBPluginDependency</string>
+					<string>562.IBShouldRemoveOnLegacySave</string>
+					<string>563.IBPluginDependency</string>
+					<string>563.IBShouldRemoveOnLegacySave</string>
+					<string>569.IBPluginDependency</string>
+					<string>569.IBShouldRemoveOnLegacySave</string>
+					<string>57.IBEditorWindowLastContentRect</string>
+					<string>57.IBPluginDependency</string>
+					<string>57.ImportedFromIB2</string>
+					<string>570.IBPluginDependency</string>
+					<string>570.IBShouldRemoveOnLegacySave</string>
+					<string>576.IBPluginDependency</string>
+					<string>589.CustomClassName</string>
+					<string>590.IBPluginDependency</string>
+					<string>590.ImportedFromIB2</string>
+					<string>591.IBPluginDependency</string>
+					<string>591.IBShouldRemoveOnLegacySave</string>
+					<string>592.IBPluginDependency</string>
+					<string>592.IBShouldRemoveOnLegacySave</string>
+					<string>593.IBPluginDependency</string>
+					<string>593.IBShouldRemoveOnLegacySave</string>
+					<string>594.CustomClassName</string>
+					<string>594.IBPluginDependency</string>
+					<string>594.ImportedFromIB2</string>
+					<string>595.IBPluginDependency</string>
+					<string>595.ImportedFromIB2</string>
+					<string>596.IBPluginDependency</string>
+					<string>596.ImportedFromIB2</string>
+					<string>597.IBPluginDependency</string>
+					<string>597.ImportedFromIB2</string>
+					<string>598.IBPluginDependency</string>
+					<string>598.ImportedFromIB2</string>
+					<string>599.IBPluginDependency</string>
+					<string>599.ImportedFromIB2</string>
+					<string>600.IBPluginDependency</string>
+					<string>600.ImportedFromIB2</string>
+					<string>601.IBPluginDependency</string>
+					<string>601.ImportedFromIB2</string>
+					<string>602.IBPluginDependency</string>
+					<string>602.IBShouldRemoveOnLegacySave</string>
+					<string>603.IBPluginDependency</string>
+					<string>603.IBShouldRemoveOnLegacySave</string>
+					<string>604.IBPluginDependency</string>
+					<string>604.IBShouldRemoveOnLegacySave</string>
+					<string>618.IBEditorWindowLastContentRect</string>
+					<string>618.IBPluginDependency</string>
+					<string>618.IBWindowTemplateEditedContentRect</string>
+					<string>618.NSWindowTemplate.visibleAtLaunch</string>
+					<string>619.IBPluginDependency</string>
+					<string>619.IBViewBoundsToFrameTransform</string>
+					<string>636.IBPluginDependency</string>
+					<string>637.IBPluginDependency</string>
+					<string>638.IBPluginDependency</string>
+					<string>639.IBPluginDependency</string>
+					<string>640.IBPluginDependency</string>
+					<string>641.IBPluginDependency</string>
+					<string>642.IBPluginDependency</string>
+					<string>643.IBPluginDependency</string>
+					<string>644.IBPluginDependency</string>
+					<string>645.IBPluginDependency</string>
+					<string>646.IBPluginDependency</string>
+					<string>647.IBPluginDependency</string>
+					<string>653.IBPluginDependency</string>
+					<string>678.IBPluginDependency</string>
+					<string>678.IBViewBoundsToFrameTransform</string>
+					<string>681.CustomClassName</string>
+					<string>681.IBViewIntegration.shadowColor</string>
+					<string>699.IBPluginDependency</string>
+					<string>699.IBViewBoundsToFrameTransform</string>
+					<string>700.IBPluginDependency</string>
+					<string>701.IBPluginDependency</string>
+					<string>702.IBPluginDependency</string>
+					<string>703.IBPluginDependency</string>
+					<string>704.IBPluginDependency</string>
+					<string>705.IBPluginDependency</string>
+					<string>737.CustomClassName</string>
+					<string>737.IBEditorWindowLastContentRect</string>
+					<string>737.IBPluginDependency</string>
+					<string>743.IBPluginDependency</string>
+					<string>757.CustomClassName</string>
+					<string>757.IBPluginDependency</string>
+					<string>757.toolbarItem.selectable</string>
+					<string>758.CustomClassName</string>
+					<string>758.IBPluginDependency</string>
+					<string>758.toolbarItem.selectable</string>
+				</object>
+				<object class="NSMutableArray" key="dict.values">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>{{582, 1091}, {202, 23}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>{{407, 1011}, {179, 103}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>{{345, 795}, {363, 281}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>{{329, 310}, {730, 546}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>ProfileTableView</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<string>{{717, 719}, {480, 360}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>{{717, 719}, {480, 360}}</string>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<string>{213, 107}</string>
+					<boolean value="YES"/>
+					<string>{{345, 994}, {227, 128}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>{{345, 994}, {227, 128}}</string>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<string>{213, 107}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>NSSecureTextField</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>{{520, 1051}, {191, 63}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>{{451, 881}, {323, 233}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>{{811, 836}, {317, 20}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>{{345, 606}, {534, 250}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>{{345, 879}, {262, 266}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>{{345, 879}, {262, 266}}</string>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<string>{213, 107}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>{{443, 279}, {871, 577}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<string>{{345, 792}, {505, 342}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>{{345, 792}, {505, 342}}</string>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<string>{213, 107}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>{{345, 916}, {400, 229}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>{{345, 916}, {400, 229}}</string>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<string>{213, 107}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>{{338, 941}, {266, 173}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>ColorGradientView</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>ReconTableView</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>{{605, 124}, {446, 84}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>{{605, 124}, {446, 84}}</string>
+					<boolean value="NO"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<object class="NSAffineTransform"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<object class="NSAffineTransform"/>
+					<string>ColorGradientView</string>
+					<object class="NSColor">
+						<int key="NSColorSpace">6</int>
+						<string key="NSCatalogName">System</string>
+						<string key="NSColorName">alternateSelectedControlColor</string>
+						<reference key="NSColor" ref="438358543"/>
+					</object>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<object class="NSAffineTransform"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>SSSelectableToolbar</string>
+					<string>{{520, 208}, {616, 0}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>SSSelectableToolbarItem</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>SSSelectableToolbarItem</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+				</object>
+
+			</object>
+			<object class="NSMutableDictionary" key="unlocalizedProperties">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<reference key="dict.sortedKeys" ref="0"/>
+				<object class="NSMutableArray" key="dict.values">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+				</object>
+			</object>
+			<nil key="activeLocalization"/>
+			<object class="NSMutableDictionary" key="localizations">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<reference key="dict.sortedKeys" ref="0"/>
+				<object class="NSMutableArray" key="dict.values">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+				</object>
+			</object>
+			<nil key="sourceID"/>
+			<int key="maxID">760</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<object class="IBPartialClassDescription">
+					<string key="className">ColorGradientView</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">ColorGradientView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">FirstResponder</string>
+					<string key="superclassName">NSObject</string>
+					<object class="NSMutableDictionary" key="actions">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>copyLR:</string>
+							<string>copyRL:</string>
+							<string>forceNewer:</string>
+							<string>forceOlder:</string>
+							<string>ignoreExt:</string>
+							<string>ignoreName:</string>
+							<string>ignorePath:</string>
+							<string>leaveAlone:</string>
+							<string>merge:</string>
+							<string>revert:</string>
+							<string>selectConflicts:</string>
+							<string>showDiff:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>copyLR:</string>
+							<string>copyRL:</string>
+							<string>forceNewer:</string>
+							<string>forceOlder:</string>
+							<string>ignoreExt:</string>
+							<string>ignoreName:</string>
+							<string>ignorePath:</string>
+							<string>leaveAlone:</string>
+							<string>merge:</string>
+							<string>revert:</string>
+							<string>selectConflicts:</string>
+							<string>showDiff:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="IBActionInfo">
+								<string key="name">copyLR:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">copyRL:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">forceNewer:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">forceOlder:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">ignoreExt:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">ignoreName:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">ignorePath:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">leaveAlone:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">merge:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">revert:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">selectConflicts:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">showDiff:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">MyController</string>
+					<string key="superclassName">NSObject</string>
+					<object class="NSMutableDictionary" key="actions">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>cancelProfileButton:</string>
+							<string>checkOpenProfileChanged:</string>
+							<string>chooseFont:</string>
+							<string>cltoolNoButton:</string>
+							<string>cltoolYesButton:</string>
+							<string>createButton:</string>
+							<string>endPasswordWindow:</string>
+							<string>installCommandLineTool:</string>
+							<string>onlineHelp:</string>
+							<string>openButton:</string>
+							<string>raiseAboutWindow:</string>
+							<string>raiseCltoolWindow:</string>
+							<string>raiseWindow:</string>
+							<string>rescan:</string>
+							<string>restartButton:</string>
+							<string>saveProfileButton:</string>
+							<string>showPreferences:</string>
+							<string>syncButton:</string>
+							<string>tableModeChanged:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>NSWindow</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>cancelProfileButton:</string>
+							<string>checkOpenProfileChanged:</string>
+							<string>chooseFont:</string>
+							<string>cltoolNoButton:</string>
+							<string>cltoolYesButton:</string>
+							<string>createButton:</string>
+							<string>endPasswordWindow:</string>
+							<string>installCommandLineTool:</string>
+							<string>onlineHelp:</string>
+							<string>openButton:</string>
+							<string>raiseAboutWindow:</string>
+							<string>raiseCltoolWindow:</string>
+							<string>raiseWindow:</string>
+							<string>rescan:</string>
+							<string>restartButton:</string>
+							<string>saveProfileButton:</string>
+							<string>showPreferences:</string>
+							<string>syncButton:</string>
+							<string>tableModeChanged:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="IBActionInfo">
+								<string key="name">cancelProfileButton:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">checkOpenProfileChanged:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">chooseFont:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">cltoolNoButton:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">cltoolYesButton:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">createButton:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">endPasswordWindow:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">installCommandLineTool:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">onlineHelp:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">openButton:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">raiseAboutWindow:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">raiseCltoolWindow:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">raiseWindow:</string>
+								<string key="candidateClassName">NSWindow</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">rescan:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">restartButton:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">saveProfileButton:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">showPreferences:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">syncButton:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">tableModeChanged:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="outlets">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>ConnectingView</string>
+							<string>aboutWindow</string>
+							<string>checkOpenProfile</string>
+							<string>chooseDetailsFont</string>
+							<string>chooseDiffFont</string>
+							<string>chooseProfileView</string>
+							<string>cltoolPref</string>
+							<string>cltoolWindow</string>
+							<string>connectingAnimation</string>
+							<string>connectingViewGradient</string>
+							<string>detailsFontLabel</string>
+							<string>detailsTextView</string>
+							<string>detailsTextViewGradient</string>
+							<string>diffFontLabel</string>
+							<string>diffView</string>
+							<string>diffWindow</string>
+							<string>fontChangeTarget</string>
+							<string>mainWindow</string>
+							<string>notificationController</string>
+							<string>passwordCancelButton</string>
+							<string>passwordPrompt</string>
+							<string>passwordText</string>
+							<string>passwordWindow</string>
+							<string>preferencesController</string>
+							<string>preferencesView</string>
+							<string>preferencesWindow</string>
+							<string>profileBox</string>
+							<string>profileController</string>
+							<string>progressBar</string>
+							<string>splitView</string>
+							<string>statusText</string>
+							<string>tableModeSelector</string>
+							<string>tableView</string>
+							<string>updatesText</string>
+							<string>updatesView</string>
+							<string>versionText</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>NSView</string>
+							<string>NSWindow</string>
+							<string>NSButton</string>
+							<string>NSButton</string>
+							<string>NSButton</string>
+							<string>NSView</string>
+							<string>NSButton</string>
+							<string>NSWindow</string>
+							<string>NSProgressIndicator</string>
+							<string>ColorGradientView</string>
+							<string>NSTextField</string>
+							<string>NSTextField</string>
+							<string>ColorGradientView</string>
+							<string>NSTextField</string>
+							<string>NSTextView</string>
+							<string>NSWindow</string>
+							<string>id</string>
+							<string>NSWindow</string>
+							<string>NotificationController</string>
+							<string>NSButton</string>
+							<string>NSTextField</string>
+							<string>NSTextField</string>
+							<string>NSWindow</string>
+							<string>PreferencesController</string>
+							<string>NSView</string>
+							<string>NSWindow</string>
+							<string>NSComboBox</string>
+							<string>ProfileController</string>
+							<string>NSProgressIndicator</string>
+							<string>NSSplitView</string>
+							<string>NSTextField</string>
+							<string>NSSegmentedControl</string>
+							<string>ReconTableView</string>
+							<string>NSTextField</string>
+							<string>NSView</string>
+							<string>NSTextField</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>ConnectingView</string>
+							<string>aboutWindow</string>
+							<string>checkOpenProfile</string>
+							<string>chooseDetailsFont</string>
+							<string>chooseDiffFont</string>
+							<string>chooseProfileView</string>
+							<string>cltoolPref</string>
+							<string>cltoolWindow</string>
+							<string>connectingAnimation</string>
+							<string>connectingViewGradient</string>
+							<string>detailsFontLabel</string>
+							<string>detailsTextView</string>
+							<string>detailsTextViewGradient</string>
+							<string>diffFontLabel</string>
+							<string>diffView</string>
+							<string>diffWindow</string>
+							<string>fontChangeTarget</string>
+							<string>mainWindow</string>
+							<string>notificationController</string>
+							<string>passwordCancelButton</string>
+							<string>passwordPrompt</string>
+							<string>passwordText</string>
+							<string>passwordWindow</string>
+							<string>preferencesController</string>
+							<string>preferencesView</string>
+							<string>preferencesWindow</string>
+							<string>profileBox</string>
+							<string>profileController</string>
+							<string>progressBar</string>
+							<string>splitView</string>
+							<string>statusText</string>
+							<string>tableModeSelector</string>
+							<string>tableView</string>
+							<string>updatesText</string>
+							<string>updatesView</string>
+							<string>versionText</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="IBToOneOutletInfo">
+								<string key="name">ConnectingView</string>
+								<string key="candidateClassName">NSView</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">aboutWindow</string>
+								<string key="candidateClassName">NSWindow</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">checkOpenProfile</string>
+								<string key="candidateClassName">NSButton</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">chooseDetailsFont</string>
+								<string key="candidateClassName">NSButton</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">chooseDiffFont</string>
+								<string key="candidateClassName">NSButton</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">chooseProfileView</string>
+								<string key="candidateClassName">NSView</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">cltoolPref</string>
+								<string key="candidateClassName">NSButton</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">cltoolWindow</string>
+								<string key="candidateClassName">NSWindow</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">connectingAnimation</string>
+								<string key="candidateClassName">NSProgressIndicator</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">connectingViewGradient</string>
+								<string key="candidateClassName">ColorGradientView</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">detailsFontLabel</string>
+								<string key="candidateClassName">NSTextField</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">detailsTextView</string>
+								<string key="candidateClassName">NSTextField</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">detailsTextViewGradient</string>
+								<string key="candidateClassName">ColorGradientView</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">diffFontLabel</string>
+								<string key="candidateClassName">NSTextField</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">diffView</string>
+								<string key="candidateClassName">NSTextView</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">diffWindow</string>
+								<string key="candidateClassName">NSWindow</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">fontChangeTarget</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">mainWindow</string>
+								<string key="candidateClassName">NSWindow</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">notificationController</string>
+								<string key="candidateClassName">NotificationController</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">passwordCancelButton</string>
+								<string key="candidateClassName">NSButton</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">passwordPrompt</string>
+								<string key="candidateClassName">NSTextField</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">passwordText</string>
+								<string key="candidateClassName">NSTextField</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">passwordWindow</string>
+								<string key="candidateClassName">NSWindow</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">preferencesController</string>
+								<string key="candidateClassName">PreferencesController</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">preferencesView</string>
+								<string key="candidateClassName">NSView</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">preferencesWindow</string>
+								<string key="candidateClassName">NSWindow</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">profileBox</string>
+								<string key="candidateClassName">NSComboBox</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">profileController</string>
+								<string key="candidateClassName">ProfileController</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">progressBar</string>
+								<string key="candidateClassName">NSProgressIndicator</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">splitView</string>
+								<string key="candidateClassName">NSSplitView</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">statusText</string>
+								<string key="candidateClassName">NSTextField</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">tableModeSelector</string>
+								<string key="candidateClassName">NSSegmentedControl</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">tableView</string>
+								<string key="candidateClassName">ReconTableView</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">updatesText</string>
+								<string key="candidateClassName">NSTextField</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">updatesView</string>
+								<string key="candidateClassName">NSView</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">versionText</string>
+								<string key="candidateClassName">NSTextField</string>
+							</object>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">MyController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">MyController</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSOutlineView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="716125380">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">ReconTableView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSOutlineView</string>
+					<string key="superclassName">NSTableView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSSegmentedControl</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NotificationController</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">NotificationController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NotificationController</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">PreferencesController</string>
+					<string key="superclassName">NSObject</string>
+					<object class="NSMutableDictionary" key="actions">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>anyEnter:</string>
+							<string>localClick:</string>
+							<string>remoteClick:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>anyEnter:</string>
+							<string>localClick:</string>
+							<string>remoteClick:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="IBActionInfo">
+								<string key="name">anyEnter:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">localClick:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">remoteClick:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="outlets">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>firstRootText</string>
+							<string>localButtonCell</string>
+							<string>profileNameText</string>
+							<string>remoteButtonCell</string>
+							<string>secondRootHost</string>
+							<string>secondRootText</string>
+							<string>secondRootUser</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>NSTextField</string>
+							<string>NSButtonCell</string>
+							<string>NSTextField</string>
+							<string>NSButtonCell</string>
+							<string>NSTextField</string>
+							<string>NSTextField</string>
+							<string>NSTextField</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>firstRootText</string>
+							<string>localButtonCell</string>
+							<string>profileNameText</string>
+							<string>remoteButtonCell</string>
+							<string>secondRootHost</string>
+							<string>secondRootText</string>
+							<string>secondRootUser</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="IBToOneOutletInfo">
+								<string key="name">firstRootText</string>
+								<string key="candidateClassName">NSTextField</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">localButtonCell</string>
+								<string key="candidateClassName">NSButtonCell</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">profileNameText</string>
+								<string key="candidateClassName">NSTextField</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">remoteButtonCell</string>
+								<string key="candidateClassName">NSButtonCell</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">secondRootHost</string>
+								<string key="candidateClassName">NSTextField</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">secondRootText</string>
+								<string key="candidateClassName">NSTextField</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">secondRootUser</string>
+								<string key="candidateClassName">NSTextField</string>
+							</object>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">PreferencesController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">PreferencesController</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">ProfileController</string>
+					<string key="superclassName">NSObject</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">tableView</string>
+						<string key="NS.object.0">NSTableView</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">tableView</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">tableView</string>
+							<string key="candidateClassName">NSTableView</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">ProfileController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">ProfileController</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">ProfileTableView</string>
+					<string key="superclassName">NSTableView</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">myController</string>
+						<string key="NS.object.0">MyController</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">myController</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">myController</string>
+							<string key="candidateClassName">MyController</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">ProfileTableView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">ProfileTableView</string>
+					<string key="superclassName">NSTableView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">ReconTableView</string>
+					<string key="superclassName">NSOutlineView</string>
+					<object class="NSMutableDictionary" key="actions">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>copyLR:</string>
+							<string>copyRL:</string>
+							<string>forceNewer:</string>
+							<string>forceOlder:</string>
+							<string>ignoreExt:</string>
+							<string>ignoreName:</string>
+							<string>ignorePath:</string>
+							<string>leaveAlone:</string>
+							<string>merge:</string>
+							<string>revert:</string>
+							<string>selectConflicts:</string>
+							<string>showDiff:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>copyLR:</string>
+							<string>copyRL:</string>
+							<string>forceNewer:</string>
+							<string>forceOlder:</string>
+							<string>ignoreExt:</string>
+							<string>ignoreName:</string>
+							<string>ignorePath:</string>
+							<string>leaveAlone:</string>
+							<string>merge:</string>
+							<string>revert:</string>
+							<string>selectConflicts:</string>
+							<string>showDiff:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="IBActionInfo">
+								<string key="name">copyLR:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">copyRL:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">forceNewer:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">forceOlder:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">ignoreExt:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">ignoreName:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">ignorePath:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">leaveAlone:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">merge:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">revert:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">selectConflicts:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">showDiff:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+						</object>
+					</object>
+					<reference key="sourceIdentifier" ref="716125380"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">ReconTableView</string>
+					<string key="superclassName">NSOutlineView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">SSSelectableToolbar</string>
+					<string key="superclassName">NSToolbar</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">window</string>
+						<string key="NS.object.0">NSWindow</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">window</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">window</string>
+							<string key="candidateClassName">NSWindow</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">ssselectabletoolbar/SSSelectableToolbar.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">SSSelectableToolbarItem</string>
+					<string key="superclassName">NSToolbarItem</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">linkedView</string>
+						<string key="NS.object.0">NSView</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">linkedView</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">linkedView</string>
+							<string key="candidateClassName">NSView</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">ssselectabletoolbar/SSSelectableToolbarItem.h</string>
+					</object>
+				</object>
+			</object>
+			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">BWToolkitFramework.framework/Headers/NSApplication+BWAdditions.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">ExceptionHandling.framework/Headers/NSExceptionHandler.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Growl.framework/Headers/GrowlApplicationBridge.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">BWToolkitFramework.framework/Headers/NSView+BWAdditions.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">BWToolkitFramework.framework/Headers/NSWindow+BWAdditions.h</string>
+					</object>
+				</object>
+			</object>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1050" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1060" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+			<integer value="3100" key="NS.object.0"/>
+		</object>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<string key="IBDocument.LastKnownRelativeProjectPath">../uimacnew.xcodeproj</string>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<object class="NSArray" key="dict.sortedKeys">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<string>NSFontPanel</string>
+				<string>NSMenuCheckmark</string>
+				<string>NSMenuMixedState</string>
+				<string>NSPreferencesGeneral</string>
+				<string>NSSwitch</string>
+				<string>Outline-Deep</string>
+				<string>Outline-Flat</string>
+				<string>Outline-Flattened</string>
+				<string>Unison</string>
+			</object>
+			<object class="NSMutableArray" key="dict.values">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<string>{32, 32}</string>
+				<string>{9, 8}</string>
+				<string>{7, 2}</string>
+				<string>{32, 32}</string>
+				<string>{15, 15}</string>
+				<string>{24, 16}</string>
+				<string>{24, 16}</string>
+				<string>{24, 16}</string>
+				<string>{128, 128}</string>
+			</object>
+		</object>
+	</data>
+</archive>

Added: trunk/src/uimac14/Frameworks/Growl.framework/Growl
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/Frameworks/Growl.framework/Growl
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Growl	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Growl	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/Frameworks/Growl.framework/Growl
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/src/uimac14/Frameworks/Growl.framework/Headers/Growl.h
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Headers/Growl.h	                        (rev 0)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Headers/Growl.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,6 @@
+#include "GrowlDefines.h"
+
+#ifdef __OBJC__
+#	include "GrowlApplicationBridge.h"
+#endif
+#include "GrowlApplicationBridge-Carbon.h"

Added: trunk/src/uimac14/Frameworks/Growl.framework/Headers/GrowlApplicationBridge-Carbon.h
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Headers/GrowlApplicationBridge-Carbon.h	                        (rev 0)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Headers/GrowlApplicationBridge-Carbon.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,780 @@
+//
+//  GrowlApplicationBridge-Carbon.h
+//  Growl
+//
+//  Created by Mac-arena the Bored Zo on Wed Jun 18 2004.
+//  Based on GrowlApplicationBridge.h by Evan Schoenberg.
+//  This source code is in the public domain. You may freely link it into any
+//    program.
+//
+
+#ifndef _GROWLAPPLICATIONBRIDGE_CARBON_H_
+#define _GROWLAPPLICATIONBRIDGE_CARBON_H_
+
+#include <sys/cdefs.h>
+#include <Carbon/Carbon.h>
+
+#ifndef GROWL_EXPORT
+#define GROWL_EXPORT __attribute__((visibility("default"))) DEPRECATED_ATTRIBUTE
+#endif
+
+/*!	@header GrowlApplicationBridge-Carbon.h
+ *	@abstract	Declares an API that Carbon applications can use to interact with Growl.
+ *	@discussion	GrowlApplicationBridge uses a delegate to provide information //XXX
+ *	 to Growl (such as your application's name and what notifications it may
+ *	 post) and to provide information to your application (such as that Growl
+ *	 is listening for notifications or that a notification has been clicked).
+ *
+ *	 You can set the Growldelegate with Growl_SetDelegate and find out the
+ *	 current delegate with Growl_GetDelegate. See struct Growl_Delegate for more
+ *	 information about the delegate.
+ */
+
+__BEGIN_DECLS
+
+/*!	@struct Growl_Delegate
+ *	@abstract Delegate to supply GrowlApplicationBridge with information and respond to events.
+ *	@discussion The Growl delegate provides your interface to
+ *	 GrowlApplicationBridge. When GrowlApplicationBridge needs information about
+ *	 your application, it looks for it in the delegate; when Growl or the user
+ *	 does something that you might be interested in, GrowlApplicationBridge
+ *	 looks for a callback in the delegate and calls it if present
+ *	 (meaning, if it is not <code>NULL</code>).
+ *	XXX on all of that
+ *  @field size The size of the delegate structure.
+ * 	@field applicationName The name of your application.
+ * 	@field registrationDictionary A dictionary describing your application and the notifications it can send out.
+ * 	@field applicationIconData Your application's icon.
+ * 	@field growlInstallationWindowTitle The title of the installation window.
+ * 	@field growlInstallationInformation Text to display in the installation window.
+ * 	@field growlUpdateWindowTitle The title of the update window.
+ * 	@field growlUpdateInformation Text to display in the update window.
+ * 	@field referenceCount A count of owners of the delegate.
+ * 	@field retain Called when GrowlApplicationBridge receives this delegate.
+ * 	@field release Called when GrowlApplicationBridge no longer needs this delegate.
+ * 	@field growlIsReady Called when GrowlHelperApp is listening for notifications.
+ * 	@field growlNotificationWasClicked Called when a Growl notification is clicked.
+ *  @field growlNotificationTimedOut Called when a Growl notification timed out.
+ */
+struct Growl_Delegate {
+	/*	@discussion This should be sizeof(struct Growl_Delegate).
+	 */
+	size_t size;
+
+	/*All of these attributes are optional.
+	 *Optional attributes can be NULL; required attributes that
+	 *	 are NULL cause setting the Growl delegate to fail.
+	 *XXX - move optional/required status into the discussion for each field
+	 */
+
+	/* This name is used both internally and in the Growl preferences.
+	 *
+	 *	 This should remain stable between different versions and incarnations of
+	 *	 your application.
+	 *	 For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and
+	 *	 "SurfWriter Lite" are not.
+	 *
+	 * This can be <code>NULL</code> if it is provided elsewhere, namely in an
+	 *	 auto-discoverable plist file in your app bundle
+	 *	 (XXX refer to more information on that) or in registrationDictionary.
+	 */
+	CFStringRef applicationName;
+
+	/*
+	 * Must contain at least these keys:
+	 *	GROWL_NOTIFICATIONS_ALL (CFArray):
+	 *		Contains the names of all notifications your application may post.
+	 *
+	 * Can also contain these keys:
+	 *	GROWL_NOTIFICATIONS_DEFAULT (CFArray):
+	 *		Names of notifications that should be enabled by default.
+	 *		If omitted, GROWL_NOTIFICATIONS_ALL will be used.
+	 *	GROWL_APP_NAME (CFString):
+	 *		Same as the applicationName member of this structure.
+	 *		If both are present, the applicationName member shall prevail.
+	 *		If this key is present, you may omit applicationName (set it to <code>NULL</code>).
+	 *	GROWL_APP_ICON (CFData):
+	 *		Same as the iconData member of this structure.
+	 *		If both are present, the iconData member shall prevail.
+	 *		If this key is present, you may omit iconData (set it to <code>NULL</code>).
+	 *
+	 * If you change the contents of this dictionary after setting the delegate,
+	 *	be sure to call Growl_Reregister.
+	 *
+	 * This can be <code>NULL</code> if you have an auto-discoverable plist file in your app
+	 *	 bundle. (XXX refer to more information on that)
+	 */
+	CFDictionaryRef registrationDictionary;
+
+	/* The data can be in any format supported by NSImage. As of
+	 *	 Mac OS X 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and
+	 *	 PICT formats.
+	 *
+	 *	 If this is not supplied, Growl will look up your application's icon by
+	 *	 its application name.
+	 */
+	CFDataRef applicationIconData;
+
+	/* Installer display attributes
+	 *
+	 * These four attributes are used by the Growl installer, if this framework
+	 *	supports it.
+	 * For any of these being <code>NULL</code>, a localised default will be
+	 *	supplied.
+	 */
+
+	/*	If this is <code>NULL</code>, Growl will use a default,
+	 *	 localized title.
+	 *
+	 *	 Only used if you're using Growl-WithInstaller.framework. Otherwise,
+	 *	 this member is ignored.
+	 */
+	CFStringRef growlInstallationWindowTitle;
+	/*	This information may be as long or short as desired (the
+	 *	 window will be sized to fit it).  If Growl is not installed, it will
+	 *	 be displayed to the user as an explanation of what Growl is and what
+	 *	 it can do in your application.
+	 *	 It should probably note that no download is required to install.
+	 *
+	 *	 If this is <code>NULL</code>, Growl will use a default, localized
+	 *	 explanation.
+	 *
+	 *	 Only used if you're using Growl-WithInstaller.framework. Otherwise,
+	 *	 this member is ignored.
+	 */
+	CFStringRef growlInstallationInformation;
+	/*	If this is <code>NULL</code>, Growl will use a default,
+	 *	 localized title.
+	 *
+	 *	 Only used if you're using Growl-WithInstaller.framework. Otherwise,
+	 *	 this member is ignored.
+	 */
+	CFStringRef growlUpdateWindowTitle;
+	/*	This information may be as long or short as desired (the
+	 *	 window will be sized to fit it).  If an older version of Growl is
+	 *	 installed, it will be displayed to the user as an explanation that an
+	 *	 updated version of Growl is included in your application and
+	 *	 no download is required.
+	 *
+	 *	 If this is <code>NULL</code>, Growl will use a default, localized
+	 *	 explanation.
+	 *
+	 *	 Only used if you're using Growl-WithInstaller.framework. Otherwise,
+	 *	 this member is ignored.
+	 */
+	CFStringRef growlUpdateInformation;
+
+	/*	This member is provided for use by your retain and release
+	 *	 callbacks (see below).
+	 *
+	 *	 GrowlApplicationBridge never directly uses this member. Instead, it
+	 *	 calls your retain callback (if non-<code>NULL</code>) and your release
+	 *	 callback (if non-<code>NULL</code>).
+	 */
+	unsigned referenceCount;
+
+	//Functions. Currently all of these are optional (any of them can be NULL).
+
+	/*	When you call Growl_SetDelegate(newDelegate), it will call
+	 *	 oldDelegate->release(oldDelegate), and then it will call
+	 *	 newDelegate->retain(newDelegate), and the return value from retain
+	 *	 is what will be set as the delegate.
+	 *	 (This means that this member works like CFRetain and -[NSObject retain].)
+	 *	 This member is optional (it can be <code>NULL</code>).
+	 *	 For a delegate allocated with malloc, this member would be
+	 *	 <code>NULL</code>.
+	 *	@result	A delegate to which GrowlApplicationBridge holds a reference.
+	 */
+	void *(*retain)(void *);
+	/*	When you call Growl_SetDelegate(newDelegate), it will call
+	 *	 oldDelegate->release(oldDelegate), and then it will call
+	 *	 newDelegate->retain(newDelegate), and the return value from retain
+	 *	 is what will be set as the delegate.
+	 *	 (This means that this member works like CFRelease and
+	 *	  -[NSObject release].)
+	 *	 This member is optional (it can be NULL).
+	 *	 For a delegate allocated with malloc, this member might be
+	 *	 <code>free</code>(3).
+	 */
+	void (*release)(void *);
+
+	/*	Informs the delegate that Growl (specifically, the GrowlHelperApp) was
+	 *	 launched successfully (or was already running). The application can
+	 *	 take actions with the knowledge that Growl is installed and functional.
+	 */
+	void (*growlIsReady)(void);
+
+	/*	Informs the delegate that a Growl notification was clicked. It is only
+	 *	 sent for notifications sent with a non-<code>NULL</code> clickContext,
+	 *	 so if you want to receive a message when a notification is clicked,
+	 *	 clickContext must not be <code>NULL</code> when calling
+	 *	 Growl_PostNotification or
+	 *	 Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext.
+	 */
+	void (*growlNotificationWasClicked)(CFPropertyListRef clickContext);
+
+	/*	Informs the delegate that a Growl notification timed out. It is only
+	 *	 sent for notifications sent with a non-<code>NULL</code> clickContext,
+	 *	 so if you want to receive a message when a notification is clicked,
+	 *	 clickContext must not be <code>NULL</code> when calling
+	 *	 Growl_PostNotification or
+	 *	 Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext.
+	 */
+	void (*growlNotificationTimedOut)(CFPropertyListRef clickContext);
+};
+
+/*!	@struct Growl_Notification
+ *	@abstract Structure describing a Growl notification.
+ *	@discussion XXX
+ * 	@field size The size of the notification structure.
+ * 	@field name Identifies the notification.
+ * 	@field title Short synopsis of the notification.
+ *  @field description Additional text.
+ * 	@field iconData An icon for the notification.
+ * 	@field priority An indicator of the notification's importance.
+ * 	@field reserved Bits reserved for future usage.
+ * 	@field isSticky Requests that a notification stay on-screen until dismissed explicitly.
+ * 	@field clickContext An identifier to be passed to your click callback when a notification is clicked.
+ * 	@field clickCallback A callback to call when the notification is clicked.
+ */
+struct Growl_Notification {
+	/*	This should be sizeof(struct Growl_Notification).
+	 */
+ 	size_t size;
+
+	/*	The notification name distinguishes one type of
+	 *	 notification from another. The name should be human-readable, as it
+	 *	 will be displayed in the Growl preference pane.
+	 *
+	 *	 The name is used in the GROWL_NOTIFICATIONS_ALL and
+	 *	 GROWL_NOTIFICATIONS_DEFAULT arrays in the registration dictionary, and
+	 *	 in this member of the Growl_Notification structure.
+	 */
+	CFStringRef name;
+
+	/*	A notification's title describes the notification briefly.
+	 *	 It should be easy to read quickly by the user.
+	 */
+	CFStringRef title;
+
+	/*	The description supplements the title with more
+	 *	 information. It is usually longer and sometimes involves a list of
+	 *	 subjects. For example, for a 'Download complete' notification, the
+	 *	 description might have one filename per line. GrowlMail in Growl 0.6
+	 *	 uses a description of '%d new mail(s)' (formatted with the number of
+	 *	 messages).
+	 */
+	CFStringRef description;
+
+	/*	The notification icon usually indicates either what
+	 *	 happened (it may have the same icon as e.g. a toolbar item that
+	 *	 started the process that led to the notification), or what it happened
+	 *	 to (e.g. a document icon).
+	 *
+	 *	 The icon data is optional, so it can be <code>NULL</code>. In that
+	 *	 case, the application icon is used alone. Not all displays support
+	 *	 icons.
+	 *
+	 *	 The data can be in any format supported by NSImage. As of Mac OS X
+	 *	 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and PICT form
+	 *	 ats.
+	 */
+	CFDataRef iconData;
+
+	/*	Priority is new in Growl 0.6, and is represented as a
+	 *	 signed integer from -2 to +2. 0 is Normal priority, -2 is Very Low
+	 *	 priority, and +2 is Very High priority.
+	 *
+	 *	 Not all displays support priority. If you do not wish to assign a
+	 *	 priority to your notification, assign 0.
+	 */
+	signed int priority;
+
+	/*	These bits are not used in Growl 0.6. Set them to 0.
+	 */
+	unsigned reserved: 31;
+
+	/*	When the sticky bit is clear, in most displays,
+	 *	 notifications disappear after a certain amount of time. Sticky
+	 *	 notifications, however, remain on-screen until the user dismisses them
+	 *	 explicitly, usually by clicking them.
+	 *
+	 *	 Sticky notifications were introduced in Growl 0.6. Most notifications
+	 *	 should not be sticky. Not all displays support sticky notifications,
+	 *	 and the user may choose in Growl's preference pane to force the
+	 *	 notification to be sticky or non-sticky, in which case the sticky bit
+	 *	 in the notification will be ignored.
+	 */
+	unsigned isSticky: 1;
+
+	/*	If this is not <code>NULL</code>, and your click callback
+	 *	 is not <code>NULL</code> either, this will be passed to the callback
+	 *	 when your notification is clicked by the user.
+	 *
+	 *	 Click feedback was introduced in Growl 0.6, and it is optional. Not
+	 *	 all displays support click feedback.
+	 */
+	CFPropertyListRef clickContext;
+
+	/*	If this is not <code>NULL</code>, it will be called instead
+	 *	 of the Growl delegate's click callback when clickContext is
+	 *	 non-<code>NULL</code> and the notification is clicked on by the user.
+	 *
+	 *	 Click feedback was introduced in Growl 0.6, and it is optional. Not
+	 *	 all displays support click feedback.
+	 *
+	 *	 The per-notification click callback is not yet supported as of Growl
+	 *	 0.7.
+	 */
+	void (*clickCallback)(CFPropertyListRef clickContext);
+
+	CFStringRef identifier;
+};
+
+#pragma mark -
+#pragma mark Easy initialisers
+
+/*!	@defined	InitGrowlDelegate
+ *	@abstract	Callable macro. Initializes a Growl delegate structure to defaults.
+ *	@discussion	Call with a pointer to a struct Growl_Delegate. All of the
+ *	 members of the structure will be set to 0 or <code>NULL</code>, except for
+ *	 size (which will be set to <code>sizeof(struct Growl_Delegate)</code>) and
+ *	 referenceCount (which will be set to 1).
+ */
+#define InitGrowlDelegate(delegate) \
+	do { \
+		if (delegate) { \
+			(delegate)->size = sizeof(struct Growl_Delegate); \
+			(delegate)->applicationName = NULL; \
+			(delegate)->registrationDictionary = NULL; \
+			(delegate)->applicationIconData = NULL; \
+			(delegate)->growlInstallationWindowTitle = NULL; \
+			(delegate)->growlInstallationInformation = NULL; \
+			(delegate)->growlUpdateWindowTitle = NULL; \
+			(delegate)->growlUpdateInformation = NULL; \
+			(delegate)->referenceCount = 1U; \
+			(delegate)->retain = NULL; \
+			(delegate)->release = NULL; \
+			(delegate)->growlIsReady = NULL; \
+			(delegate)->growlNotificationWasClicked = NULL; \
+			(delegate)->growlNotificationTimedOut = NULL; \
+		} \
+	} while(0)
+
+/*!	@defined	InitGrowlNotification
+ *	@abstract	Callable macro. Initializes a Growl notification structure to defaults.
+ *	@discussion	Call with a pointer to a struct Growl_Notification. All of
+ *	 the members of the structure will be set to 0 or <code>NULL</code>, except
+ *	 for size (which will be set to
+ *	<code>sizeof(struct Growl_Notification)</code>).
+ */
+#define InitGrowlNotification(notification) \
+	do { \
+		if (notification) { \
+			(notification)->size = sizeof(struct Growl_Notification); \
+			(notification)->name = NULL; \
+			(notification)->title = NULL; \
+			(notification)->description = NULL; \
+			(notification)->iconData = NULL; \
+			(notification)->priority = 0; \
+			(notification)->reserved = 0U; \
+			(notification)->isSticky = false; \
+			(notification)->clickContext = NULL; \
+			(notification)->clickCallback = NULL; \
+			(notification)->identifier = NULL; \
+		} \
+	} while(0)
+
+#pragma mark -
+#pragma mark Public API
+
+//	@functiongroup	Managing the Growl delegate
+
+/*!	@function	Growl_SetDelegate
+ *	@abstract	Replaces the current Growl delegate with a new one, or removes
+ *	 the Growl delegate.
+ *	@param	newDelegate
+ *	@result	Returns false and does nothing else if a pointer that was passed in
+ *	 is unsatisfactory (because it is non-<code>NULL</code>, but at least one
+ *	 required member of it is <code>NULL</code>). Otherwise, sets or unsets the
+ *	 delegate and returns true.
+ *	@discussion	When <code>newDelegate</code> is non-<code>NULL</code>, sets
+ *	 the delegate to <code>newDelegate</code>. When it is <code>NULL</code>,
+ *	 the current delegate will be unset, and no delegate will be in place.
+ *
+ *	 It is legal for <code>newDelegate</code> to be the current delegate;
+ *	 nothing will happen, and Growl_SetDelegate will return true. It is also
+ *	 legal for it to be <code>NULL</code>, as described above; again, it will
+ *	 return true.
+ *
+ *	 If there was a delegate in place before the call, Growl_SetDelegate will
+ *	 call the old delegate's release member if it was non-<code>NULL</code>. If
+ *	 <code>newDelegate</code> is non-<code>NULL</code>, Growl_SetDelegate will
+ *	 call <code>newDelegate->retain</code>, and set the delegate to its return
+ *	 value.
+ *
+ *	 If you are using Growl-WithInstaller.framework, and an older version of
+ *	 Growl is installed on the user's system, the user will automatically be
+ *	 prompted to update.
+ *
+ *	 GrowlApplicationBridge currently does not copy this structure, nor does it
+ *	 retain any of the CF objects in the structure (it regards the structure as
+ *	 a container that retains the objects when they are added and releases them
+ *	 when they are removed or the structure is destroyed). Also,
+ *	 GrowlApplicationBridge currently does not modify any member of the
+ *	 structure, except possibly the referenceCount by calling the retain and
+ *	 release members.
+ */
+GROWL_EXPORT Boolean Growl_SetDelegate(struct Growl_Delegate *newDelegate);
+
+/*!	@function	Growl_GetDelegate
+ *	@abstract	Returns the current Growl delegate, if any.
+ *	@result	The current Growl delegate.
+ *	@discussion	Returns the last pointer passed into Growl_SetDelegate, or
+ *	 <code>NULL</code> if no such call has been made.
+ *
+ *	 This function follows standard Core Foundation reference-counting rules.
+ *	 Because it is a Get function, not a Copy function, it will not retain the
+ *	 delegate on your behalf. You are responsible for retaining and releasing
+ *	 the delegate as needed.
+ */
+GROWL_EXPORT struct Growl_Delegate *Growl_GetDelegate(void);
+
+#pragma mark -
+
+//	@functiongroup	Posting Growl notifications
+
+/*!	@function	Growl_PostNotification
+ *	@abstract	Posts a Growl notification.
+ *	@param	notification	The notification to post.
+ *	@discussion	This is the preferred means for sending a Growl notification.
+ *	 The notification name and at least one of the title and description are
+ *	 required (all three are preferred). All other parameters may be
+ *	 <code>NULL</code> (or 0 or false as appropriate) to accept default values.
+ *
+ *	 If using the Growl-WithInstaller framework, if Growl is not installed the
+ *	 user will be prompted to install Growl.
+ *	 If the user cancels, this function will have no effect until the next
+ *	 application session, at which time when it is called the user will be
+ *	 prompted again. The user is also given the option to not be prompted again.
+ *	 If the user does choose to install Growl, the requested notification will
+ *	 be displayed once Growl is installed and running.
+ */
+GROWL_EXPORT void Growl_PostNotification(const struct Growl_Notification *notification);
+
+/*!	@function Growl_PostNotificationWithDictionary
+*	@abstract	Notifies using a userInfo dictionary suitable for passing to
+*	 CFDistributedNotificationCenter.
+*	@param	userInfo	The dictionary to notify with.
+*	@discussion	Before Growl 0.6, your application would have posted
+*	 notifications using CFDistributedNotificationCenter by creating a userInfo
+*	 dictionary with the notification data. This had the advantage of allowing
+*	 you to add other data to the dictionary for programs besides Growl that
+*	 might be listening.
+*
+*	 This function allows you to use such dictionaries without being restricted
+*	 to using CFDistributedNotificationCenter. The keys for this dictionary
+ *	 can be found in GrowlDefines.h.
+*/
+GROWL_EXPORT void Growl_PostNotificationWithDictionary(CFDictionaryRef userInfo);
+
+/*!	@function	Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext
+ *	@abstract	Posts a Growl notification using parameter values.
+ *	@param	title	The title of the notification.
+ *	@param	description	The description of the notification.
+ *	@param	notificationName	The name of the notification as listed in the
+ *	 registration dictionary.
+ *	@param	iconData	Data representing a notification icon. Can be <code>NULL</code>.
+ *	@param	priority	The priority of the notification (-2 to +2, with -2
+ *	 being Very Low and +2 being Very High).
+ *	@param	isSticky	If true, requests that this notification wait for a
+ *	 response from the user.
+ *	@param	clickContext	An object to pass to the clickCallback, if any. Can
+ *	 be <code>NULL</code>, in which case the clickCallback is not called.
+ *	@discussion	Creates a temporary Growl_Notification, fills it out with the
+ *	 supplied information, and calls Growl_PostNotification on it.
+ *	 See struct Growl_Notification and Growl_PostNotification for more
+ *	 information.
+ *
+ *	 The icon data can be in any format supported by NSImage. As of Mac OS X
+ *	 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and PICT formats.
+ */
+GROWL_EXPORT void Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext(
+ /*inhale*/
+	CFStringRef title,
+	CFStringRef description,
+	CFStringRef notificationName,
+	CFDataRef iconData,
+	signed int priority,
+	Boolean isSticky,
+	CFPropertyListRef clickContext);
+
+#pragma mark -
+
+//	@functiongroup	Registering
+
+/*!	@function Growl_RegisterWithDictionary
+ *	@abstract	Register your application with Growl without setting a delegate.
+ *	@discussion	When you call this function with a dictionary,
+ *	 GrowlApplicationBridge registers your application using that dictionary.
+ *	 If you pass <code>NULL</code>, GrowlApplicationBridge will ask the delegate
+ *	 (if there is one) for a dictionary, and if that doesn't work, it will look
+ *	 in your application's bundle for an auto-discoverable plist.
+ *	 (XXX refer to more information on that)
+ *
+ *	 If you pass a dictionary to this function, it must include the
+ *	 <code>GROWL_APP_NAME</code> key, unless a delegate is set.
+ *
+ *	 This function is mainly an alternative to the delegate system introduced
+ *	 with Growl 0.6. Without a delegate, you cannot receive callbacks such as
+ *	 <code>growlIsReady</code> (since they are sent to the delegate). You can,
+ *	 however, set a delegate after registering without one.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ *	@result <code>false</code> if registration failed (e.g. if Growl isn't installed).
+ */
+GROWL_EXPORT Boolean Growl_RegisterWithDictionary(CFDictionaryRef regDict);
+
+/*!	@function	Growl_Reregister
+ *	@abstract	Updates your registration with Growl.
+ *	@discussion	If your application changes the contents of the
+ *	 GROWL_NOTIFICATIONS_ALL key in the registrationDictionary member of the
+ *	 Growl delegate, or if it changes the value of that member, or if it
+ *	 changes the contents of its auto-discoverable plist, call this function
+ *	 to have Growl update its registration information for your application.
+ *
+ *	 Otherwise, this function does not normally need to be called. If you're
+ *	 using a delegate, your application will be registered when you set the
+ *	 delegate if both the delegate and its registrationDictionary member are
+ *	 non-<code>NULL</code>.
+ *
+ *	 This function is now implemented using
+ *	 <code>Growl_RegisterWithDictionary</code>.
+ */
+GROWL_EXPORT void Growl_Reregister(void);
+
+#pragma mark -
+
+/*!	@function	Growl_SetWillRegisterWhenGrowlIsReady
+ *	@abstract	Tells GrowlApplicationBridge to register with Growl when Growl
+ *	 launches (or not).
+ *	@discussion	When Growl has started listening for notifications, it posts a
+ *	 <code>GROWL_IS_READY</code> notification on the Distributed Notification
+ *	 Center. GrowlApplicationBridge listens for this notification, using it to
+ *	 perform various tasks (such as calling your delegate's
+ *	 <code>growlIsReady</code> callback, if it has one). If this function is
+ *	 called with <code>true</code>, one of those tasks will be to reregister
+ *	 with Growl (in the manner of <code>Growl_Reregister</code>).
+ *
+ *	 This attribute is automatically set back to <code>false</code>
+ *	 (the default) after every <code>GROWL_IS_READY</code> notification.
+ *	@param	flag	<code>true</code> if you want GrowlApplicationBridge to register with
+ *	 Growl when next it is ready; <code>false</code> if not.
+ */
+GROWL_EXPORT void Growl_SetWillRegisterWhenGrowlIsReady(Boolean flag);
+/*!	@function	Growl_WillRegisterWhenGrowlIsReady
+ *	@abstract	Reports whether GrowlApplicationBridge will register with Growl
+ *	 when Growl next launches.
+ *	@result	<code>true</code> if GrowlApplicationBridge will register with
+ *	 Growl when next it posts GROWL_IS_READY; <code>false</code> if not.
+ */
+GROWL_EXPORT Boolean Growl_WillRegisterWhenGrowlIsReady(void);
+
+#pragma mark -
+
+//	@functiongroup	Obtaining registration dictionaries
+
+/*!	@function	Growl_CopyRegistrationDictionaryFromDelegate
+ *	@abstract	Asks the delegate for a registration dictionary.
+ *	@discussion	If no delegate is set, or if the delegate's
+ *	 <code>registrationDictionary</code> member is <code>NULL</code>, this
+ *	 function returns <code>NULL</code>.
+ *
+ *	 This function does not attempt to clean up the dictionary in any way - for
+ *	 example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
+ *	 will be missing it too. Use
+ *	 <code>Growl_CreateRegistrationDictionaryByFillingInDictionary</code> or
+ *	 <code>Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys</code>
+ *	 to try to fill in missing keys.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ *	@result A registration dictionary.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CopyRegistrationDictionaryFromDelegate(void);
+
+/*!	@function	Growl_CopyRegistrationDictionaryFromBundle
+ *	@abstract	Looks in a bundle for a registration dictionary.
+ *	@discussion	This function looks in a bundle for an auto-discoverable
+ *	 registration dictionary file using <code>CFBundleCopyResourceURL</code>.
+ *	 If it finds one, it loads the file using <code>CFPropertyList</code> and
+ *	 returns the result.
+ *
+ *	 If you pass <code>NULL</code> as the bundle, the main bundle is examined.
+ *
+ *	 This function does not attempt to clean up the dictionary in any way - for
+ *	 example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
+ *	 will be missing it too. Use
+ *	 <code>Growl_CreateRegistrationDictionaryByFillingInDictionary:</code> or
+ *	 <code>Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys</code>
+ *	 to try to fill in missing keys.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ *	@result A registration dictionary.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CopyRegistrationDictionaryFromBundle(CFBundleRef bundle);
+
+/*!	@function	Growl_CreateBestRegistrationDictionary
+ *	@abstract	Obtains a registration dictionary, filled out to the best of
+ *	 GrowlApplicationBridge's knowledge.
+ *	@discussion	This function creates a registration dictionary as best
+ *	 GrowlApplicationBridge knows how.
+ *
+ *	 First, GrowlApplicationBridge examines the Growl delegate (if there is
+ *	 one) and gets the registration dictionary from that. If no such dictionary
+ *	 was obtained, GrowlApplicationBridge looks in your application's main
+ *	 bundle for an auto-discoverable registration dictionary file. If that
+ *	 doesn't exist either, this function returns <code>NULL</code>.
+ *
+ *	 Second, GrowlApplicationBridge calls
+ *	 <code>Growl_CreateRegistrationDictionaryByFillingInDictionary</code> with
+ *	 whatever dictionary was obtained. The result of that function is the
+ *	 result of this function.
+ *
+ *	 GrowlApplicationBridge uses this function when you call
+ *	 <code>Growl_SetDelegate</code>, or when you call
+ *	 <code>Growl_RegisterWithDictionary</code> with <code>NULL</code>.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ *	@result	A registration dictionary.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CreateBestRegistrationDictionary(void);
+
+#pragma mark -
+
+//	@functiongroup	Filling in registration dictionaries
+
+/*!	@function	Growl_CreateRegistrationDictionaryByFillingInDictionary
+ *	@abstract	Tries to fill in missing keys in a registration dictionary.
+ *	@param	regDict	The dictionary to fill in.
+ *	@result	The dictionary with the keys filled in.
+ *	@discussion	This function examines the passed-in dictionary for missing keys,
+ *	 and tries to work out correct values for them. As of 0.7, it uses:
+ *
+ *	 Key							             Value
+ *	 ---							             -----
+ *	 <code>GROWL_APP_NAME</code>                 <code>CFBundleExecutableName</code>
+ *	 <code>GROWL_APP_ICON</code>                 The icon of the application.
+ *	 <code>GROWL_APP_LOCATION</code>             The location of the application.
+ *	 <code>GROWL_NOTIFICATIONS_DEFAULT</code>    <code>GROWL_NOTIFICATIONS_ALL</code>
+ *
+ *	 Keys are only filled in if missing; if a key is present in the dictionary,
+ *	 its value will not be changed.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CreateRegistrationDictionaryByFillingInDictionary(CFDictionaryRef regDict);
+/*!	@function	Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys
+ *	@abstract	Tries to fill in missing keys in a registration dictionary.
+ *	@param	regDict	The dictionary to fill in.
+ *	@param	keys	The keys to fill in. If <code>NULL</code>, any missing keys are filled in.
+ *	@result	The dictionary with the keys filled in.
+ *	@discussion	This function examines the passed-in dictionary for missing keys,
+ *	 and tries to work out correct values for them. As of 0.7, it uses:
+ *
+ *	 Key							             Value
+ *	 ---							             -----
+ *	 <code>GROWL_APP_NAME</code>                 <code>CFBundleExecutableName</code>
+ *	 <code>GROWL_APP_ICON</code>                 The icon of the application.
+ *	 <code>GROWL_APP_LOCATION</code>             The location of the application.
+ *	 <code>GROWL_NOTIFICATIONS_DEFAULT</code>    <code>GROWL_NOTIFICATIONS_ALL</code>
+ *
+ *	 Only those keys that are listed in <code>keys</code> will be filled in.
+ *	 Other missing keys are ignored. Also, keys are only filled in if missing;
+ *	 if a key is present in the dictionary, its value will not be changed.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys(CFDictionaryRef regDict, CFSetRef keys);
+
+/*!	@brief	Tries to fill in missing keys in a notification dictionary.
+ *	@param	notifDict	The dictionary to fill in.
+ *	@return	The dictionary with the keys filled in. This will be a separate instance from \a notifDict.
+ *	@discussion	This function examines the \a notifDict for missing keys, and 
+ *	 tries to get them from the last known registration dictionary. As of 1.1, 
+ *	 the keys that it will look for are:
+ *
+ *	 \li <code>GROWL_APP_NAME</code>
+ *	 \li <code>GROWL_APP_ICON</code>
+ *
+ *	@since Growl.framework 1.1
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CreateNotificationDictionaryByFillingInDictionary(CFDictionaryRef notifDict);
+
+#pragma mark -
+
+//	@functiongroup	Querying Growl's status
+
+/*!	@function	Growl_IsInstalled
+ *	@abstract	Determines whether the Growl prefpane and its helper app are
+ *	 installed.
+ *	@result	Returns true if Growl is installed, false otherwise.
+ */
+GROWL_EXPORT Boolean Growl_IsInstalled(void);
+
+/*!	@function	Growl_IsRunning
+ *	@abstract	Cycles through the process list to find whether GrowlHelperApp
+ *	 is running.
+ *	@result	Returns true if Growl is running, false otherwise.
+ */
+GROWL_EXPORT Boolean Growl_IsRunning(void);
+
+#pragma mark -
+
+//	@functiongroup	Launching Growl
+
+/*!	@typedef	GrowlLaunchCallback
+ *	@abstract	Callback to notify you that Growl is running.
+ *	@param	context	The context pointer passed to Growl_LaunchIfInstalled.
+ *	@discussion	Growl_LaunchIfInstalled calls this callback function if Growl
+ *	 was already running or if it launched Growl successfully.
+ */
+typedef void (*GrowlLaunchCallback)(void *context);
+
+/*!	@function	Growl_LaunchIfInstalled
+ *	@abstract	Launches GrowlHelperApp if it is not already running.
+ *	@param	callback	A callback function which will be called if Growl was successfully
+ *	 launched or was already running. Can be <code>NULL</code>.
+ *	@param	context	The context pointer to pass to the callback. Can be <code>NULL</code>.
+ *	@result	Returns true if Growl was successfully launched or was already
+ *	 running; returns false and does not call the callback otherwise.
+ *	@discussion	Returns true and calls the callback (if the callback is not
+ *	 <code>NULL</code>) if the Growl helper app began launching or was already
+ *	 running. Returns false and performs no other action if Growl could not be
+ *	 launched (e.g. because the Growl preference pane is not properly installed).
+ *
+ *	 If <code>Growl_CreateBestRegistrationDictionary</code> returns
+ *	 non-<code>NULL</code>, this function will register with Growl atomically.
+ *
+ *	 The callback should take a single argument; this is to allow applications
+ *	 to have context-relevant information passed back. It is perfectly
+ *	 acceptable for context to be <code>NULL</code>. The callback itself can be
+ *	 <code>NULL</code> if you don't want one.
+ */
+GROWL_EXPORT Boolean Growl_LaunchIfInstalled(GrowlLaunchCallback callback, void *context);
+
+#pragma mark -
+#pragma mark Constants
+
+/*!	@defined	GROWL_PREFPANE_BUNDLE_IDENTIFIER
+ *	@abstract	The CFBundleIdentifier of the Growl preference pane bundle.
+ *	@discussion	GrowlApplicationBridge uses this to determine whether Growl is
+ *	 currently installed, by searching for the Growl preference pane. Your
+ *	 application probably does not need to use this macro itself.
+ */
+#ifndef GROWL_PREFPANE_BUNDLE_IDENTIFIER
+#define GROWL_PREFPANE_BUNDLE_IDENTIFIER	CFSTR("com.growl.prefpanel")
+#endif
+
+__END_DECLS
+
+#endif /* _GROWLAPPLICATIONBRIDGE_CARBON_H_ */

Added: trunk/src/uimac14/Frameworks/Growl.framework/Headers/GrowlApplicationBridge.h
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Headers/GrowlApplicationBridge.h	                        (rev 0)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Headers/GrowlApplicationBridge.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,575 @@
+//
+//  GrowlApplicationBridge.h
+//  Growl
+//
+//  Created by Evan Schoenberg on Wed Jun 16 2004.
+//  Copyright 2004-2006 The Growl Project. All rights reserved.
+//
+
+/*!
+ *	@header		GrowlApplicationBridge.h
+ *	@abstract   Defines the GrowlApplicationBridge class.
+ *	@discussion This header defines the GrowlApplicationBridge class as well as
+ *	 the GROWL_PREFPANE_BUNDLE_IDENTIFIER constant.
+ */
+
+#ifndef __GrowlApplicationBridge_h__
+#define __GrowlApplicationBridge_h__
+
+#import <Foundation/Foundation.h>
+#import <AppKit/AppKit.h>
+#import "GrowlDefines.h"
+
+//Forward declarations
+ at protocol GrowlApplicationBridgeDelegate;
+
+//Internal notification when the user chooses not to install (to avoid continuing to cache notifications awaiting installation)
+#define GROWL_USER_CHOSE_NOT_TO_INSTALL_NOTIFICATION @"User chose not to install"
+
+//------------------------------------------------------------------------------
+#pragma mark -
+
+/*!
+ *	@class      GrowlApplicationBridge
+ *	@abstract   A class used to interface with Growl.
+ *	@discussion This class provides a means to interface with Growl.
+ *
+ *	 Currently it provides a way to detect if Growl is installed and launch the
+ *	 GrowlHelperApp if it's not already running.
+ */
+ at interface GrowlApplicationBridge : NSObject {
+
+}
+
+/*!
+ *	@method isGrowlInstalled
+ *	@abstract Detects whether Growl is installed.
+ *	@discussion Determines if the Growl prefpane and its helper app are installed.
+ *	@result Returns YES if Growl is installed, NO otherwise.
+ */
++ (BOOL) isGrowlInstalled;
+
+/*!
+ *	@method isGrowlRunning
+ *	@abstract Detects whether GrowlHelperApp is currently running.
+ *	@discussion Cycles through the process list to find whether GrowlHelperApp is running and returns its findings.
+ *	@result Returns YES if GrowlHelperApp is running, NO otherwise.
+ */
++ (BOOL) isGrowlRunning;
+
+#pragma mark -
+
+/*!
+ *	@method setGrowlDelegate:
+ *	@abstract Set the object which will be responsible for providing and receiving Growl information.
+ *	@discussion This must be called before using GrowlApplicationBridge.
+ *
+ *	 The methods in the GrowlApplicationBridgeDelegate protocol are required
+ *	 and return the basic information needed to register with Growl.
+ *
+ *	 The methods in the GrowlApplicationBridgeDelegate_InformalProtocol
+ *	 informal protocol are individually optional.  They provide a greater
+ *	 degree of interaction between the application and growl such as informing
+ *	 the application when one of its Growl notifications is clicked by the user.
+ *
+ *	 The methods in the GrowlApplicationBridgeDelegate_Installation_InformalProtocol
+ *	 informal protocol are individually optional and are only applicable when
+ *	 using the Growl-WithInstaller.framework which allows for automated Growl
+ *	 installation.
+ *
+ *	 When this method is called, data will be collected from inDelegate, Growl
+ *	 will be launched if it is not already running, and the application will be
+ *	 registered with Growl.
+ *
+ *	 If using the Growl-WithInstaller framework, if Growl is already installed
+ *	 but this copy of the framework has an updated version of Growl, the user
+ *	 will be prompted to update automatically.
+ *
+ *	@param inDelegate The delegate for the GrowlApplicationBridge. It must conform to the GrowlApplicationBridgeDelegate protocol.
+ */
++ (void) setGrowlDelegate:(NSObject<GrowlApplicationBridgeDelegate> *)inDelegate;
+
+/*!
+ *	@method growlDelegate
+ *	@abstract Return the object responsible for providing and receiving Growl information.
+ *	@discussion See setGrowlDelegate: for details.
+ *	@result The Growl delegate.
+ */
++ (NSObject<GrowlApplicationBridgeDelegate> *) growlDelegate;
+
+#pragma mark -
+
+/*!
+ *	@method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:
+ *	@abstract Send a Growl notification.
+ *	@discussion This is the preferred means for sending a Growl notification.
+ *	 The notification name and at least one of the title and description are
+ *	 required (all three are preferred).  All other parameters may be
+ *	 <code>nil</code> (or 0 or NO as appropriate) to accept default values.
+ *
+ *	 If using the Growl-WithInstaller framework, if Growl is not installed the
+ *	 user will be prompted to install Growl. If the user cancels, this method
+ *	 will have no effect until the next application session, at which time when
+ *	 it is called the user will be prompted again. The user is also given the
+ *	 option to not be prompted again.  If the user does choose to install Growl,
+ *	 the requested notification will be displayed once Growl is installed and
+ *	 running.
+ *
+ *	@param title		The title of the notification displayed to the user.
+ *	@param description	The full description of the notification displayed to the user.
+ *	@param notifName	The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane.
+ *	@param iconData		<code>NSData</code> object to show with the notification as its icon. If <code>nil</code>, the application's icon will be used instead.
+ *	@param priority		The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority.
+ *	@param isSticky		If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications.
+ *	@param clickContext	A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of <code>NSString</code>, <code>NSArray</code>, <code>NSNumber</code>, <code>NSDictionary</code>, and <code>NSData</code> types).
+ */
++ (void) notifyWithTitle:(NSString *)title
+			 description:(NSString *)description
+		notificationName:(NSString *)notifName
+				iconData:(NSData *)iconData
+				priority:(signed int)priority
+				isSticky:(BOOL)isSticky
+			clickContext:(id)clickContext;
+
+/*!
+ *	@method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:identifier:
+ *	@abstract Send a Growl notification.
+ *	@discussion This is the preferred means for sending a Growl notification.
+ *	 The notification name and at least one of the title and description are
+ *	 required (all three are preferred).  All other parameters may be
+ *	 <code>nil</code> (or 0 or NO as appropriate) to accept default values.
+ *
+ *	 If using the Growl-WithInstaller framework, if Growl is not installed the
+ *	 user will be prompted to install Growl. If the user cancels, this method
+ *	 will have no effect until the next application session, at which time when
+ *	 it is called the user will be prompted again. The user is also given the
+ *	 option to not be prompted again.  If the user does choose to install Growl,
+ *	 the requested notification will be displayed once Growl is installed and
+ *	 running.
+ *
+ *	@param title		The title of the notification displayed to the user.
+ *	@param description	The full description of the notification displayed to the user.
+ *	@param notifName	The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane.
+ *	@param iconData		<code>NSData</code> object to show with the notification as its icon. If <code>nil</code>, the application's icon will be used instead.
+ *	@param priority		The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority.
+ *	@param isSticky		If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications.
+ *	@param clickContext	A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of <code>NSString</code>, <code>NSArray</code>, <code>NSNumber</code>, <code>NSDictionary</code>, and <code>NSData</code> types).
+ *	@param identifier	An identifier for this notification. Notifications with equal identifiers are coalesced.
+ */
++ (void) notifyWithTitle:(NSString *)title
+			 description:(NSString *)description
+		notificationName:(NSString *)notifName
+				iconData:(NSData *)iconData
+				priority:(signed int)priority
+				isSticky:(BOOL)isSticky
+			clickContext:(id)clickContext
+			  identifier:(NSString *)identifier;
+
+/*!	@method	notifyWithDictionary:
+ *	@abstract	Notifies using a userInfo dictionary suitable for passing to
+ *	 <code>NSDistributedNotificationCenter</code>.
+ *	@param	userInfo	The dictionary to notify with.
+ *	@discussion	Before Growl 0.6, your application would have posted
+ *	 notifications using <code>NSDistributedNotificationCenter</code> by
+ *	 creating a userInfo dictionary with the notification data. This had the
+ *	 advantage of allowing you to add other data to the dictionary for programs
+ *	 besides Growl that might be listening.
+ *
+ *	 This method allows you to use such dictionaries without being restricted
+ *	 to using <code>NSDistributedNotificationCenter</code>. The keys for this dictionary
+ *	 can be found in GrowlDefines.h.
+ */
++ (void) notifyWithDictionary:(NSDictionary *)userInfo;
+
+#pragma mark -
+
+/*!	@method	registerWithDictionary:
+ *	@abstract	Register your application with Growl without setting a delegate.
+ *	@discussion	When you call this method with a dictionary,
+ *	 GrowlApplicationBridge registers your application using that dictionary.
+ *	 If you pass <code>nil</code>, GrowlApplicationBridge will ask the delegate
+ *	 (if there is one) for a dictionary, and if that doesn't work, it will look
+ *	 in your application's bundle for an auto-discoverable plist.
+ *	 (XXX refer to more information on that)
+ *
+ *	 If you pass a dictionary to this method, it must include the
+ *	 <code>GROWL_APP_NAME</code> key, unless a delegate is set.
+ *
+ *	 This method is mainly an alternative to the delegate system introduced
+ *	 with Growl 0.6. Without a delegate, you cannot receive callbacks such as
+ *	 <code>-growlIsReady</code> (since they are sent to the delegate). You can,
+ *	 however, set a delegate after registering without one.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ */
++ (BOOL) registerWithDictionary:(NSDictionary *)regDict;
+
+/*!	@method	reregisterGrowlNotifications
+ *	@abstract	Reregister the notifications for this application.
+ *	@discussion	This method does not normally need to be called.  If your
+ *	 application changes what notifications it is registering with Growl, call
+ *	 this method to have the Growl delegate's
+ *	 <code>-registrationDictionaryForGrowl</code> method called again and the
+ *	 Growl registration information updated.
+ *
+ *	 This method is now implemented using <code>-registerWithDictionary:</code>.
+ */
++ (void) reregisterGrowlNotifications;
+
+#pragma mark -
+
+/*!	@method	setWillRegisterWhenGrowlIsReady:
+ *	@abstract	Tells GrowlApplicationBridge to register with Growl when Growl
+ *	 launches (or not).
+ *	@discussion	When Growl has started listening for notifications, it posts a
+ *	 <code>GROWL_IS_READY</code> notification on the Distributed Notification
+ *	 Center. GrowlApplicationBridge listens for this notification, using it to
+ *	 perform various tasks (such as calling your delegate's
+ *	 <code>-growlIsReady</code> method, if it has one). If this method is
+ *	 called with <code>YES</code>, one of those tasks will be to reregister
+ *	 with Growl (in the manner of <code>-reregisterGrowlNotifications</code>).
+ *
+ *	 This attribute is automatically set back to <code>NO</code> (the default)
+ *	 after every <code>GROWL_IS_READY</code> notification.
+ *	@param	flag	<code>YES</code> if you want GrowlApplicationBridge to register with
+ *	 Growl when next it is ready; <code>NO</code> if not.
+ */
++ (void) setWillRegisterWhenGrowlIsReady:(BOOL)flag;
+/*!	@method	willRegisterWhenGrowlIsReady
+ *	@abstract	Reports whether GrowlApplicationBridge will register with Growl
+ *	 when Growl next launches.
+ *	@result	<code>YES</code> if GrowlApplicationBridge will register with Growl
+ *	 when next it posts GROWL_IS_READY; <code>NO</code> if not.
+ */
++ (BOOL) willRegisterWhenGrowlIsReady;
+
+#pragma mark -
+
+/*!	@method	registrationDictionaryFromDelegate
+ *	@abstract	Asks the delegate for a registration dictionary.
+ *	@discussion	If no delegate is set, or if the delegate's
+ *	 <code>-registrationDictionaryForGrowl</code> method returns
+ *	 <code>nil</code>, this method returns <code>nil</code>.
+ *
+ *	 This method does not attempt to clean up the dictionary in any way - for
+ *	 example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
+ *	 will be missing it too. Use <code>+[GrowlApplicationBridge
+ *	 registrationDictionaryByFillingInDictionary:]</code> or
+ *	 <code>+[GrowlApplicationBridge
+ *	 registrationDictionaryByFillingInDictionary:restrictToKeys:]</code> to try
+ *	 to fill in missing keys.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ *	@result A registration dictionary.
+ */
++ (NSDictionary *) registrationDictionaryFromDelegate;
+
+/*!	@method	registrationDictionaryFromBundle:
+ *	@abstract	Looks in a bundle for a registration dictionary.
+ *	@discussion	This method looks in a bundle for an auto-discoverable
+ *	 registration dictionary file using <code>-[NSBundle
+ *	 pathForResource:ofType:]</code>. If it finds one, it loads the file using
+ *	 <code>+[NSDictionary dictionaryWithContentsOfFile:]</code> and returns the
+ *	 result.
+ *
+ *	 If you pass <code>nil</code> as the bundle, the main bundle is examined.
+ *
+ *	 This method does not attempt to clean up the dictionary in any way - for
+ *	 example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
+ *	 will be missing it too. Use <code>+[GrowlApplicationBridge
+ *	 registrationDictionaryByFillingInDictionary:]</code> or
+ *	 <code>+[GrowlApplicationBridge
+ *	 registrationDictionaryByFillingInDictionary:restrictToKeys:]</code> to try
+ *	 to fill in missing keys.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ *	@result A registration dictionary.
+ */
++ (NSDictionary *) registrationDictionaryFromBundle:(NSBundle *)bundle;
+
+/*!	@method	bestRegistrationDictionary
+ *	@abstract	Obtains a registration dictionary, filled out to the best of
+ *	 GrowlApplicationBridge's knowledge.
+ *	@discussion	This method creates a registration dictionary as best
+ *	 GrowlApplicationBridge knows how.
+ *
+ *	 First, GrowlApplicationBridge contacts the Growl delegate (if there is
+ *	 one) and gets the registration dictionary from that. If no such dictionary
+ *	 was obtained, GrowlApplicationBridge looks in your application's main
+ *	 bundle for an auto-discoverable registration dictionary file. If that
+ *	 doesn't exist either, this method returns <code>nil</code>.
+ *
+ *	 Second, GrowlApplicationBridge calls
+ *	 <code>+registrationDictionaryByFillingInDictionary:</code> with whatever
+ *	 dictionary was obtained. The result of that method is the result of this
+ *	 method.
+ *
+ *	 GrowlApplicationBridge uses this method when you call
+ *	 <code>+setGrowlDelegate:</code>, or when you call
+ *	 <code>+registerWithDictionary:</code> with <code>nil</code>.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ *	@result	A registration dictionary.
+ */
++ (NSDictionary *) bestRegistrationDictionary;
+
+#pragma mark -
+
+/*!	@method	registrationDictionaryByFillingInDictionary:
+ *	@abstract	Tries to fill in missing keys in a registration dictionary.
+ *	@discussion	This method examines the passed-in dictionary for missing keys,
+ *	 and tries to work out correct values for them. As of 0.7, it uses:
+ *
+ *	 Key							             Value
+ *	 ---							             -----
+ *	 <code>GROWL_APP_NAME</code>                 <code>CFBundleExecutableName</code>
+ *	 <code>GROWL_APP_ICON</code>                 The icon of the application.
+ *	 <code>GROWL_APP_LOCATION</code>             The location of the application.
+ *	 <code>GROWL_NOTIFICATIONS_DEFAULT</code>    <code>GROWL_NOTIFICATIONS_ALL</code>
+ *
+ *	 Keys are only filled in if missing; if a key is present in the dictionary,
+ *	 its value will not be changed.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ *	@param	regDict	The dictionary to fill in.
+ *	@result	The dictionary with the keys filled in. This is an autoreleased
+ *	 copy of <code>regDict</code>.
+ */
++ (NSDictionary *) registrationDictionaryByFillingInDictionary:(NSDictionary *)regDict;
+/*!	@method	registrationDictionaryByFillingInDictionary:restrictToKeys:
+ *	@abstract	Tries to fill in missing keys in a registration dictionary.
+ *	@discussion	This method examines the passed-in dictionary for missing keys,
+ *	 and tries to work out correct values for them. As of 0.7, it uses:
+ *
+ *	 Key							             Value
+ *	 ---							             -----
+ *	 <code>GROWL_APP_NAME</code>                 <code>CFBundleExecutableName</code>
+ *	 <code>GROWL_APP_ICON</code>                 The icon of the application.
+ *	 <code>GROWL_APP_LOCATION</code>             The location of the application.
+ *	 <code>GROWL_NOTIFICATIONS_DEFAULT</code>    <code>GROWL_NOTIFICATIONS_ALL</code>
+ *
+ *	 Only those keys that are listed in <code>keys</code> will be filled in.
+ *	 Other missing keys are ignored. Also, keys are only filled in if missing;
+ *	 if a key is present in the dictionary, its value will not be changed.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ *	@param	regDict	The dictionary to fill in.
+ *	@param	keys	The keys to fill in. If <code>nil</code>, any missing keys are filled in.
+ *	@result	The dictionary with the keys filled in. This is an autoreleased
+ *	 copy of <code>regDict</code>.
+ */
++ (NSDictionary *) registrationDictionaryByFillingInDictionary:(NSDictionary *)regDict restrictToKeys:(NSSet *)keys;
+
+/*!	@brief	Tries to fill in missing keys in a notification dictionary.
+ *	@param	notifDict	The dictionary to fill in.
+ *	@return	The dictionary with the keys filled in. This will be a separate instance from \a notifDict.
+ *	@discussion	This function examines the \a notifDict for missing keys, and 
+ *	 tries to get them from the last known registration dictionary. As of 1.1, 
+ *	 the keys that it will look for are:
+ *
+ *	 \li <code>GROWL_APP_NAME</code>
+ *	 \li <code>GROWL_APP_ICON</code>
+ *
+ *	@since Growl.framework 1.1
+ */
++ (NSDictionary *) notificationDictionaryByFillingInDictionary:(NSDictionary *)regDict;
+
++ (NSDictionary *) frameworkInfoDictionary;
+ at end
+
+//------------------------------------------------------------------------------
+#pragma mark -
+
+/*!
+ *	@protocol GrowlApplicationBridgeDelegate
+ *	@abstract Required protocol for the Growl delegate.
+ *	@discussion The methods in this protocol are required and are called
+ *	 automatically as needed by GrowlApplicationBridge. See
+ *	 <code>+[GrowlApplicationBridge setGrowlDelegate:]</code>.
+ *	 See also <code>GrowlApplicationBridgeDelegate_InformalProtocol</code>.
+ */
+
+ at protocol GrowlApplicationBridgeDelegate
+
+// -registrationDictionaryForGrowl has moved to the informal protocol as of 0.7.
+
+ at end
+
+//------------------------------------------------------------------------------
+#pragma mark -
+
+/*!
+ *	@category NSObject(GrowlApplicationBridgeDelegate_InformalProtocol)
+ *	@abstract Methods which may be optionally implemented by the GrowlDelegate.
+ *	@discussion The methods in this informal protocol will only be called if implemented by the delegate.
+ */
+ at interface NSObject (GrowlApplicationBridgeDelegate_InformalProtocol)
+
+/*!
+ *	@method registrationDictionaryForGrowl
+ *	@abstract Return the dictionary used to register this application with Growl.
+ *	@discussion The returned dictionary gives Growl the complete list of
+ *	 notifications this application will ever send, and it also specifies which
+ *	 notifications should be enabled by default.  Each is specified by an array
+ *	 of <code>NSString</code> objects.
+ *
+ *	 For most applications, these two arrays can be the same (if all sent
+ *	 notifications should be displayed by default).
+ *
+ *	 The <code>NSString</code> objects of these arrays will correspond to the
+ *	 <code>notificationName:</code> parameter passed in
+ *	 <code>+[GrowlApplicationBridge
+ *	 notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:]</code> calls.
+ *
+ *	 The dictionary should have the required key object pairs:
+ *	 key: GROWL_NOTIFICATIONS_ALL		object: <code>NSArray</code> of <code>NSString</code> objects
+ *	 key: GROWL_NOTIFICATIONS_DEFAULT	object: <code>NSArray</code> of <code>NSString</code> objects
+ *
+ *   The dictionary may have the following key object pairs:
+ *   key: GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES	object: <code>NSDictionary</code> of key: notification name		object: human-readable notification name
+ *
+ *	 You do not need to implement this method if you have an auto-discoverable
+ *	 plist file in your app bundle. (XXX refer to more information on that)
+ *
+ *	@result The <code>NSDictionary</code> to use for registration.
+ */
+- (NSDictionary *) registrationDictionaryForGrowl;
+
+/*!
+ *	@method applicationNameForGrowl
+ *	@abstract Return the name of this application which will be used for Growl bookkeeping.
+ *	@discussion This name is used both internally and in the Growl preferences.
+ *
+ *	 This should remain stable between different versions and incarnations of
+ *	 your application.
+ *	 For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and
+ *	 "SurfWriter Lite" are not.
+ *
+ *	 You do not need to implement this method if you are providing the
+ *	 application name elsewhere, meaning in an auto-discoverable plist file in
+ *	 your app bundle (XXX refer to more information on that) or in the result
+ *	 of -registrationDictionaryForGrowl.
+ *
+ *	@result The name of the application using Growl.
+ */
+- (NSString *) applicationNameForGrowl;
+
+/*!
+ *	@method applicationIconForGrowl
+ *	@abstract Return the <code>NSImage</code> to treat as the application icon.
+ *	@discussion The delegate may optionally return an <code>NSImage</code>
+ *	 object to use as the application icon. If this method is not implemented,
+ *	 {{{-applicationIconDataForGrowl}}} is tried. If that method is not
+ *	 implemented, the application's own icon is used. Neither method is
+ *	 generally needed.
+ *	@result The <code>NSImage</code> to treat as the application icon.
+ */
+- (NSImage *) applicationIconForGrowl;
+
+/*!
+ *	@method applicationIconDataForGrowl
+ *	@abstract Return the <code>NSData</code> to treat as the application icon.
+ *	@discussion The delegate may optionally return an <code>NSData</code>
+ *	 object to use as the application icon; if this is not implemented, the
+ *	 application's own icon is used.  This is not generally needed.
+ *	@result The <code>NSData</code> to treat as the application icon.
+ *	@deprecated In version 1.1, in favor of {{{-applicationIconForGrowl}}}.
+ */
+- (NSData *) applicationIconDataForGrowl;
+
+/*!
+ *	@method growlIsReady
+ *	@abstract Informs the delegate that Growl has launched.
+ *	@discussion Informs the delegate that Growl (specifically, the
+ *	 GrowlHelperApp) was launched successfully. The application can take actions
+ *   with the knowledge that Growl is installed and functional.
+ */
+- (void) growlIsReady;
+
+/*!
+ *	@method growlNotificationWasClicked:
+ *	@abstract Informs the delegate that a Growl notification was clicked.
+ *	@discussion Informs the delegate that a Growl notification was clicked.  It
+ *	 is only sent for notifications sent with a non-<code>nil</code>
+ *	 clickContext, so if you want to receive a message when a notification is
+ *	 clicked, clickContext must not be <code>nil</code> when calling
+ *	 <code>+[GrowlApplicationBridge notifyWithTitle: description:notificationName:iconData:priority:isSticky:clickContext:]</code>.
+ *	@param clickContext The clickContext passed when displaying the notification originally via +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:].
+ */
+- (void) growlNotificationWasClicked:(id)clickContext;
+
+/*!
+ *	@method growlNotificationTimedOut:
+ *	@abstract Informs the delegate that a Growl notification timed out.
+ *	@discussion Informs the delegate that a Growl notification timed out. It
+ *	 is only sent for notifications sent with a non-<code>nil</code>
+ *	 clickContext, so if you want to receive a message when a notification is
+ *	 clicked, clickContext must not be <code>nil</code> when calling
+ *	 <code>+[GrowlApplicationBridge notifyWithTitle: description:notificationName:iconData:priority:isSticky:clickContext:]</code>.
+ *	@param clickContext The clickContext passed when displaying the notification originally via +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:].
+ */
+- (void) growlNotificationTimedOut:(id)clickContext;
+
+ at end
+
+#pragma mark -
+/*!
+ *	@category NSObject(GrowlApplicationBridgeDelegate_Installation_InformalProtocol)
+ *	@abstract Methods which may be optionally implemented by the Growl delegate when used with Growl-WithInstaller.framework.
+ *	@discussion The methods in this informal protocol will only be called if
+ *	 implemented by the delegate.  They allow greater control of the information
+ *	 presented to the user when installing or upgrading Growl from within your
+ *	 application when using Growl-WithInstaller.framework.
+ */
+ at interface NSObject (GrowlApplicationBridgeDelegate_Installation_InformalProtocol)
+
+/*!
+ *	@method growlInstallationWindowTitle
+ *	@abstract Return the title of the installation window.
+ *	@discussion If not implemented, Growl will use a default, localized title.
+ *	@result An NSString object to use as the title.
+ */
+- (NSString *)growlInstallationWindowTitle;
+
+/*!
+ *	@method growlUpdateWindowTitle
+ *	@abstract Return the title of the upgrade window.
+ *	@discussion If not implemented, Growl will use a default, localized title.
+ *	@result An NSString object to use as the title.
+ */
+- (NSString *)growlUpdateWindowTitle;
+
+/*!
+ *	@method growlInstallationInformation
+ *	@abstract Return the information to display when installing.
+ *	@discussion This information may be as long or short as desired (the window
+ *	 will be sized to fit it).  It will be displayed to the user as an
+ *	 explanation of what Growl is and what it can do in your application.  It
+ *	 should probably note that no download is required to install.
+ *
+ *	 If this is not implemented, Growl will use a default, localized explanation.
+ *	@result An NSAttributedString object to display.
+ */
+- (NSAttributedString *)growlInstallationInformation;
+
+/*!
+ *	@method growlUpdateInformation
+ *	@abstract Return the information to display when upgrading.
+ *	@discussion This information may be as long or short as desired (the window
+ *	 will be sized to fit it).  It will be displayed to the user as an
+ *	 explanation that an updated version of Growl is included in your
+ *	 application and no download is required.
+ *
+ *	 If this is not implemented, Growl will use a default, localized explanation.
+ *	@result An NSAttributedString object to display.
+ */
+- (NSAttributedString *)growlUpdateInformation;
+
+ at end
+
+//private
+ at interface GrowlApplicationBridge (GrowlInstallationPrompt_private)
++ (void) _userChoseNotToInstallGrowl;
+ at end
+
+#endif /* __GrowlApplicationBridge_h__ */

Added: trunk/src/uimac14/Frameworks/Growl.framework/Headers/GrowlDefines.h
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Headers/GrowlDefines.h	                        (rev 0)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Headers/GrowlDefines.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,348 @@
+//
+//  GrowlDefines.h
+//
+
+#ifndef _GROWLDEFINES_H
+#define _GROWLDEFINES_H
+
+#ifdef __OBJC__
+#define XSTR(x) (@x)
+#define STRING_TYPE NSString *
+#else
+#define XSTR CFSTR
+#define STRING_TYPE CFStringRef
+#endif
+
+/*!	@header GrowlDefines.h
+ *	@abstract   Defines all the notification keys.
+ *	@discussion Defines all the keys used for registration with Growl and for
+ *	 Growl notifications.
+ *
+ *	 Most applications should use the functions or methods of Growl.framework
+ *	 instead of posting notifications such as those described here.
+ *	@updated 2004-01-25
+ */
+
+// UserInfo Keys for Registration
+#pragma mark UserInfo Keys for Registration
+
+/*!	@group Registration userInfo keys */
+/*	@abstract	Keys for the userInfo dictionary of a GROWL_APP_REGISTRATION distributed notification.
+ *	@discussion The values of these keys describe the application and the
+ *	 notifications it may post.
+ *
+ *	 Your application must register with Growl before it can post Growl
+ *	 notifications (and have them not be ignored). However, as of Growl 0.6,
+ *	 posting GROWL_APP_REGISTRATION notifications directly is no longer the
+ *	 preferred way to register your application. Your application should instead
+ *	 use Growl.framework's delegate system.
+ *	 See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for
+ *	 more information.
+ */
+
+/*!	@defined GROWL_APP_NAME
+ *	@abstract The name of your application.
+ *	@discussion The name of your application. This should remain stable between
+ *	 different versions and incarnations of your application.
+ *	 For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and
+ *	 "SurfWriter Lite" are not.
+ */
+#define GROWL_APP_NAME					XSTR("ApplicationName")
+/*!	@defined GROWL_APP_ID
+ *	@abstract The bundle identifier of your application.
+ *	@discussion The bundle identifier of your application. This key should
+ *   be unique for your application while there may be several applications
+ *   with the same GROWL_APP_NAME.
+ *   This key is optional.
+ */
+#define GROWL_APP_ID					XSTR("ApplicationId")
+/*!	@defined GROWL_APP_ICON
+ *	@abstract The image data for your application's icon.
+ *	@discussion Image data representing your application's icon. This may be
+ *	 superimposed on a notification icon as a badge, used as the notification
+ *	 icon when a notification-specific icon is not supplied, or ignored
+ *	 altogether, depending on the display. Must be in a format supported by
+ *	 NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_APP_ICON					XSTR("ApplicationIcon")
+/*!	@defined GROWL_NOTIFICATIONS_DEFAULT
+ *	@abstract The array of notifications to turn on by default.
+ *	@discussion These are the names of the notifications that should be enabled
+ *	 by default when your application registers for the first time. If your
+ *	 application reregisters, Growl will look here for any new notification
+ *	 names found in GROWL_NOTIFICATIONS_ALL, but ignore any others.
+ */
+#define GROWL_NOTIFICATIONS_DEFAULT		XSTR("DefaultNotifications")
+/*!	@defined GROWL_NOTIFICATIONS_ALL
+ *	@abstract The array of all notifications your application can send.
+ *	@discussion These are the names of all of the notifications that your
+ *	 application may post. See GROWL_NOTIFICATION_NAME for a discussion of good
+ *	 notification names.
+ */
+#define GROWL_NOTIFICATIONS_ALL			XSTR("AllNotifications")
+/*! @defined GROWL_NOTIFICATIONS_HUMAN_READABLE_DESCRIPTIONS
+ *  @abstract A dictionary of human-readable names for your notifications.
+ *  @discussion By default, the Growl UI will display notifications by the names given in GROWL_NOTIFICATIONS_ALL
+ *  which correspond to the GROWL_NOTIFICATION_NAME. This dictionary specifies the human-readable name to display.
+ *  The keys of the dictionary are GROWL_NOTIFICATION_NAME strings; the objects are the human-readable versions.
+ *  For any GROWL_NOTIFICATION_NAME not specific in this dictionary, the GROWL_NOTIFICATION_NAME will be displayed.
+ *
+ *  This key is optional.
+ */
+#define GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES		XSTR("HumanReadableNames")
+/*! @defined GROWL_NOTIFICATIONS_DESCRIPTIONS
+*  @abstract A dictionary of descriptions of _when_ each notification occurs
+*  @discussion This is an NSDictionary whose keys are GROWL_NOTIFICATION_NAME strings and whose objects are
+*  descriptions of _when_ each notification occurs, such as "You received a new mail message" or
+*  "A file finished downloading".
+*
+*  This key is optional.
+*/
+#define GROWL_NOTIFICATIONS_DESCRIPTIONS		XSTR("NotificationDescriptions")
+
+/*!	@defined	GROWL_TICKET_VERSION
+ *	@abstract	The version of your registration ticket.
+ *	@discussion	Include this key in a ticket plist file that you put in your
+ *	 application bundle for auto-discovery. The current ticket version is 1.
+ */
+#define GROWL_TICKET_VERSION			XSTR("TicketVersion")
+// UserInfo Keys for Notifications
+#pragma mark UserInfo Keys for Notifications
+
+/*!	@group Notification userInfo keys */
+/*	@abstract	Keys for the userInfo dictionary of a GROWL_NOTIFICATION distributed notification.
+ *	@discussion The values of these keys describe the content of a Growl
+ *	 notification.
+ *
+ *	 Not all of these keys are supported by all displays. Only the name, title,
+ *	 and description of a notification are universal. Most of the built-in
+ *	 displays do support all of these keys, and most other visual displays
+ *	 probably will also. But, as of 0.6, the Log, MailMe, and Speech displays
+ *	 support only textual data.
+ */
+
+/*!	@defined GROWL_NOTIFICATION_NAME
+ *	@abstract The name of the notification.
+ *	@discussion The name of the notification. Note that if you do not define
+ *  GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES when registering your ticket originally this name
+ *  will the one displayed within the Growl preference pane and should be human-readable.
+ */
+#define GROWL_NOTIFICATION_NAME			XSTR("NotificationName")
+/*!	@defined GROWL_NOTIFICATION_TITLE
+ *	@abstract The title to display in the notification.
+ *	@discussion The title of the notification. Should be very brief.
+ *	 The title usually says what happened, e.g. "Download complete".
+ */
+#define GROWL_NOTIFICATION_TITLE		XSTR("NotificationTitle")
+/*!	@defined GROWL_NOTIFICATION_DESCRIPTION
+ *	@abstract The description to display in the notification.
+ *	@discussion The description should be longer and more verbose than the title.
+ *	 The description usually tells the subject of the action,
+ *	 e.g. "Growl-0.6.dmg downloaded in 5.02 minutes".
+ */
+#define GROWL_NOTIFICATION_DESCRIPTION  	XSTR("NotificationDescription")
+/*!	@defined GROWL_NOTIFICATION_ICON
+ *	@discussion Image data for the notification icon. Must be in a format
+ *	 supported by NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_ICON			XSTR("NotificationIcon")
+/*!	@defined GROWL_NOTIFICATION_APP_ICON
+ *	@discussion Image data for the application icon, in case GROWL_APP_ICON does
+ *	 not apply for some reason. Must be in a format supported by NSImage, such
+ *	 as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_APP_ICON		XSTR("NotificationAppIcon")
+/*!	@defined GROWL_NOTIFICATION_PRIORITY
+ *	@discussion The priority of the notification as an integer number from
+ *	 -2 to +2 (+2 being highest).
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_PRIORITY		XSTR("NotificationPriority")
+/*!	@defined GROWL_NOTIFICATION_STICKY
+ *	@discussion A Boolean number controlling whether the notification is sticky.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_STICKY		XSTR("NotificationSticky")
+/*!	@defined GROWL_NOTIFICATION_CLICK_CONTEXT
+ *	@abstract Identifies which notification was clicked.
+ *	@discussion An identifier for the notification for clicking purposes.
+ *
+ *	 This will be passed back to the application when the notification is
+ *	 clicked. It must be plist-encodable (a data, dictionary, array, number, or
+ *	 string object), and it should be unique for each notification you post.
+ *	 A good click context would be a UUID string returned by NSProcessInfo or
+ *	 CFUUID.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_CLICK_CONTEXT			XSTR("NotificationClickContext")
+
+/*!	@defined GROWL_DISPLAY_PLUGIN
+ *	@discussion The name of a display plugin which should be used for this notification.
+ *    Optional. If this key is not set or the specified display plugin does not
+ *    exist, the display plugin stored in the application ticket is used. This key
+ *    allows applications to use different default display plugins for their
+ *    notifications. The user can still override those settings in the preference
+ *    pane.
+ */
+#define GROWL_DISPLAY_PLUGIN				XSTR("NotificationDisplayPlugin")
+
+/*!	@defined GROWL_NOTIFICATION_IDENTIFIER
+ *	@abstract An identifier for the notification for coalescing purposes.
+ *   Notifications with the same identifier fall into the same class; only
+ *   the last notification of a class is displayed on the screen. If a
+ *   notification of the same class is currently being displayed, it is
+ *   replaced by this notification.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_IDENTIFIER	XSTR("GrowlNotificationIdentifier")
+
+/*!	@defined GROWL_APP_PID
+ *	@abstract The process identifier of the process which sends this
+ *   notification. If this field is set, the application will only receive
+ *   clicked and timed out notifications which originate from this process.
+ *
+ *	 Optional.
+ */
+#define GROWL_APP_PID					XSTR("ApplicationPID")
+
+/*!	@defined GROWL_NOTIFICATION_PROGRESS
+*	@abstract If this key is set, it should contain a double value wrapped
+*     in a NSNumber which describes some sort of progress (from 0.0 to 100.0).
+*     If this is key is not set, no progress bar is shown.
+*
+*	 Optional. Not supported by all display plugins.
+*/
+#define GROWL_NOTIFICATION_PROGRESS		XSTR("NotificationProgress")
+
+// Notifications
+#pragma mark Notifications
+
+/*!	@group Notification names */
+/*	@abstract	Names of distributed notifications used by Growl.
+ *	@discussion	These are notifications used by applications (directly or
+ *	 indirectly) to interact with Growl, and by Growl for interaction between
+ *	 its components.
+ *
+ *	 Most of these should no longer be used in Growl 0.6 and later, in favor of
+ *	 Growl.framework's GrowlApplicationBridge APIs.
+ */
+
+/*!	@defined GROWL_APP_REGISTRATION
+ *	@abstract The distributed notification for registering your application.
+ *	@discussion This is the name of the distributed notification that can be
+ *	 used to register applications with Growl.
+ *
+ *	 The userInfo dictionary for this notification can contain these keys:
+ *	 <ul>
+ *	 	<li>GROWL_APP_NAME</li>
+ *	 	<li>GROWL_APP_ICON</li>
+ *	 	<li>GROWL_NOTIFICATIONS_ALL</li>
+ *	 	<li>GROWL_NOTIFICATIONS_DEFAULT</li>
+ *	 </ul>
+ *
+ *	 No longer recommended as of Growl 0.6. An alternate method of registering
+ *	 is to use Growl.framework's delegate system.
+ *	 See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for
+ *	 more information.
+ */
+#define GROWL_APP_REGISTRATION			XSTR("GrowlApplicationRegistrationNotification")
+/*!	@defined GROWL_APP_REGISTRATION_CONF
+ *	@abstract The distributed notification for confirming registration.
+ *	@discussion The name of the distributed notification sent to confirm the
+ *	 registration. Used by the Growl preference pane. Your application probably
+ *	 does not need to use this notification.
+ */
+#define GROWL_APP_REGISTRATION_CONF		XSTR("GrowlApplicationRegistrationConfirmationNotification")
+/*!	@defined GROWL_NOTIFICATION
+ *	@abstract The distributed notification for Growl notifications.
+ *	@discussion This is what it all comes down to. This is the name of the
+ *	 distributed notification that your application posts to actually send a
+ *	 Growl notification.
+ *
+ *	 The userInfo dictionary for this notification can contain these keys:
+ *	 <ul>
+ *	 	<li>GROWL_NOTIFICATION_NAME (required)</li>
+ *	 	<li>GROWL_NOTIFICATION_TITLE (required)</li>
+ *	 	<li>GROWL_NOTIFICATION_DESCRIPTION (required)</li>
+ *	 	<li>GROWL_NOTIFICATION_ICON</li>
+ *	 	<li>GROWL_NOTIFICATION_APP_ICON</li>
+ *	 	<li>GROWL_NOTIFICATION_PRIORITY</li>
+ *	 	<li>GROWL_NOTIFICATION_STICKY</li>
+ *	 	<li>GROWL_NOTIFICATION_CLICK_CONTEXT</li>
+ *	 	<li>GROWL_APP_NAME (required)</li>
+ *	 </ul>
+ *
+ *	 No longer recommended as of Growl 0.6. Three alternate methods of posting
+ *	 notifications are +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:],
+ *	 Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext, and
+ *	 Growl_PostNotification.
+ */
+#define GROWL_NOTIFICATION				XSTR("GrowlNotification")
+/*!	@defined GROWL_SHUTDOWN
+*	@abstract The distributed notification name that tells Growl to shutdown.
+*	@discussion The Growl preference pane posts this notification when the
+*	 "Stop Growl" button is clicked.
+*/
+#define GROWL_SHUTDOWN					XSTR("GrowlShutdown")
+/*!	@defined GROWL_PING
+ *	@abstract A distributed notification to check whether Growl is running.
+ *	@discussion This is used by the Growl preference pane. If it receives a
+ *	 GROWL_PONG, the preference pane takes this to mean that Growl is running.
+ */
+#define GROWL_PING						XSTR("Honey, Mind Taking Out The Trash")
+/*!	@defined GROWL_PONG
+ *	@abstract The distributed notification sent in reply to GROWL_PING.
+ *	@discussion GrowlHelperApp posts this in reply to GROWL_PING.
+ */
+#define GROWL_PONG						XSTR("What Do You Want From Me, Woman")
+/*!	@defined GROWL_IS_READY
+ *	@abstract The distributed notification sent when Growl starts up.
+ *	@discussion GrowlHelperApp posts this when it has begin listening on all of
+ *	 its sources for new notifications. GrowlApplicationBridge (in
+ *	 Growl.framework), upon receiving this notification, reregisters using the
+ *	 registration dictionary supplied by its delegate.
+ */
+#define GROWL_IS_READY					XSTR("Lend Me Some Sugar; I Am Your Neighbor!")
+/*!	@defined GROWL_NOTIFICATION_CLICKED
+ *	@abstract The distributed notification sent when a supported notification is clicked.
+ *	@discussion When a Growl notification with a click context is clicked on by
+ *	 the user, Growl posts this distributed notification.
+ *	 The GrowlApplicationBridge responds to this notification by calling a
+ *	 callback in its delegate.
+ */
+#define GROWL_NOTIFICATION_CLICKED		XSTR("GrowlClicked!")
+#define GROWL_NOTIFICATION_TIMED_OUT	XSTR("GrowlTimedOut!")
+
+/*!	@group Other symbols */
+/* Symbols which don't fit into any of the other categories. */
+
+/*!	@defined GROWL_KEY_CLICKED_CONTEXT
+ *	@abstract Used internally as the key for the clickedContext passed over DNC.
+ *	@discussion This key is used in GROWL_NOTIFICATION_CLICKED, and contains the
+ *	 click context that was supplied in the original notification.
+ */
+#define GROWL_KEY_CLICKED_CONTEXT		XSTR("ClickedContext")
+/*!	@defined GROWL_REG_DICT_EXTENSION
+ *	@abstract The filename extension for registration dictionaries.
+ *	@discussion The GrowlApplicationBridge in Growl.framework registers with
+ *	 Growl by creating a file with the extension of .(GROWL_REG_DICT_EXTENSION)
+ *	 and opening it in the GrowlHelperApp. This happens whether or not Growl is
+ *	 running; if it was stopped, it quits immediately without listening for
+ *	 notifications.
+ */
+#define GROWL_REG_DICT_EXTENSION		XSTR("growlRegDict")
+
+
+#define GROWL_POSITION_PREFERENCE_KEY			@"GrowlSelectedPosition"
+
+#endif //ndef _GROWLDEFINES_H

Added: trunk/src/uimac14/Frameworks/Growl.framework/Resources/Info.plist
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Resources/Info.plist	                        (rev 0)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Resources/Info.plist	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>Growl</string>
+	<key>CFBundleIdentifier</key>
+	<string>com.growl.growlframework</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundlePackageType</key>
+	<string>FMWK</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.2.1</string>
+	<key>CFBundleSignature</key>
+	<string>GRRR</string>
+	<key>CFBundleVersion</key>
+	<string>1.2.1</string>
+	<key>NSPrincipalClass</key>
+	<string>GrowlApplicationBridge</string>
+</dict>
+</plist>

Added: trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Growl
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Growl
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Growl	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Growl	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Growl
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/Growl.h
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/Growl.h	                        (rev 0)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/Growl.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,6 @@
+#include "GrowlDefines.h"
+
+#ifdef __OBJC__
+#	include "GrowlApplicationBridge.h"
+#endif
+#include "GrowlApplicationBridge-Carbon.h"

Added: trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h	                        (rev 0)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,780 @@
+//
+//  GrowlApplicationBridge-Carbon.h
+//  Growl
+//
+//  Created by Mac-arena the Bored Zo on Wed Jun 18 2004.
+//  Based on GrowlApplicationBridge.h by Evan Schoenberg.
+//  This source code is in the public domain. You may freely link it into any
+//    program.
+//
+
+#ifndef _GROWLAPPLICATIONBRIDGE_CARBON_H_
+#define _GROWLAPPLICATIONBRIDGE_CARBON_H_
+
+#include <sys/cdefs.h>
+#include <Carbon/Carbon.h>
+
+#ifndef GROWL_EXPORT
+#define GROWL_EXPORT __attribute__((visibility("default"))) DEPRECATED_ATTRIBUTE
+#endif
+
+/*!	@header GrowlApplicationBridge-Carbon.h
+ *	@abstract	Declares an API that Carbon applications can use to interact with Growl.
+ *	@discussion	GrowlApplicationBridge uses a delegate to provide information //XXX
+ *	 to Growl (such as your application's name and what notifications it may
+ *	 post) and to provide information to your application (such as that Growl
+ *	 is listening for notifications or that a notification has been clicked).
+ *
+ *	 You can set the Growldelegate with Growl_SetDelegate and find out the
+ *	 current delegate with Growl_GetDelegate. See struct Growl_Delegate for more
+ *	 information about the delegate.
+ */
+
+__BEGIN_DECLS
+
+/*!	@struct Growl_Delegate
+ *	@abstract Delegate to supply GrowlApplicationBridge with information and respond to events.
+ *	@discussion The Growl delegate provides your interface to
+ *	 GrowlApplicationBridge. When GrowlApplicationBridge needs information about
+ *	 your application, it looks for it in the delegate; when Growl or the user
+ *	 does something that you might be interested in, GrowlApplicationBridge
+ *	 looks for a callback in the delegate and calls it if present
+ *	 (meaning, if it is not <code>NULL</code>).
+ *	XXX on all of that
+ *  @field size The size of the delegate structure.
+ * 	@field applicationName The name of your application.
+ * 	@field registrationDictionary A dictionary describing your application and the notifications it can send out.
+ * 	@field applicationIconData Your application's icon.
+ * 	@field growlInstallationWindowTitle The title of the installation window.
+ * 	@field growlInstallationInformation Text to display in the installation window.
+ * 	@field growlUpdateWindowTitle The title of the update window.
+ * 	@field growlUpdateInformation Text to display in the update window.
+ * 	@field referenceCount A count of owners of the delegate.
+ * 	@field retain Called when GrowlApplicationBridge receives this delegate.
+ * 	@field release Called when GrowlApplicationBridge no longer needs this delegate.
+ * 	@field growlIsReady Called when GrowlHelperApp is listening for notifications.
+ * 	@field growlNotificationWasClicked Called when a Growl notification is clicked.
+ *  @field growlNotificationTimedOut Called when a Growl notification timed out.
+ */
+struct Growl_Delegate {
+	/*	@discussion This should be sizeof(struct Growl_Delegate).
+	 */
+	size_t size;
+
+	/*All of these attributes are optional.
+	 *Optional attributes can be NULL; required attributes that
+	 *	 are NULL cause setting the Growl delegate to fail.
+	 *XXX - move optional/required status into the discussion for each field
+	 */
+
+	/* This name is used both internally and in the Growl preferences.
+	 *
+	 *	 This should remain stable between different versions and incarnations of
+	 *	 your application.
+	 *	 For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and
+	 *	 "SurfWriter Lite" are not.
+	 *
+	 * This can be <code>NULL</code> if it is provided elsewhere, namely in an
+	 *	 auto-discoverable plist file in your app bundle
+	 *	 (XXX refer to more information on that) or in registrationDictionary.
+	 */
+	CFStringRef applicationName;
+
+	/*
+	 * Must contain at least these keys:
+	 *	GROWL_NOTIFICATIONS_ALL (CFArray):
+	 *		Contains the names of all notifications your application may post.
+	 *
+	 * Can also contain these keys:
+	 *	GROWL_NOTIFICATIONS_DEFAULT (CFArray):
+	 *		Names of notifications that should be enabled by default.
+	 *		If omitted, GROWL_NOTIFICATIONS_ALL will be used.
+	 *	GROWL_APP_NAME (CFString):
+	 *		Same as the applicationName member of this structure.
+	 *		If both are present, the applicationName member shall prevail.
+	 *		If this key is present, you may omit applicationName (set it to <code>NULL</code>).
+	 *	GROWL_APP_ICON (CFData):
+	 *		Same as the iconData member of this structure.
+	 *		If both are present, the iconData member shall prevail.
+	 *		If this key is present, you may omit iconData (set it to <code>NULL</code>).
+	 *
+	 * If you change the contents of this dictionary after setting the delegate,
+	 *	be sure to call Growl_Reregister.
+	 *
+	 * This can be <code>NULL</code> if you have an auto-discoverable plist file in your app
+	 *	 bundle. (XXX refer to more information on that)
+	 */
+	CFDictionaryRef registrationDictionary;
+
+	/* The data can be in any format supported by NSImage. As of
+	 *	 Mac OS X 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and
+	 *	 PICT formats.
+	 *
+	 *	 If this is not supplied, Growl will look up your application's icon by
+	 *	 its application name.
+	 */
+	CFDataRef applicationIconData;
+
+	/* Installer display attributes
+	 *
+	 * These four attributes are used by the Growl installer, if this framework
+	 *	supports it.
+	 * For any of these being <code>NULL</code>, a localised default will be
+	 *	supplied.
+	 */
+
+	/*	If this is <code>NULL</code>, Growl will use a default,
+	 *	 localized title.
+	 *
+	 *	 Only used if you're using Growl-WithInstaller.framework. Otherwise,
+	 *	 this member is ignored.
+	 */
+	CFStringRef growlInstallationWindowTitle;
+	/*	This information may be as long or short as desired (the
+	 *	 window will be sized to fit it).  If Growl is not installed, it will
+	 *	 be displayed to the user as an explanation of what Growl is and what
+	 *	 it can do in your application.
+	 *	 It should probably note that no download is required to install.
+	 *
+	 *	 If this is <code>NULL</code>, Growl will use a default, localized
+	 *	 explanation.
+	 *
+	 *	 Only used if you're using Growl-WithInstaller.framework. Otherwise,
+	 *	 this member is ignored.
+	 */
+	CFStringRef growlInstallationInformation;
+	/*	If this is <code>NULL</code>, Growl will use a default,
+	 *	 localized title.
+	 *
+	 *	 Only used if you're using Growl-WithInstaller.framework. Otherwise,
+	 *	 this member is ignored.
+	 */
+	CFStringRef growlUpdateWindowTitle;
+	/*	This information may be as long or short as desired (the
+	 *	 window will be sized to fit it).  If an older version of Growl is
+	 *	 installed, it will be displayed to the user as an explanation that an
+	 *	 updated version of Growl is included in your application and
+	 *	 no download is required.
+	 *
+	 *	 If this is <code>NULL</code>, Growl will use a default, localized
+	 *	 explanation.
+	 *
+	 *	 Only used if you're using Growl-WithInstaller.framework. Otherwise,
+	 *	 this member is ignored.
+	 */
+	CFStringRef growlUpdateInformation;
+
+	/*	This member is provided for use by your retain and release
+	 *	 callbacks (see below).
+	 *
+	 *	 GrowlApplicationBridge never directly uses this member. Instead, it
+	 *	 calls your retain callback (if non-<code>NULL</code>) and your release
+	 *	 callback (if non-<code>NULL</code>).
+	 */
+	unsigned referenceCount;
+
+	//Functions. Currently all of these are optional (any of them can be NULL).
+
+	/*	When you call Growl_SetDelegate(newDelegate), it will call
+	 *	 oldDelegate->release(oldDelegate), and then it will call
+	 *	 newDelegate->retain(newDelegate), and the return value from retain
+	 *	 is what will be set as the delegate.
+	 *	 (This means that this member works like CFRetain and -[NSObject retain].)
+	 *	 This member is optional (it can be <code>NULL</code>).
+	 *	 For a delegate allocated with malloc, this member would be
+	 *	 <code>NULL</code>.
+	 *	@result	A delegate to which GrowlApplicationBridge holds a reference.
+	 */
+	void *(*retain)(void *);
+	/*	When you call Growl_SetDelegate(newDelegate), it will call
+	 *	 oldDelegate->release(oldDelegate), and then it will call
+	 *	 newDelegate->retain(newDelegate), and the return value from retain
+	 *	 is what will be set as the delegate.
+	 *	 (This means that this member works like CFRelease and
+	 *	  -[NSObject release].)
+	 *	 This member is optional (it can be NULL).
+	 *	 For a delegate allocated with malloc, this member might be
+	 *	 <code>free</code>(3).
+	 */
+	void (*release)(void *);
+
+	/*	Informs the delegate that Growl (specifically, the GrowlHelperApp) was
+	 *	 launched successfully (or was already running). The application can
+	 *	 take actions with the knowledge that Growl is installed and functional.
+	 */
+	void (*growlIsReady)(void);
+
+	/*	Informs the delegate that a Growl notification was clicked. It is only
+	 *	 sent for notifications sent with a non-<code>NULL</code> clickContext,
+	 *	 so if you want to receive a message when a notification is clicked,
+	 *	 clickContext must not be <code>NULL</code> when calling
+	 *	 Growl_PostNotification or
+	 *	 Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext.
+	 */
+	void (*growlNotificationWasClicked)(CFPropertyListRef clickContext);
+
+	/*	Informs the delegate that a Growl notification timed out. It is only
+	 *	 sent for notifications sent with a non-<code>NULL</code> clickContext,
+	 *	 so if you want to receive a message when a notification is clicked,
+	 *	 clickContext must not be <code>NULL</code> when calling
+	 *	 Growl_PostNotification or
+	 *	 Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext.
+	 */
+	void (*growlNotificationTimedOut)(CFPropertyListRef clickContext);
+};
+
+/*!	@struct Growl_Notification
+ *	@abstract Structure describing a Growl notification.
+ *	@discussion XXX
+ * 	@field size The size of the notification structure.
+ * 	@field name Identifies the notification.
+ * 	@field title Short synopsis of the notification.
+ *  @field description Additional text.
+ * 	@field iconData An icon for the notification.
+ * 	@field priority An indicator of the notification's importance.
+ * 	@field reserved Bits reserved for future usage.
+ * 	@field isSticky Requests that a notification stay on-screen until dismissed explicitly.
+ * 	@field clickContext An identifier to be passed to your click callback when a notification is clicked.
+ * 	@field clickCallback A callback to call when the notification is clicked.
+ */
+struct Growl_Notification {
+	/*	This should be sizeof(struct Growl_Notification).
+	 */
+ 	size_t size;
+
+	/*	The notification name distinguishes one type of
+	 *	 notification from another. The name should be human-readable, as it
+	 *	 will be displayed in the Growl preference pane.
+	 *
+	 *	 The name is used in the GROWL_NOTIFICATIONS_ALL and
+	 *	 GROWL_NOTIFICATIONS_DEFAULT arrays in the registration dictionary, and
+	 *	 in this member of the Growl_Notification structure.
+	 */
+	CFStringRef name;
+
+	/*	A notification's title describes the notification briefly.
+	 *	 It should be easy to read quickly by the user.
+	 */
+	CFStringRef title;
+
+	/*	The description supplements the title with more
+	 *	 information. It is usually longer and sometimes involves a list of
+	 *	 subjects. For example, for a 'Download complete' notification, the
+	 *	 description might have one filename per line. GrowlMail in Growl 0.6
+	 *	 uses a description of '%d new mail(s)' (formatted with the number of
+	 *	 messages).
+	 */
+	CFStringRef description;
+
+	/*	The notification icon usually indicates either what
+	 *	 happened (it may have the same icon as e.g. a toolbar item that
+	 *	 started the process that led to the notification), or what it happened
+	 *	 to (e.g. a document icon).
+	 *
+	 *	 The icon data is optional, so it can be <code>NULL</code>. In that
+	 *	 case, the application icon is used alone. Not all displays support
+	 *	 icons.
+	 *
+	 *	 The data can be in any format supported by NSImage. As of Mac OS X
+	 *	 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and PICT form
+	 *	 ats.
+	 */
+	CFDataRef iconData;
+
+	/*	Priority is new in Growl 0.6, and is represented as a
+	 *	 signed integer from -2 to +2. 0 is Normal priority, -2 is Very Low
+	 *	 priority, and +2 is Very High priority.
+	 *
+	 *	 Not all displays support priority. If you do not wish to assign a
+	 *	 priority to your notification, assign 0.
+	 */
+	signed int priority;
+
+	/*	These bits are not used in Growl 0.6. Set them to 0.
+	 */
+	unsigned reserved: 31;
+
+	/*	When the sticky bit is clear, in most displays,
+	 *	 notifications disappear after a certain amount of time. Sticky
+	 *	 notifications, however, remain on-screen until the user dismisses them
+	 *	 explicitly, usually by clicking them.
+	 *
+	 *	 Sticky notifications were introduced in Growl 0.6. Most notifications
+	 *	 should not be sticky. Not all displays support sticky notifications,
+	 *	 and the user may choose in Growl's preference pane to force the
+	 *	 notification to be sticky or non-sticky, in which case the sticky bit
+	 *	 in the notification will be ignored.
+	 */
+	unsigned isSticky: 1;
+
+	/*	If this is not <code>NULL</code>, and your click callback
+	 *	 is not <code>NULL</code> either, this will be passed to the callback
+	 *	 when your notification is clicked by the user.
+	 *
+	 *	 Click feedback was introduced in Growl 0.6, and it is optional. Not
+	 *	 all displays support click feedback.
+	 */
+	CFPropertyListRef clickContext;
+
+	/*	If this is not <code>NULL</code>, it will be called instead
+	 *	 of the Growl delegate's click callback when clickContext is
+	 *	 non-<code>NULL</code> and the notification is clicked on by the user.
+	 *
+	 *	 Click feedback was introduced in Growl 0.6, and it is optional. Not
+	 *	 all displays support click feedback.
+	 *
+	 *	 The per-notification click callback is not yet supported as of Growl
+	 *	 0.7.
+	 */
+	void (*clickCallback)(CFPropertyListRef clickContext);
+
+	CFStringRef identifier;
+};
+
+#pragma mark -
+#pragma mark Easy initialisers
+
+/*!	@defined	InitGrowlDelegate
+ *	@abstract	Callable macro. Initializes a Growl delegate structure to defaults.
+ *	@discussion	Call with a pointer to a struct Growl_Delegate. All of the
+ *	 members of the structure will be set to 0 or <code>NULL</code>, except for
+ *	 size (which will be set to <code>sizeof(struct Growl_Delegate)</code>) and
+ *	 referenceCount (which will be set to 1).
+ */
+#define InitGrowlDelegate(delegate) \
+	do { \
+		if (delegate) { \
+			(delegate)->size = sizeof(struct Growl_Delegate); \
+			(delegate)->applicationName = NULL; \
+			(delegate)->registrationDictionary = NULL; \
+			(delegate)->applicationIconData = NULL; \
+			(delegate)->growlInstallationWindowTitle = NULL; \
+			(delegate)->growlInstallationInformation = NULL; \
+			(delegate)->growlUpdateWindowTitle = NULL; \
+			(delegate)->growlUpdateInformation = NULL; \
+			(delegate)->referenceCount = 1U; \
+			(delegate)->retain = NULL; \
+			(delegate)->release = NULL; \
+			(delegate)->growlIsReady = NULL; \
+			(delegate)->growlNotificationWasClicked = NULL; \
+			(delegate)->growlNotificationTimedOut = NULL; \
+		} \
+	} while(0)
+
+/*!	@defined	InitGrowlNotification
+ *	@abstract	Callable macro. Initializes a Growl notification structure to defaults.
+ *	@discussion	Call with a pointer to a struct Growl_Notification. All of
+ *	 the members of the structure will be set to 0 or <code>NULL</code>, except
+ *	 for size (which will be set to
+ *	<code>sizeof(struct Growl_Notification)</code>).
+ */
+#define InitGrowlNotification(notification) \
+	do { \
+		if (notification) { \
+			(notification)->size = sizeof(struct Growl_Notification); \
+			(notification)->name = NULL; \
+			(notification)->title = NULL; \
+			(notification)->description = NULL; \
+			(notification)->iconData = NULL; \
+			(notification)->priority = 0; \
+			(notification)->reserved = 0U; \
+			(notification)->isSticky = false; \
+			(notification)->clickContext = NULL; \
+			(notification)->clickCallback = NULL; \
+			(notification)->identifier = NULL; \
+		} \
+	} while(0)
+
+#pragma mark -
+#pragma mark Public API
+
+//	@functiongroup	Managing the Growl delegate
+
+/*!	@function	Growl_SetDelegate
+ *	@abstract	Replaces the current Growl delegate with a new one, or removes
+ *	 the Growl delegate.
+ *	@param	newDelegate
+ *	@result	Returns false and does nothing else if a pointer that was passed in
+ *	 is unsatisfactory (because it is non-<code>NULL</code>, but at least one
+ *	 required member of it is <code>NULL</code>). Otherwise, sets or unsets the
+ *	 delegate and returns true.
+ *	@discussion	When <code>newDelegate</code> is non-<code>NULL</code>, sets
+ *	 the delegate to <code>newDelegate</code>. When it is <code>NULL</code>,
+ *	 the current delegate will be unset, and no delegate will be in place.
+ *
+ *	 It is legal for <code>newDelegate</code> to be the current delegate;
+ *	 nothing will happen, and Growl_SetDelegate will return true. It is also
+ *	 legal for it to be <code>NULL</code>, as described above; again, it will
+ *	 return true.
+ *
+ *	 If there was a delegate in place before the call, Growl_SetDelegate will
+ *	 call the old delegate's release member if it was non-<code>NULL</code>. If
+ *	 <code>newDelegate</code> is non-<code>NULL</code>, Growl_SetDelegate will
+ *	 call <code>newDelegate->retain</code>, and set the delegate to its return
+ *	 value.
+ *
+ *	 If you are using Growl-WithInstaller.framework, and an older version of
+ *	 Growl is installed on the user's system, the user will automatically be
+ *	 prompted to update.
+ *
+ *	 GrowlApplicationBridge currently does not copy this structure, nor does it
+ *	 retain any of the CF objects in the structure (it regards the structure as
+ *	 a container that retains the objects when they are added and releases them
+ *	 when they are removed or the structure is destroyed). Also,
+ *	 GrowlApplicationBridge currently does not modify any member of the
+ *	 structure, except possibly the referenceCount by calling the retain and
+ *	 release members.
+ */
+GROWL_EXPORT Boolean Growl_SetDelegate(struct Growl_Delegate *newDelegate);
+
+/*!	@function	Growl_GetDelegate
+ *	@abstract	Returns the current Growl delegate, if any.
+ *	@result	The current Growl delegate.
+ *	@discussion	Returns the last pointer passed into Growl_SetDelegate, or
+ *	 <code>NULL</code> if no such call has been made.
+ *
+ *	 This function follows standard Core Foundation reference-counting rules.
+ *	 Because it is a Get function, not a Copy function, it will not retain the
+ *	 delegate on your behalf. You are responsible for retaining and releasing
+ *	 the delegate as needed.
+ */
+GROWL_EXPORT struct Growl_Delegate *Growl_GetDelegate(void);
+
+#pragma mark -
+
+//	@functiongroup	Posting Growl notifications
+
+/*!	@function	Growl_PostNotification
+ *	@abstract	Posts a Growl notification.
+ *	@param	notification	The notification to post.
+ *	@discussion	This is the preferred means for sending a Growl notification.
+ *	 The notification name and at least one of the title and description are
+ *	 required (all three are preferred). All other parameters may be
+ *	 <code>NULL</code> (or 0 or false as appropriate) to accept default values.
+ *
+ *	 If using the Growl-WithInstaller framework, if Growl is not installed the
+ *	 user will be prompted to install Growl.
+ *	 If the user cancels, this function will have no effect until the next
+ *	 application session, at which time when it is called the user will be
+ *	 prompted again. The user is also given the option to not be prompted again.
+ *	 If the user does choose to install Growl, the requested notification will
+ *	 be displayed once Growl is installed and running.
+ */
+GROWL_EXPORT void Growl_PostNotification(const struct Growl_Notification *notification);
+
+/*!	@function Growl_PostNotificationWithDictionary
+*	@abstract	Notifies using a userInfo dictionary suitable for passing to
+*	 CFDistributedNotificationCenter.
+*	@param	userInfo	The dictionary to notify with.
+*	@discussion	Before Growl 0.6, your application would have posted
+*	 notifications using CFDistributedNotificationCenter by creating a userInfo
+*	 dictionary with the notification data. This had the advantage of allowing
+*	 you to add other data to the dictionary for programs besides Growl that
+*	 might be listening.
+*
+*	 This function allows you to use such dictionaries without being restricted
+*	 to using CFDistributedNotificationCenter. The keys for this dictionary
+ *	 can be found in GrowlDefines.h.
+*/
+GROWL_EXPORT void Growl_PostNotificationWithDictionary(CFDictionaryRef userInfo);
+
+/*!	@function	Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext
+ *	@abstract	Posts a Growl notification using parameter values.
+ *	@param	title	The title of the notification.
+ *	@param	description	The description of the notification.
+ *	@param	notificationName	The name of the notification as listed in the
+ *	 registration dictionary.
+ *	@param	iconData	Data representing a notification icon. Can be <code>NULL</code>.
+ *	@param	priority	The priority of the notification (-2 to +2, with -2
+ *	 being Very Low and +2 being Very High).
+ *	@param	isSticky	If true, requests that this notification wait for a
+ *	 response from the user.
+ *	@param	clickContext	An object to pass to the clickCallback, if any. Can
+ *	 be <code>NULL</code>, in which case the clickCallback is not called.
+ *	@discussion	Creates a temporary Growl_Notification, fills it out with the
+ *	 supplied information, and calls Growl_PostNotification on it.
+ *	 See struct Growl_Notification and Growl_PostNotification for more
+ *	 information.
+ *
+ *	 The icon data can be in any format supported by NSImage. As of Mac OS X
+ *	 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and PICT formats.
+ */
+GROWL_EXPORT void Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext(
+ /*inhale*/
+	CFStringRef title,
+	CFStringRef description,
+	CFStringRef notificationName,
+	CFDataRef iconData,
+	signed int priority,
+	Boolean isSticky,
+	CFPropertyListRef clickContext);
+
+#pragma mark -
+
+//	@functiongroup	Registering
+
+/*!	@function Growl_RegisterWithDictionary
+ *	@abstract	Register your application with Growl without setting a delegate.
+ *	@discussion	When you call this function with a dictionary,
+ *	 GrowlApplicationBridge registers your application using that dictionary.
+ *	 If you pass <code>NULL</code>, GrowlApplicationBridge will ask the delegate
+ *	 (if there is one) for a dictionary, and if that doesn't work, it will look
+ *	 in your application's bundle for an auto-discoverable plist.
+ *	 (XXX refer to more information on that)
+ *
+ *	 If you pass a dictionary to this function, it must include the
+ *	 <code>GROWL_APP_NAME</code> key, unless a delegate is set.
+ *
+ *	 This function is mainly an alternative to the delegate system introduced
+ *	 with Growl 0.6. Without a delegate, you cannot receive callbacks such as
+ *	 <code>growlIsReady</code> (since they are sent to the delegate). You can,
+ *	 however, set a delegate after registering without one.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ *	@result <code>false</code> if registration failed (e.g. if Growl isn't installed).
+ */
+GROWL_EXPORT Boolean Growl_RegisterWithDictionary(CFDictionaryRef regDict);
+
+/*!	@function	Growl_Reregister
+ *	@abstract	Updates your registration with Growl.
+ *	@discussion	If your application changes the contents of the
+ *	 GROWL_NOTIFICATIONS_ALL key in the registrationDictionary member of the
+ *	 Growl delegate, or if it changes the value of that member, or if it
+ *	 changes the contents of its auto-discoverable plist, call this function
+ *	 to have Growl update its registration information for your application.
+ *
+ *	 Otherwise, this function does not normally need to be called. If you're
+ *	 using a delegate, your application will be registered when you set the
+ *	 delegate if both the delegate and its registrationDictionary member are
+ *	 non-<code>NULL</code>.
+ *
+ *	 This function is now implemented using
+ *	 <code>Growl_RegisterWithDictionary</code>.
+ */
+GROWL_EXPORT void Growl_Reregister(void);
+
+#pragma mark -
+
+/*!	@function	Growl_SetWillRegisterWhenGrowlIsReady
+ *	@abstract	Tells GrowlApplicationBridge to register with Growl when Growl
+ *	 launches (or not).
+ *	@discussion	When Growl has started listening for notifications, it posts a
+ *	 <code>GROWL_IS_READY</code> notification on the Distributed Notification
+ *	 Center. GrowlApplicationBridge listens for this notification, using it to
+ *	 perform various tasks (such as calling your delegate's
+ *	 <code>growlIsReady</code> callback, if it has one). If this function is
+ *	 called with <code>true</code>, one of those tasks will be to reregister
+ *	 with Growl (in the manner of <code>Growl_Reregister</code>).
+ *
+ *	 This attribute is automatically set back to <code>false</code>
+ *	 (the default) after every <code>GROWL_IS_READY</code> notification.
+ *	@param	flag	<code>true</code> if you want GrowlApplicationBridge to register with
+ *	 Growl when next it is ready; <code>false</code> if not.
+ */
+GROWL_EXPORT void Growl_SetWillRegisterWhenGrowlIsReady(Boolean flag);
+/*!	@function	Growl_WillRegisterWhenGrowlIsReady
+ *	@abstract	Reports whether GrowlApplicationBridge will register with Growl
+ *	 when Growl next launches.
+ *	@result	<code>true</code> if GrowlApplicationBridge will register with
+ *	 Growl when next it posts GROWL_IS_READY; <code>false</code> if not.
+ */
+GROWL_EXPORT Boolean Growl_WillRegisterWhenGrowlIsReady(void);
+
+#pragma mark -
+
+//	@functiongroup	Obtaining registration dictionaries
+
+/*!	@function	Growl_CopyRegistrationDictionaryFromDelegate
+ *	@abstract	Asks the delegate for a registration dictionary.
+ *	@discussion	If no delegate is set, or if the delegate's
+ *	 <code>registrationDictionary</code> member is <code>NULL</code>, this
+ *	 function returns <code>NULL</code>.
+ *
+ *	 This function does not attempt to clean up the dictionary in any way - for
+ *	 example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
+ *	 will be missing it too. Use
+ *	 <code>Growl_CreateRegistrationDictionaryByFillingInDictionary</code> or
+ *	 <code>Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys</code>
+ *	 to try to fill in missing keys.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ *	@result A registration dictionary.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CopyRegistrationDictionaryFromDelegate(void);
+
+/*!	@function	Growl_CopyRegistrationDictionaryFromBundle
+ *	@abstract	Looks in a bundle for a registration dictionary.
+ *	@discussion	This function looks in a bundle for an auto-discoverable
+ *	 registration dictionary file using <code>CFBundleCopyResourceURL</code>.
+ *	 If it finds one, it loads the file using <code>CFPropertyList</code> and
+ *	 returns the result.
+ *
+ *	 If you pass <code>NULL</code> as the bundle, the main bundle is examined.
+ *
+ *	 This function does not attempt to clean up the dictionary in any way - for
+ *	 example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
+ *	 will be missing it too. Use
+ *	 <code>Growl_CreateRegistrationDictionaryByFillingInDictionary:</code> or
+ *	 <code>Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys</code>
+ *	 to try to fill in missing keys.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ *	@result A registration dictionary.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CopyRegistrationDictionaryFromBundle(CFBundleRef bundle);
+
+/*!	@function	Growl_CreateBestRegistrationDictionary
+ *	@abstract	Obtains a registration dictionary, filled out to the best of
+ *	 GrowlApplicationBridge's knowledge.
+ *	@discussion	This function creates a registration dictionary as best
+ *	 GrowlApplicationBridge knows how.
+ *
+ *	 First, GrowlApplicationBridge examines the Growl delegate (if there is
+ *	 one) and gets the registration dictionary from that. If no such dictionary
+ *	 was obtained, GrowlApplicationBridge looks in your application's main
+ *	 bundle for an auto-discoverable registration dictionary file. If that
+ *	 doesn't exist either, this function returns <code>NULL</code>.
+ *
+ *	 Second, GrowlApplicationBridge calls
+ *	 <code>Growl_CreateRegistrationDictionaryByFillingInDictionary</code> with
+ *	 whatever dictionary was obtained. The result of that function is the
+ *	 result of this function.
+ *
+ *	 GrowlApplicationBridge uses this function when you call
+ *	 <code>Growl_SetDelegate</code>, or when you call
+ *	 <code>Growl_RegisterWithDictionary</code> with <code>NULL</code>.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ *	@result	A registration dictionary.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CreateBestRegistrationDictionary(void);
+
+#pragma mark -
+
+//	@functiongroup	Filling in registration dictionaries
+
+/*!	@function	Growl_CreateRegistrationDictionaryByFillingInDictionary
+ *	@abstract	Tries to fill in missing keys in a registration dictionary.
+ *	@param	regDict	The dictionary to fill in.
+ *	@result	The dictionary with the keys filled in.
+ *	@discussion	This function examines the passed-in dictionary for missing keys,
+ *	 and tries to work out correct values for them. As of 0.7, it uses:
+ *
+ *	 Key							             Value
+ *	 ---							             -----
+ *	 <code>GROWL_APP_NAME</code>                 <code>CFBundleExecutableName</code>
+ *	 <code>GROWL_APP_ICON</code>                 The icon of the application.
+ *	 <code>GROWL_APP_LOCATION</code>             The location of the application.
+ *	 <code>GROWL_NOTIFICATIONS_DEFAULT</code>    <code>GROWL_NOTIFICATIONS_ALL</code>
+ *
+ *	 Keys are only filled in if missing; if a key is present in the dictionary,
+ *	 its value will not be changed.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CreateRegistrationDictionaryByFillingInDictionary(CFDictionaryRef regDict);
+/*!	@function	Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys
+ *	@abstract	Tries to fill in missing keys in a registration dictionary.
+ *	@param	regDict	The dictionary to fill in.
+ *	@param	keys	The keys to fill in. If <code>NULL</code>, any missing keys are filled in.
+ *	@result	The dictionary with the keys filled in.
+ *	@discussion	This function examines the passed-in dictionary for missing keys,
+ *	 and tries to work out correct values for them. As of 0.7, it uses:
+ *
+ *	 Key							             Value
+ *	 ---							             -----
+ *	 <code>GROWL_APP_NAME</code>                 <code>CFBundleExecutableName</code>
+ *	 <code>GROWL_APP_ICON</code>                 The icon of the application.
+ *	 <code>GROWL_APP_LOCATION</code>             The location of the application.
+ *	 <code>GROWL_NOTIFICATIONS_DEFAULT</code>    <code>GROWL_NOTIFICATIONS_ALL</code>
+ *
+ *	 Only those keys that are listed in <code>keys</code> will be filled in.
+ *	 Other missing keys are ignored. Also, keys are only filled in if missing;
+ *	 if a key is present in the dictionary, its value will not be changed.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys(CFDictionaryRef regDict, CFSetRef keys);
+
+/*!	@brief	Tries to fill in missing keys in a notification dictionary.
+ *	@param	notifDict	The dictionary to fill in.
+ *	@return	The dictionary with the keys filled in. This will be a separate instance from \a notifDict.
+ *	@discussion	This function examines the \a notifDict for missing keys, and 
+ *	 tries to get them from the last known registration dictionary. As of 1.1, 
+ *	 the keys that it will look for are:
+ *
+ *	 \li <code>GROWL_APP_NAME</code>
+ *	 \li <code>GROWL_APP_ICON</code>
+ *
+ *	@since Growl.framework 1.1
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CreateNotificationDictionaryByFillingInDictionary(CFDictionaryRef notifDict);
+
+#pragma mark -
+
+//	@functiongroup	Querying Growl's status
+
+/*!	@function	Growl_IsInstalled
+ *	@abstract	Determines whether the Growl prefpane and its helper app are
+ *	 installed.
+ *	@result	Returns true if Growl is installed, false otherwise.
+ */
+GROWL_EXPORT Boolean Growl_IsInstalled(void);
+
+/*!	@function	Growl_IsRunning
+ *	@abstract	Cycles through the process list to find whether GrowlHelperApp
+ *	 is running.
+ *	@result	Returns true if Growl is running, false otherwise.
+ */
+GROWL_EXPORT Boolean Growl_IsRunning(void);
+
+#pragma mark -
+
+//	@functiongroup	Launching Growl
+
+/*!	@typedef	GrowlLaunchCallback
+ *	@abstract	Callback to notify you that Growl is running.
+ *	@param	context	The context pointer passed to Growl_LaunchIfInstalled.
+ *	@discussion	Growl_LaunchIfInstalled calls this callback function if Growl
+ *	 was already running or if it launched Growl successfully.
+ */
+typedef void (*GrowlLaunchCallback)(void *context);
+
+/*!	@function	Growl_LaunchIfInstalled
+ *	@abstract	Launches GrowlHelperApp if it is not already running.
+ *	@param	callback	A callback function which will be called if Growl was successfully
+ *	 launched or was already running. Can be <code>NULL</code>.
+ *	@param	context	The context pointer to pass to the callback. Can be <code>NULL</code>.
+ *	@result	Returns true if Growl was successfully launched or was already
+ *	 running; returns false and does not call the callback otherwise.
+ *	@discussion	Returns true and calls the callback (if the callback is not
+ *	 <code>NULL</code>) if the Growl helper app began launching or was already
+ *	 running. Returns false and performs no other action if Growl could not be
+ *	 launched (e.g. because the Growl preference pane is not properly installed).
+ *
+ *	 If <code>Growl_CreateBestRegistrationDictionary</code> returns
+ *	 non-<code>NULL</code>, this function will register with Growl atomically.
+ *
+ *	 The callback should take a single argument; this is to allow applications
+ *	 to have context-relevant information passed back. It is perfectly
+ *	 acceptable for context to be <code>NULL</code>. The callback itself can be
+ *	 <code>NULL</code> if you don't want one.
+ */
+GROWL_EXPORT Boolean Growl_LaunchIfInstalled(GrowlLaunchCallback callback, void *context);
+
+#pragma mark -
+#pragma mark Constants
+
+/*!	@defined	GROWL_PREFPANE_BUNDLE_IDENTIFIER
+ *	@abstract	The CFBundleIdentifier of the Growl preference pane bundle.
+ *	@discussion	GrowlApplicationBridge uses this to determine whether Growl is
+ *	 currently installed, by searching for the Growl preference pane. Your
+ *	 application probably does not need to use this macro itself.
+ */
+#ifndef GROWL_PREFPANE_BUNDLE_IDENTIFIER
+#define GROWL_PREFPANE_BUNDLE_IDENTIFIER	CFSTR("com.growl.prefpanel")
+#endif
+
+__END_DECLS
+
+#endif /* _GROWLAPPLICATIONBRIDGE_CARBON_H_ */

Added: trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h	                        (rev 0)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,575 @@
+//
+//  GrowlApplicationBridge.h
+//  Growl
+//
+//  Created by Evan Schoenberg on Wed Jun 16 2004.
+//  Copyright 2004-2006 The Growl Project. All rights reserved.
+//
+
+/*!
+ *	@header		GrowlApplicationBridge.h
+ *	@abstract   Defines the GrowlApplicationBridge class.
+ *	@discussion This header defines the GrowlApplicationBridge class as well as
+ *	 the GROWL_PREFPANE_BUNDLE_IDENTIFIER constant.
+ */
+
+#ifndef __GrowlApplicationBridge_h__
+#define __GrowlApplicationBridge_h__
+
+#import <Foundation/Foundation.h>
+#import <AppKit/AppKit.h>
+#import "GrowlDefines.h"
+
+//Forward declarations
+ at protocol GrowlApplicationBridgeDelegate;
+
+//Internal notification when the user chooses not to install (to avoid continuing to cache notifications awaiting installation)
+#define GROWL_USER_CHOSE_NOT_TO_INSTALL_NOTIFICATION @"User chose not to install"
+
+//------------------------------------------------------------------------------
+#pragma mark -
+
+/*!
+ *	@class      GrowlApplicationBridge
+ *	@abstract   A class used to interface with Growl.
+ *	@discussion This class provides a means to interface with Growl.
+ *
+ *	 Currently it provides a way to detect if Growl is installed and launch the
+ *	 GrowlHelperApp if it's not already running.
+ */
+ at interface GrowlApplicationBridge : NSObject {
+
+}
+
+/*!
+ *	@method isGrowlInstalled
+ *	@abstract Detects whether Growl is installed.
+ *	@discussion Determines if the Growl prefpane and its helper app are installed.
+ *	@result Returns YES if Growl is installed, NO otherwise.
+ */
++ (BOOL) isGrowlInstalled;
+
+/*!
+ *	@method isGrowlRunning
+ *	@abstract Detects whether GrowlHelperApp is currently running.
+ *	@discussion Cycles through the process list to find whether GrowlHelperApp is running and returns its findings.
+ *	@result Returns YES if GrowlHelperApp is running, NO otherwise.
+ */
++ (BOOL) isGrowlRunning;
+
+#pragma mark -
+
+/*!
+ *	@method setGrowlDelegate:
+ *	@abstract Set the object which will be responsible for providing and receiving Growl information.
+ *	@discussion This must be called before using GrowlApplicationBridge.
+ *
+ *	 The methods in the GrowlApplicationBridgeDelegate protocol are required
+ *	 and return the basic information needed to register with Growl.
+ *
+ *	 The methods in the GrowlApplicationBridgeDelegate_InformalProtocol
+ *	 informal protocol are individually optional.  They provide a greater
+ *	 degree of interaction between the application and growl such as informing
+ *	 the application when one of its Growl notifications is clicked by the user.
+ *
+ *	 The methods in the GrowlApplicationBridgeDelegate_Installation_InformalProtocol
+ *	 informal protocol are individually optional and are only applicable when
+ *	 using the Growl-WithInstaller.framework which allows for automated Growl
+ *	 installation.
+ *
+ *	 When this method is called, data will be collected from inDelegate, Growl
+ *	 will be launched if it is not already running, and the application will be
+ *	 registered with Growl.
+ *
+ *	 If using the Growl-WithInstaller framework, if Growl is already installed
+ *	 but this copy of the framework has an updated version of Growl, the user
+ *	 will be prompted to update automatically.
+ *
+ *	@param inDelegate The delegate for the GrowlApplicationBridge. It must conform to the GrowlApplicationBridgeDelegate protocol.
+ */
++ (void) setGrowlDelegate:(NSObject<GrowlApplicationBridgeDelegate> *)inDelegate;
+
+/*!
+ *	@method growlDelegate
+ *	@abstract Return the object responsible for providing and receiving Growl information.
+ *	@discussion See setGrowlDelegate: for details.
+ *	@result The Growl delegate.
+ */
++ (NSObject<GrowlApplicationBridgeDelegate> *) growlDelegate;
+
+#pragma mark -
+
+/*!
+ *	@method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:
+ *	@abstract Send a Growl notification.
+ *	@discussion This is the preferred means for sending a Growl notification.
+ *	 The notification name and at least one of the title and description are
+ *	 required (all three are preferred).  All other parameters may be
+ *	 <code>nil</code> (or 0 or NO as appropriate) to accept default values.
+ *
+ *	 If using the Growl-WithInstaller framework, if Growl is not installed the
+ *	 user will be prompted to install Growl. If the user cancels, this method
+ *	 will have no effect until the next application session, at which time when
+ *	 it is called the user will be prompted again. The user is also given the
+ *	 option to not be prompted again.  If the user does choose to install Growl,
+ *	 the requested notification will be displayed once Growl is installed and
+ *	 running.
+ *
+ *	@param title		The title of the notification displayed to the user.
+ *	@param description	The full description of the notification displayed to the user.
+ *	@param notifName	The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane.
+ *	@param iconData		<code>NSData</code> object to show with the notification as its icon. If <code>nil</code>, the application's icon will be used instead.
+ *	@param priority		The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority.
+ *	@param isSticky		If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications.
+ *	@param clickContext	A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of <code>NSString</code>, <code>NSArray</code>, <code>NSNumber</code>, <code>NSDictionary</code>, and <code>NSData</code> types).
+ */
++ (void) notifyWithTitle:(NSString *)title
+			 description:(NSString *)description
+		notificationName:(NSString *)notifName
+				iconData:(NSData *)iconData
+				priority:(signed int)priority
+				isSticky:(BOOL)isSticky
+			clickContext:(id)clickContext;
+
+/*!
+ *	@method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:identifier:
+ *	@abstract Send a Growl notification.
+ *	@discussion This is the preferred means for sending a Growl notification.
+ *	 The notification name and at least one of the title and description are
+ *	 required (all three are preferred).  All other parameters may be
+ *	 <code>nil</code> (or 0 or NO as appropriate) to accept default values.
+ *
+ *	 If using the Growl-WithInstaller framework, if Growl is not installed the
+ *	 user will be prompted to install Growl. If the user cancels, this method
+ *	 will have no effect until the next application session, at which time when
+ *	 it is called the user will be prompted again. The user is also given the
+ *	 option to not be prompted again.  If the user does choose to install Growl,
+ *	 the requested notification will be displayed once Growl is installed and
+ *	 running.
+ *
+ *	@param title		The title of the notification displayed to the user.
+ *	@param description	The full description of the notification displayed to the user.
+ *	@param notifName	The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane.
+ *	@param iconData		<code>NSData</code> object to show with the notification as its icon. If <code>nil</code>, the application's icon will be used instead.
+ *	@param priority		The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority.
+ *	@param isSticky		If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications.
+ *	@param clickContext	A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of <code>NSString</code>, <code>NSArray</code>, <code>NSNumber</code>, <code>NSDictionary</code>, and <code>NSData</code> types).
+ *	@param identifier	An identifier for this notification. Notifications with equal identifiers are coalesced.
+ */
++ (void) notifyWithTitle:(NSString *)title
+			 description:(NSString *)description
+		notificationName:(NSString *)notifName
+				iconData:(NSData *)iconData
+				priority:(signed int)priority
+				isSticky:(BOOL)isSticky
+			clickContext:(id)clickContext
+			  identifier:(NSString *)identifier;
+
+/*!	@method	notifyWithDictionary:
+ *	@abstract	Notifies using a userInfo dictionary suitable for passing to
+ *	 <code>NSDistributedNotificationCenter</code>.
+ *	@param	userInfo	The dictionary to notify with.
+ *	@discussion	Before Growl 0.6, your application would have posted
+ *	 notifications using <code>NSDistributedNotificationCenter</code> by
+ *	 creating a userInfo dictionary with the notification data. This had the
+ *	 advantage of allowing you to add other data to the dictionary for programs
+ *	 besides Growl that might be listening.
+ *
+ *	 This method allows you to use such dictionaries without being restricted
+ *	 to using <code>NSDistributedNotificationCenter</code>. The keys for this dictionary
+ *	 can be found in GrowlDefines.h.
+ */
++ (void) notifyWithDictionary:(NSDictionary *)userInfo;
+
+#pragma mark -
+
+/*!	@method	registerWithDictionary:
+ *	@abstract	Register your application with Growl without setting a delegate.
+ *	@discussion	When you call this method with a dictionary,
+ *	 GrowlApplicationBridge registers your application using that dictionary.
+ *	 If you pass <code>nil</code>, GrowlApplicationBridge will ask the delegate
+ *	 (if there is one) for a dictionary, and if that doesn't work, it will look
+ *	 in your application's bundle for an auto-discoverable plist.
+ *	 (XXX refer to more information on that)
+ *
+ *	 If you pass a dictionary to this method, it must include the
+ *	 <code>GROWL_APP_NAME</code> key, unless a delegate is set.
+ *
+ *	 This method is mainly an alternative to the delegate system introduced
+ *	 with Growl 0.6. Without a delegate, you cannot receive callbacks such as
+ *	 <code>-growlIsReady</code> (since they are sent to the delegate). You can,
+ *	 however, set a delegate after registering without one.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ */
++ (BOOL) registerWithDictionary:(NSDictionary *)regDict;
+
+/*!	@method	reregisterGrowlNotifications
+ *	@abstract	Reregister the notifications for this application.
+ *	@discussion	This method does not normally need to be called.  If your
+ *	 application changes what notifications it is registering with Growl, call
+ *	 this method to have the Growl delegate's
+ *	 <code>-registrationDictionaryForGrowl</code> method called again and the
+ *	 Growl registration information updated.
+ *
+ *	 This method is now implemented using <code>-registerWithDictionary:</code>.
+ */
++ (void) reregisterGrowlNotifications;
+
+#pragma mark -
+
+/*!	@method	setWillRegisterWhenGrowlIsReady:
+ *	@abstract	Tells GrowlApplicationBridge to register with Growl when Growl
+ *	 launches (or not).
+ *	@discussion	When Growl has started listening for notifications, it posts a
+ *	 <code>GROWL_IS_READY</code> notification on the Distributed Notification
+ *	 Center. GrowlApplicationBridge listens for this notification, using it to
+ *	 perform various tasks (such as calling your delegate's
+ *	 <code>-growlIsReady</code> method, if it has one). If this method is
+ *	 called with <code>YES</code>, one of those tasks will be to reregister
+ *	 with Growl (in the manner of <code>-reregisterGrowlNotifications</code>).
+ *
+ *	 This attribute is automatically set back to <code>NO</code> (the default)
+ *	 after every <code>GROWL_IS_READY</code> notification.
+ *	@param	flag	<code>YES</code> if you want GrowlApplicationBridge to register with
+ *	 Growl when next it is ready; <code>NO</code> if not.
+ */
++ (void) setWillRegisterWhenGrowlIsReady:(BOOL)flag;
+/*!	@method	willRegisterWhenGrowlIsReady
+ *	@abstract	Reports whether GrowlApplicationBridge will register with Growl
+ *	 when Growl next launches.
+ *	@result	<code>YES</code> if GrowlApplicationBridge will register with Growl
+ *	 when next it posts GROWL_IS_READY; <code>NO</code> if not.
+ */
++ (BOOL) willRegisterWhenGrowlIsReady;
+
+#pragma mark -
+
+/*!	@method	registrationDictionaryFromDelegate
+ *	@abstract	Asks the delegate for a registration dictionary.
+ *	@discussion	If no delegate is set, or if the delegate's
+ *	 <code>-registrationDictionaryForGrowl</code> method returns
+ *	 <code>nil</code>, this method returns <code>nil</code>.
+ *
+ *	 This method does not attempt to clean up the dictionary in any way - for
+ *	 example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
+ *	 will be missing it too. Use <code>+[GrowlApplicationBridge
+ *	 registrationDictionaryByFillingInDictionary:]</code> or
+ *	 <code>+[GrowlApplicationBridge
+ *	 registrationDictionaryByFillingInDictionary:restrictToKeys:]</code> to try
+ *	 to fill in missing keys.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ *	@result A registration dictionary.
+ */
++ (NSDictionary *) registrationDictionaryFromDelegate;
+
+/*!	@method	registrationDictionaryFromBundle:
+ *	@abstract	Looks in a bundle for a registration dictionary.
+ *	@discussion	This method looks in a bundle for an auto-discoverable
+ *	 registration dictionary file using <code>-[NSBundle
+ *	 pathForResource:ofType:]</code>. If it finds one, it loads the file using
+ *	 <code>+[NSDictionary dictionaryWithContentsOfFile:]</code> and returns the
+ *	 result.
+ *
+ *	 If you pass <code>nil</code> as the bundle, the main bundle is examined.
+ *
+ *	 This method does not attempt to clean up the dictionary in any way - for
+ *	 example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
+ *	 will be missing it too. Use <code>+[GrowlApplicationBridge
+ *	 registrationDictionaryByFillingInDictionary:]</code> or
+ *	 <code>+[GrowlApplicationBridge
+ *	 registrationDictionaryByFillingInDictionary:restrictToKeys:]</code> to try
+ *	 to fill in missing keys.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ *	@result A registration dictionary.
+ */
++ (NSDictionary *) registrationDictionaryFromBundle:(NSBundle *)bundle;
+
+/*!	@method	bestRegistrationDictionary
+ *	@abstract	Obtains a registration dictionary, filled out to the best of
+ *	 GrowlApplicationBridge's knowledge.
+ *	@discussion	This method creates a registration dictionary as best
+ *	 GrowlApplicationBridge knows how.
+ *
+ *	 First, GrowlApplicationBridge contacts the Growl delegate (if there is
+ *	 one) and gets the registration dictionary from that. If no such dictionary
+ *	 was obtained, GrowlApplicationBridge looks in your application's main
+ *	 bundle for an auto-discoverable registration dictionary file. If that
+ *	 doesn't exist either, this method returns <code>nil</code>.
+ *
+ *	 Second, GrowlApplicationBridge calls
+ *	 <code>+registrationDictionaryByFillingInDictionary:</code> with whatever
+ *	 dictionary was obtained. The result of that method is the result of this
+ *	 method.
+ *
+ *	 GrowlApplicationBridge uses this method when you call
+ *	 <code>+setGrowlDelegate:</code>, or when you call
+ *	 <code>+registerWithDictionary:</code> with <code>nil</code>.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ *	@result	A registration dictionary.
+ */
++ (NSDictionary *) bestRegistrationDictionary;
+
+#pragma mark -
+
+/*!	@method	registrationDictionaryByFillingInDictionary:
+ *	@abstract	Tries to fill in missing keys in a registration dictionary.
+ *	@discussion	This method examines the passed-in dictionary for missing keys,
+ *	 and tries to work out correct values for them. As of 0.7, it uses:
+ *
+ *	 Key							             Value
+ *	 ---							             -----
+ *	 <code>GROWL_APP_NAME</code>                 <code>CFBundleExecutableName</code>
+ *	 <code>GROWL_APP_ICON</code>                 The icon of the application.
+ *	 <code>GROWL_APP_LOCATION</code>             The location of the application.
+ *	 <code>GROWL_NOTIFICATIONS_DEFAULT</code>    <code>GROWL_NOTIFICATIONS_ALL</code>
+ *
+ *	 Keys are only filled in if missing; if a key is present in the dictionary,
+ *	 its value will not be changed.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ *	@param	regDict	The dictionary to fill in.
+ *	@result	The dictionary with the keys filled in. This is an autoreleased
+ *	 copy of <code>regDict</code>.
+ */
++ (NSDictionary *) registrationDictionaryByFillingInDictionary:(NSDictionary *)regDict;
+/*!	@method	registrationDictionaryByFillingInDictionary:restrictToKeys:
+ *	@abstract	Tries to fill in missing keys in a registration dictionary.
+ *	@discussion	This method examines the passed-in dictionary for missing keys,
+ *	 and tries to work out correct values for them. As of 0.7, it uses:
+ *
+ *	 Key							             Value
+ *	 ---							             -----
+ *	 <code>GROWL_APP_NAME</code>                 <code>CFBundleExecutableName</code>
+ *	 <code>GROWL_APP_ICON</code>                 The icon of the application.
+ *	 <code>GROWL_APP_LOCATION</code>             The location of the application.
+ *	 <code>GROWL_NOTIFICATIONS_DEFAULT</code>    <code>GROWL_NOTIFICATIONS_ALL</code>
+ *
+ *	 Only those keys that are listed in <code>keys</code> will be filled in.
+ *	 Other missing keys are ignored. Also, keys are only filled in if missing;
+ *	 if a key is present in the dictionary, its value will not be changed.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ *	@param	regDict	The dictionary to fill in.
+ *	@param	keys	The keys to fill in. If <code>nil</code>, any missing keys are filled in.
+ *	@result	The dictionary with the keys filled in. This is an autoreleased
+ *	 copy of <code>regDict</code>.
+ */
++ (NSDictionary *) registrationDictionaryByFillingInDictionary:(NSDictionary *)regDict restrictToKeys:(NSSet *)keys;
+
+/*!	@brief	Tries to fill in missing keys in a notification dictionary.
+ *	@param	notifDict	The dictionary to fill in.
+ *	@return	The dictionary with the keys filled in. This will be a separate instance from \a notifDict.
+ *	@discussion	This function examines the \a notifDict for missing keys, and 
+ *	 tries to get them from the last known registration dictionary. As of 1.1, 
+ *	 the keys that it will look for are:
+ *
+ *	 \li <code>GROWL_APP_NAME</code>
+ *	 \li <code>GROWL_APP_ICON</code>
+ *
+ *	@since Growl.framework 1.1
+ */
++ (NSDictionary *) notificationDictionaryByFillingInDictionary:(NSDictionary *)regDict;
+
++ (NSDictionary *) frameworkInfoDictionary;
+ at end
+
+//------------------------------------------------------------------------------
+#pragma mark -
+
+/*!
+ *	@protocol GrowlApplicationBridgeDelegate
+ *	@abstract Required protocol for the Growl delegate.
+ *	@discussion The methods in this protocol are required and are called
+ *	 automatically as needed by GrowlApplicationBridge. See
+ *	 <code>+[GrowlApplicationBridge setGrowlDelegate:]</code>.
+ *	 See also <code>GrowlApplicationBridgeDelegate_InformalProtocol</code>.
+ */
+
+ at protocol GrowlApplicationBridgeDelegate
+
+// -registrationDictionaryForGrowl has moved to the informal protocol as of 0.7.
+
+ at end
+
+//------------------------------------------------------------------------------
+#pragma mark -
+
+/*!
+ *	@category NSObject(GrowlApplicationBridgeDelegate_InformalProtocol)
+ *	@abstract Methods which may be optionally implemented by the GrowlDelegate.
+ *	@discussion The methods in this informal protocol will only be called if implemented by the delegate.
+ */
+ at interface NSObject (GrowlApplicationBridgeDelegate_InformalProtocol)
+
+/*!
+ *	@method registrationDictionaryForGrowl
+ *	@abstract Return the dictionary used to register this application with Growl.
+ *	@discussion The returned dictionary gives Growl the complete list of
+ *	 notifications this application will ever send, and it also specifies which
+ *	 notifications should be enabled by default.  Each is specified by an array
+ *	 of <code>NSString</code> objects.
+ *
+ *	 For most applications, these two arrays can be the same (if all sent
+ *	 notifications should be displayed by default).
+ *
+ *	 The <code>NSString</code> objects of these arrays will correspond to the
+ *	 <code>notificationName:</code> parameter passed in
+ *	 <code>+[GrowlApplicationBridge
+ *	 notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:]</code> calls.
+ *
+ *	 The dictionary should have the required key object pairs:
+ *	 key: GROWL_NOTIFICATIONS_ALL		object: <code>NSArray</code> of <code>NSString</code> objects
+ *	 key: GROWL_NOTIFICATIONS_DEFAULT	object: <code>NSArray</code> of <code>NSString</code> objects
+ *
+ *   The dictionary may have the following key object pairs:
+ *   key: GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES	object: <code>NSDictionary</code> of key: notification name		object: human-readable notification name
+ *
+ *	 You do not need to implement this method if you have an auto-discoverable
+ *	 plist file in your app bundle. (XXX refer to more information on that)
+ *
+ *	@result The <code>NSDictionary</code> to use for registration.
+ */
+- (NSDictionary *) registrationDictionaryForGrowl;
+
+/*!
+ *	@method applicationNameForGrowl
+ *	@abstract Return the name of this application which will be used for Growl bookkeeping.
+ *	@discussion This name is used both internally and in the Growl preferences.
+ *
+ *	 This should remain stable between different versions and incarnations of
+ *	 your application.
+ *	 For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and
+ *	 "SurfWriter Lite" are not.
+ *
+ *	 You do not need to implement this method if you are providing the
+ *	 application name elsewhere, meaning in an auto-discoverable plist file in
+ *	 your app bundle (XXX refer to more information on that) or in the result
+ *	 of -registrationDictionaryForGrowl.
+ *
+ *	@result The name of the application using Growl.
+ */
+- (NSString *) applicationNameForGrowl;
+
+/*!
+ *	@method applicationIconForGrowl
+ *	@abstract Return the <code>NSImage</code> to treat as the application icon.
+ *	@discussion The delegate may optionally return an <code>NSImage</code>
+ *	 object to use as the application icon. If this method is not implemented,
+ *	 {{{-applicationIconDataForGrowl}}} is tried. If that method is not
+ *	 implemented, the application's own icon is used. Neither method is
+ *	 generally needed.
+ *	@result The <code>NSImage</code> to treat as the application icon.
+ */
+- (NSImage *) applicationIconForGrowl;
+
+/*!
+ *	@method applicationIconDataForGrowl
+ *	@abstract Return the <code>NSData</code> to treat as the application icon.
+ *	@discussion The delegate may optionally return an <code>NSData</code>
+ *	 object to use as the application icon; if this is not implemented, the
+ *	 application's own icon is used.  This is not generally needed.
+ *	@result The <code>NSData</code> to treat as the application icon.
+ *	@deprecated In version 1.1, in favor of {{{-applicationIconForGrowl}}}.
+ */
+- (NSData *) applicationIconDataForGrowl;
+
+/*!
+ *	@method growlIsReady
+ *	@abstract Informs the delegate that Growl has launched.
+ *	@discussion Informs the delegate that Growl (specifically, the
+ *	 GrowlHelperApp) was launched successfully. The application can take actions
+ *   with the knowledge that Growl is installed and functional.
+ */
+- (void) growlIsReady;
+
+/*!
+ *	@method growlNotificationWasClicked:
+ *	@abstract Informs the delegate that a Growl notification was clicked.
+ *	@discussion Informs the delegate that a Growl notification was clicked.  It
+ *	 is only sent for notifications sent with a non-<code>nil</code>
+ *	 clickContext, so if you want to receive a message when a notification is
+ *	 clicked, clickContext must not be <code>nil</code> when calling
+ *	 <code>+[GrowlApplicationBridge notifyWithTitle: description:notificationName:iconData:priority:isSticky:clickContext:]</code>.
+ *	@param clickContext The clickContext passed when displaying the notification originally via +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:].
+ */
+- (void) growlNotificationWasClicked:(id)clickContext;
+
+/*!
+ *	@method growlNotificationTimedOut:
+ *	@abstract Informs the delegate that a Growl notification timed out.
+ *	@discussion Informs the delegate that a Growl notification timed out. It
+ *	 is only sent for notifications sent with a non-<code>nil</code>
+ *	 clickContext, so if you want to receive a message when a notification is
+ *	 clicked, clickContext must not be <code>nil</code> when calling
+ *	 <code>+[GrowlApplicationBridge notifyWithTitle: description:notificationName:iconData:priority:isSticky:clickContext:]</code>.
+ *	@param clickContext The clickContext passed when displaying the notification originally via +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:].
+ */
+- (void) growlNotificationTimedOut:(id)clickContext;
+
+ at end
+
+#pragma mark -
+/*!
+ *	@category NSObject(GrowlApplicationBridgeDelegate_Installation_InformalProtocol)
+ *	@abstract Methods which may be optionally implemented by the Growl delegate when used with Growl-WithInstaller.framework.
+ *	@discussion The methods in this informal protocol will only be called if
+ *	 implemented by the delegate.  They allow greater control of the information
+ *	 presented to the user when installing or upgrading Growl from within your
+ *	 application when using Growl-WithInstaller.framework.
+ */
+ at interface NSObject (GrowlApplicationBridgeDelegate_Installation_InformalProtocol)
+
+/*!
+ *	@method growlInstallationWindowTitle
+ *	@abstract Return the title of the installation window.
+ *	@discussion If not implemented, Growl will use a default, localized title.
+ *	@result An NSString object to use as the title.
+ */
+- (NSString *)growlInstallationWindowTitle;
+
+/*!
+ *	@method growlUpdateWindowTitle
+ *	@abstract Return the title of the upgrade window.
+ *	@discussion If not implemented, Growl will use a default, localized title.
+ *	@result An NSString object to use as the title.
+ */
+- (NSString *)growlUpdateWindowTitle;
+
+/*!
+ *	@method growlInstallationInformation
+ *	@abstract Return the information to display when installing.
+ *	@discussion This information may be as long or short as desired (the window
+ *	 will be sized to fit it).  It will be displayed to the user as an
+ *	 explanation of what Growl is and what it can do in your application.  It
+ *	 should probably note that no download is required to install.
+ *
+ *	 If this is not implemented, Growl will use a default, localized explanation.
+ *	@result An NSAttributedString object to display.
+ */
+- (NSAttributedString *)growlInstallationInformation;
+
+/*!
+ *	@method growlUpdateInformation
+ *	@abstract Return the information to display when upgrading.
+ *	@discussion This information may be as long or short as desired (the window
+ *	 will be sized to fit it).  It will be displayed to the user as an
+ *	 explanation that an updated version of Growl is included in your
+ *	 application and no download is required.
+ *
+ *	 If this is not implemented, Growl will use a default, localized explanation.
+ *	@result An NSAttributedString object to display.
+ */
+- (NSAttributedString *)growlUpdateInformation;
+
+ at end
+
+//private
+ at interface GrowlApplicationBridge (GrowlInstallationPrompt_private)
++ (void) _userChoseNotToInstallGrowl;
+ at end
+
+#endif /* __GrowlApplicationBridge_h__ */

Added: trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/GrowlDefines.h
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/GrowlDefines.h	                        (rev 0)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Headers/GrowlDefines.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,348 @@
+//
+//  GrowlDefines.h
+//
+
+#ifndef _GROWLDEFINES_H
+#define _GROWLDEFINES_H
+
+#ifdef __OBJC__
+#define XSTR(x) (@x)
+#define STRING_TYPE NSString *
+#else
+#define XSTR CFSTR
+#define STRING_TYPE CFStringRef
+#endif
+
+/*!	@header GrowlDefines.h
+ *	@abstract   Defines all the notification keys.
+ *	@discussion Defines all the keys used for registration with Growl and for
+ *	 Growl notifications.
+ *
+ *	 Most applications should use the functions or methods of Growl.framework
+ *	 instead of posting notifications such as those described here.
+ *	@updated 2004-01-25
+ */
+
+// UserInfo Keys for Registration
+#pragma mark UserInfo Keys for Registration
+
+/*!	@group Registration userInfo keys */
+/*	@abstract	Keys for the userInfo dictionary of a GROWL_APP_REGISTRATION distributed notification.
+ *	@discussion The values of these keys describe the application and the
+ *	 notifications it may post.
+ *
+ *	 Your application must register with Growl before it can post Growl
+ *	 notifications (and have them not be ignored). However, as of Growl 0.6,
+ *	 posting GROWL_APP_REGISTRATION notifications directly is no longer the
+ *	 preferred way to register your application. Your application should instead
+ *	 use Growl.framework's delegate system.
+ *	 See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for
+ *	 more information.
+ */
+
+/*!	@defined GROWL_APP_NAME
+ *	@abstract The name of your application.
+ *	@discussion The name of your application. This should remain stable between
+ *	 different versions and incarnations of your application.
+ *	 For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and
+ *	 "SurfWriter Lite" are not.
+ */
+#define GROWL_APP_NAME					XSTR("ApplicationName")
+/*!	@defined GROWL_APP_ID
+ *	@abstract The bundle identifier of your application.
+ *	@discussion The bundle identifier of your application. This key should
+ *   be unique for your application while there may be several applications
+ *   with the same GROWL_APP_NAME.
+ *   This key is optional.
+ */
+#define GROWL_APP_ID					XSTR("ApplicationId")
+/*!	@defined GROWL_APP_ICON
+ *	@abstract The image data for your application's icon.
+ *	@discussion Image data representing your application's icon. This may be
+ *	 superimposed on a notification icon as a badge, used as the notification
+ *	 icon when a notification-specific icon is not supplied, or ignored
+ *	 altogether, depending on the display. Must be in a format supported by
+ *	 NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_APP_ICON					XSTR("ApplicationIcon")
+/*!	@defined GROWL_NOTIFICATIONS_DEFAULT
+ *	@abstract The array of notifications to turn on by default.
+ *	@discussion These are the names of the notifications that should be enabled
+ *	 by default when your application registers for the first time. If your
+ *	 application reregisters, Growl will look here for any new notification
+ *	 names found in GROWL_NOTIFICATIONS_ALL, but ignore any others.
+ */
+#define GROWL_NOTIFICATIONS_DEFAULT		XSTR("DefaultNotifications")
+/*!	@defined GROWL_NOTIFICATIONS_ALL
+ *	@abstract The array of all notifications your application can send.
+ *	@discussion These are the names of all of the notifications that your
+ *	 application may post. See GROWL_NOTIFICATION_NAME for a discussion of good
+ *	 notification names.
+ */
+#define GROWL_NOTIFICATIONS_ALL			XSTR("AllNotifications")
+/*! @defined GROWL_NOTIFICATIONS_HUMAN_READABLE_DESCRIPTIONS
+ *  @abstract A dictionary of human-readable names for your notifications.
+ *  @discussion By default, the Growl UI will display notifications by the names given in GROWL_NOTIFICATIONS_ALL
+ *  which correspond to the GROWL_NOTIFICATION_NAME. This dictionary specifies the human-readable name to display.
+ *  The keys of the dictionary are GROWL_NOTIFICATION_NAME strings; the objects are the human-readable versions.
+ *  For any GROWL_NOTIFICATION_NAME not specific in this dictionary, the GROWL_NOTIFICATION_NAME will be displayed.
+ *
+ *  This key is optional.
+ */
+#define GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES		XSTR("HumanReadableNames")
+/*! @defined GROWL_NOTIFICATIONS_DESCRIPTIONS
+*  @abstract A dictionary of descriptions of _when_ each notification occurs
+*  @discussion This is an NSDictionary whose keys are GROWL_NOTIFICATION_NAME strings and whose objects are
+*  descriptions of _when_ each notification occurs, such as "You received a new mail message" or
+*  "A file finished downloading".
+*
+*  This key is optional.
+*/
+#define GROWL_NOTIFICATIONS_DESCRIPTIONS		XSTR("NotificationDescriptions")
+
+/*!	@defined	GROWL_TICKET_VERSION
+ *	@abstract	The version of your registration ticket.
+ *	@discussion	Include this key in a ticket plist file that you put in your
+ *	 application bundle for auto-discovery. The current ticket version is 1.
+ */
+#define GROWL_TICKET_VERSION			XSTR("TicketVersion")
+// UserInfo Keys for Notifications
+#pragma mark UserInfo Keys for Notifications
+
+/*!	@group Notification userInfo keys */
+/*	@abstract	Keys for the userInfo dictionary of a GROWL_NOTIFICATION distributed notification.
+ *	@discussion The values of these keys describe the content of a Growl
+ *	 notification.
+ *
+ *	 Not all of these keys are supported by all displays. Only the name, title,
+ *	 and description of a notification are universal. Most of the built-in
+ *	 displays do support all of these keys, and most other visual displays
+ *	 probably will also. But, as of 0.6, the Log, MailMe, and Speech displays
+ *	 support only textual data.
+ */
+
+/*!	@defined GROWL_NOTIFICATION_NAME
+ *	@abstract The name of the notification.
+ *	@discussion The name of the notification. Note that if you do not define
+ *  GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES when registering your ticket originally this name
+ *  will the one displayed within the Growl preference pane and should be human-readable.
+ */
+#define GROWL_NOTIFICATION_NAME			XSTR("NotificationName")
+/*!	@defined GROWL_NOTIFICATION_TITLE
+ *	@abstract The title to display in the notification.
+ *	@discussion The title of the notification. Should be very brief.
+ *	 The title usually says what happened, e.g. "Download complete".
+ */
+#define GROWL_NOTIFICATION_TITLE		XSTR("NotificationTitle")
+/*!	@defined GROWL_NOTIFICATION_DESCRIPTION
+ *	@abstract The description to display in the notification.
+ *	@discussion The description should be longer and more verbose than the title.
+ *	 The description usually tells the subject of the action,
+ *	 e.g. "Growl-0.6.dmg downloaded in 5.02 minutes".
+ */
+#define GROWL_NOTIFICATION_DESCRIPTION  	XSTR("NotificationDescription")
+/*!	@defined GROWL_NOTIFICATION_ICON
+ *	@discussion Image data for the notification icon. Must be in a format
+ *	 supported by NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_ICON			XSTR("NotificationIcon")
+/*!	@defined GROWL_NOTIFICATION_APP_ICON
+ *	@discussion Image data for the application icon, in case GROWL_APP_ICON does
+ *	 not apply for some reason. Must be in a format supported by NSImage, such
+ *	 as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_APP_ICON		XSTR("NotificationAppIcon")
+/*!	@defined GROWL_NOTIFICATION_PRIORITY
+ *	@discussion The priority of the notification as an integer number from
+ *	 -2 to +2 (+2 being highest).
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_PRIORITY		XSTR("NotificationPriority")
+/*!	@defined GROWL_NOTIFICATION_STICKY
+ *	@discussion A Boolean number controlling whether the notification is sticky.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_STICKY		XSTR("NotificationSticky")
+/*!	@defined GROWL_NOTIFICATION_CLICK_CONTEXT
+ *	@abstract Identifies which notification was clicked.
+ *	@discussion An identifier for the notification for clicking purposes.
+ *
+ *	 This will be passed back to the application when the notification is
+ *	 clicked. It must be plist-encodable (a data, dictionary, array, number, or
+ *	 string object), and it should be unique for each notification you post.
+ *	 A good click context would be a UUID string returned by NSProcessInfo or
+ *	 CFUUID.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_CLICK_CONTEXT			XSTR("NotificationClickContext")
+
+/*!	@defined GROWL_DISPLAY_PLUGIN
+ *	@discussion The name of a display plugin which should be used for this notification.
+ *    Optional. If this key is not set or the specified display plugin does not
+ *    exist, the display plugin stored in the application ticket is used. This key
+ *    allows applications to use different default display plugins for their
+ *    notifications. The user can still override those settings in the preference
+ *    pane.
+ */
+#define GROWL_DISPLAY_PLUGIN				XSTR("NotificationDisplayPlugin")
+
+/*!	@defined GROWL_NOTIFICATION_IDENTIFIER
+ *	@abstract An identifier for the notification for coalescing purposes.
+ *   Notifications with the same identifier fall into the same class; only
+ *   the last notification of a class is displayed on the screen. If a
+ *   notification of the same class is currently being displayed, it is
+ *   replaced by this notification.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_IDENTIFIER	XSTR("GrowlNotificationIdentifier")
+
+/*!	@defined GROWL_APP_PID
+ *	@abstract The process identifier of the process which sends this
+ *   notification. If this field is set, the application will only receive
+ *   clicked and timed out notifications which originate from this process.
+ *
+ *	 Optional.
+ */
+#define GROWL_APP_PID					XSTR("ApplicationPID")
+
+/*!	@defined GROWL_NOTIFICATION_PROGRESS
+*	@abstract If this key is set, it should contain a double value wrapped
+*     in a NSNumber which describes some sort of progress (from 0.0 to 100.0).
+*     If this is key is not set, no progress bar is shown.
+*
+*	 Optional. Not supported by all display plugins.
+*/
+#define GROWL_NOTIFICATION_PROGRESS		XSTR("NotificationProgress")
+
+// Notifications
+#pragma mark Notifications
+
+/*!	@group Notification names */
+/*	@abstract	Names of distributed notifications used by Growl.
+ *	@discussion	These are notifications used by applications (directly or
+ *	 indirectly) to interact with Growl, and by Growl for interaction between
+ *	 its components.
+ *
+ *	 Most of these should no longer be used in Growl 0.6 and later, in favor of
+ *	 Growl.framework's GrowlApplicationBridge APIs.
+ */
+
+/*!	@defined GROWL_APP_REGISTRATION
+ *	@abstract The distributed notification for registering your application.
+ *	@discussion This is the name of the distributed notification that can be
+ *	 used to register applications with Growl.
+ *
+ *	 The userInfo dictionary for this notification can contain these keys:
+ *	 <ul>
+ *	 	<li>GROWL_APP_NAME</li>
+ *	 	<li>GROWL_APP_ICON</li>
+ *	 	<li>GROWL_NOTIFICATIONS_ALL</li>
+ *	 	<li>GROWL_NOTIFICATIONS_DEFAULT</li>
+ *	 </ul>
+ *
+ *	 No longer recommended as of Growl 0.6. An alternate method of registering
+ *	 is to use Growl.framework's delegate system.
+ *	 See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for
+ *	 more information.
+ */
+#define GROWL_APP_REGISTRATION			XSTR("GrowlApplicationRegistrationNotification")
+/*!	@defined GROWL_APP_REGISTRATION_CONF
+ *	@abstract The distributed notification for confirming registration.
+ *	@discussion The name of the distributed notification sent to confirm the
+ *	 registration. Used by the Growl preference pane. Your application probably
+ *	 does not need to use this notification.
+ */
+#define GROWL_APP_REGISTRATION_CONF		XSTR("GrowlApplicationRegistrationConfirmationNotification")
+/*!	@defined GROWL_NOTIFICATION
+ *	@abstract The distributed notification for Growl notifications.
+ *	@discussion This is what it all comes down to. This is the name of the
+ *	 distributed notification that your application posts to actually send a
+ *	 Growl notification.
+ *
+ *	 The userInfo dictionary for this notification can contain these keys:
+ *	 <ul>
+ *	 	<li>GROWL_NOTIFICATION_NAME (required)</li>
+ *	 	<li>GROWL_NOTIFICATION_TITLE (required)</li>
+ *	 	<li>GROWL_NOTIFICATION_DESCRIPTION (required)</li>
+ *	 	<li>GROWL_NOTIFICATION_ICON</li>
+ *	 	<li>GROWL_NOTIFICATION_APP_ICON</li>
+ *	 	<li>GROWL_NOTIFICATION_PRIORITY</li>
+ *	 	<li>GROWL_NOTIFICATION_STICKY</li>
+ *	 	<li>GROWL_NOTIFICATION_CLICK_CONTEXT</li>
+ *	 	<li>GROWL_APP_NAME (required)</li>
+ *	 </ul>
+ *
+ *	 No longer recommended as of Growl 0.6. Three alternate methods of posting
+ *	 notifications are +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:],
+ *	 Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext, and
+ *	 Growl_PostNotification.
+ */
+#define GROWL_NOTIFICATION				XSTR("GrowlNotification")
+/*!	@defined GROWL_SHUTDOWN
+*	@abstract The distributed notification name that tells Growl to shutdown.
+*	@discussion The Growl preference pane posts this notification when the
+*	 "Stop Growl" button is clicked.
+*/
+#define GROWL_SHUTDOWN					XSTR("GrowlShutdown")
+/*!	@defined GROWL_PING
+ *	@abstract A distributed notification to check whether Growl is running.
+ *	@discussion This is used by the Growl preference pane. If it receives a
+ *	 GROWL_PONG, the preference pane takes this to mean that Growl is running.
+ */
+#define GROWL_PING						XSTR("Honey, Mind Taking Out The Trash")
+/*!	@defined GROWL_PONG
+ *	@abstract The distributed notification sent in reply to GROWL_PING.
+ *	@discussion GrowlHelperApp posts this in reply to GROWL_PING.
+ */
+#define GROWL_PONG						XSTR("What Do You Want From Me, Woman")
+/*!	@defined GROWL_IS_READY
+ *	@abstract The distributed notification sent when Growl starts up.
+ *	@discussion GrowlHelperApp posts this when it has begin listening on all of
+ *	 its sources for new notifications. GrowlApplicationBridge (in
+ *	 Growl.framework), upon receiving this notification, reregisters using the
+ *	 registration dictionary supplied by its delegate.
+ */
+#define GROWL_IS_READY					XSTR("Lend Me Some Sugar; I Am Your Neighbor!")
+/*!	@defined GROWL_NOTIFICATION_CLICKED
+ *	@abstract The distributed notification sent when a supported notification is clicked.
+ *	@discussion When a Growl notification with a click context is clicked on by
+ *	 the user, Growl posts this distributed notification.
+ *	 The GrowlApplicationBridge responds to this notification by calling a
+ *	 callback in its delegate.
+ */
+#define GROWL_NOTIFICATION_CLICKED		XSTR("GrowlClicked!")
+#define GROWL_NOTIFICATION_TIMED_OUT	XSTR("GrowlTimedOut!")
+
+/*!	@group Other symbols */
+/* Symbols which don't fit into any of the other categories. */
+
+/*!	@defined GROWL_KEY_CLICKED_CONTEXT
+ *	@abstract Used internally as the key for the clickedContext passed over DNC.
+ *	@discussion This key is used in GROWL_NOTIFICATION_CLICKED, and contains the
+ *	 click context that was supplied in the original notification.
+ */
+#define GROWL_KEY_CLICKED_CONTEXT		XSTR("ClickedContext")
+/*!	@defined GROWL_REG_DICT_EXTENSION
+ *	@abstract The filename extension for registration dictionaries.
+ *	@discussion The GrowlApplicationBridge in Growl.framework registers with
+ *	 Growl by creating a file with the extension of .(GROWL_REG_DICT_EXTENSION)
+ *	 and opening it in the GrowlHelperApp. This happens whether or not Growl is
+ *	 running; if it was stopped, it quits immediately without listening for
+ *	 notifications.
+ */
+#define GROWL_REG_DICT_EXTENSION		XSTR("growlRegDict")
+
+
+#define GROWL_POSITION_PREFERENCE_KEY			@"GrowlSelectedPosition"
+
+#endif //ndef _GROWLDEFINES_H

Added: trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Resources/Info.plist
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Resources/Info.plist	                        (rev 0)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Versions/A/Resources/Info.plist	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>Growl</string>
+	<key>CFBundleIdentifier</key>
+	<string>com.growl.growlframework</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundlePackageType</key>
+	<string>FMWK</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.2.1</string>
+	<key>CFBundleSignature</key>
+	<string>GRRR</string>
+	<key>CFBundleVersion</key>
+	<string>1.2.1</string>
+	<key>NSPrincipalClass</key>
+	<string>GrowlApplicationBridge</string>
+</dict>
+</plist>

Added: trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Growl
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Growl
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Growl	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Growl	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Growl
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/Growl.h
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/Growl.h	                        (rev 0)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/Growl.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,6 @@
+#include "GrowlDefines.h"
+
+#ifdef __OBJC__
+#	include "GrowlApplicationBridge.h"
+#endif
+#include "GrowlApplicationBridge-Carbon.h"

Added: trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/GrowlApplicationBridge-Carbon.h
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/GrowlApplicationBridge-Carbon.h	                        (rev 0)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/GrowlApplicationBridge-Carbon.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,780 @@
+//
+//  GrowlApplicationBridge-Carbon.h
+//  Growl
+//
+//  Created by Mac-arena the Bored Zo on Wed Jun 18 2004.
+//  Based on GrowlApplicationBridge.h by Evan Schoenberg.
+//  This source code is in the public domain. You may freely link it into any
+//    program.
+//
+
+#ifndef _GROWLAPPLICATIONBRIDGE_CARBON_H_
+#define _GROWLAPPLICATIONBRIDGE_CARBON_H_
+
+#include <sys/cdefs.h>
+#include <Carbon/Carbon.h>
+
+#ifndef GROWL_EXPORT
+#define GROWL_EXPORT __attribute__((visibility("default"))) DEPRECATED_ATTRIBUTE
+#endif
+
+/*!	@header GrowlApplicationBridge-Carbon.h
+ *	@abstract	Declares an API that Carbon applications can use to interact with Growl.
+ *	@discussion	GrowlApplicationBridge uses a delegate to provide information //XXX
+ *	 to Growl (such as your application's name and what notifications it may
+ *	 post) and to provide information to your application (such as that Growl
+ *	 is listening for notifications or that a notification has been clicked).
+ *
+ *	 You can set the Growldelegate with Growl_SetDelegate and find out the
+ *	 current delegate with Growl_GetDelegate. See struct Growl_Delegate for more
+ *	 information about the delegate.
+ */
+
+__BEGIN_DECLS
+
+/*!	@struct Growl_Delegate
+ *	@abstract Delegate to supply GrowlApplicationBridge with information and respond to events.
+ *	@discussion The Growl delegate provides your interface to
+ *	 GrowlApplicationBridge. When GrowlApplicationBridge needs information about
+ *	 your application, it looks for it in the delegate; when Growl or the user
+ *	 does something that you might be interested in, GrowlApplicationBridge
+ *	 looks for a callback in the delegate and calls it if present
+ *	 (meaning, if it is not <code>NULL</code>).
+ *	XXX on all of that
+ *  @field size The size of the delegate structure.
+ * 	@field applicationName The name of your application.
+ * 	@field registrationDictionary A dictionary describing your application and the notifications it can send out.
+ * 	@field applicationIconData Your application's icon.
+ * 	@field growlInstallationWindowTitle The title of the installation window.
+ * 	@field growlInstallationInformation Text to display in the installation window.
+ * 	@field growlUpdateWindowTitle The title of the update window.
+ * 	@field growlUpdateInformation Text to display in the update window.
+ * 	@field referenceCount A count of owners of the delegate.
+ * 	@field retain Called when GrowlApplicationBridge receives this delegate.
+ * 	@field release Called when GrowlApplicationBridge no longer needs this delegate.
+ * 	@field growlIsReady Called when GrowlHelperApp is listening for notifications.
+ * 	@field growlNotificationWasClicked Called when a Growl notification is clicked.
+ *  @field growlNotificationTimedOut Called when a Growl notification timed out.
+ */
+struct Growl_Delegate {
+	/*	@discussion This should be sizeof(struct Growl_Delegate).
+	 */
+	size_t size;
+
+	/*All of these attributes are optional.
+	 *Optional attributes can be NULL; required attributes that
+	 *	 are NULL cause setting the Growl delegate to fail.
+	 *XXX - move optional/required status into the discussion for each field
+	 */
+
+	/* This name is used both internally and in the Growl preferences.
+	 *
+	 *	 This should remain stable between different versions and incarnations of
+	 *	 your application.
+	 *	 For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and
+	 *	 "SurfWriter Lite" are not.
+	 *
+	 * This can be <code>NULL</code> if it is provided elsewhere, namely in an
+	 *	 auto-discoverable plist file in your app bundle
+	 *	 (XXX refer to more information on that) or in registrationDictionary.
+	 */
+	CFStringRef applicationName;
+
+	/*
+	 * Must contain at least these keys:
+	 *	GROWL_NOTIFICATIONS_ALL (CFArray):
+	 *		Contains the names of all notifications your application may post.
+	 *
+	 * Can also contain these keys:
+	 *	GROWL_NOTIFICATIONS_DEFAULT (CFArray):
+	 *		Names of notifications that should be enabled by default.
+	 *		If omitted, GROWL_NOTIFICATIONS_ALL will be used.
+	 *	GROWL_APP_NAME (CFString):
+	 *		Same as the applicationName member of this structure.
+	 *		If both are present, the applicationName member shall prevail.
+	 *		If this key is present, you may omit applicationName (set it to <code>NULL</code>).
+	 *	GROWL_APP_ICON (CFData):
+	 *		Same as the iconData member of this structure.
+	 *		If both are present, the iconData member shall prevail.
+	 *		If this key is present, you may omit iconData (set it to <code>NULL</code>).
+	 *
+	 * If you change the contents of this dictionary after setting the delegate,
+	 *	be sure to call Growl_Reregister.
+	 *
+	 * This can be <code>NULL</code> if you have an auto-discoverable plist file in your app
+	 *	 bundle. (XXX refer to more information on that)
+	 */
+	CFDictionaryRef registrationDictionary;
+
+	/* The data can be in any format supported by NSImage. As of
+	 *	 Mac OS X 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and
+	 *	 PICT formats.
+	 *
+	 *	 If this is not supplied, Growl will look up your application's icon by
+	 *	 its application name.
+	 */
+	CFDataRef applicationIconData;
+
+	/* Installer display attributes
+	 *
+	 * These four attributes are used by the Growl installer, if this framework
+	 *	supports it.
+	 * For any of these being <code>NULL</code>, a localised default will be
+	 *	supplied.
+	 */
+
+	/*	If this is <code>NULL</code>, Growl will use a default,
+	 *	 localized title.
+	 *
+	 *	 Only used if you're using Growl-WithInstaller.framework. Otherwise,
+	 *	 this member is ignored.
+	 */
+	CFStringRef growlInstallationWindowTitle;
+	/*	This information may be as long or short as desired (the
+	 *	 window will be sized to fit it).  If Growl is not installed, it will
+	 *	 be displayed to the user as an explanation of what Growl is and what
+	 *	 it can do in your application.
+	 *	 It should probably note that no download is required to install.
+	 *
+	 *	 If this is <code>NULL</code>, Growl will use a default, localized
+	 *	 explanation.
+	 *
+	 *	 Only used if you're using Growl-WithInstaller.framework. Otherwise,
+	 *	 this member is ignored.
+	 */
+	CFStringRef growlInstallationInformation;
+	/*	If this is <code>NULL</code>, Growl will use a default,
+	 *	 localized title.
+	 *
+	 *	 Only used if you're using Growl-WithInstaller.framework. Otherwise,
+	 *	 this member is ignored.
+	 */
+	CFStringRef growlUpdateWindowTitle;
+	/*	This information may be as long or short as desired (the
+	 *	 window will be sized to fit it).  If an older version of Growl is
+	 *	 installed, it will be displayed to the user as an explanation that an
+	 *	 updated version of Growl is included in your application and
+	 *	 no download is required.
+	 *
+	 *	 If this is <code>NULL</code>, Growl will use a default, localized
+	 *	 explanation.
+	 *
+	 *	 Only used if you're using Growl-WithInstaller.framework. Otherwise,
+	 *	 this member is ignored.
+	 */
+	CFStringRef growlUpdateInformation;
+
+	/*	This member is provided for use by your retain and release
+	 *	 callbacks (see below).
+	 *
+	 *	 GrowlApplicationBridge never directly uses this member. Instead, it
+	 *	 calls your retain callback (if non-<code>NULL</code>) and your release
+	 *	 callback (if non-<code>NULL</code>).
+	 */
+	unsigned referenceCount;
+
+	//Functions. Currently all of these are optional (any of them can be NULL).
+
+	/*	When you call Growl_SetDelegate(newDelegate), it will call
+	 *	 oldDelegate->release(oldDelegate), and then it will call
+	 *	 newDelegate->retain(newDelegate), and the return value from retain
+	 *	 is what will be set as the delegate.
+	 *	 (This means that this member works like CFRetain and -[NSObject retain].)
+	 *	 This member is optional (it can be <code>NULL</code>).
+	 *	 For a delegate allocated with malloc, this member would be
+	 *	 <code>NULL</code>.
+	 *	@result	A delegate to which GrowlApplicationBridge holds a reference.
+	 */
+	void *(*retain)(void *);
+	/*	When you call Growl_SetDelegate(newDelegate), it will call
+	 *	 oldDelegate->release(oldDelegate), and then it will call
+	 *	 newDelegate->retain(newDelegate), and the return value from retain
+	 *	 is what will be set as the delegate.
+	 *	 (This means that this member works like CFRelease and
+	 *	  -[NSObject release].)
+	 *	 This member is optional (it can be NULL).
+	 *	 For a delegate allocated with malloc, this member might be
+	 *	 <code>free</code>(3).
+	 */
+	void (*release)(void *);
+
+	/*	Informs the delegate that Growl (specifically, the GrowlHelperApp) was
+	 *	 launched successfully (or was already running). The application can
+	 *	 take actions with the knowledge that Growl is installed and functional.
+	 */
+	void (*growlIsReady)(void);
+
+	/*	Informs the delegate that a Growl notification was clicked. It is only
+	 *	 sent for notifications sent with a non-<code>NULL</code> clickContext,
+	 *	 so if you want to receive a message when a notification is clicked,
+	 *	 clickContext must not be <code>NULL</code> when calling
+	 *	 Growl_PostNotification or
+	 *	 Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext.
+	 */
+	void (*growlNotificationWasClicked)(CFPropertyListRef clickContext);
+
+	/*	Informs the delegate that a Growl notification timed out. It is only
+	 *	 sent for notifications sent with a non-<code>NULL</code> clickContext,
+	 *	 so if you want to receive a message when a notification is clicked,
+	 *	 clickContext must not be <code>NULL</code> when calling
+	 *	 Growl_PostNotification or
+	 *	 Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext.
+	 */
+	void (*growlNotificationTimedOut)(CFPropertyListRef clickContext);
+};
+
+/*!	@struct Growl_Notification
+ *	@abstract Structure describing a Growl notification.
+ *	@discussion XXX
+ * 	@field size The size of the notification structure.
+ * 	@field name Identifies the notification.
+ * 	@field title Short synopsis of the notification.
+ *  @field description Additional text.
+ * 	@field iconData An icon for the notification.
+ * 	@field priority An indicator of the notification's importance.
+ * 	@field reserved Bits reserved for future usage.
+ * 	@field isSticky Requests that a notification stay on-screen until dismissed explicitly.
+ * 	@field clickContext An identifier to be passed to your click callback when a notification is clicked.
+ * 	@field clickCallback A callback to call when the notification is clicked.
+ */
+struct Growl_Notification {
+	/*	This should be sizeof(struct Growl_Notification).
+	 */
+ 	size_t size;
+
+	/*	The notification name distinguishes one type of
+	 *	 notification from another. The name should be human-readable, as it
+	 *	 will be displayed in the Growl preference pane.
+	 *
+	 *	 The name is used in the GROWL_NOTIFICATIONS_ALL and
+	 *	 GROWL_NOTIFICATIONS_DEFAULT arrays in the registration dictionary, and
+	 *	 in this member of the Growl_Notification structure.
+	 */
+	CFStringRef name;
+
+	/*	A notification's title describes the notification briefly.
+	 *	 It should be easy to read quickly by the user.
+	 */
+	CFStringRef title;
+
+	/*	The description supplements the title with more
+	 *	 information. It is usually longer and sometimes involves a list of
+	 *	 subjects. For example, for a 'Download complete' notification, the
+	 *	 description might have one filename per line. GrowlMail in Growl 0.6
+	 *	 uses a description of '%d new mail(s)' (formatted with the number of
+	 *	 messages).
+	 */
+	CFStringRef description;
+
+	/*	The notification icon usually indicates either what
+	 *	 happened (it may have the same icon as e.g. a toolbar item that
+	 *	 started the process that led to the notification), or what it happened
+	 *	 to (e.g. a document icon).
+	 *
+	 *	 The icon data is optional, so it can be <code>NULL</code>. In that
+	 *	 case, the application icon is used alone. Not all displays support
+	 *	 icons.
+	 *
+	 *	 The data can be in any format supported by NSImage. As of Mac OS X
+	 *	 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and PICT form
+	 *	 ats.
+	 */
+	CFDataRef iconData;
+
+	/*	Priority is new in Growl 0.6, and is represented as a
+	 *	 signed integer from -2 to +2. 0 is Normal priority, -2 is Very Low
+	 *	 priority, and +2 is Very High priority.
+	 *
+	 *	 Not all displays support priority. If you do not wish to assign a
+	 *	 priority to your notification, assign 0.
+	 */
+	signed int priority;
+
+	/*	These bits are not used in Growl 0.6. Set them to 0.
+	 */
+	unsigned reserved: 31;
+
+	/*	When the sticky bit is clear, in most displays,
+	 *	 notifications disappear after a certain amount of time. Sticky
+	 *	 notifications, however, remain on-screen until the user dismisses them
+	 *	 explicitly, usually by clicking them.
+	 *
+	 *	 Sticky notifications were introduced in Growl 0.6. Most notifications
+	 *	 should not be sticky. Not all displays support sticky notifications,
+	 *	 and the user may choose in Growl's preference pane to force the
+	 *	 notification to be sticky or non-sticky, in which case the sticky bit
+	 *	 in the notification will be ignored.
+	 */
+	unsigned isSticky: 1;
+
+	/*	If this is not <code>NULL</code>, and your click callback
+	 *	 is not <code>NULL</code> either, this will be passed to the callback
+	 *	 when your notification is clicked by the user.
+	 *
+	 *	 Click feedback was introduced in Growl 0.6, and it is optional. Not
+	 *	 all displays support click feedback.
+	 */
+	CFPropertyListRef clickContext;
+
+	/*	If this is not <code>NULL</code>, it will be called instead
+	 *	 of the Growl delegate's click callback when clickContext is
+	 *	 non-<code>NULL</code> and the notification is clicked on by the user.
+	 *
+	 *	 Click feedback was introduced in Growl 0.6, and it is optional. Not
+	 *	 all displays support click feedback.
+	 *
+	 *	 The per-notification click callback is not yet supported as of Growl
+	 *	 0.7.
+	 */
+	void (*clickCallback)(CFPropertyListRef clickContext);
+
+	CFStringRef identifier;
+};
+
+#pragma mark -
+#pragma mark Easy initialisers
+
+/*!	@defined	InitGrowlDelegate
+ *	@abstract	Callable macro. Initializes a Growl delegate structure to defaults.
+ *	@discussion	Call with a pointer to a struct Growl_Delegate. All of the
+ *	 members of the structure will be set to 0 or <code>NULL</code>, except for
+ *	 size (which will be set to <code>sizeof(struct Growl_Delegate)</code>) and
+ *	 referenceCount (which will be set to 1).
+ */
+#define InitGrowlDelegate(delegate) \
+	do { \
+		if (delegate) { \
+			(delegate)->size = sizeof(struct Growl_Delegate); \
+			(delegate)->applicationName = NULL; \
+			(delegate)->registrationDictionary = NULL; \
+			(delegate)->applicationIconData = NULL; \
+			(delegate)->growlInstallationWindowTitle = NULL; \
+			(delegate)->growlInstallationInformation = NULL; \
+			(delegate)->growlUpdateWindowTitle = NULL; \
+			(delegate)->growlUpdateInformation = NULL; \
+			(delegate)->referenceCount = 1U; \
+			(delegate)->retain = NULL; \
+			(delegate)->release = NULL; \
+			(delegate)->growlIsReady = NULL; \
+			(delegate)->growlNotificationWasClicked = NULL; \
+			(delegate)->growlNotificationTimedOut = NULL; \
+		} \
+	} while(0)
+
+/*!	@defined	InitGrowlNotification
+ *	@abstract	Callable macro. Initializes a Growl notification structure to defaults.
+ *	@discussion	Call with a pointer to a struct Growl_Notification. All of
+ *	 the members of the structure will be set to 0 or <code>NULL</code>, except
+ *	 for size (which will be set to
+ *	<code>sizeof(struct Growl_Notification)</code>).
+ */
+#define InitGrowlNotification(notification) \
+	do { \
+		if (notification) { \
+			(notification)->size = sizeof(struct Growl_Notification); \
+			(notification)->name = NULL; \
+			(notification)->title = NULL; \
+			(notification)->description = NULL; \
+			(notification)->iconData = NULL; \
+			(notification)->priority = 0; \
+			(notification)->reserved = 0U; \
+			(notification)->isSticky = false; \
+			(notification)->clickContext = NULL; \
+			(notification)->clickCallback = NULL; \
+			(notification)->identifier = NULL; \
+		} \
+	} while(0)
+
+#pragma mark -
+#pragma mark Public API
+
+//	@functiongroup	Managing the Growl delegate
+
+/*!	@function	Growl_SetDelegate
+ *	@abstract	Replaces the current Growl delegate with a new one, or removes
+ *	 the Growl delegate.
+ *	@param	newDelegate
+ *	@result	Returns false and does nothing else if a pointer that was passed in
+ *	 is unsatisfactory (because it is non-<code>NULL</code>, but at least one
+ *	 required member of it is <code>NULL</code>). Otherwise, sets or unsets the
+ *	 delegate and returns true.
+ *	@discussion	When <code>newDelegate</code> is non-<code>NULL</code>, sets
+ *	 the delegate to <code>newDelegate</code>. When it is <code>NULL</code>,
+ *	 the current delegate will be unset, and no delegate will be in place.
+ *
+ *	 It is legal for <code>newDelegate</code> to be the current delegate;
+ *	 nothing will happen, and Growl_SetDelegate will return true. It is also
+ *	 legal for it to be <code>NULL</code>, as described above; again, it will
+ *	 return true.
+ *
+ *	 If there was a delegate in place before the call, Growl_SetDelegate will
+ *	 call the old delegate's release member if it was non-<code>NULL</code>. If
+ *	 <code>newDelegate</code> is non-<code>NULL</code>, Growl_SetDelegate will
+ *	 call <code>newDelegate->retain</code>, and set the delegate to its return
+ *	 value.
+ *
+ *	 If you are using Growl-WithInstaller.framework, and an older version of
+ *	 Growl is installed on the user's system, the user will automatically be
+ *	 prompted to update.
+ *
+ *	 GrowlApplicationBridge currently does not copy this structure, nor does it
+ *	 retain any of the CF objects in the structure (it regards the structure as
+ *	 a container that retains the objects when they are added and releases them
+ *	 when they are removed or the structure is destroyed). Also,
+ *	 GrowlApplicationBridge currently does not modify any member of the
+ *	 structure, except possibly the referenceCount by calling the retain and
+ *	 release members.
+ */
+GROWL_EXPORT Boolean Growl_SetDelegate(struct Growl_Delegate *newDelegate);
+
+/*!	@function	Growl_GetDelegate
+ *	@abstract	Returns the current Growl delegate, if any.
+ *	@result	The current Growl delegate.
+ *	@discussion	Returns the last pointer passed into Growl_SetDelegate, or
+ *	 <code>NULL</code> if no such call has been made.
+ *
+ *	 This function follows standard Core Foundation reference-counting rules.
+ *	 Because it is a Get function, not a Copy function, it will not retain the
+ *	 delegate on your behalf. You are responsible for retaining and releasing
+ *	 the delegate as needed.
+ */
+GROWL_EXPORT struct Growl_Delegate *Growl_GetDelegate(void);
+
+#pragma mark -
+
+//	@functiongroup	Posting Growl notifications
+
+/*!	@function	Growl_PostNotification
+ *	@abstract	Posts a Growl notification.
+ *	@param	notification	The notification to post.
+ *	@discussion	This is the preferred means for sending a Growl notification.
+ *	 The notification name and at least one of the title and description are
+ *	 required (all three are preferred). All other parameters may be
+ *	 <code>NULL</code> (or 0 or false as appropriate) to accept default values.
+ *
+ *	 If using the Growl-WithInstaller framework, if Growl is not installed the
+ *	 user will be prompted to install Growl.
+ *	 If the user cancels, this function will have no effect until the next
+ *	 application session, at which time when it is called the user will be
+ *	 prompted again. The user is also given the option to not be prompted again.
+ *	 If the user does choose to install Growl, the requested notification will
+ *	 be displayed once Growl is installed and running.
+ */
+GROWL_EXPORT void Growl_PostNotification(const struct Growl_Notification *notification);
+
+/*!	@function Growl_PostNotificationWithDictionary
+*	@abstract	Notifies using a userInfo dictionary suitable for passing to
+*	 CFDistributedNotificationCenter.
+*	@param	userInfo	The dictionary to notify with.
+*	@discussion	Before Growl 0.6, your application would have posted
+*	 notifications using CFDistributedNotificationCenter by creating a userInfo
+*	 dictionary with the notification data. This had the advantage of allowing
+*	 you to add other data to the dictionary for programs besides Growl that
+*	 might be listening.
+*
+*	 This function allows you to use such dictionaries without being restricted
+*	 to using CFDistributedNotificationCenter. The keys for this dictionary
+ *	 can be found in GrowlDefines.h.
+*/
+GROWL_EXPORT void Growl_PostNotificationWithDictionary(CFDictionaryRef userInfo);
+
+/*!	@function	Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext
+ *	@abstract	Posts a Growl notification using parameter values.
+ *	@param	title	The title of the notification.
+ *	@param	description	The description of the notification.
+ *	@param	notificationName	The name of the notification as listed in the
+ *	 registration dictionary.
+ *	@param	iconData	Data representing a notification icon. Can be <code>NULL</code>.
+ *	@param	priority	The priority of the notification (-2 to +2, with -2
+ *	 being Very Low and +2 being Very High).
+ *	@param	isSticky	If true, requests that this notification wait for a
+ *	 response from the user.
+ *	@param	clickContext	An object to pass to the clickCallback, if any. Can
+ *	 be <code>NULL</code>, in which case the clickCallback is not called.
+ *	@discussion	Creates a temporary Growl_Notification, fills it out with the
+ *	 supplied information, and calls Growl_PostNotification on it.
+ *	 See struct Growl_Notification and Growl_PostNotification for more
+ *	 information.
+ *
+ *	 The icon data can be in any format supported by NSImage. As of Mac OS X
+ *	 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and PICT formats.
+ */
+GROWL_EXPORT void Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext(
+ /*inhale*/
+	CFStringRef title,
+	CFStringRef description,
+	CFStringRef notificationName,
+	CFDataRef iconData,
+	signed int priority,
+	Boolean isSticky,
+	CFPropertyListRef clickContext);
+
+#pragma mark -
+
+//	@functiongroup	Registering
+
+/*!	@function Growl_RegisterWithDictionary
+ *	@abstract	Register your application with Growl without setting a delegate.
+ *	@discussion	When you call this function with a dictionary,
+ *	 GrowlApplicationBridge registers your application using that dictionary.
+ *	 If you pass <code>NULL</code>, GrowlApplicationBridge will ask the delegate
+ *	 (if there is one) for a dictionary, and if that doesn't work, it will look
+ *	 in your application's bundle for an auto-discoverable plist.
+ *	 (XXX refer to more information on that)
+ *
+ *	 If you pass a dictionary to this function, it must include the
+ *	 <code>GROWL_APP_NAME</code> key, unless a delegate is set.
+ *
+ *	 This function is mainly an alternative to the delegate system introduced
+ *	 with Growl 0.6. Without a delegate, you cannot receive callbacks such as
+ *	 <code>growlIsReady</code> (since they are sent to the delegate). You can,
+ *	 however, set a delegate after registering without one.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ *	@result <code>false</code> if registration failed (e.g. if Growl isn't installed).
+ */
+GROWL_EXPORT Boolean Growl_RegisterWithDictionary(CFDictionaryRef regDict);
+
+/*!	@function	Growl_Reregister
+ *	@abstract	Updates your registration with Growl.
+ *	@discussion	If your application changes the contents of the
+ *	 GROWL_NOTIFICATIONS_ALL key in the registrationDictionary member of the
+ *	 Growl delegate, or if it changes the value of that member, or if it
+ *	 changes the contents of its auto-discoverable plist, call this function
+ *	 to have Growl update its registration information for your application.
+ *
+ *	 Otherwise, this function does not normally need to be called. If you're
+ *	 using a delegate, your application will be registered when you set the
+ *	 delegate if both the delegate and its registrationDictionary member are
+ *	 non-<code>NULL</code>.
+ *
+ *	 This function is now implemented using
+ *	 <code>Growl_RegisterWithDictionary</code>.
+ */
+GROWL_EXPORT void Growl_Reregister(void);
+
+#pragma mark -
+
+/*!	@function	Growl_SetWillRegisterWhenGrowlIsReady
+ *	@abstract	Tells GrowlApplicationBridge to register with Growl when Growl
+ *	 launches (or not).
+ *	@discussion	When Growl has started listening for notifications, it posts a
+ *	 <code>GROWL_IS_READY</code> notification on the Distributed Notification
+ *	 Center. GrowlApplicationBridge listens for this notification, using it to
+ *	 perform various tasks (such as calling your delegate's
+ *	 <code>growlIsReady</code> callback, if it has one). If this function is
+ *	 called with <code>true</code>, one of those tasks will be to reregister
+ *	 with Growl (in the manner of <code>Growl_Reregister</code>).
+ *
+ *	 This attribute is automatically set back to <code>false</code>
+ *	 (the default) after every <code>GROWL_IS_READY</code> notification.
+ *	@param	flag	<code>true</code> if you want GrowlApplicationBridge to register with
+ *	 Growl when next it is ready; <code>false</code> if not.
+ */
+GROWL_EXPORT void Growl_SetWillRegisterWhenGrowlIsReady(Boolean flag);
+/*!	@function	Growl_WillRegisterWhenGrowlIsReady
+ *	@abstract	Reports whether GrowlApplicationBridge will register with Growl
+ *	 when Growl next launches.
+ *	@result	<code>true</code> if GrowlApplicationBridge will register with
+ *	 Growl when next it posts GROWL_IS_READY; <code>false</code> if not.
+ */
+GROWL_EXPORT Boolean Growl_WillRegisterWhenGrowlIsReady(void);
+
+#pragma mark -
+
+//	@functiongroup	Obtaining registration dictionaries
+
+/*!	@function	Growl_CopyRegistrationDictionaryFromDelegate
+ *	@abstract	Asks the delegate for a registration dictionary.
+ *	@discussion	If no delegate is set, or if the delegate's
+ *	 <code>registrationDictionary</code> member is <code>NULL</code>, this
+ *	 function returns <code>NULL</code>.
+ *
+ *	 This function does not attempt to clean up the dictionary in any way - for
+ *	 example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
+ *	 will be missing it too. Use
+ *	 <code>Growl_CreateRegistrationDictionaryByFillingInDictionary</code> or
+ *	 <code>Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys</code>
+ *	 to try to fill in missing keys.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ *	@result A registration dictionary.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CopyRegistrationDictionaryFromDelegate(void);
+
+/*!	@function	Growl_CopyRegistrationDictionaryFromBundle
+ *	@abstract	Looks in a bundle for a registration dictionary.
+ *	@discussion	This function looks in a bundle for an auto-discoverable
+ *	 registration dictionary file using <code>CFBundleCopyResourceURL</code>.
+ *	 If it finds one, it loads the file using <code>CFPropertyList</code> and
+ *	 returns the result.
+ *
+ *	 If you pass <code>NULL</code> as the bundle, the main bundle is examined.
+ *
+ *	 This function does not attempt to clean up the dictionary in any way - for
+ *	 example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
+ *	 will be missing it too. Use
+ *	 <code>Growl_CreateRegistrationDictionaryByFillingInDictionary:</code> or
+ *	 <code>Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys</code>
+ *	 to try to fill in missing keys.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ *	@result A registration dictionary.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CopyRegistrationDictionaryFromBundle(CFBundleRef bundle);
+
+/*!	@function	Growl_CreateBestRegistrationDictionary
+ *	@abstract	Obtains a registration dictionary, filled out to the best of
+ *	 GrowlApplicationBridge's knowledge.
+ *	@discussion	This function creates a registration dictionary as best
+ *	 GrowlApplicationBridge knows how.
+ *
+ *	 First, GrowlApplicationBridge examines the Growl delegate (if there is
+ *	 one) and gets the registration dictionary from that. If no such dictionary
+ *	 was obtained, GrowlApplicationBridge looks in your application's main
+ *	 bundle for an auto-discoverable registration dictionary file. If that
+ *	 doesn't exist either, this function returns <code>NULL</code>.
+ *
+ *	 Second, GrowlApplicationBridge calls
+ *	 <code>Growl_CreateRegistrationDictionaryByFillingInDictionary</code> with
+ *	 whatever dictionary was obtained. The result of that function is the
+ *	 result of this function.
+ *
+ *	 GrowlApplicationBridge uses this function when you call
+ *	 <code>Growl_SetDelegate</code>, or when you call
+ *	 <code>Growl_RegisterWithDictionary</code> with <code>NULL</code>.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ *	@result	A registration dictionary.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CreateBestRegistrationDictionary(void);
+
+#pragma mark -
+
+//	@functiongroup	Filling in registration dictionaries
+
+/*!	@function	Growl_CreateRegistrationDictionaryByFillingInDictionary
+ *	@abstract	Tries to fill in missing keys in a registration dictionary.
+ *	@param	regDict	The dictionary to fill in.
+ *	@result	The dictionary with the keys filled in.
+ *	@discussion	This function examines the passed-in dictionary for missing keys,
+ *	 and tries to work out correct values for them. As of 0.7, it uses:
+ *
+ *	 Key							             Value
+ *	 ---							             -----
+ *	 <code>GROWL_APP_NAME</code>                 <code>CFBundleExecutableName</code>
+ *	 <code>GROWL_APP_ICON</code>                 The icon of the application.
+ *	 <code>GROWL_APP_LOCATION</code>             The location of the application.
+ *	 <code>GROWL_NOTIFICATIONS_DEFAULT</code>    <code>GROWL_NOTIFICATIONS_ALL</code>
+ *
+ *	 Keys are only filled in if missing; if a key is present in the dictionary,
+ *	 its value will not be changed.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CreateRegistrationDictionaryByFillingInDictionary(CFDictionaryRef regDict);
+/*!	@function	Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys
+ *	@abstract	Tries to fill in missing keys in a registration dictionary.
+ *	@param	regDict	The dictionary to fill in.
+ *	@param	keys	The keys to fill in. If <code>NULL</code>, any missing keys are filled in.
+ *	@result	The dictionary with the keys filled in.
+ *	@discussion	This function examines the passed-in dictionary for missing keys,
+ *	 and tries to work out correct values for them. As of 0.7, it uses:
+ *
+ *	 Key							             Value
+ *	 ---							             -----
+ *	 <code>GROWL_APP_NAME</code>                 <code>CFBundleExecutableName</code>
+ *	 <code>GROWL_APP_ICON</code>                 The icon of the application.
+ *	 <code>GROWL_APP_LOCATION</code>             The location of the application.
+ *	 <code>GROWL_NOTIFICATIONS_DEFAULT</code>    <code>GROWL_NOTIFICATIONS_ALL</code>
+ *
+ *	 Only those keys that are listed in <code>keys</code> will be filled in.
+ *	 Other missing keys are ignored. Also, keys are only filled in if missing;
+ *	 if a key is present in the dictionary, its value will not be changed.
+ *
+ *	 This function was introduced in Growl.framework 0.7.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys(CFDictionaryRef regDict, CFSetRef keys);
+
+/*!	@brief	Tries to fill in missing keys in a notification dictionary.
+ *	@param	notifDict	The dictionary to fill in.
+ *	@return	The dictionary with the keys filled in. This will be a separate instance from \a notifDict.
+ *	@discussion	This function examines the \a notifDict for missing keys, and 
+ *	 tries to get them from the last known registration dictionary. As of 1.1, 
+ *	 the keys that it will look for are:
+ *
+ *	 \li <code>GROWL_APP_NAME</code>
+ *	 \li <code>GROWL_APP_ICON</code>
+ *
+ *	@since Growl.framework 1.1
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CreateNotificationDictionaryByFillingInDictionary(CFDictionaryRef notifDict);
+
+#pragma mark -
+
+//	@functiongroup	Querying Growl's status
+
+/*!	@function	Growl_IsInstalled
+ *	@abstract	Determines whether the Growl prefpane and its helper app are
+ *	 installed.
+ *	@result	Returns true if Growl is installed, false otherwise.
+ */
+GROWL_EXPORT Boolean Growl_IsInstalled(void);
+
+/*!	@function	Growl_IsRunning
+ *	@abstract	Cycles through the process list to find whether GrowlHelperApp
+ *	 is running.
+ *	@result	Returns true if Growl is running, false otherwise.
+ */
+GROWL_EXPORT Boolean Growl_IsRunning(void);
+
+#pragma mark -
+
+//	@functiongroup	Launching Growl
+
+/*!	@typedef	GrowlLaunchCallback
+ *	@abstract	Callback to notify you that Growl is running.
+ *	@param	context	The context pointer passed to Growl_LaunchIfInstalled.
+ *	@discussion	Growl_LaunchIfInstalled calls this callback function if Growl
+ *	 was already running or if it launched Growl successfully.
+ */
+typedef void (*GrowlLaunchCallback)(void *context);
+
+/*!	@function	Growl_LaunchIfInstalled
+ *	@abstract	Launches GrowlHelperApp if it is not already running.
+ *	@param	callback	A callback function which will be called if Growl was successfully
+ *	 launched or was already running. Can be <code>NULL</code>.
+ *	@param	context	The context pointer to pass to the callback. Can be <code>NULL</code>.
+ *	@result	Returns true if Growl was successfully launched or was already
+ *	 running; returns false and does not call the callback otherwise.
+ *	@discussion	Returns true and calls the callback (if the callback is not
+ *	 <code>NULL</code>) if the Growl helper app began launching or was already
+ *	 running. Returns false and performs no other action if Growl could not be
+ *	 launched (e.g. because the Growl preference pane is not properly installed).
+ *
+ *	 If <code>Growl_CreateBestRegistrationDictionary</code> returns
+ *	 non-<code>NULL</code>, this function will register with Growl atomically.
+ *
+ *	 The callback should take a single argument; this is to allow applications
+ *	 to have context-relevant information passed back. It is perfectly
+ *	 acceptable for context to be <code>NULL</code>. The callback itself can be
+ *	 <code>NULL</code> if you don't want one.
+ */
+GROWL_EXPORT Boolean Growl_LaunchIfInstalled(GrowlLaunchCallback callback, void *context);
+
+#pragma mark -
+#pragma mark Constants
+
+/*!	@defined	GROWL_PREFPANE_BUNDLE_IDENTIFIER
+ *	@abstract	The CFBundleIdentifier of the Growl preference pane bundle.
+ *	@discussion	GrowlApplicationBridge uses this to determine whether Growl is
+ *	 currently installed, by searching for the Growl preference pane. Your
+ *	 application probably does not need to use this macro itself.
+ */
+#ifndef GROWL_PREFPANE_BUNDLE_IDENTIFIER
+#define GROWL_PREFPANE_BUNDLE_IDENTIFIER	CFSTR("com.growl.prefpanel")
+#endif
+
+__END_DECLS
+
+#endif /* _GROWLAPPLICATIONBRIDGE_CARBON_H_ */

Added: trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/GrowlApplicationBridge.h
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/GrowlApplicationBridge.h	                        (rev 0)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/GrowlApplicationBridge.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,575 @@
+//
+//  GrowlApplicationBridge.h
+//  Growl
+//
+//  Created by Evan Schoenberg on Wed Jun 16 2004.
+//  Copyright 2004-2006 The Growl Project. All rights reserved.
+//
+
+/*!
+ *	@header		GrowlApplicationBridge.h
+ *	@abstract   Defines the GrowlApplicationBridge class.
+ *	@discussion This header defines the GrowlApplicationBridge class as well as
+ *	 the GROWL_PREFPANE_BUNDLE_IDENTIFIER constant.
+ */
+
+#ifndef __GrowlApplicationBridge_h__
+#define __GrowlApplicationBridge_h__
+
+#import <Foundation/Foundation.h>
+#import <AppKit/AppKit.h>
+#import "GrowlDefines.h"
+
+//Forward declarations
+ at protocol GrowlApplicationBridgeDelegate;
+
+//Internal notification when the user chooses not to install (to avoid continuing to cache notifications awaiting installation)
+#define GROWL_USER_CHOSE_NOT_TO_INSTALL_NOTIFICATION @"User chose not to install"
+
+//------------------------------------------------------------------------------
+#pragma mark -
+
+/*!
+ *	@class      GrowlApplicationBridge
+ *	@abstract   A class used to interface with Growl.
+ *	@discussion This class provides a means to interface with Growl.
+ *
+ *	 Currently it provides a way to detect if Growl is installed and launch the
+ *	 GrowlHelperApp if it's not already running.
+ */
+ at interface GrowlApplicationBridge : NSObject {
+
+}
+
+/*!
+ *	@method isGrowlInstalled
+ *	@abstract Detects whether Growl is installed.
+ *	@discussion Determines if the Growl prefpane and its helper app are installed.
+ *	@result Returns YES if Growl is installed, NO otherwise.
+ */
++ (BOOL) isGrowlInstalled;
+
+/*!
+ *	@method isGrowlRunning
+ *	@abstract Detects whether GrowlHelperApp is currently running.
+ *	@discussion Cycles through the process list to find whether GrowlHelperApp is running and returns its findings.
+ *	@result Returns YES if GrowlHelperApp is running, NO otherwise.
+ */
++ (BOOL) isGrowlRunning;
+
+#pragma mark -
+
+/*!
+ *	@method setGrowlDelegate:
+ *	@abstract Set the object which will be responsible for providing and receiving Growl information.
+ *	@discussion This must be called before using GrowlApplicationBridge.
+ *
+ *	 The methods in the GrowlApplicationBridgeDelegate protocol are required
+ *	 and return the basic information needed to register with Growl.
+ *
+ *	 The methods in the GrowlApplicationBridgeDelegate_InformalProtocol
+ *	 informal protocol are individually optional.  They provide a greater
+ *	 degree of interaction between the application and growl such as informing
+ *	 the application when one of its Growl notifications is clicked by the user.
+ *
+ *	 The methods in the GrowlApplicationBridgeDelegate_Installation_InformalProtocol
+ *	 informal protocol are individually optional and are only applicable when
+ *	 using the Growl-WithInstaller.framework which allows for automated Growl
+ *	 installation.
+ *
+ *	 When this method is called, data will be collected from inDelegate, Growl
+ *	 will be launched if it is not already running, and the application will be
+ *	 registered with Growl.
+ *
+ *	 If using the Growl-WithInstaller framework, if Growl is already installed
+ *	 but this copy of the framework has an updated version of Growl, the user
+ *	 will be prompted to update automatically.
+ *
+ *	@param inDelegate The delegate for the GrowlApplicationBridge. It must conform to the GrowlApplicationBridgeDelegate protocol.
+ */
++ (void) setGrowlDelegate:(NSObject<GrowlApplicationBridgeDelegate> *)inDelegate;
+
+/*!
+ *	@method growlDelegate
+ *	@abstract Return the object responsible for providing and receiving Growl information.
+ *	@discussion See setGrowlDelegate: for details.
+ *	@result The Growl delegate.
+ */
++ (NSObject<GrowlApplicationBridgeDelegate> *) growlDelegate;
+
+#pragma mark -
+
+/*!
+ *	@method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:
+ *	@abstract Send a Growl notification.
+ *	@discussion This is the preferred means for sending a Growl notification.
+ *	 The notification name and at least one of the title and description are
+ *	 required (all three are preferred).  All other parameters may be
+ *	 <code>nil</code> (or 0 or NO as appropriate) to accept default values.
+ *
+ *	 If using the Growl-WithInstaller framework, if Growl is not installed the
+ *	 user will be prompted to install Growl. If the user cancels, this method
+ *	 will have no effect until the next application session, at which time when
+ *	 it is called the user will be prompted again. The user is also given the
+ *	 option to not be prompted again.  If the user does choose to install Growl,
+ *	 the requested notification will be displayed once Growl is installed and
+ *	 running.
+ *
+ *	@param title		The title of the notification displayed to the user.
+ *	@param description	The full description of the notification displayed to the user.
+ *	@param notifName	The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane.
+ *	@param iconData		<code>NSData</code> object to show with the notification as its icon. If <code>nil</code>, the application's icon will be used instead.
+ *	@param priority		The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority.
+ *	@param isSticky		If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications.
+ *	@param clickContext	A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of <code>NSString</code>, <code>NSArray</code>, <code>NSNumber</code>, <code>NSDictionary</code>, and <code>NSData</code> types).
+ */
++ (void) notifyWithTitle:(NSString *)title
+			 description:(NSString *)description
+		notificationName:(NSString *)notifName
+				iconData:(NSData *)iconData
+				priority:(signed int)priority
+				isSticky:(BOOL)isSticky
+			clickContext:(id)clickContext;
+
+/*!
+ *	@method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:identifier:
+ *	@abstract Send a Growl notification.
+ *	@discussion This is the preferred means for sending a Growl notification.
+ *	 The notification name and at least one of the title and description are
+ *	 required (all three are preferred).  All other parameters may be
+ *	 <code>nil</code> (or 0 or NO as appropriate) to accept default values.
+ *
+ *	 If using the Growl-WithInstaller framework, if Growl is not installed the
+ *	 user will be prompted to install Growl. If the user cancels, this method
+ *	 will have no effect until the next application session, at which time when
+ *	 it is called the user will be prompted again. The user is also given the
+ *	 option to not be prompted again.  If the user does choose to install Growl,
+ *	 the requested notification will be displayed once Growl is installed and
+ *	 running.
+ *
+ *	@param title		The title of the notification displayed to the user.
+ *	@param description	The full description of the notification displayed to the user.
+ *	@param notifName	The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane.
+ *	@param iconData		<code>NSData</code> object to show with the notification as its icon. If <code>nil</code>, the application's icon will be used instead.
+ *	@param priority		The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority.
+ *	@param isSticky		If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications.
+ *	@param clickContext	A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of <code>NSString</code>, <code>NSArray</code>, <code>NSNumber</code>, <code>NSDictionary</code>, and <code>NSData</code> types).
+ *	@param identifier	An identifier for this notification. Notifications with equal identifiers are coalesced.
+ */
++ (void) notifyWithTitle:(NSString *)title
+			 description:(NSString *)description
+		notificationName:(NSString *)notifName
+				iconData:(NSData *)iconData
+				priority:(signed int)priority
+				isSticky:(BOOL)isSticky
+			clickContext:(id)clickContext
+			  identifier:(NSString *)identifier;
+
+/*!	@method	notifyWithDictionary:
+ *	@abstract	Notifies using a userInfo dictionary suitable for passing to
+ *	 <code>NSDistributedNotificationCenter</code>.
+ *	@param	userInfo	The dictionary to notify with.
+ *	@discussion	Before Growl 0.6, your application would have posted
+ *	 notifications using <code>NSDistributedNotificationCenter</code> by
+ *	 creating a userInfo dictionary with the notification data. This had the
+ *	 advantage of allowing you to add other data to the dictionary for programs
+ *	 besides Growl that might be listening.
+ *
+ *	 This method allows you to use such dictionaries without being restricted
+ *	 to using <code>NSDistributedNotificationCenter</code>. The keys for this dictionary
+ *	 can be found in GrowlDefines.h.
+ */
++ (void) notifyWithDictionary:(NSDictionary *)userInfo;
+
+#pragma mark -
+
+/*!	@method	registerWithDictionary:
+ *	@abstract	Register your application with Growl without setting a delegate.
+ *	@discussion	When you call this method with a dictionary,
+ *	 GrowlApplicationBridge registers your application using that dictionary.
+ *	 If you pass <code>nil</code>, GrowlApplicationBridge will ask the delegate
+ *	 (if there is one) for a dictionary, and if that doesn't work, it will look
+ *	 in your application's bundle for an auto-discoverable plist.
+ *	 (XXX refer to more information on that)
+ *
+ *	 If you pass a dictionary to this method, it must include the
+ *	 <code>GROWL_APP_NAME</code> key, unless a delegate is set.
+ *
+ *	 This method is mainly an alternative to the delegate system introduced
+ *	 with Growl 0.6. Without a delegate, you cannot receive callbacks such as
+ *	 <code>-growlIsReady</code> (since they are sent to the delegate). You can,
+ *	 however, set a delegate after registering without one.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ */
++ (BOOL) registerWithDictionary:(NSDictionary *)regDict;
+
+/*!	@method	reregisterGrowlNotifications
+ *	@abstract	Reregister the notifications for this application.
+ *	@discussion	This method does not normally need to be called.  If your
+ *	 application changes what notifications it is registering with Growl, call
+ *	 this method to have the Growl delegate's
+ *	 <code>-registrationDictionaryForGrowl</code> method called again and the
+ *	 Growl registration information updated.
+ *
+ *	 This method is now implemented using <code>-registerWithDictionary:</code>.
+ */
++ (void) reregisterGrowlNotifications;
+
+#pragma mark -
+
+/*!	@method	setWillRegisterWhenGrowlIsReady:
+ *	@abstract	Tells GrowlApplicationBridge to register with Growl when Growl
+ *	 launches (or not).
+ *	@discussion	When Growl has started listening for notifications, it posts a
+ *	 <code>GROWL_IS_READY</code> notification on the Distributed Notification
+ *	 Center. GrowlApplicationBridge listens for this notification, using it to
+ *	 perform various tasks (such as calling your delegate's
+ *	 <code>-growlIsReady</code> method, if it has one). If this method is
+ *	 called with <code>YES</code>, one of those tasks will be to reregister
+ *	 with Growl (in the manner of <code>-reregisterGrowlNotifications</code>).
+ *
+ *	 This attribute is automatically set back to <code>NO</code> (the default)
+ *	 after every <code>GROWL_IS_READY</code> notification.
+ *	@param	flag	<code>YES</code> if you want GrowlApplicationBridge to register with
+ *	 Growl when next it is ready; <code>NO</code> if not.
+ */
++ (void) setWillRegisterWhenGrowlIsReady:(BOOL)flag;
+/*!	@method	willRegisterWhenGrowlIsReady
+ *	@abstract	Reports whether GrowlApplicationBridge will register with Growl
+ *	 when Growl next launches.
+ *	@result	<code>YES</code> if GrowlApplicationBridge will register with Growl
+ *	 when next it posts GROWL_IS_READY; <code>NO</code> if not.
+ */
++ (BOOL) willRegisterWhenGrowlIsReady;
+
+#pragma mark -
+
+/*!	@method	registrationDictionaryFromDelegate
+ *	@abstract	Asks the delegate for a registration dictionary.
+ *	@discussion	If no delegate is set, or if the delegate's
+ *	 <code>-registrationDictionaryForGrowl</code> method returns
+ *	 <code>nil</code>, this method returns <code>nil</code>.
+ *
+ *	 This method does not attempt to clean up the dictionary in any way - for
+ *	 example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
+ *	 will be missing it too. Use <code>+[GrowlApplicationBridge
+ *	 registrationDictionaryByFillingInDictionary:]</code> or
+ *	 <code>+[GrowlApplicationBridge
+ *	 registrationDictionaryByFillingInDictionary:restrictToKeys:]</code> to try
+ *	 to fill in missing keys.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ *	@result A registration dictionary.
+ */
++ (NSDictionary *) registrationDictionaryFromDelegate;
+
+/*!	@method	registrationDictionaryFromBundle:
+ *	@abstract	Looks in a bundle for a registration dictionary.
+ *	@discussion	This method looks in a bundle for an auto-discoverable
+ *	 registration dictionary file using <code>-[NSBundle
+ *	 pathForResource:ofType:]</code>. If it finds one, it loads the file using
+ *	 <code>+[NSDictionary dictionaryWithContentsOfFile:]</code> and returns the
+ *	 result.
+ *
+ *	 If you pass <code>nil</code> as the bundle, the main bundle is examined.
+ *
+ *	 This method does not attempt to clean up the dictionary in any way - for
+ *	 example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
+ *	 will be missing it too. Use <code>+[GrowlApplicationBridge
+ *	 registrationDictionaryByFillingInDictionary:]</code> or
+ *	 <code>+[GrowlApplicationBridge
+ *	 registrationDictionaryByFillingInDictionary:restrictToKeys:]</code> to try
+ *	 to fill in missing keys.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ *	@result A registration dictionary.
+ */
++ (NSDictionary *) registrationDictionaryFromBundle:(NSBundle *)bundle;
+
+/*!	@method	bestRegistrationDictionary
+ *	@abstract	Obtains a registration dictionary, filled out to the best of
+ *	 GrowlApplicationBridge's knowledge.
+ *	@discussion	This method creates a registration dictionary as best
+ *	 GrowlApplicationBridge knows how.
+ *
+ *	 First, GrowlApplicationBridge contacts the Growl delegate (if there is
+ *	 one) and gets the registration dictionary from that. If no such dictionary
+ *	 was obtained, GrowlApplicationBridge looks in your application's main
+ *	 bundle for an auto-discoverable registration dictionary file. If that
+ *	 doesn't exist either, this method returns <code>nil</code>.
+ *
+ *	 Second, GrowlApplicationBridge calls
+ *	 <code>+registrationDictionaryByFillingInDictionary:</code> with whatever
+ *	 dictionary was obtained. The result of that method is the result of this
+ *	 method.
+ *
+ *	 GrowlApplicationBridge uses this method when you call
+ *	 <code>+setGrowlDelegate:</code>, or when you call
+ *	 <code>+registerWithDictionary:</code> with <code>nil</code>.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ *	@result	A registration dictionary.
+ */
++ (NSDictionary *) bestRegistrationDictionary;
+
+#pragma mark -
+
+/*!	@method	registrationDictionaryByFillingInDictionary:
+ *	@abstract	Tries to fill in missing keys in a registration dictionary.
+ *	@discussion	This method examines the passed-in dictionary for missing keys,
+ *	 and tries to work out correct values for them. As of 0.7, it uses:
+ *
+ *	 Key							             Value
+ *	 ---							             -----
+ *	 <code>GROWL_APP_NAME</code>                 <code>CFBundleExecutableName</code>
+ *	 <code>GROWL_APP_ICON</code>                 The icon of the application.
+ *	 <code>GROWL_APP_LOCATION</code>             The location of the application.
+ *	 <code>GROWL_NOTIFICATIONS_DEFAULT</code>    <code>GROWL_NOTIFICATIONS_ALL</code>
+ *
+ *	 Keys are only filled in if missing; if a key is present in the dictionary,
+ *	 its value will not be changed.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ *	@param	regDict	The dictionary to fill in.
+ *	@result	The dictionary with the keys filled in. This is an autoreleased
+ *	 copy of <code>regDict</code>.
+ */
++ (NSDictionary *) registrationDictionaryByFillingInDictionary:(NSDictionary *)regDict;
+/*!	@method	registrationDictionaryByFillingInDictionary:restrictToKeys:
+ *	@abstract	Tries to fill in missing keys in a registration dictionary.
+ *	@discussion	This method examines the passed-in dictionary for missing keys,
+ *	 and tries to work out correct values for them. As of 0.7, it uses:
+ *
+ *	 Key							             Value
+ *	 ---							             -----
+ *	 <code>GROWL_APP_NAME</code>                 <code>CFBundleExecutableName</code>
+ *	 <code>GROWL_APP_ICON</code>                 The icon of the application.
+ *	 <code>GROWL_APP_LOCATION</code>             The location of the application.
+ *	 <code>GROWL_NOTIFICATIONS_DEFAULT</code>    <code>GROWL_NOTIFICATIONS_ALL</code>
+ *
+ *	 Only those keys that are listed in <code>keys</code> will be filled in.
+ *	 Other missing keys are ignored. Also, keys are only filled in if missing;
+ *	 if a key is present in the dictionary, its value will not be changed.
+ *
+ *	 This method was introduced in Growl.framework 0.7.
+ *	@param	regDict	The dictionary to fill in.
+ *	@param	keys	The keys to fill in. If <code>nil</code>, any missing keys are filled in.
+ *	@result	The dictionary with the keys filled in. This is an autoreleased
+ *	 copy of <code>regDict</code>.
+ */
++ (NSDictionary *) registrationDictionaryByFillingInDictionary:(NSDictionary *)regDict restrictToKeys:(NSSet *)keys;
+
+/*!	@brief	Tries to fill in missing keys in a notification dictionary.
+ *	@param	notifDict	The dictionary to fill in.
+ *	@return	The dictionary with the keys filled in. This will be a separate instance from \a notifDict.
+ *	@discussion	This function examines the \a notifDict for missing keys, and 
+ *	 tries to get them from the last known registration dictionary. As of 1.1, 
+ *	 the keys that it will look for are:
+ *
+ *	 \li <code>GROWL_APP_NAME</code>
+ *	 \li <code>GROWL_APP_ICON</code>
+ *
+ *	@since Growl.framework 1.1
+ */
++ (NSDictionary *) notificationDictionaryByFillingInDictionary:(NSDictionary *)regDict;
+
++ (NSDictionary *) frameworkInfoDictionary;
+ at end
+
+//------------------------------------------------------------------------------
+#pragma mark -
+
+/*!
+ *	@protocol GrowlApplicationBridgeDelegate
+ *	@abstract Required protocol for the Growl delegate.
+ *	@discussion The methods in this protocol are required and are called
+ *	 automatically as needed by GrowlApplicationBridge. See
+ *	 <code>+[GrowlApplicationBridge setGrowlDelegate:]</code>.
+ *	 See also <code>GrowlApplicationBridgeDelegate_InformalProtocol</code>.
+ */
+
+ at protocol GrowlApplicationBridgeDelegate
+
+// -registrationDictionaryForGrowl has moved to the informal protocol as of 0.7.
+
+ at end
+
+//------------------------------------------------------------------------------
+#pragma mark -
+
+/*!
+ *	@category NSObject(GrowlApplicationBridgeDelegate_InformalProtocol)
+ *	@abstract Methods which may be optionally implemented by the GrowlDelegate.
+ *	@discussion The methods in this informal protocol will only be called if implemented by the delegate.
+ */
+ at interface NSObject (GrowlApplicationBridgeDelegate_InformalProtocol)
+
+/*!
+ *	@method registrationDictionaryForGrowl
+ *	@abstract Return the dictionary used to register this application with Growl.
+ *	@discussion The returned dictionary gives Growl the complete list of
+ *	 notifications this application will ever send, and it also specifies which
+ *	 notifications should be enabled by default.  Each is specified by an array
+ *	 of <code>NSString</code> objects.
+ *
+ *	 For most applications, these two arrays can be the same (if all sent
+ *	 notifications should be displayed by default).
+ *
+ *	 The <code>NSString</code> objects of these arrays will correspond to the
+ *	 <code>notificationName:</code> parameter passed in
+ *	 <code>+[GrowlApplicationBridge
+ *	 notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:]</code> calls.
+ *
+ *	 The dictionary should have the required key object pairs:
+ *	 key: GROWL_NOTIFICATIONS_ALL		object: <code>NSArray</code> of <code>NSString</code> objects
+ *	 key: GROWL_NOTIFICATIONS_DEFAULT	object: <code>NSArray</code> of <code>NSString</code> objects
+ *
+ *   The dictionary may have the following key object pairs:
+ *   key: GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES	object: <code>NSDictionary</code> of key: notification name		object: human-readable notification name
+ *
+ *	 You do not need to implement this method if you have an auto-discoverable
+ *	 plist file in your app bundle. (XXX refer to more information on that)
+ *
+ *	@result The <code>NSDictionary</code> to use for registration.
+ */
+- (NSDictionary *) registrationDictionaryForGrowl;
+
+/*!
+ *	@method applicationNameForGrowl
+ *	@abstract Return the name of this application which will be used for Growl bookkeeping.
+ *	@discussion This name is used both internally and in the Growl preferences.
+ *
+ *	 This should remain stable between different versions and incarnations of
+ *	 your application.
+ *	 For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and
+ *	 "SurfWriter Lite" are not.
+ *
+ *	 You do not need to implement this method if you are providing the
+ *	 application name elsewhere, meaning in an auto-discoverable plist file in
+ *	 your app bundle (XXX refer to more information on that) or in the result
+ *	 of -registrationDictionaryForGrowl.
+ *
+ *	@result The name of the application using Growl.
+ */
+- (NSString *) applicationNameForGrowl;
+
+/*!
+ *	@method applicationIconForGrowl
+ *	@abstract Return the <code>NSImage</code> to treat as the application icon.
+ *	@discussion The delegate may optionally return an <code>NSImage</code>
+ *	 object to use as the application icon. If this method is not implemented,
+ *	 {{{-applicationIconDataForGrowl}}} is tried. If that method is not
+ *	 implemented, the application's own icon is used. Neither method is
+ *	 generally needed.
+ *	@result The <code>NSImage</code> to treat as the application icon.
+ */
+- (NSImage *) applicationIconForGrowl;
+
+/*!
+ *	@method applicationIconDataForGrowl
+ *	@abstract Return the <code>NSData</code> to treat as the application icon.
+ *	@discussion The delegate may optionally return an <code>NSData</code>
+ *	 object to use as the application icon; if this is not implemented, the
+ *	 application's own icon is used.  This is not generally needed.
+ *	@result The <code>NSData</code> to treat as the application icon.
+ *	@deprecated In version 1.1, in favor of {{{-applicationIconForGrowl}}}.
+ */
+- (NSData *) applicationIconDataForGrowl;
+
+/*!
+ *	@method growlIsReady
+ *	@abstract Informs the delegate that Growl has launched.
+ *	@discussion Informs the delegate that Growl (specifically, the
+ *	 GrowlHelperApp) was launched successfully. The application can take actions
+ *   with the knowledge that Growl is installed and functional.
+ */
+- (void) growlIsReady;
+
+/*!
+ *	@method growlNotificationWasClicked:
+ *	@abstract Informs the delegate that a Growl notification was clicked.
+ *	@discussion Informs the delegate that a Growl notification was clicked.  It
+ *	 is only sent for notifications sent with a non-<code>nil</code>
+ *	 clickContext, so if you want to receive a message when a notification is
+ *	 clicked, clickContext must not be <code>nil</code> when calling
+ *	 <code>+[GrowlApplicationBridge notifyWithTitle: description:notificationName:iconData:priority:isSticky:clickContext:]</code>.
+ *	@param clickContext The clickContext passed when displaying the notification originally via +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:].
+ */
+- (void) growlNotificationWasClicked:(id)clickContext;
+
+/*!
+ *	@method growlNotificationTimedOut:
+ *	@abstract Informs the delegate that a Growl notification timed out.
+ *	@discussion Informs the delegate that a Growl notification timed out. It
+ *	 is only sent for notifications sent with a non-<code>nil</code>
+ *	 clickContext, so if you want to receive a message when a notification is
+ *	 clicked, clickContext must not be <code>nil</code> when calling
+ *	 <code>+[GrowlApplicationBridge notifyWithTitle: description:notificationName:iconData:priority:isSticky:clickContext:]</code>.
+ *	@param clickContext The clickContext passed when displaying the notification originally via +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:].
+ */
+- (void) growlNotificationTimedOut:(id)clickContext;
+
+ at end
+
+#pragma mark -
+/*!
+ *	@category NSObject(GrowlApplicationBridgeDelegate_Installation_InformalProtocol)
+ *	@abstract Methods which may be optionally implemented by the Growl delegate when used with Growl-WithInstaller.framework.
+ *	@discussion The methods in this informal protocol will only be called if
+ *	 implemented by the delegate.  They allow greater control of the information
+ *	 presented to the user when installing or upgrading Growl from within your
+ *	 application when using Growl-WithInstaller.framework.
+ */
+ at interface NSObject (GrowlApplicationBridgeDelegate_Installation_InformalProtocol)
+
+/*!
+ *	@method growlInstallationWindowTitle
+ *	@abstract Return the title of the installation window.
+ *	@discussion If not implemented, Growl will use a default, localized title.
+ *	@result An NSString object to use as the title.
+ */
+- (NSString *)growlInstallationWindowTitle;
+
+/*!
+ *	@method growlUpdateWindowTitle
+ *	@abstract Return the title of the upgrade window.
+ *	@discussion If not implemented, Growl will use a default, localized title.
+ *	@result An NSString object to use as the title.
+ */
+- (NSString *)growlUpdateWindowTitle;
+
+/*!
+ *	@method growlInstallationInformation
+ *	@abstract Return the information to display when installing.
+ *	@discussion This information may be as long or short as desired (the window
+ *	 will be sized to fit it).  It will be displayed to the user as an
+ *	 explanation of what Growl is and what it can do in your application.  It
+ *	 should probably note that no download is required to install.
+ *
+ *	 If this is not implemented, Growl will use a default, localized explanation.
+ *	@result An NSAttributedString object to display.
+ */
+- (NSAttributedString *)growlInstallationInformation;
+
+/*!
+ *	@method growlUpdateInformation
+ *	@abstract Return the information to display when upgrading.
+ *	@discussion This information may be as long or short as desired (the window
+ *	 will be sized to fit it).  It will be displayed to the user as an
+ *	 explanation that an updated version of Growl is included in your
+ *	 application and no download is required.
+ *
+ *	 If this is not implemented, Growl will use a default, localized explanation.
+ *	@result An NSAttributedString object to display.
+ */
+- (NSAttributedString *)growlUpdateInformation;
+
+ at end
+
+//private
+ at interface GrowlApplicationBridge (GrowlInstallationPrompt_private)
++ (void) _userChoseNotToInstallGrowl;
+ at end
+
+#endif /* __GrowlApplicationBridge_h__ */

Added: trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/GrowlDefines.h
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/GrowlDefines.h	                        (rev 0)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Headers/GrowlDefines.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,348 @@
+//
+//  GrowlDefines.h
+//
+
+#ifndef _GROWLDEFINES_H
+#define _GROWLDEFINES_H
+
+#ifdef __OBJC__
+#define XSTR(x) (@x)
+#define STRING_TYPE NSString *
+#else
+#define XSTR CFSTR
+#define STRING_TYPE CFStringRef
+#endif
+
+/*!	@header GrowlDefines.h
+ *	@abstract   Defines all the notification keys.
+ *	@discussion Defines all the keys used for registration with Growl and for
+ *	 Growl notifications.
+ *
+ *	 Most applications should use the functions or methods of Growl.framework
+ *	 instead of posting notifications such as those described here.
+ *	@updated 2004-01-25
+ */
+
+// UserInfo Keys for Registration
+#pragma mark UserInfo Keys for Registration
+
+/*!	@group Registration userInfo keys */
+/*	@abstract	Keys for the userInfo dictionary of a GROWL_APP_REGISTRATION distributed notification.
+ *	@discussion The values of these keys describe the application and the
+ *	 notifications it may post.
+ *
+ *	 Your application must register with Growl before it can post Growl
+ *	 notifications (and have them not be ignored). However, as of Growl 0.6,
+ *	 posting GROWL_APP_REGISTRATION notifications directly is no longer the
+ *	 preferred way to register your application. Your application should instead
+ *	 use Growl.framework's delegate system.
+ *	 See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for
+ *	 more information.
+ */
+
+/*!	@defined GROWL_APP_NAME
+ *	@abstract The name of your application.
+ *	@discussion The name of your application. This should remain stable between
+ *	 different versions and incarnations of your application.
+ *	 For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and
+ *	 "SurfWriter Lite" are not.
+ */
+#define GROWL_APP_NAME					XSTR("ApplicationName")
+/*!	@defined GROWL_APP_ID
+ *	@abstract The bundle identifier of your application.
+ *	@discussion The bundle identifier of your application. This key should
+ *   be unique for your application while there may be several applications
+ *   with the same GROWL_APP_NAME.
+ *   This key is optional.
+ */
+#define GROWL_APP_ID					XSTR("ApplicationId")
+/*!	@defined GROWL_APP_ICON
+ *	@abstract The image data for your application's icon.
+ *	@discussion Image data representing your application's icon. This may be
+ *	 superimposed on a notification icon as a badge, used as the notification
+ *	 icon when a notification-specific icon is not supplied, or ignored
+ *	 altogether, depending on the display. Must be in a format supported by
+ *	 NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_APP_ICON					XSTR("ApplicationIcon")
+/*!	@defined GROWL_NOTIFICATIONS_DEFAULT
+ *	@abstract The array of notifications to turn on by default.
+ *	@discussion These are the names of the notifications that should be enabled
+ *	 by default when your application registers for the first time. If your
+ *	 application reregisters, Growl will look here for any new notification
+ *	 names found in GROWL_NOTIFICATIONS_ALL, but ignore any others.
+ */
+#define GROWL_NOTIFICATIONS_DEFAULT		XSTR("DefaultNotifications")
+/*!	@defined GROWL_NOTIFICATIONS_ALL
+ *	@abstract The array of all notifications your application can send.
+ *	@discussion These are the names of all of the notifications that your
+ *	 application may post. See GROWL_NOTIFICATION_NAME for a discussion of good
+ *	 notification names.
+ */
+#define GROWL_NOTIFICATIONS_ALL			XSTR("AllNotifications")
+/*! @defined GROWL_NOTIFICATIONS_HUMAN_READABLE_DESCRIPTIONS
+ *  @abstract A dictionary of human-readable names for your notifications.
+ *  @discussion By default, the Growl UI will display notifications by the names given in GROWL_NOTIFICATIONS_ALL
+ *  which correspond to the GROWL_NOTIFICATION_NAME. This dictionary specifies the human-readable name to display.
+ *  The keys of the dictionary are GROWL_NOTIFICATION_NAME strings; the objects are the human-readable versions.
+ *  For any GROWL_NOTIFICATION_NAME not specific in this dictionary, the GROWL_NOTIFICATION_NAME will be displayed.
+ *
+ *  This key is optional.
+ */
+#define GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES		XSTR("HumanReadableNames")
+/*! @defined GROWL_NOTIFICATIONS_DESCRIPTIONS
+*  @abstract A dictionary of descriptions of _when_ each notification occurs
+*  @discussion This is an NSDictionary whose keys are GROWL_NOTIFICATION_NAME strings and whose objects are
+*  descriptions of _when_ each notification occurs, such as "You received a new mail message" or
+*  "A file finished downloading".
+*
+*  This key is optional.
+*/
+#define GROWL_NOTIFICATIONS_DESCRIPTIONS		XSTR("NotificationDescriptions")
+
+/*!	@defined	GROWL_TICKET_VERSION
+ *	@abstract	The version of your registration ticket.
+ *	@discussion	Include this key in a ticket plist file that you put in your
+ *	 application bundle for auto-discovery. The current ticket version is 1.
+ */
+#define GROWL_TICKET_VERSION			XSTR("TicketVersion")
+// UserInfo Keys for Notifications
+#pragma mark UserInfo Keys for Notifications
+
+/*!	@group Notification userInfo keys */
+/*	@abstract	Keys for the userInfo dictionary of a GROWL_NOTIFICATION distributed notification.
+ *	@discussion The values of these keys describe the content of a Growl
+ *	 notification.
+ *
+ *	 Not all of these keys are supported by all displays. Only the name, title,
+ *	 and description of a notification are universal. Most of the built-in
+ *	 displays do support all of these keys, and most other visual displays
+ *	 probably will also. But, as of 0.6, the Log, MailMe, and Speech displays
+ *	 support only textual data.
+ */
+
+/*!	@defined GROWL_NOTIFICATION_NAME
+ *	@abstract The name of the notification.
+ *	@discussion The name of the notification. Note that if you do not define
+ *  GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES when registering your ticket originally this name
+ *  will the one displayed within the Growl preference pane and should be human-readable.
+ */
+#define GROWL_NOTIFICATION_NAME			XSTR("NotificationName")
+/*!	@defined GROWL_NOTIFICATION_TITLE
+ *	@abstract The title to display in the notification.
+ *	@discussion The title of the notification. Should be very brief.
+ *	 The title usually says what happened, e.g. "Download complete".
+ */
+#define GROWL_NOTIFICATION_TITLE		XSTR("NotificationTitle")
+/*!	@defined GROWL_NOTIFICATION_DESCRIPTION
+ *	@abstract The description to display in the notification.
+ *	@discussion The description should be longer and more verbose than the title.
+ *	 The description usually tells the subject of the action,
+ *	 e.g. "Growl-0.6.dmg downloaded in 5.02 minutes".
+ */
+#define GROWL_NOTIFICATION_DESCRIPTION  	XSTR("NotificationDescription")
+/*!	@defined GROWL_NOTIFICATION_ICON
+ *	@discussion Image data for the notification icon. Must be in a format
+ *	 supported by NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_ICON			XSTR("NotificationIcon")
+/*!	@defined GROWL_NOTIFICATION_APP_ICON
+ *	@discussion Image data for the application icon, in case GROWL_APP_ICON does
+ *	 not apply for some reason. Must be in a format supported by NSImage, such
+ *	 as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_APP_ICON		XSTR("NotificationAppIcon")
+/*!	@defined GROWL_NOTIFICATION_PRIORITY
+ *	@discussion The priority of the notification as an integer number from
+ *	 -2 to +2 (+2 being highest).
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_PRIORITY		XSTR("NotificationPriority")
+/*!	@defined GROWL_NOTIFICATION_STICKY
+ *	@discussion A Boolean number controlling whether the notification is sticky.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_STICKY		XSTR("NotificationSticky")
+/*!	@defined GROWL_NOTIFICATION_CLICK_CONTEXT
+ *	@abstract Identifies which notification was clicked.
+ *	@discussion An identifier for the notification for clicking purposes.
+ *
+ *	 This will be passed back to the application when the notification is
+ *	 clicked. It must be plist-encodable (a data, dictionary, array, number, or
+ *	 string object), and it should be unique for each notification you post.
+ *	 A good click context would be a UUID string returned by NSProcessInfo or
+ *	 CFUUID.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_CLICK_CONTEXT			XSTR("NotificationClickContext")
+
+/*!	@defined GROWL_DISPLAY_PLUGIN
+ *	@discussion The name of a display plugin which should be used for this notification.
+ *    Optional. If this key is not set or the specified display plugin does not
+ *    exist, the display plugin stored in the application ticket is used. This key
+ *    allows applications to use different default display plugins for their
+ *    notifications. The user can still override those settings in the preference
+ *    pane.
+ */
+#define GROWL_DISPLAY_PLUGIN				XSTR("NotificationDisplayPlugin")
+
+/*!	@defined GROWL_NOTIFICATION_IDENTIFIER
+ *	@abstract An identifier for the notification for coalescing purposes.
+ *   Notifications with the same identifier fall into the same class; only
+ *   the last notification of a class is displayed on the screen. If a
+ *   notification of the same class is currently being displayed, it is
+ *   replaced by this notification.
+ *
+ *	 Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_IDENTIFIER	XSTR("GrowlNotificationIdentifier")
+
+/*!	@defined GROWL_APP_PID
+ *	@abstract The process identifier of the process which sends this
+ *   notification. If this field is set, the application will only receive
+ *   clicked and timed out notifications which originate from this process.
+ *
+ *	 Optional.
+ */
+#define GROWL_APP_PID					XSTR("ApplicationPID")
+
+/*!	@defined GROWL_NOTIFICATION_PROGRESS
+*	@abstract If this key is set, it should contain a double value wrapped
+*     in a NSNumber which describes some sort of progress (from 0.0 to 100.0).
+*     If this is key is not set, no progress bar is shown.
+*
+*	 Optional. Not supported by all display plugins.
+*/
+#define GROWL_NOTIFICATION_PROGRESS		XSTR("NotificationProgress")
+
+// Notifications
+#pragma mark Notifications
+
+/*!	@group Notification names */
+/*	@abstract	Names of distributed notifications used by Growl.
+ *	@discussion	These are notifications used by applications (directly or
+ *	 indirectly) to interact with Growl, and by Growl for interaction between
+ *	 its components.
+ *
+ *	 Most of these should no longer be used in Growl 0.6 and later, in favor of
+ *	 Growl.framework's GrowlApplicationBridge APIs.
+ */
+
+/*!	@defined GROWL_APP_REGISTRATION
+ *	@abstract The distributed notification for registering your application.
+ *	@discussion This is the name of the distributed notification that can be
+ *	 used to register applications with Growl.
+ *
+ *	 The userInfo dictionary for this notification can contain these keys:
+ *	 <ul>
+ *	 	<li>GROWL_APP_NAME</li>
+ *	 	<li>GROWL_APP_ICON</li>
+ *	 	<li>GROWL_NOTIFICATIONS_ALL</li>
+ *	 	<li>GROWL_NOTIFICATIONS_DEFAULT</li>
+ *	 </ul>
+ *
+ *	 No longer recommended as of Growl 0.6. An alternate method of registering
+ *	 is to use Growl.framework's delegate system.
+ *	 See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for
+ *	 more information.
+ */
+#define GROWL_APP_REGISTRATION			XSTR("GrowlApplicationRegistrationNotification")
+/*!	@defined GROWL_APP_REGISTRATION_CONF
+ *	@abstract The distributed notification for confirming registration.
+ *	@discussion The name of the distributed notification sent to confirm the
+ *	 registration. Used by the Growl preference pane. Your application probably
+ *	 does not need to use this notification.
+ */
+#define GROWL_APP_REGISTRATION_CONF		XSTR("GrowlApplicationRegistrationConfirmationNotification")
+/*!	@defined GROWL_NOTIFICATION
+ *	@abstract The distributed notification for Growl notifications.
+ *	@discussion This is what it all comes down to. This is the name of the
+ *	 distributed notification that your application posts to actually send a
+ *	 Growl notification.
+ *
+ *	 The userInfo dictionary for this notification can contain these keys:
+ *	 <ul>
+ *	 	<li>GROWL_NOTIFICATION_NAME (required)</li>
+ *	 	<li>GROWL_NOTIFICATION_TITLE (required)</li>
+ *	 	<li>GROWL_NOTIFICATION_DESCRIPTION (required)</li>
+ *	 	<li>GROWL_NOTIFICATION_ICON</li>
+ *	 	<li>GROWL_NOTIFICATION_APP_ICON</li>
+ *	 	<li>GROWL_NOTIFICATION_PRIORITY</li>
+ *	 	<li>GROWL_NOTIFICATION_STICKY</li>
+ *	 	<li>GROWL_NOTIFICATION_CLICK_CONTEXT</li>
+ *	 	<li>GROWL_APP_NAME (required)</li>
+ *	 </ul>
+ *
+ *	 No longer recommended as of Growl 0.6. Three alternate methods of posting
+ *	 notifications are +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:],
+ *	 Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext, and
+ *	 Growl_PostNotification.
+ */
+#define GROWL_NOTIFICATION				XSTR("GrowlNotification")
+/*!	@defined GROWL_SHUTDOWN
+*	@abstract The distributed notification name that tells Growl to shutdown.
+*	@discussion The Growl preference pane posts this notification when the
+*	 "Stop Growl" button is clicked.
+*/
+#define GROWL_SHUTDOWN					XSTR("GrowlShutdown")
+/*!	@defined GROWL_PING
+ *	@abstract A distributed notification to check whether Growl is running.
+ *	@discussion This is used by the Growl preference pane. If it receives a
+ *	 GROWL_PONG, the preference pane takes this to mean that Growl is running.
+ */
+#define GROWL_PING						XSTR("Honey, Mind Taking Out The Trash")
+/*!	@defined GROWL_PONG
+ *	@abstract The distributed notification sent in reply to GROWL_PING.
+ *	@discussion GrowlHelperApp posts this in reply to GROWL_PING.
+ */
+#define GROWL_PONG						XSTR("What Do You Want From Me, Woman")
+/*!	@defined GROWL_IS_READY
+ *	@abstract The distributed notification sent when Growl starts up.
+ *	@discussion GrowlHelperApp posts this when it has begin listening on all of
+ *	 its sources for new notifications. GrowlApplicationBridge (in
+ *	 Growl.framework), upon receiving this notification, reregisters using the
+ *	 registration dictionary supplied by its delegate.
+ */
+#define GROWL_IS_READY					XSTR("Lend Me Some Sugar; I Am Your Neighbor!")
+/*!	@defined GROWL_NOTIFICATION_CLICKED
+ *	@abstract The distributed notification sent when a supported notification is clicked.
+ *	@discussion When a Growl notification with a click context is clicked on by
+ *	 the user, Growl posts this distributed notification.
+ *	 The GrowlApplicationBridge responds to this notification by calling a
+ *	 callback in its delegate.
+ */
+#define GROWL_NOTIFICATION_CLICKED		XSTR("GrowlClicked!")
+#define GROWL_NOTIFICATION_TIMED_OUT	XSTR("GrowlTimedOut!")
+
+/*!	@group Other symbols */
+/* Symbols which don't fit into any of the other categories. */
+
+/*!	@defined GROWL_KEY_CLICKED_CONTEXT
+ *	@abstract Used internally as the key for the clickedContext passed over DNC.
+ *	@discussion This key is used in GROWL_NOTIFICATION_CLICKED, and contains the
+ *	 click context that was supplied in the original notification.
+ */
+#define GROWL_KEY_CLICKED_CONTEXT		XSTR("ClickedContext")
+/*!	@defined GROWL_REG_DICT_EXTENSION
+ *	@abstract The filename extension for registration dictionaries.
+ *	@discussion The GrowlApplicationBridge in Growl.framework registers with
+ *	 Growl by creating a file with the extension of .(GROWL_REG_DICT_EXTENSION)
+ *	 and opening it in the GrowlHelperApp. This happens whether or not Growl is
+ *	 running; if it was stopped, it quits immediately without listening for
+ *	 notifications.
+ */
+#define GROWL_REG_DICT_EXTENSION		XSTR("growlRegDict")
+
+
+#define GROWL_POSITION_PREFERENCE_KEY			@"GrowlSelectedPosition"
+
+#endif //ndef _GROWLDEFINES_H

Added: trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Resources/Info.plist
===================================================================
--- trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Resources/Info.plist	                        (rev 0)
+++ trunk/src/uimac14/Frameworks/Growl.framework/Versions/Current/Resources/Info.plist	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>Growl</string>
+	<key>CFBundleIdentifier</key>
+	<string>com.growl.growlframework</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundlePackageType</key>
+	<string>FMWK</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.2.1</string>
+	<key>CFBundleSignature</key>
+	<string>GRRR</string>
+	<key>CFBundleVersion</key>
+	<string>1.2.1</string>
+	<key>NSPrincipalClass</key>
+	<string>GrowlApplicationBridge</string>
+</dict>
+</plist>

Added: trunk/src/uimac14/ImageAndTextCell.h
===================================================================
--- trunk/src/uimac14/ImageAndTextCell.h	                        (rev 0)
+++ trunk/src/uimac14/ImageAndTextCell.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,20 @@
+//
+//  ImageAndTextCell.h
+//
+//  Copyright (c) 2001-2002, Apple. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+ at interface ImageAndTextCell : NSTextFieldCell {
+ at private
+    NSImage	*image;
+}
+
+- (void)setImage:(NSImage *)anImage;
+- (NSImage *)image;
+
+- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
+- (NSSize)cellSize;
+
+ at end

Added: trunk/src/uimac14/ImageAndTextCell.m
===================================================================
--- trunk/src/uimac14/ImageAndTextCell.m	                        (rev 0)
+++ trunk/src/uimac14/ImageAndTextCell.m	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,131 @@
+/*
+	ImageAndTextCell.m
+	Copyright (c) 2001-2004, Apple Computer, Inc., all rights reserved.
+	Author: Chuck Pisula
+
+	Milestones:
+	Initially created 3/1/01
+
+        Subclass of NSTextFieldCell which can display text and an image simultaneously.
+*/
+
+/*
+ IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
+ consideration of your agreement to the following terms, and your use, installation, 
+ modification or redistribution of this Apple software constitutes acceptance of these 
+ terms.  If you do not agree with these terms, please do not use, install, modify or 
+ redistribute this Apple software.
+ 
+ In consideration of your agreement to abide by the following terms, and subject to these 
+ terms, Apple grants you a personal, non-exclusive license, under AppleÕs copyrights in 
+ this original Apple software (the "Apple Software"), to use, reproduce, modify and 
+ redistribute the Apple Software, with or without modifications, in source and/or binary 
+ forms; provided that if you redistribute the Apple Software in its entirety and without 
+ modifications, you must retain this notice and the following text and disclaimers in all 
+ such redistributions of the Apple Software.  Neither the name, trademarks, service marks 
+ or logos of Apple Computer, Inc. may be used to endorse or promote products derived from 
+ the Apple Software without specific prior written permission from Apple. Except as expressly
+ stated in this notice, no other rights or licenses, express or implied, are granted by Apple
+ herein, including but not limited to any patent rights that may be infringed by your 
+ derivative works or by other works in which the Apple Software may be incorporated.
+ 
+ The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES, 
+ EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, 
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS 
+ USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+ 
+ IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL 
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, 
+ REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND 
+ WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR 
+ OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#import "ImageAndTextCell.h"
+
+ at implementation ImageAndTextCell
+
+- (void)dealloc {
+    [image release];
+    image = nil;
+    [super dealloc];
+}
+
+- copyWithZone:(NSZone *)zone {
+    ImageAndTextCell *cell = (ImageAndTextCell *)[super copyWithZone:zone];
+    cell->image = [image retain];
+    return cell;
+}
+
+- (void)setImage:(NSImage *)anImage {
+    if (anImage != image) {
+        [image release];
+        image = [anImage retain];
+    }
+}
+
+- (NSImage *)image {
+    return image;
+}
+
+- (NSRect)imageFrameForCellFrame:(NSRect)cellFrame {
+    if (image != nil) {
+        NSRect imageFrame;
+        imageFrame.size = [image size];
+        imageFrame.origin = cellFrame.origin;
+        imageFrame.origin.x += 3;
+        imageFrame.origin.y += ceil((cellFrame.size.height - imageFrame.size.height) / 2);
+        return imageFrame;
+    }
+    else
+        return NSZeroRect;
+}
+
+- (void)editWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)anObject event:(NSEvent *)theEvent {
+    NSRect textFrame, imageFrame;
+    NSDivideRect (aRect, &imageFrame, &textFrame, 3 + [image size].width, NSMinXEdge);
+    [super editWithFrame: textFrame inView: controlView editor:textObj delegate:anObject event: theEvent];
+}
+
+#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
+typedef int NSInteger;
+#endif
+- (void)selectWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)anObject start:(NSInteger)selStart length:(NSInteger)selLength {
+    NSRect textFrame, imageFrame;
+    NSDivideRect (aRect, &imageFrame, &textFrame, 3 + [image size].width, NSMinXEdge);
+    [super selectWithFrame: textFrame inView: controlView editor:textObj delegate:anObject start:selStart length:selLength];
+}
+
+- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
+    if (image != nil) {
+        NSSize	imageSize;
+        NSRect	imageFrame;
+
+        imageSize = [image size];
+        NSDivideRect(cellFrame, &imageFrame, &cellFrame, 3 + imageSize.width, NSMinXEdge);
+        if ([self drawsBackground]) {
+            [[self backgroundColor] set];
+            NSRectFill(imageFrame);
+        }
+        imageFrame.origin.x += 3;
+        imageFrame.size = imageSize;
+
+        if ([controlView isFlipped])
+            imageFrame.origin.y += ceil((cellFrame.size.height + imageFrame.size.height) / 2);
+        else
+            imageFrame.origin.y += ceil((cellFrame.size.height - imageFrame.size.height) / 2);
+
+        [image compositeToPoint:imageFrame.origin operation:NSCompositeSourceOver];
+    }
+    [super drawWithFrame:cellFrame inView:controlView];
+}
+
+- (NSSize)cellSize {
+    NSSize cellSize = [super cellSize];
+    cellSize.width += (image ? [image size].width : 0) + 3;
+    return cellSize;
+}
+
+ at end
+

Added: trunk/src/uimac14/Info.plist
===================================================================
--- trunk/src/uimac14/Info.plist	                        (rev 0)
+++ trunk/src/uimac14/Info.plist	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleName</key>
+	<string>Unison</string>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>Unison</string>
+	<key>CFBundleIconFile</key>
+	<string>Unison.icns</string>
+	<key>CFBundleIdentifier</key>
+	<string>edu.upenn.cis.Unison</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleShortVersionString</key>
+	<string>$(MARKETING_VERSION)</string>
+	<key>CFBundleGetInfoString</key>
+	<string>${MARKETING_VERSION}, ©1999-2014, licensed under GNU GPL.</string>
+	<key>NSHumanReadableCopyright</key>
+	<string>©1999-2014, licensed under GNU GPL v3.</string>
+	<key>NSMainNibFile</key>
+	<string>MainMenu</string>
+	<key>NSPrincipalClass</key>
+	<string>NSApplication</string>
+</dict>
+</plist>

Added: trunk/src/uimac14/Info.plist.template
===================================================================
--- trunk/src/uimac14/Info.plist.template	                        (rev 0)
+++ trunk/src/uimac14/Info.plist.template	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleName</key>
+	<string>Unison</string>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>Unison</string>
+	<key>CFBundleIconFile</key>
+	<string>Unison.icns</string>
+	<key>CFBundleIdentifier</key>
+	<string>edu.upenn.cis.Unison</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>@@VERSION@@</string>
+	<key>CFBundleShortVersionString</key>
+	<string>@@VERSION@@</string>
+	<key>CFBundleGetInfoString</key>
+	<string>@@VERSION@@. ©1999-2007, licensed under GNU GPL.</string>
+	<key>NSHumanReadableCopyright</key>
+	<string>©1999-2006, licensed under GNU GPL.</string>
+	<key>NSMainNibFile</key>
+	<string>MainMenu</string>
+	<key>NSPrincipalClass</key>
+	<string>NSApplication</string>
+</dict>
+</plist>

Added: trunk/src/uimac14/MyController.h
===================================================================
--- trunk/src/uimac14/MyController.h	                        (rev 0)
+++ trunk/src/uimac14/MyController.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,147 @@
+/* MyController */
+/* Copyright (c) 2003, 2014, see file COPYING for details. */
+
+#import <Cocoa/Cocoa.h>
+
+#import "ProfileController.h"
+#import "PreferencesController.h"
+#import "NotificationController.h"
+#import "ReconItem.h"
+#import "ReconTableView.h"
+#import "UnisonToolbar.h"
+#import "ImageAndTextCell.h"
+#import "ProgressCell.h"
+#import "ColorGradientView.h"
+#import "Bridge.h"
+
+ at interface MyController : NSObject
+{
+  IBOutlet NSWindow *mainWindow;
+  UnisonToolbar *toolbar;
+  
+  IBOutlet NSWindow *cltoolWindow;
+  IBOutlet NSButton *cltoolPref;
+  
+  IBOutlet ProfileController *profileController;
+  IBOutlet NSView *chooseProfileView;
+  NSString *myProfile;
+  
+  IBOutlet PreferencesController *preferencesController;
+  IBOutlet NSView *preferencesView;
+  
+  IBOutlet NSView *updatesView;
+  IBOutlet NSView *ConnectingView;
+  IBOutlet ColorGradientView *connectingViewGradient;
+  
+  NSView *blankView;
+  
+  IBOutlet ReconTableView *tableView;
+  IBOutlet NSTextField *updatesText;
+  IBOutlet NSTextField *detailsTextView;
+  IBOutlet NSTextField *statusText;
+  IBOutlet ColorGradientView *detailsTextViewGradient;
+  
+  IBOutlet NSWindow *passwordWindow;
+  IBOutlet NSTextField *passwordPrompt;
+  IBOutlet NSTextField *passwordText;
+  IBOutlet NSButton *passwordCancelButton;
+  BOOL waitingForPassword;
+  
+  IBOutlet NSWindow *aboutWindow;
+  IBOutlet NSTextField *versionText;
+  
+  IBOutlet NSProgressIndicator *progressBar;
+  
+  IBOutlet NotificationController *notificationController;
+  
+  BOOL syncable;
+  BOOL duringSync;	
+  BOOL afterSync;
+  
+  NSMutableArray *reconItems;
+  ParentReconItem *rootItem;
+  OCamlValue *preconn;
+  
+  BOOL doneFirstDiff;
+  IBOutlet NSWindow *diffWindow;
+  IBOutlet NSTextView *diffView;
+  IBOutlet NSSegmentedControl *tableModeSelector;
+  IBOutlet NSProgressIndicator *connectingAnimation;
+  
+  IBOutlet NSWindow *preferencesWindow;
+  IBOutlet NSButton* checkOpenProfile;
+  IBOutlet NSComboBox *profileBox;
+  IBOutlet NSTextField *detailsFontLabel;
+  IBOutlet NSTextField *diffFontLabel;
+  IBOutlet NSButton *chooseDetailsFont;
+  IBOutlet NSButton *chooseDiffFont;
+
+  IBOutlet NSSplitView *splitView;
+
+  id fontChangeTarget;
+	
+  BOOL isBatchSet;
+  NSTimer *_timer;
+  NSAlert *_timeoutAlert;
+  NSUInteger _secondsRemaining;
+    
+  BOOL shouldExitAfterWarning;
+}
+
+- (id)init;
+- (void)awakeFromNib;
+
+- (void)chooseProfiles;
+- (IBAction)createButton:(id)sender;
+- (IBAction)saveProfileButton:(id)sender;
+- (IBAction)cancelProfileButton:(id)sender;
+- (NSString *)profile;
+- (void)profileSelected:(NSString *)aProfile;
+
+- (IBAction)showPreferences:(id)sender;
+- (IBAction)restartButton:(id)sender;
+- (IBAction)rescan:(id)sender;
+
+- (IBAction)openButton:(id)sender;
+- (void)connect:(NSString *)profileName;
+- (void)raisePasswordWindow:(NSString *)prompt;
+- (void)controlTextDidEndEditing:(NSNotification *)notification;
+- (IBAction)endPasswordWindow:(id)sender;
+- (void)afterOpen;
+
+- (IBAction)syncButton:(id)sender;
+- (IBAction)tableModeChanged:(id)sender;
+- (void)initTableMode;
+
+- (NSMutableArray *)reconItems;
+- (void)updateForChangedItems;
+- (void)updateReconItems:(OCamlValue *)items;
+- (id)updateForIgnore:(id)i;
+
+- (void)statusTextSet:(NSString *)s;
+- (void)diffViewTextSet:(NSString *)title bodyText:(NSString *)body;
+- (void)displayDetails:(ReconItem *)item;
+- (void)clearDetails;
+
+- (IBAction)raiseCltoolWindow:(id)sender;
+- (IBAction)cltoolYesButton:(id)sender;
+- (IBAction)cltoolNoButton:(id)sender;
+
+- (IBAction)raiseAboutWindow:(id)sender;
+- (IBAction)raiseWindow:(NSWindow *)theWindow;
+- (IBAction)onlineHelp:(id)sender;
+- (IBAction)installCommandLineTool:(id)sender;
+
+- (BOOL)validateItem:(SEL) action;
+- (BOOL)validateMenuItem:(NSMenuItem *)menuItem;
+- (BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem;
+
+- (void)resizeWindowToSize:(NSSize)newSize;
+- (float)toolbarHeightForWindow:(NSWindow *)window;
+
+- (IBAction) checkOpenProfileChanged:(id)sender;
+- (IBAction) chooseFont:(id)sender;
+- (void) updateFontDisplay;
+
+ at end
+

Added: trunk/src/uimac14/MyController.m
===================================================================
--- trunk/src/uimac14/MyController.m	                        (rev 0)
+++ trunk/src/uimac14/MyController.m	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,1227 @@
+/* Copyright (c) 2003, 2014, see file COPYING for details. */
+
+#import "MyController.h"
+
+/* The following two define are a workaround for an incompatibility between
+Ocaml 3.11.2 (and older) and the Mac OS X header files */
+#define uint64 uint64_caml
+#define int64 int64_caml
+
+#define CAML_NAME_SPACE
+#include <caml/callback.h>
+#include <caml/alloc.h>
+#include <caml/mlvalues.h>
+#include <caml/memory.h>
+
+ at interface NSString (_UnisonUtil)
+- (NSString *)trim;
+ at end
+
+ at implementation MyController
+
+static MyController *me; // needed by reloadTable and displayStatus, below
+
+// BCP (11/09): Added per Onne Gorter:
+// if user closes main window, terminate app, instead of keeping an empty app around with no window
+- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication { 
+  return YES;
+}
+
+- (id)init
+{
+  if (([super init])) {
+    
+    /* Initialize locals */
+    me = self;
+    doneFirstDiff = NO;
+    
+    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+    NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
+                                 /* By default, invite user to install cltool */
+                                 @"YES",  @"CheckCltool",
+                                 @"NO", @"openProfileAtStartup",
+                                 @"",   @"profileToOpen",
+                                 @"NO", @"deleteLogOnExit",
+                                 @"",   @"detailsFont",
+                                 @"",   @"diffFont",
+                                 nil];
+    
+    [defaults registerDefaults:appDefaults];
+    fontChangeTarget = nil;
+  }
+  
+  return self;
+}
+
+- (void) applicationWillTerminate:(NSNotification *)aNotification {
+  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+  [defaults setObject:[NSArchiver archivedDataWithRootObject:[detailsTextView font]] forKey:@"detailsFont"];
+  [defaults setObject:[NSArchiver archivedDataWithRootObject:[diffView font]] forKey:@"diffFont"];
+  [defaults synchronize];
+}
+
+- (void)awakeFromNib
+{
+  [splitView setAutosaveName:@"splitView"];
+  
+  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  
+  NSFont *defaultFont = [NSFont fontWithName:@"Monaco" size:11];
+  NSData *detailsFontData = [defaults dataForKey:@"detailsFont"];
+  if (detailsFontData) {
+    NSFont *tmpFont = (NSFont*) [NSUnarchiver unarchiveObjectWithData:detailsFontData];
+    if (tmpFont)
+      [detailsTextView setFont:tmpFont];
+    else
+      [detailsTextView setFont:defaultFont];
+  } else
+    [detailsTextView setFont:defaultFont];
+  [detailsTextView.cell setBackgroundStyle:NSBackgroundStyleRaised];
+  [detailsTextView.cell setBackgroundStyle:NSBackgroundStyleRaised];
+
+  NSColor *startColor = [NSColor colorWithCalibratedRed:0.613 green:0.665 blue:0.715 alpha:1.000];
+  NSColor *endColor = [NSColor colorWithCalibratedRed:0.439 green:0.496 blue:0.548 alpha:1.000];
+
+  [detailsTextViewGradient setStartingColor:startColor];
+  [detailsTextViewGradient setEndingColor:endColor];
+  [detailsTextViewGradient setAngle:270];
+  [connectingViewGradient setStartingColor:startColor];
+  [connectingViewGradient setEndingColor:endColor];
+  [connectingViewGradient setAngle:270];
+
+  NSData *diffFontData = [defaults dataForKey:@"diffFont"];
+  if (diffFontData) {
+    NSFont *tmpFont = (NSFont*) [NSUnarchiver unarchiveObjectWithData:diffFontData];
+    if (tmpFont)
+      [diffView setFont:tmpFont];
+    else
+      [diffView setFont:defaultFont];
+  } else
+    [diffView setFont:defaultFont];
+  
+  blankView = [[NSView alloc] init];
+	
+  /* Double clicking in the profile list will open the profile */
+  [[profileController tableView] setTarget:self];
+  [[profileController tableView] setDoubleAction:@selector(openButton:)];
+  
+	[tableView setAutoresizesOutlineColumn:NO];
+  
+	// use combo-cell for path
+  [[tableView tableColumnWithIdentifier:@"path"] setDataCell:[[[ImageAndTextCell alloc] init] autorelease]];
+  
+	// Custom progress cell
+	ProgressCell *progressCell = [[[ProgressCell alloc] init] autorelease];
+	[[tableView tableColumnWithIdentifier:@"percentTransferred"] setDataCell:progressCell];
+	
+  /* Set up the version string in the about box.  We use a custom
+   about box just because PRCS doesn't seem capable of getting the
+   version into the InfoPlist.strings file; otherwise we'd use the
+   standard about box. */
+  [versionText setStringValue:ocamlCall("S", "unisonGetVersion")];
+  
+  /* Command-line processing */
+	OCamlValue *clprofile = (id)ocamlCall("@", "unisonInit0");
+
+	BOOL areRootsSet = (long)ocamlCall("i", "areRootsSet") ? YES : NO;
+	if (areRootsSet) {
+		NSLog(@"Roots are on the command line");
+	}
+	else {
+		NSLog(@"Roots are not set on the command line");
+	}
+	  
+  /* Add toolbar */
+  toolbar = [[[UnisonToolbar alloc] 
+              initWithIdentifier: @"unisonToolbar" :self :tableView] autorelease];
+  [mainWindow setToolbar: toolbar];
+	[toolbar takeTableModeView:tableModeSelector];
+	[self initTableMode];
+	
+  
+  /* Set up the first window the user will see */
+  if (clprofile) {
+    /* A profile name was given on the command line */
+		NSString *profileName = [clprofile getField:0 withType:'S'];
+    [self profileSelected:profileName];
+    
+    /* If invoked from terminal we need to bring the app to the front */
+    [NSApp activateIgnoringOtherApps:YES];
+    
+    /* Start the connection */
+    [self connect:profileName];
+  }
+  else if (areRootsSet) {
+	/* If invoked from terminal we need to bring the app to the front */
+	[NSApp activateIgnoringOtherApps:YES];
+	/* Start the connection with the empty profile name, indicating roots only */
+	[self connect:@""];
+  }
+  else {
+    /* If invoked from terminal we need to bring the app to the front */
+    [NSApp activateIgnoringOtherApps:YES];
+    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"openProfileAtStartup"]) {
+      NSString *profileToOpen = [[NSUserDefaults standardUserDefaults] 
+                                 stringForKey:@"profileToOpen"];
+      if ([[profileToOpen trim] compare:@""] != NSOrderedSame &&
+          [[profileController getProfiles] indexOfObject:profileToOpen] != NSNotFound) {
+        [self profileSelected:profileToOpen];
+        [self connect:profileToOpen];
+      } else {
+        /* Bring up the dialog to choose a profile */
+        [self chooseProfiles];
+      }
+    } else {
+      /* Bring up the dialog to choose a profile */
+      [self chooseProfiles];
+    }
+  }
+  
+  [mainWindow display];
+  [mainWindow makeKeyAndOrderFront:nil];
+
+  /* unless user has clicked Don't ask me again, ask about cltool */
+  if ( ([[NSUserDefaults standardUserDefaults] boolForKey:@"CheckCltool"]) && 
+	  (![[NSFileManager defaultManager]
+		 fileExistsAtPath:@"/usr/bin/unison"]) )
+	  [self raiseCltoolWindow:nil];
+}
+
+- (IBAction) checkOpenProfileChanged:(id)sender {
+  [profileBox setEnabled:[checkOpenProfile state]];
+  if ([profileBox isEnabled] && [profileBox indexOfSelectedItem] < 0) {
+    [profileBox selectItemAtIndex:0];
+    [[NSUserDefaults standardUserDefaults] setObject:[profileBox itemObjectValueAtIndex:0] forKey:@"profileToOpen"];
+  }
+}
+
+- (IBAction) chooseFont:(id)sender {
+  [[NSFontPanel sharedFontPanel] makeKeyAndOrderFront:self];
+  [[NSFontManager sharedFontManager] setDelegate:self];
+  fontChangeTarget = sender;
+}
+
+- (void) changeFont:(id)sender {
+  NSFont *newFont = [sender convertFont:[detailsTextView font]];
+  if (fontChangeTarget == chooseDetailsFont)
+    [detailsTextView setFont:newFont];
+  else if (fontChangeTarget == chooseDiffFont)
+    [diffView setFont:newFont];
+  [self updateFontDisplay];
+}
+
+- (void) updateFontDisplay {
+  NSFont *detailsFont = [detailsTextView font];
+  NSFont *diffFont = [diffView font];
+  [detailsFontLabel setStringValue:[NSString stringWithFormat:@"%@ : %d", [detailsFont displayName], (NSInteger) [detailsFont pointSize]]];
+  [diffFontLabel setStringValue:[NSString stringWithFormat:@"%@ : %d", [diffFont displayName], (NSInteger) [diffFont pointSize]]];
+}
+
+- (void)chooseProfiles
+{
+    [mainWindow setContentView:blankView];
+    [self resizeWindowToSize:[chooseProfileView frame].size];
+    [mainWindow setContentMinSize:
+        NSMakeSize(NSWidth([[mainWindow contentView] frame]),150)];
+    [mainWindow setContentMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)];
+    [mainWindow setContentView:chooseProfileView];
+    [toolbar setView:@"chooseProfileView"];
+    [mainWindow setTitle:@"Unison"];
+	
+    // profiles get keyboard input
+    [mainWindow makeFirstResponder:[profileController tableView]];
+    [chooseProfileView display];
+}
+
+- (IBAction)createButton:(id)sender
+{
+    [preferencesController reset];
+    [mainWindow setContentView:blankView];
+    [self resizeWindowToSize:[preferencesView frame].size];
+    [mainWindow setContentMinSize:
+        NSMakeSize(400,NSHeight([[mainWindow contentView] frame]))];
+    [mainWindow setContentMaxSize:
+        NSMakeSize(FLT_MAX,NSHeight([[mainWindow contentView] frame]))];
+    [mainWindow setContentView:preferencesView];
+    [toolbar setView:@"preferencesView"];
+}
+
+- (IBAction)saveProfileButton:(id)sender
+{
+    if ([preferencesController validatePrefs]) {
+        // so the list contains the new profile
+        [profileController initProfiles];
+        [self chooseProfiles];
+    }
+}
+
+- (IBAction)cancelProfileButton:(id)sender
+{
+    [self chooseProfiles];
+}
+
+/* Only valid once a profile has been selected */
+- (NSString *)profile {
+    return myProfile;
+}
+
+- (void)profileSelected:(NSString *)aProfile
+{
+    [aProfile retain];
+    [myProfile release];
+    myProfile = aProfile;
+    [mainWindow setTitle: [NSString stringWithFormat:@"Unison: %@", myProfile]];
+}
+
+- (IBAction)showPreferences:(id)sender {
+  [profileBox removeAllItems];
+  [profileBox addItemsWithObjectValues:[profileController getProfiles]];
+  NSUInteger index = [[profileController getProfiles] indexOfObject:
+                      [[NSUserDefaults standardUserDefaults] 
+                       stringForKey:@"profileToOpen"]];
+  if (index == NSNotFound) {
+    [checkOpenProfile setState:NSOffState];
+    [profileBox setStringValue:@""];
+  } else
+    [profileBox selectItemAtIndex:index];
+
+  [profileBox setEnabled:[checkOpenProfile state]];
+  if ([profileBox isEnabled] && [profileBox indexOfSelectedItem] < 0)
+    [profileBox selectItemAtIndex:0];
+
+  [self updateFontDisplay];
+
+  [self raiseWindow:preferencesWindow];
+}
+
+- (IBAction)restartButton:(id)sender
+{
+    [tableView setEditable:NO];
+    [self chooseProfiles];
+}
+
+- (IBAction)rescan:(id)sender
+{
+    /* There is a delay between turning off the button and it
+       actually being disabled. Make sure we don't respond. */
+    if ([self validateItem:@selector(rescan:)]) {
+        waitingForPassword = NO;
+        [self afterOpen];
+    }
+}
+
+- (IBAction)openButton:(id)sender
+{
+    NSString *profile = [profileController selected];
+    [self profileSelected:profile];
+    [self connect:profile];
+    return;
+}
+
+- (void)updateToolbar
+{
+  [toolbar validateVisibleItems];	
+	[tableModeSelector setEnabled:((syncable && !duringSync) || afterSync)];
+
+	// Why?
+    [updatesView setNeedsDisplay:YES];
+}
+
+- (void)updateTableViewWithReset:(BOOL)shouldResetSelection
+{
+	[tableView reloadData]; 
+	if (shouldResetSelection) {
+		[tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO];
+		shouldResetSelection = NO;
+	}
+	[updatesView setNeedsDisplay:YES];	    
+}
+
+- (void)updateProgressBar:(NSNumber *)newProgress
+{
+	// NSLog(@"Updating progress bar: %i - %i", (int)[newProgress doubleValue], (int)[progressBar doubleValue]);
+	[progressBar incrementBy:([newProgress doubleValue] - [progressBar doubleValue])];
+}
+
+- (void)updateTableViewSelection
+{
+    int n = [tableView numberOfSelectedRows];
+    if (n == 1) [self displayDetails:[tableView itemAtRow:[tableView selectedRow]]];
+    else [self clearDetails];
+}
+
+- (void)outlineViewSelectionDidChange:(NSNotification *)note
+{
+	[self updateTableViewSelection];
+}
+
+- (void)connect:(NSString *)profileName
+{
+  // contact server, propagate prefs
+  NSLog(@"Connecting to %@...", profileName);
+  
+  // Switch to ConnectingView
+  [mainWindow setContentView:blankView];
+  [self resizeWindowToSize:[updatesView frame].size];
+  [mainWindow setContentMinSize:NSMakeSize(150,150)];
+  [mainWindow setContentMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)];
+  [mainWindow setContentView:ConnectingView];
+  [toolbar setView:@"connectingView"];
+  
+  // Update (almost) immediately
+  [ConnectingView display];
+  [connectingAnimation startAnimation:self];
+  
+  syncable = NO;
+  afterSync = NO;    
+    
+	[self updateToolbar];
+    
+	// will spawn thread on OCaml side and callback when complete
+  (void)ocamlCall("xS", "unisonInit1", profileName);
+}
+
+CAMLprim value unisonInit1Complete(value v)
+{
+  id pool = [[NSAutoreleasePool alloc] init];
+  if (v == Val_unit) {
+    NSLog(@"Connected.");
+    [me->connectingAnimation stopAnimation:me];
+		[me->preconn release];
+		me->preconn = NULL;
+    [me performSelectorOnMainThread:@selector(afterOpen:) withObject:nil waitUntilDone:FALSE]; 
+  } else {
+    // prompting required
+		me->preconn = [[OCamlValue alloc] initWithValue:Field(v,0)]; // value of Some
+		[me performSelectorOnMainThread:@selector(unisonInit1Complete:) withObject:nil waitUntilDone:FALSE]; 
+	}
+  [pool release];
+  return Val_unit;
+}
+
+- (void)unisonInit1Complete:(id)ignore
+{
+	@try {
+		OCamlValue *prompt = ocamlCall("@@", "openConnectionPrompt", preconn);
+		if (!prompt) {
+			// turns out, no prompt needed, but must finish opening connection
+			ocamlCall("x@", "openConnectionEnd", preconn);
+			NSLog(@"Connected.");
+			waitingForPassword = NO;
+			[self afterOpen];
+			return;
+		}
+		waitingForPassword = YES;
+
+		[self raisePasswordWindow:[prompt getField:0 withType:'S']]; 
+	} @catch (NSException *ex) {
+	    NSRunAlertPanel(@"Connection Error", [ex description], @"OK", nil, nil);
+		[self chooseProfiles];
+		return;
+	}
+
+    NSLog(@"Connected.");
+}
+
+- (void)raisePasswordWindow:(NSString *)prompt
+{
+    // FIX: some prompts don't ask for password, need to look at it
+    NSLog(@"Got the prompt: '%@'",prompt);
+    if ((long)ocamlCall("iS", "unisonPasswordMsg", prompt)) {
+        [passwordPrompt setStringValue:@"Please enter your password"];
+        [NSApp beginSheet:passwordWindow
+            modalForWindow:mainWindow
+            modalDelegate:nil
+            didEndSelector:nil
+            contextInfo:nil];
+        return;
+    }
+    if ((long)ocamlCall("iS", "unisonPassphraseMsg", prompt)) {
+        [passwordPrompt setStringValue:@"Please enter your passphrase"];
+        [NSApp beginSheet:passwordWindow
+            modalForWindow:mainWindow
+            modalDelegate:nil
+            didEndSelector:nil
+            contextInfo:nil];
+        return;
+    }
+    if ((long)ocamlCall("iS", "unisonAuthenticityMsg", prompt)) {
+        int i = NSRunAlertPanel(@"New host",prompt,@"Yes",@"No",nil);
+        if (i == NSAlertDefaultReturn) {
+			ocamlCall("x at s", "openConnectionReply", preconn, "yes");
+			prompt = ocamlCall("S@", "openConnectionPrompt", preconn);
+            if (!prompt) {
+                // all done with prompts, finish opening connection
+				ocamlCall("x@", "openConnectionEnd", preconn);
+                waitingForPassword = NO;
+                [self afterOpen];
+                return;
+            }
+            else {
+				[self raisePasswordWindow:[NSString 
+                    stringWithUTF8String:String_val(Field(prompt,0))]];
+                return;
+            }
+        }
+        if (i == NSAlertAlternateReturn) {
+			ocamlCall("x@", "openConnectionCancel", preconn);
+            return;
+        }
+        else {
+            NSLog(@"Unrecognized response '%d' from NSRunAlertPanel",i);
+			ocamlCall("x@", "openConnectionCancel", preconn);
+            return;
+        }
+    }
+    NSLog(@"Unrecognized message from ssh: %@",prompt);
+	ocamlCall("x@", "openConnectionCancel", preconn);
+}
+
+// The password window will invoke this when Enter occurs, b/c we
+// are the delegate.
+- (void)controlTextDidEndEditing:(NSNotification *)notification
+{
+    NSNumber *reason = [[notification userInfo] objectForKey:@"NSTextMovement"];
+    int code = [reason intValue];
+    if (code == NSReturnTextMovement)
+        [self endPasswordWindow:self];
+}
+// Or, the Continue button will invoke this when clicked
+- (IBAction)endPasswordWindow:(id)sender
+{
+    [passwordWindow orderOut:self];
+    [NSApp endSheet:passwordWindow];
+    if ([sender isEqualTo:passwordCancelButton]) {
+		ocamlCall("x@", "openConnectionCancel", preconn);
+        [self chooseProfiles];
+        return;
+    }
+    NSString *password = [passwordText stringValue];
+	ocamlCall("x at S", "openConnectionReply", preconn, password);
+
+    OCamlValue *prompt = ocamlCall("@@", "openConnectionPrompt", preconn);
+    if (!prompt) {
+        // all done with prompts, finish opening connection
+		ocamlCall("x@", "openConnectionEnd", preconn);
+        waitingForPassword = NO;
+        [self afterOpen];
+    }
+    else {
+		[self raisePasswordWindow:[prompt getField:0 withType:'S']]; 
+    }
+}
+
+- (void)afterOpen:(id)ignore
+{
+	[self afterOpen];
+}
+
+- (void)afterOpen
+{
+    if (waitingForPassword) return;
+    // move to updates window after clearing it
+	[self updateReconItems:nil];
+	[progressBar setDoubleValue:0.0];
+	[progressBar stopAnimation:self];
+    // [self clearDetails];
+    [mainWindow setContentView:blankView];
+    [self resizeWindowToSize:[updatesView frame].size];
+    [mainWindow setContentMinSize:
+        NSMakeSize(NSWidth([[mainWindow contentView] frame]),200)];
+    [mainWindow setContentMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)];
+    [mainWindow setContentView:updatesView];
+    [toolbar setView:@"updatesView"];
+
+    syncable = NO;
+    afterSync = NO;
+
+    [tableView deselectAll:self];
+	[self updateToolbar];
+	[self updateProgressBar:[NSNumber numberWithDouble:0.0]];
+    
+    // this should depend on the number of reconitems, and is now done
+    // in updateReconItems:
+    // reconItems table gets keyboard input
+    //[mainWindow makeFirstResponder:tableView];
+    [tableView scrollRowToVisible:0];
+
+	[preconn release];
+    preconn = nil; // so old preconn can be garbage collected
+	// This will run in another thread spawned in OCaml and will return immediately
+	// We'll get a call back to unisonInit2Complete() when it is complete
+	ocamlCall("x", "unisonInit2");
+}
+
+- (void)doSync
+{
+    [tableView setEditable:NO];
+    syncable = NO;
+    duringSync = YES;
+	
+	[self updateToolbar];
+    
+	// This will run in another thread spawned in OCaml and will return immediately
+	// We'll get a call back to syncComplete() when it is complete
+	ocamlCall("x", "unisonSynchronize");	
+}
+
+- (IBAction)syncButton:(id)sender
+{
+	[self doSync];
+}
+
+
+- (void)afterUpdate:(id)retainedReconItems
+{
+	// NSLog(@"In afterUpdate:...");
+    [self updateReconItems:retainedReconItems];
+	[retainedReconItems release];
+
+    [notificationController updateFinishedFor:[self profile]];
+
+    // label the left and right columns with the roots
+	NSString *leftHost = [(NSString *)ocamlCall("S", "unisonFirstRootString") trim];
+	NSString *rightHost = [(NSString *)ocamlCall("S", "unisonSecondRootString") trim];
+	/*
+    [[[tableView tableColumnWithIdentifier:@"left"] headerCell] setObjectValue:lefthost];
+    [[[tableView tableColumnWithIdentifier:@"right"] headerCell] setObjectValue:rightHost];
+    */
+    [mainWindow setTitle: [NSString stringWithFormat:@"Unison: %@ (%@ <-> %@)", 
+			[self profile], leftHost, rightHost]];
+	
+	// initial sort
+	[tableView setSortDescriptors:[NSArray arrayWithObjects: 
+		[[tableView tableColumnWithIdentifier:@"fileSizeString"] sortDescriptorPrototype],
+		[[tableView tableColumnWithIdentifier:@"path"] sortDescriptorPrototype],
+		nil]];
+
+	[self updateTableViewWithReset:([reconItems count] > 0)];
+	[self updateToolbar];
+	isBatchSet = (long)ocamlCall("i", "isBatchSet") ? YES : NO;
+	if (isBatchSet) {
+		NSLog(@"batch set on the command line");
+	}
+	else {
+		NSLog(@"batch not set on the command line");
+	}
+	
+	if (isBatchSet) {
+		[self doSync];
+	}
+}
+
+CAMLprim value unisonInit2Complete(value v)
+{
+  id pool = [[NSAutoreleasePool alloc] init];
+  [me performSelectorOnMainThread:@selector(afterUpdate:) withObject:[[OCamlValue alloc] initWithValue:v] waitUntilDone:FALSE]; 
+  [pool release];
+  return Val_unit;
+}
+
+- (void)afterSync:(id)ignore
+{
+    [notificationController syncFinishedFor:[self profile]];
+    duringSync = NO;
+    afterSync = YES;
+    [self updateToolbar];
+    
+    int i;
+    for (i = 0; i < [reconItems count]; i++) {
+        [[reconItems objectAtIndex:i] resetProgress];
+    }
+
+	[self updateTableViewSelection];
+		
+	[self updateTableViewWithReset:FALSE];
+}
+
+- (void)alertDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
+{
+    [_timer invalidate];
+
+    switch (returnCode) {
+        case NSAlertAlternateReturn:
+            return;
+            break;
+            
+        default:
+            [[NSApplication sharedApplication] performSelector: @selector(terminate:) withObject: nil afterDelay: 0.0];
+            break;
+    }
+}
+
+- (void)updateCountdown
+{
+    if (_secondsRemaining == 0) {
+        [_timer invalidate];
+        [[_timeoutAlert window] orderOut: nil];
+        [self alertDidEnd: _timeoutAlert returnCode: NSAlertDefaultReturn contextInfo: nil];
+    } else {
+        [_timeoutAlert setMessageText: [NSString stringWithFormat: @"Unison will quit in %lu seconds", _secondsRemaining]];
+        _secondsRemaining--;
+    }
+}
+
+
+- (void)quitIfBatch:(id)ignore
+{
+	if (isBatchSet) {
+		NSLog(@"Automatically quitting because of -batch");
+		_timeoutAlert = [NSAlert alertWithMessageText: @"" defaultButton: @"Quit" alternateButton: @"Cancel" otherButton: nil informativeTextWithFormat: @""];
+	
+		_secondsRemaining = 10;
+	
+		_timer = [NSTimer scheduledTimerWithTimeInterval: 1 target: self selector: @selector(updateCountdown) userInfo: nil repeats: YES];
+		
+		[_timeoutAlert beginSheetModalForWindow: mainWindow modalDelegate: self didEndSelector: @selector(alertDidEnd:returnCode:contextInfo:) contextInfo: NULL];
+	}  
+}
+
+// TODO: (BCP, 3/2012) Note that the string literal "~/unison.log" here is wrong -- 
+// this is a user-settable preference (in ubase/trace.ml) and we should ask for its value.
+CAMLprim value syncComplete()
+{
+  id pool = [[NSAutoreleasePool alloc] init];
+  [me performSelectorOnMainThread:@selector(afterSync:) withObject:nil waitUntilDone:FALSE];
+  if ([[NSUserDefaults standardUserDefaults] boolForKey:@"deleteLogOnExit"])
+    [[NSFileManager defaultManager] removeItemAtPath:[@"~/unison.log" stringByExpandingTildeInPath] error:nil];
+  [pool release];
+
+  [me performSelectorOnMainThread:@selector(quitIfBatch:) withObject:nil waitUntilDone:FALSE];
+  
+  return Val_unit;
+}
+
+// A function called from ocaml
+- (void)reloadTable:(NSNumber *)i
+{
+	// NSLog(@"*** ReloadTable: %i", [i intValue]);
+
+    [[reconItems objectAtIndex:[i intValue]] resetProgress];
+	[self updateTableViewWithReset:FALSE];
+}
+
+CAMLprim value reloadTable(value row)
+{
+  id pool = [[NSAutoreleasePool alloc] init];
+	// NSLog(@"OCaml says... ReloadTable: %i", Int_val(row));
+	NSNumber *num = [[NSNumber alloc] initWithInt:Int_val(row)];
+  [me performSelectorOnMainThread:@selector(reloadTable:) withObject:num waitUntilDone:FALSE]; 
+	[num release];
+  [pool release];
+  return Val_unit;
+}
+
+- (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
+	if (item == nil) item = rootItem;
+	return [[item children] count];
+}
+
+- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
+    return [item isKindOfClass:[ParentReconItem class]];
+}
+
+- (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item {
+	if (item == nil) item = rootItem;
+	return [[item children] objectAtIndex:index];
+}
+
+- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
+    NSString *identifier = [tableColumn identifier];
+	if (item == nil) item = rootItem;
+
+	if ([identifier isEqualToString:@"percentTransferred"] && (!duringSync && !afterSync)) return nil;
+
+	return [item valueForKey:identifier];
+}
+
+static NSDictionary *_SmallGreyAttributes = nil;
+
+- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(NSCell *)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item {    
+	NSString *identifier = [tableColumn identifier];
+    if ([identifier isEqualToString:@"path"]) {
+		// The file icon
+		[(ImageAndTextCell*)cell setImage:[item fileIcon]];
+		
+		// For parents, format the file count into the text
+		long fileCount = [item fileCount];
+		if (fileCount > 1) {
+			NSString *countString = [NSString stringWithFormat:@"  (%ld files)", fileCount];
+			NSString *fullString = [(NSString *)[cell objectValue] stringByAppendingString:countString];
+			NSMutableAttributedString *as = [[NSMutableAttributedString alloc] initWithString:fullString];
+
+			if (!_SmallGreyAttributes) {		
+				NSColor *txtColor = [NSColor grayColor];
+				NSFont *txtFont = [NSFont systemFontOfSize:9.0];
+				_SmallGreyAttributes = [[NSDictionary dictionaryWithObjectsAndKeys:txtFont,
+					NSFontAttributeName, txtColor, NSForegroundColorAttributeName,  nil] retain];
+			}
+			[as setAttributes:_SmallGreyAttributes range:NSMakeRange([fullString length] - [countString length], [countString length])];
+			[cell setAttributedStringValue:as];
+			[as release];
+		}
+    } else if ([identifier isEqualToString:@"percentTransferred"]) {
+		[(ProgressCell*)cell setIcon:[item direction]];		
+		[(ProgressCell*)cell setStatusString:[item progressString]];
+		[(ProgressCell*)cell setIsActive:[item isKindOfClass:[LeafReconItem class]]];		
+    }
+}
+
+- (void)outlineView:(NSOutlineView *)outlineView 
+      sortDescriptorsDidChange:(NSArray *)oldDescriptors {
+	NSArray *originalSelection = [outlineView selectedObjects];
+	
+	// do we want to catch case of object changes to allow resort in same direction for progress / direction?
+	// Could check if our objects change and if the first item at the head of new and old were the same
+	[rootItem sortUsingDescriptors:[outlineView sortDescriptors]];
+	[outlineView reloadData];
+	[outlineView setSelectedObjects:originalSelection];
+}
+
+// Delegate methods
+
+- (BOOL)outlineView:(NSOutlineView *)outlineView shouldEditTableColumn:(NSTableColumn *)tableColumn item:(id)item {
+    return NO;
+}
+
+- (NSMutableArray *)reconItems // used in ReconTableView only
+{
+    return reconItems;
+}
+
+- (int)tableMode
+{
+	return [tableModeSelector selectedSegment];
+}
+
+- (IBAction)tableModeChanged:(id)sender
+{
+	[[NSUserDefaults standardUserDefaults] setInteger:[self tableMode]+1 forKey:@"TableLayout"];
+	[self updateForChangedItems];
+}
+
+- (void)initTableMode
+{
+	int mode = [[NSUserDefaults standardUserDefaults] integerForKey:@"TableLayout"] - 1;
+	if (mode == -1) mode = 1;
+	[tableModeSelector setSelectedSegment:mode];
+}
+
+- (void)updateReconItems:(OCamlValue *)caml_reconItems
+{
+    [reconItems release];
+    reconItems = [[NSMutableArray alloc] init];
+	long i, n =[caml_reconItems count];
+    for (i=0; i<n; i++) {
+		LeafReconItem *item = [[LeafReconItem alloc] initWithRiAndIndex:(id)[caml_reconItems getField:i withType:'@'] index:i];
+        [reconItems addObject:item];
+		[item release];
+    }
+	[self updateForChangedItems];
+}
+
+- (void)expandConflictedParent:(ParentReconItem *)parent
+{
+	if ([parent hasConflictedChildren]) {
+		// NSLog(@"Expanding conflictedParent: %@", [parent fullPath]);
+		[tableView expandItem:parent expandChildren:NO];
+		NSArray *children = [parent children];
+		int i = 0, count = [children count];
+		for (;i < count; i++) {
+			id child = [children objectAtIndex:i];
+			if ([child isKindOfClass:[ParentReconItem class]]) [self expandConflictedParent:child];
+		}
+	}
+}
+
+- (void)updateForChangedItems
+{
+	int tableMode = [self tableMode];
+	
+	[rootItem release];
+	ParentReconItem *root = rootItem = [[ParentReconItem alloc] init];
+	
+	if (tableMode != 0 && [reconItems count]) {
+		// Special roll-up root item for outline displays
+		root = [[ParentReconItem alloc] init];
+		[rootItem addChild:root nested:NO];
+		[root setPath:@"All Changes..."];
+		[root setFullPath:@""];
+		[root release];
+	}
+	
+    int j = 0, n =[reconItems count];
+    for (; j<n; j++) {
+		[root addChild:[reconItems objectAtIndex:j] nested:(tableMode != 0)];
+    }
+	
+	if (tableMode == 1) [root collapseParentsWithSingleChildren:YES];
+
+	[tableView reloadData];
+	
+	if (NO) {
+		// Pre-expand entire tree
+		int i = [[rootItem children] count];
+		while (i--) {
+			[tableView expandItem:[[rootItem children] objectAtIndex:i] expandChildren:YES];
+		}
+	} else if (tableMode != 0) {
+		// Always open root node
+		[tableView expandItem:rootItem expandChildren:NO];
+
+		// then smart expand to reveal conflicts / changes in direction
+		[self expandConflictedParent:root];
+		
+		// then open more levels if we can do so without causing scrolling
+		[tableView expandChildrenIfSpace];
+	}
+	
+    // Make sure details get updated (or cleared)
+	[self updateTableViewSelection];
+
+    // Only enable sync if there are reconitems
+    if ([reconItems count]>0) {
+        [tableView setEditable:YES];
+
+        // reconItems table gets keyboard input
+        [mainWindow makeFirstResponder:tableView];
+
+        syncable = YES;
+    }
+    else {
+        [tableView setEditable:NO];
+        afterSync = YES; // rescan should be enabled
+	
+        // reconItems table no longer gets keyboard input
+        [mainWindow makeFirstResponder:nil];
+    }
+	[self updateToolbar];
+}
+
+- (id)updateForIgnore:(id)item
+{
+    long j = (long)ocamlCall("ii", "unisonUpdateForIgnore", [reconItems indexOfObjectIdenticalTo:item]);
+	NSLog(@"Updating for ignore...");
+    [self updateReconItems:(OCamlValue *)ocamlCall("@", "unisonState")];
+    return [reconItems objectAtIndex:j];
+}
+
+// A function called from ocaml
+CAMLprim value displayStatus(value s)
+{
+  id pool = [[NSAutoreleasePool alloc] init];
+	NSString *str = [[NSString alloc] initWithUTF8String:String_val(s)];
+    // NSLog(@"displayStatus: %@", str);
+    [me performSelectorOnMainThread:@selector(statusTextSet:) withObject:str waitUntilDone:FALSE];
+	[str release];
+  [pool release];
+  return Val_unit;
+}
+
+- (void)statusTextSet:(NSString *)s {
+    /* filter out strings with # reconitems, and empty strings */
+    if (!NSEqualRanges([s rangeOfString:@"reconitems"], 
+         NSMakeRange(NSNotFound,0))) return;
+    [statusText setStringValue:s];
+}
+
+// Called from ocaml to dislpay progress bar
+CAMLprim value displayGlobalProgress(value p)
+{
+  id pool = [[NSAutoreleasePool alloc] init];
+	NSNumber *num = [[NSNumber alloc] initWithDouble:Double_val(p)];
+  [me performSelectorOnMainThread:@selector(updateProgressBar:) 
+		withObject:num waitUntilDone:FALSE]; 
+	[num release];
+  [pool release];
+  return Val_unit;
+}
+
+// Called from ocaml to display diff
+CAMLprim value displayDiff(value s, value s2)
+{
+  id pool = [[NSAutoreleasePool alloc] init];
+  [me performSelectorOnMainThread:@selector(diffViewTextSet:) 
+						withObject:[NSArray arrayWithObjects:[NSString stringWithUTF8String:String_val(s)],
+											[NSString stringWithUTF8String:String_val(s2)], nil]
+						waitUntilDone:FALSE];
+  [pool release];
+  return Val_unit;
+}
+
+// Called from ocaml to display diff error messages
+CAMLprim value displayDiffErr(value s)
+{
+  id pool = [[NSAutoreleasePool alloc] init];
+  NSString * str = [NSString stringWithUTF8String:String_val(s)];
+  str = [[str componentsSeparatedByString:@"\n"] componentsJoinedByString:@" "];
+	[me->statusText performSelectorOnMainThread:@selector(setStringValue:) 
+				withObject:str waitUntilDone:FALSE];
+  [pool release];
+  return Val_unit;
+}
+
+- (void)diffViewTextSet:(NSArray *)args
+{
+	[self diffViewTextSet:[args objectAtIndex:0] bodyText:[args objectAtIndex:1]];
+}
+
+- (void)diffViewTextSet:(NSString *)title bodyText:(NSString *)body {
+   if ([body length]==0) return;
+   [diffWindow setTitle:title];
+   //[diffView setFont:diffFont];
+   [diffView setString:body];
+   if (!doneFirstDiff) {
+       /* On first open, position the diff window to the right of
+       the main window, but without going off the mainwindow's screen */
+       float screenOriginX = [[mainWindow screen] visibleFrame].origin.x;
+       float screenWidth = [[mainWindow screen] visibleFrame].size.width;
+       float mainOriginX = [mainWindow frame].origin.x;
+       float mainOriginY = [mainWindow frame].origin.y;
+       float mainWidth = [mainWindow frame].size.width;
+       float mainHeight = [mainWindow frame].size.height;       
+       float diffWidth = [diffWindow frame].size.width;
+
+       float diffX = mainOriginX+mainWidth;
+       float maxX = screenOriginX+screenWidth-diffWidth;
+       if (diffX > maxX) diffX = maxX;
+       float diffY = mainOriginY + mainHeight;
+       
+       NSPoint diffOrigin = NSMakePoint(diffX,diffY);
+       [diffWindow cascadeTopLeftFromPoint:diffOrigin];
+       
+       doneFirstDiff = YES;
+   }
+   [diffWindow orderFront:nil];
+}
+
+- (void)displayDetails:(ReconItem *)item
+{
+	//[detailsTextView setFont:diffFont];
+	NSString *text = [item details];
+	if (!text) text = @"";
+	[detailsTextView setStringValue:text];
+}
+
+- (void)clearDetails
+{
+    [detailsTextView setStringValue:@""];
+}
+
+- (IBAction)raiseCltoolWindow:(id)sender
+{
+  [cltoolPref setState:[[NSUserDefaults standardUserDefaults] boolForKey:@"CheckCltool"] ? NSOffState : NSOnState];
+  [self raiseWindow: cltoolWindow];
+}
+
+- (IBAction)cltoolYesButton:(id)sender;
+{
+  [[NSUserDefaults standardUserDefaults] setBool:([cltoolPref state] != NSOnState) forKey:@"CheckCltool"];
+  [self installCommandLineTool:self];
+  [cltoolWindow close];
+}
+
+- (IBAction)cltoolNoButton:(id)sender;
+{
+  [[NSUserDefaults standardUserDefaults] setBool:([cltoolPref state] != NSOnState) forKey:@"CheckCltool"];
+  [cltoolWindow close];
+}
+
+- (IBAction)raiseAboutWindow:(id)sender
+{
+    [self raiseWindow: aboutWindow];
+}
+
+- (void)raiseWindow:(NSWindow *)theWindow
+{
+    NSRect screenFrame = [[mainWindow screen] visibleFrame];
+    NSRect mainWindowFrame = [mainWindow frame];
+    NSRect theWindowFrame = [theWindow frame];
+    
+    float winX = mainWindowFrame.origin.x + 
+        (mainWindowFrame.size.width - theWindowFrame.size.width)/2;
+    float winY = mainWindowFrame.origin.y + 
+        (mainWindowFrame.size.height + theWindowFrame.size.height)/2;
+
+    if (winX<screenFrame.origin.x) winX=screenFrame.origin.x;
+    float maxX = screenFrame.origin.x+screenFrame.size.width-
+        theWindowFrame.size.width;
+    if (winX>maxX) winX=maxX;
+    float minY = screenFrame.origin.y+theWindowFrame.size.height;
+    if (winY<minY) winY=minY;
+    float maxY = screenFrame.origin.y+screenFrame.size.height;
+    if (winY>maxY) winY=maxY;
+
+    [theWindow cascadeTopLeftFromPoint:
+        NSMakePoint(winX,winY)];
+    
+    [theWindow makeKeyAndOrderFront:nil];
+}
+
+- (IBAction)onlineHelp:(id)sender
+{
+    [[NSWorkspace sharedWorkspace]
+        openURL:[NSURL URLWithString:@"http://www.cis.upenn.edu/~bcpierce/unison/docs.html"]];
+}
+
+/* from http://developer.apple.com/documentation/Security/Conceptual/authorization_concepts/index.html */
+#include <Security/Authorization.h>
+#include <Security/AuthorizationTags.h>
+- (IBAction)installCommandLineTool:(id)sender
+{
+  /* Install the command-line tool in /usr/bin/unison.
+     Requires root privilege, so we ask for it and 
+     pass the task off to /bin/sh. */
+
+  OSStatus myStatus;
+
+  AuthorizationFlags myFlags = kAuthorizationFlagDefaults;
+  AuthorizationRef myAuthorizationRef;
+  myStatus = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment,
+				 myFlags, &myAuthorizationRef);
+  if (myStatus != errAuthorizationSuccess) return;
+
+  {
+    AuthorizationItem myItems = {kAuthorizationRightExecute, 0,
+				 NULL, 0};
+    AuthorizationRights myRights = {1, &myItems};
+    myFlags = kAuthorizationFlagDefaults |
+      kAuthorizationFlagInteractionAllowed |
+      kAuthorizationFlagPreAuthorize |
+      kAuthorizationFlagExtendRights;
+    myStatus =
+      AuthorizationCopyRights(myAuthorizationRef,&myRights,NULL,myFlags,NULL);
+  }
+  if (myStatus == errAuthorizationSuccess) {
+    NSBundle *bundle = [NSBundle mainBundle];
+    NSString *bundle_path = [bundle bundlePath];
+    NSString *exec_path =
+      [bundle_path stringByAppendingString:@"/Contents/MacOS/cltool"];
+    // Not sure why but this doesn't work:
+    // [bundle pathForResource:@"cltool" ofType:nil];
+
+    if (exec_path == nil) return;
+    char *args[] = { "-f", (char *)[exec_path UTF8String], 
+		     "/usr/bin/unison", NULL };
+
+    myFlags = kAuthorizationFlagDefaults;
+    myStatus = AuthorizationExecuteWithPrivileges
+      (myAuthorizationRef, "/bin/cp", myFlags, args,
+       NULL);
+  }
+  AuthorizationFree (myAuthorizationRef, kAuthorizationFlagDefaults);
+
+  /*
+  if (myStatus == errAuthorizationCanceled)
+    NSLog(@"The attempt was canceled\n");
+  else if (myStatus) 
+      NSLog(@"There was an authorization error: %ld\n", myStatus);
+  */
+}
+
+- (BOOL)validateItem:(SEL) action
+{
+    if (action == @selector(syncButton:)) return syncable;
+    // FIXME Restarting during sync is disabled because it causes UI corruption
+    else if (action == @selector(restartButton:)) return !duringSync;
+    else if (action == @selector(rescan:)) return ((syncable && !duringSync) || afterSync);
+    else return YES;
+}
+
+- (BOOL)validateMenuItem:(NSMenuItem *)menuItem
+{
+    return [self validateItem:[menuItem action]];
+}
+
+- (BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem
+{
+    return [self validateItem:[toolbarItem action]];
+}
+
+- (void)resizeWindowToSize:(NSSize)newSize
+{
+    NSRect aFrame;
+
+    float newHeight = newSize.height+[self toolbarHeightForWindow:mainWindow];
+    float newWidth = newSize.width;
+
+    aFrame = [NSWindow contentRectForFrameRect:[mainWindow frame]
+                       styleMask:[mainWindow styleMask]];
+
+    aFrame.origin.y += aFrame.size.height;
+    aFrame.origin.y -= newHeight;
+    aFrame.size.height = newHeight;
+    aFrame.size.width = newWidth;
+
+    aFrame = [NSWindow frameRectForContentRect:aFrame
+                       styleMask:[mainWindow styleMask]];
+
+    [mainWindow setFrame:aFrame display:YES animate:YES];
+}
+
+- (float)toolbarHeightForWindow:(NSWindow *)window
+{
+    NSToolbar *aToolbar;
+    float toolbarHeight = 0.0;
+    NSRect windowFrame;
+
+    aToolbar = [window toolbar];
+    if(aToolbar && [aToolbar isVisible])
+    {
+        windowFrame = [NSWindow contentRectForFrameRect:[window frame]
+            styleMask:[window styleMask]];
+        toolbarHeight = NSHeight(windowFrame)
+            - NSHeight([[window contentView] frame]);
+    }
+    return toolbarHeight;
+}
+
+CAMLprim value fatalError(value s)
+{
+	NSString *str = [[NSString alloc] initWithUTF8String:String_val(s)];
+
+        [me performSelectorOnMainThread:@selector(fatalError:) withObject:str waitUntilDone:FALSE];
+	[str release];
+    return Val_unit;
+}
+
+- (void)fatalError:(NSString *)msg {
+        NSRunAlertPanel(@"Fatal error", msg, @"Exit", nil, nil);
+        exit(1);
+}
+
+/* Returns true if we need to exit, false if we proceed */
+
+CAMLprim value warnPanel(value s)
+{
+	NSString *str = [[NSString alloc] initWithUTF8String:String_val(s)];
+    
+  [me performSelectorOnMainThread:@selector(warnPanel:) withObject:str waitUntilDone:TRUE];
+	[str release];
+  if (me -> shouldExitAfterWarning) {
+    return Val_true;
+  } else {
+    return Val_false;
+  }
+}
+
+- (void)warnPanel:(NSString *)msg {
+  int warnVal = NSRunAlertPanel(@"Warning", msg, @"Proceed", @"Exit", nil);
+  NSLog(@"Warning Panel Returned %d",warnVal);
+  if (warnVal == NSAlertAlternateReturn) {
+    shouldExitAfterWarning = YES;
+  } else {
+    shouldExitAfterWarning = FALSE;
+  }
+}
+
+ at end
+
+ at implementation NSString (_UnisonUtil)
+- (NSString *)trim
+{
+	NSCharacterSet *ws = [NSCharacterSet whitespaceCharacterSet];
+	int len = [self length], i = len;
+	while (i && [ws characterIsMember:[self characterAtIndex:i-1]]) i--;
+	return (i == len) ? self : [self substringToIndex:i];
+}
+ at end

Added: trunk/src/uimac14/NotificationController.h
===================================================================
--- trunk/src/uimac14/NotificationController.h	                        (rev 0)
+++ trunk/src/uimac14/NotificationController.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,23 @@
+//
+//  NotificationController.h
+//  uimac
+//
+//  Created by Alan Schmitt on 02/02/06.
+//  Copyright 2006, see file COPYING for details. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import <Growl/Growl.h>
+
+ at interface NotificationController : NSObject <GrowlApplicationBridgeDelegate>
+{
+}
+
+- (void)updateFinishedFor: (NSString *)profile;
+- (void)syncFinishedFor: (NSString *)profile;
+
+/* Implement the GrowlApplicationBridgeDelegate protocol */
+- (NSDictionary *)registrationDictionaryForGrowl;
+- (NSString *)applicationNameForGrowl;
+
+ at end

Added: trunk/src/uimac14/NotificationController.m
===================================================================
--- trunk/src/uimac14/NotificationController.m	                        (rev 0)
+++ trunk/src/uimac14/NotificationController.m	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,65 @@
+//
+//  NotificationController.m
+//  uimac
+//
+//  Created by Alan Schmitt on 02/02/06.
+//  Copyright 2006, see file COPYING for details. All rights reserved.
+//
+
+#import "NotificationController.h"
+
+#define NOTIFY_UPDATE   @"Scan finished"
+#define NOTIFY_SYNC     @"Synchronization finished"
+
+/* Show a simple notification */
+static void simpleNotify(NSString *name, NSString *descFmt, NSString *profile);
+
+ at implementation NotificationController
+
+- (void)awakeFromNib
+{
+    [GrowlApplicationBridge setGrowlDelegate:self];
+}
+
+- (void)updateFinishedFor: (NSString *)profile
+{
+    simpleNotify(NOTIFY_UPDATE,
+                 @"Profile '%@' is finished scanning for updates",
+                 profile);
+}
+
+- (void)syncFinishedFor: (NSString *)profile {
+    simpleNotify(NOTIFY_SYNC,
+                 @"Profile '%@' is finished synchronizing",
+                 profile);
+}
+
+- (NSDictionary *)registrationDictionaryForGrowl
+{
+    NSArray* notifications = [NSArray arrayWithObjects:
+        NOTIFY_UPDATE,
+        NOTIFY_SYNC,
+        nil];
+    return [NSDictionary dictionaryWithObjectsAndKeys:
+        notifications,      GROWL_NOTIFICATIONS_ALL,
+        notifications,      GROWL_NOTIFICATIONS_DEFAULT,
+        nil];
+}
+
+- (NSString *)applicationNameForGrowl
+{
+    return @"Unison";
+}
+
+ at end
+
+static void simpleNotify(NSString *name, NSString *descFmt, NSString *profile)
+{
+    [GrowlApplicationBridge notifyWithTitle:name
+                                description:[NSString stringWithFormat:descFmt, profile]
+                           notificationName:name
+                                   iconData:nil
+                                   priority:0
+                                   isSticky:false
+                               clickContext:nil];
+}
\ No newline at end of file

Added: trunk/src/uimac14/PreferencesController.h
===================================================================
--- trunk/src/uimac14/PreferencesController.h	                        (rev 0)
+++ trunk/src/uimac14/PreferencesController.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,20 @@
+/* PreferencesController */
+
+#import <Cocoa/Cocoa.h>
+
+ at interface PreferencesController : NSObject
+{
+    IBOutlet NSTextField *firstRootText;
+    IBOutlet NSButtonCell *localButtonCell;
+    IBOutlet NSTextField *profileNameText;
+    IBOutlet NSButtonCell *remoteButtonCell;
+    IBOutlet NSTextField *secondRootHost;
+    IBOutlet NSTextField *secondRootText;
+    IBOutlet NSTextField *secondRootUser;
+}
+- (IBAction)anyEnter:(id)sender;
+- (IBAction)localClick:(id)sender;
+- (IBAction)remoteClick:(id)sender;
+- (BOOL)validatePrefs;
+- (void)reset;
+ at end

Added: trunk/src/uimac14/PreferencesController.m
===================================================================
--- trunk/src/uimac14/PreferencesController.m	                        (rev 0)
+++ trunk/src/uimac14/PreferencesController.m	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,89 @@
+#import "PreferencesController.h"
+#import "Bridge.h"
+
+ at implementation PreferencesController
+
+- (void)reset
+{
+    [profileNameText setStringValue:@""];
+    [firstRootText setStringValue:@""];
+    [secondRootUser setStringValue:@""];
+    [secondRootHost setStringValue:@""];
+    [secondRootText setStringValue:@""];
+    [remoteButtonCell setState:NSOnState];
+    [localButtonCell setState:NSOffState];
+    [secondRootUser setSelectable:YES];
+    [secondRootUser setEditable:YES];
+    [secondRootHost setSelectable:YES];
+    [secondRootHost setEditable:YES];
+}
+
+- (BOOL)validatePrefs
+{
+    NSString *profileName = [profileNameText stringValue];
+    if (profileName == nil | [profileName isEqualTo:@""]) {
+        // FIX: should check for already existing names too
+        NSRunAlertPanel(@"Error",@"You must enter a profile name",@"OK",nil,nil);
+        return NO;
+    }
+    NSString *firstRoot = [firstRootText stringValue];
+    if (firstRoot == nil | [firstRoot isEqualTo:@""]) {
+        NSRunAlertPanel(@"Error",@"You must enter a first root",@"OK",nil,nil);
+        return NO;
+    }
+    NSString *secondRoot;
+    if ([remoteButtonCell state] == NSOnState) {
+        NSString *user = [secondRootUser stringValue];
+        if (user == nil | [user isEqualTo:@""]) {
+            NSRunAlertPanel(@"Error",@"You must enter a user",@"OK",nil,nil);
+            return NO;
+        }
+        NSString *host = [secondRootHost stringValue];
+        if (host == nil | [host isEqualTo:@""]) {
+            NSRunAlertPanel(@"Error",@"You must enter a host",@"OK",nil,nil);
+            return NO;
+        }
+        NSString *file = [secondRootText stringValue];
+        // OK for empty file, e.g., ssh://foo@bar/
+        secondRoot = [NSString stringWithFormat:@"ssh://%@@%@/%@",user,host,file];
+    }
+    else {
+        secondRoot = [secondRootText stringValue];
+        if (secondRoot == nil | [secondRoot isEqualTo:@""]) {
+            NSRunAlertPanel(@"Error",@"You must enter a second root file",@"OK",nil,nil);
+            return NO;
+        }
+    }
+	ocamlCall("xSSS", "unisonProfileInit", profileName, firstRoot, secondRoot);
+    return YES;
+}
+
+/* The target when enter is pressed in any of the text fields */
+// FIX: this is broken, it takes tab, mouse clicks, etc.
+- (IBAction)anyEnter:(id)sender
+{
+    NSLog(@"enter");
+    [self validatePrefs];
+}
+
+- (IBAction)localClick:(id)sender
+{
+    NSLog(@"local");
+    [secondRootUser setStringValue:@""];
+    [secondRootHost setStringValue:@""];
+    [secondRootUser setSelectable:NO];
+    [secondRootUser setEditable:NO];
+    [secondRootHost setSelectable:NO];
+    [secondRootHost setEditable:NO];
+}
+
+- (IBAction)remoteClick:(id)sender
+{
+    NSLog(@"remote");
+    [secondRootUser setSelectable:YES];
+    [secondRootUser setEditable:YES];
+    [secondRootHost setSelectable:YES];
+    [secondRootHost setEditable:YES];
+}
+
+ at end

Added: trunk/src/uimac14/ProfileController.h
===================================================================
--- trunk/src/uimac14/ProfileController.h	                        (rev 0)
+++ trunk/src/uimac14/ProfileController.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,20 @@
+/* ProfileController */
+/* Copyright (c) 2003, see file COPYING for details. */
+
+#import <Cocoa/Cocoa.h>
+
+ at interface ProfileController : NSObject
+{
+    IBOutlet NSTableView *tableView;
+    NSMutableArray *profiles;
+    int defaultIndex; // -1 if no default, else the index in profiles of @"default"
+}
+- (void)initProfiles;
+- (int)numberOfRowsInTableView:(NSTableView *)aTableView;
+- (id)tableView:(NSTableView *)aTableView
+    objectValueForTableColumn:(NSTableColumn *)aTableColumn
+    row:(int)rowIndex;
+- (NSString *)selected;
+- (NSTableView *)tableView; // allows MyController to set up firstResponder
+- (NSMutableArray*) getProfiles;
+ at end

Added: trunk/src/uimac14/ProfileController.m
===================================================================
--- trunk/src/uimac14/ProfileController.m	                        (rev 0)
+++ trunk/src/uimac14/ProfileController.m	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,84 @@
+/* Copyright (c) 2003, see file COPYING for details. */
+
+#import "ProfileController.h"
+#import "Bridge.h"
+
+ at implementation ProfileController
+
+NSString *unisonDirectory()
+{
+    return (NSString *)ocamlCall("S", "unisonDirectory");
+}
+
+- (void)initProfiles
+{
+    NSString *directory = unisonDirectory();
+#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
+    NSArray *files = [[NSFileManager defaultManager] directoryContentsAtPath:directory];
+#else
+    NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directory error:nil];
+#endif
+    unsigned int count = [files count];
+    unsigned int i,j;
+    
+    [profiles release];
+    profiles = [[NSMutableArray alloc] init];
+    defaultIndex = -1;
+    
+    for (i = j = 0; i < count; i++) {
+        NSString *file = [files objectAtIndex:i];
+        if ([[file pathExtension] isEqualTo:@"prf"]) {
+            NSString *withoutExtension = [file stringByDeletingPathExtension];
+            [profiles insertObject:withoutExtension atIndex:j];
+            if ([@"default" isEqualTo:withoutExtension]) defaultIndex = j;
+            j++;
+        }
+    }
+    if (j > 0)
+        [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO];
+}
+
+- (void)awakeFromNib
+{
+    // start with the default profile selected
+    [self initProfiles];
+    if (defaultIndex >= 0)
+        [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:defaultIndex] byExtendingSelection:NO];
+    // on awake the scroll bar is inactive, but after adding profiles we might need it;
+    // reloadData makes it happen.  Q: is setNeedsDisplay more efficient?
+    [tableView reloadData];
+}
+
+- (int)numberOfRowsInTableView:(NSTableView *)aTableView
+{
+    if (!profiles) return 0;
+    else return [profiles count];
+}
+
+- (id)tableView:(NSTableView *)aTableView
+    objectValueForTableColumn:(NSTableColumn *)aTableColumn
+    row:(int)rowIndex
+{
+    if (rowIndex >= 0 && rowIndex < [profiles count])
+        return [profiles objectAtIndex:rowIndex];
+    else return @"[internal error!]";
+}
+
+- (NSString *)selected
+{
+    int rowIndex = [tableView selectedRow];
+    if (rowIndex >= 0 && rowIndex < [profiles count])
+        return [profiles objectAtIndex:rowIndex];
+    else return @"[internal error!]";
+}
+
+- (NSTableView *)tableView
+{
+    return tableView;
+}
+
+- (NSMutableArray*)getProfiles {
+  return profiles;
+}
+
+ at end

Added: trunk/src/uimac14/ProfileTableView.h
===================================================================
--- trunk/src/uimac14/ProfileTableView.h	                        (rev 0)
+++ trunk/src/uimac14/ProfileTableView.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,11 @@
+/* ProfileTableView */
+
+#import <Cocoa/Cocoa.h>
+
+ at class MyController;
+
+ at interface ProfileTableView : NSTableView
+{
+    IBOutlet MyController *myController;
+}
+ at end

Added: trunk/src/uimac14/ProfileTableView.m
===================================================================
--- trunk/src/uimac14/ProfileTableView.m	                        (rev 0)
+++ trunk/src/uimac14/ProfileTableView.m	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,36 @@
+#import "MyController.h"
+#import "ProfileTableView.h"
+
+ at implementation ProfileTableView
+
+- (void)keyDown:(NSEvent *)event
+{
+    /* some keys return zero-length strings */
+    if ([[event characters] length] == 0) {
+        [super keyDown:event];
+        return;
+    }
+
+    unichar c = [[event characters] characterAtIndex:0];
+    switch (c) {
+    case '\r':
+        [myController openButton:self];
+        break;
+    default:
+        [super keyDown:event];
+        break;
+    }
+}
+
+/* Override default highlight colour to match ReconTableView */
+- (id)_highlightColorForCell:(NSCell *)cell
+{   
+    if(([[self window] firstResponder] == self) &&
+        [[self window] isMainWindow] &&
+        [[self window] isKeyWindow])
+
+        return [NSColor colorWithCalibratedRed:0.7 green:0.75 blue:0.8 alpha:1.0];
+    else return [NSColor colorWithCalibratedRed:0.8 green:0.8 blue:0.8 alpha:1.0];
+}
+
+ at end

Added: trunk/src/uimac14/ProgressCell.h
===================================================================
--- trunk/src/uimac14/ProgressCell.h	                        (rev 0)
+++ trunk/src/uimac14/ProgressCell.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,15 @@
+#import <Cocoa/Cocoa.h>
+
+ at interface ProgressCell : NSCell
+{
+	float _minVal, _maxVal;  // defaults to 0.0, 100.0
+	BOOL _isActive;
+	BOOL _useFullView;       // default: NO
+	BOOL _isError;           // default: NO
+	NSImage *_icon;
+	NSString *_statusString;
+}
+- (void)setStatusString:(NSString *)string;
+- (void)setIcon:(NSImage *)image;
+- (void)setIsActive:(BOOL)yn;
+ at end

Added: trunk/src/uimac14/ProgressCell.m
===================================================================
--- trunk/src/uimac14/ProgressCell.m	                        (rev 0)
+++ trunk/src/uimac14/ProgressCell.m	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,199 @@
+/******************************************************************************
+ * Copyright 2008, 2014 (see file COPYING for more information)
+ *
+ * Loosely based on TorrentCell from Transmission (.png files are from 
+ * the original).  
+ *****************************************************************************/
+
+#import "ProgressCell.h"
+
+#define BAR_HEIGHT 12.0
+
+static NSImage *_ProgressWhite, *_ProgressBlue, *_ProgressGray, *_ProgressGreen,
+		*_ProgressAdvanced, *_ProgressEndWhite, *_ProgressEndBlue,
+		*_ProgressEndGray, *_ProgressEndGreen, *_ProgressLightGreen,
+		*_ProgressEndAdvanced, * _ErrorImage;
+static NSSize ZeroSize;
+
+ at implementation ProgressCell
+
++ (void) initialize
+{
+	NSSize startSize = NSMakeSize(100.0, BAR_HEIGHT);
+	ZeroSize = NSMakeSize(0.0, 0.0);
+	
+	_ProgressWhite = [NSImage imageNamed: @"ProgressBarWhite.png"];
+	[_ProgressWhite setScalesWhenResized: YES];
+	
+	_ProgressBlue = [NSImage imageNamed: @"ProgressBarBlue.png"];
+	[_ProgressBlue setScalesWhenResized: YES];
+	[_ProgressBlue setSize: startSize];
+	
+	_ProgressGray = [NSImage imageNamed: @"ProgressBarGray.png"];
+	[_ProgressGray setScalesWhenResized: YES];
+	[_ProgressGray setSize: startSize];
+	
+	_ProgressGreen = [NSImage imageNamed: @"ProgressBarGreen.png"];
+	[_ProgressGreen setScalesWhenResized: YES];
+	
+	_ProgressLightGreen = [NSImage imageNamed: @"ProgressBarLightGreen.png"];
+	[_ProgressLightGreen setScalesWhenResized: YES];
+	
+	_ProgressAdvanced = [NSImage imageNamed: @"ProgressBarAdvanced.png"];
+	[_ProgressAdvanced setScalesWhenResized: YES];
+	
+	_ProgressEndWhite = [NSImage imageNamed: @"ProgressBarEndWhite.png"];
+	_ProgressEndBlue = [NSImage imageNamed: @"ProgressBarEndBlue.png"];
+	_ProgressEndGray = [NSImage imageNamed: @"ProgressBarEndGray.png"];
+	_ProgressEndGreen = [NSImage imageNamed: @"ProgressBarEndGreen.png"];
+	_ProgressEndAdvanced = [NSImage imageNamed: @"ProgressBarEndAdvanced.png"];
+	
+	_ErrorImage = [[NSImage imageNamed: @"Error.tiff"] copy];
+	[_ErrorImage setFlipped: YES];
+}
+
+- (id)init
+{
+	self = [super init];
+	_minVal = 0.0;
+	_maxVal = 100.0;
+	_isActive = YES;
+    _statusString = @"";
+
+	return self;
+}
+
+ - (void)dealloc
+ {
+ 	[_icon release];
+ 	[_statusString release];
+ 	[super dealloc];
+ }
+
+- (void)setStatusString:(NSString *)string
+{
+  	_statusString = [string retain];
+}
+
+- (void)setIcon:(NSImage *)image
+{
+  _icon = [image retain];
+}
+
+- (void)setIsActive:(BOOL)yn
+{
+	_isActive = yn;
+}
+
+- (void)drawBarImage:(NSImage *)barImage width:(float)width point:(NSPoint)point
+{
+    if (width <= 0.0)
+        return;
+    
+    if ([barImage size].width < width)
+        [barImage setSize: NSMakeSize(width * 2.0, BAR_HEIGHT)];
+
+    [barImage compositeToPoint: point fromRect: NSMakeRect(0, 0, width, BAR_HEIGHT) operation: NSCompositeSourceOver];
+}
+
+- (void)drawBar:(float)width point:(NSPoint)point
+{
+	id objectValue = [self objectValue];
+	if (!objectValue) return;
+	
+    float value = [objectValue floatValue];
+	float progress = (value - _minVal)/ (_maxVal - _minVal);
+
+    width -= 2.0;
+    float completedWidth, remainingWidth = 0.0;
+    
+    //bar images and widths
+    NSImage * barLeftEnd, * barRightEnd, * barComplete, * barRemaining;
+	if (progress >= 1.0) {
+        completedWidth = width;
+        barLeftEnd = _ProgressEndGreen;
+        barRightEnd = _ProgressEndGreen;
+        barComplete = _ProgressGreen;
+        barRemaining = _ProgressLightGreen;
+	} 
+	else {
+        completedWidth = progress * width;
+        remainingWidth = width - completedWidth;
+		barLeftEnd = (remainingWidth == width) ? _ProgressEndWhite
+						: ((_isActive) ? _ProgressEndBlue : _ProgressEndGray);
+		barRightEnd = (completedWidth < width) ? _ProgressEndWhite
+						: ((_isActive) ? _ProgressEndBlue : _ProgressEndGray);
+        barComplete = _isActive ? _ProgressBlue : _ProgressGray;
+        barRemaining = _ProgressWhite;
+    }
+    
+    [barLeftEnd compositeToPoint: point operation: NSCompositeSourceOver];
+    
+    point.x += 1.0;
+    [self drawBarImage: barComplete width: completedWidth point: point];
+    
+    point.x += completedWidth;
+    [self drawBarImage: barRemaining width: remainingWidth point: point];
+    
+    point.x += remainingWidth;
+    [barRightEnd compositeToPoint: point operation: NSCompositeSourceOver];
+}
+
+- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)view
+{
+    NSPoint pen = cellFrame.origin;
+    const float PADDING = 3.0;
+        
+	// progress bar
+	pen.y += PADDING + BAR_HEIGHT;
+	float mainWidth = cellFrame.size.width;
+	float barWidth = mainWidth;
+	[self drawBar: barWidth point: pen];
+    
+	//icon
+	NSImage * image = _isError ? _ErrorImage : _icon;
+	if (image) {
+        NSSize imageSize = [image size];
+        NSRect imageFrame;
+		imageFrame.origin = cellFrame.origin;
+        imageFrame.size = imageSize;
+        imageFrame.origin.x += ceil((cellFrame.size.width - imageSize.width) / 2);
+        imageFrame.origin.y += [view isFlipped] ?
+				  ceil((cellFrame.size.height + imageSize.height) / 2)
+				: ceil((cellFrame.size.height - imageSize.height) / 2);
+        [image compositeToPoint:imageFrame.origin operation:NSCompositeSourceOver];
+	}
+
+	// status string
+	if (_statusString) {
+	    BOOL highlighted = [self isHighlighted] && [[self highlightColorWithFrame: cellFrame inView: view]
+                                                        isEqual: [NSColor alternateSelectedControlColor]];
+		NSMutableParagraphStyle * paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
+		[paragraphStyle setLineBreakMode: NSLineBreakByTruncatingTail];
+		
+		NSDictionary * statusAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:
+						highlighted ? [NSColor whiteColor] : [NSColor darkGrayColor], NSForegroundColorAttributeName,
+						[NSFont boldSystemFontOfSize: 9.0], NSFontAttributeName,
+						paragraphStyle, NSParagraphStyleAttributeName, nil];
+		[paragraphStyle release];
+
+		NSSize statusSize = [_statusString sizeWithAttributes: statusAttributes];
+		pen = cellFrame.origin;
+		pen.x += (cellFrame.size.width - statusSize.width) * 0.5;
+		pen.y += (cellFrame.size.height - statusSize.height) * 0.5;
+		
+		[_statusString drawInRect: NSMakeRect(pen.x, pen.y, statusSize.width, statusSize.height)
+						withAttributes: statusAttributes];
+	    [statusAttributes release];
+	}
+}
+
+- (id)copyWithZone: (NSZone *)zone
+{
+    ProgressCell *newObj = [super copyWithZone: zone];
+    newObj->_statusString = [_statusString retain];
+    newObj->_icon = [_icon retain];
+    return newObj;
+}
+
+ at end

Added: trunk/src/uimac14/ReconItem.h
===================================================================
--- trunk/src/uimac14/ReconItem.h	                        (rev 0)
+++ trunk/src/uimac14/ReconItem.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,80 @@
+/* ReconItem */
+
+#import <Cocoa/Cocoa.h>
+
+ at class OCamlValue;
+
+ at interface ReconItem : NSObject
+{
+	ReconItem *parent;
+    NSString *path;
+    NSString *fullPath;
+    BOOL selected;
+    NSImage *direction;
+    NSString *directionSortString;
+    double fileSize;
+    double bytesTransferred;
+    BOOL resolved;
+}
+- (BOOL)selected;
+- (void)setSelected:(BOOL)x;
+- (NSString *)path;
+- (NSString *)fullPath;
+- (NSString *)left;
+- (NSString *)right;
+- (NSImage *)direction;
+- (NSImage *)fileIcon;
+- (long)fileCount;
+- (double)fileSize;
+- (NSString *)fileSizeString;
+- (double)bytesTransferred;
+- (NSString *)bytesTransferredString;
+- (void)setDirection:(char *)d;
+- (void) doAction:(unichar)action;
+- (void) doIgnore:(unichar)action;
+- (NSString *)progress;
+- (NSString *)progressString;
+- (void)resetProgress;
+- (NSString *)details;
+- (NSString *)updateDetails;
+- (BOOL)isConflict;
+- (BOOL)changedFromDefault;
+- (void)revertDirection;
+- (BOOL)canDiff;
+- (void)showDiffs;
+- (NSString *)leftSortKey;
+- (NSString *)rightSortKey;
+- (NSString *)replicaSortKey:(NSString *)sortString;
+- (NSString *)directionSortKey;
+- (NSString *)progressSortKey;
+- (NSString *)pathSortKey;
+- (NSArray *)children;
+- (ReconItem *)collapseParentsWithSingleChildren:(BOOL)isRoot;
+- (ReconItem *)parent;
+- (void)setPath:(NSString *)aPath;
+- (void)setFullPath:(NSString *)p;
+- (void)setParent:(ReconItem *)p;
+- (void)willChange;
+ at end
+
+ at interface LeafReconItem : ReconItem
+{
+    NSString *left;
+    NSString *right;
+    NSString *progress;
+    NSString *details;
+    OCamlValue *ri; // an ocaml Common.reconItem
+    long index; // index in Ri list
+}
+- initWithRiAndIndex:(OCamlValue *)v index:(long)i;
+ at end
+
+ at interface ParentReconItem : ReconItem
+{
+	NSMutableArray *_children;
+	long fileCount;
+}
+- (void)addChild:(ReconItem *)item nested:(BOOL)useNesting;
+- (void)sortUsingDescriptors:(NSArray *)sortDescriptors;
+- (BOOL)hasConflictedChildren;
+ at end

Added: trunk/src/uimac14/ReconItem.m
===================================================================
--- trunk/src/uimac14/ReconItem.m	                        (rev 0)
+++ trunk/src/uimac14/ReconItem.m	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,862 @@
+#import "ReconItem.h"
+#import "Bridge.h"
+
+#import <Carbon/Carbon.h>
+
+ at implementation ReconItem
+
+- init {
+	[super init];
+	selected = NO; // NB only used/updated during sorts. Not a 
+				   // reliable indicator of whether item is selected
+	fileSize = -1.;
+	bytesTransferred = -1.;
+	return self;
+}
+
+- (void)dealloc
+{
+    [path release];
+    [fullPath release];
+    // [direction release];  // assuming retained by cache, so not retained
+    // [directionSortString release];  // no retain/release necessary because is constant
+	[super dealloc];
+}
+
+- (ReconItem *)parent 
+{
+	return parent;
+}
+
+- (void)setParent:(ReconItem *)p
+{
+	parent = p;
+}
+
+- (void)willChange
+{
+	// propagate up parent chain
+	[parent willChange];
+}
+
+- (NSArray *)children
+{
+	return nil;
+}
+
+- (BOOL)selected
+{
+    return selected;
+}
+
+- (void)setSelected:(BOOL)x
+{
+    selected = x;
+}
+
+- (NSString *)path
+{
+    return path;
+}
+
+- (void)setPath:(NSString *)aPath
+{
+	[path autorelease];
+	path = [aPath retain];
+	
+	// invalidate
+	[fullPath autorelease];
+	fullPath = nil;
+}
+
+- (NSString *)fullPath
+{
+	if (!fullPath) {
+		NSString *parentPath = [parent fullPath];
+		[self setFullPath:(([parentPath length] > 0) ? [parentPath stringByAppendingFormat:@"/%@", path] : path)];
+	}
+
+    return fullPath;
+}
+
+- (void)setFullPath:(NSString *)p
+{
+	[fullPath autorelease];
+	fullPath = [p retain];
+}
+
+- (NSString *)left
+{
+    return nil;
+}
+
+- (NSString *)right
+{
+    return nil;
+}
+
+static NSMutableDictionary *_ChangeIconsByType = nil;
+
+- (NSImage *)changeIconFor:(NSString *)type other:(NSString *)other
+{
+	if (![type length]) {
+		if ([other isEqual:@"Created"]) {
+			type = @"Absent";
+		} else if ([other length]) {
+			type = @"Unmodified";		
+		} else
+			return nil;
+	}
+
+	NSImage *result = [_ChangeIconsByType objectForKey:type];
+	if (!result) {
+		NSString *imageName = [NSString stringWithFormat:@"Change_%@.png", type];
+		result = [NSImage imageNamed:imageName];
+		if (!_ChangeIconsByType) _ChangeIconsByType = [[NSMutableDictionary alloc] init];
+		[_ChangeIconsByType setObject:result forKey:type];
+	}
+	return result;
+}
+
+- (NSImage *)leftIcon
+{
+	return [self changeIconFor:[self left] other:[self right]];
+}
+
+- (NSImage *)rightIcon
+{
+	return [self changeIconFor:[self right] other:[self left]];
+}
+
+
+- (double)computeFileSize
+{
+	return 0.;
+}
+
+- (double)bytesTransferred
+{
+	return 0.;
+}
+
+- (long)fileCount
+{
+	return 1;
+}
+
+- (double)fileSize
+{
+	if (fileSize == -1.) fileSize = [self computeFileSize];
+	return fileSize;
+}
+
+- (NSString *)formatFileSize:(double)size
+{
+	if (size == 0) return @"--";
+	if (size < 1024) return @"< 1KB"; // return [NSString stringWithFormat:@"%i bytes", size];
+	size /= 1024;
+	if (size < 1024) return [NSString stringWithFormat:@"%i KB", (int)size];
+	size /= 1024;
+	if (size < 1024) return [NSString stringWithFormat:@"%1.1f MB", size];
+	size = size / 1024;
+	return [NSString stringWithFormat:@"%1.1f GB", size];
+}
+
+- (NSString *)fileSizeString
+{
+	return [self formatFileSize:[self fileSize]];
+}
+
+- (NSString *)bytesTransferredString
+{
+	return [self formatFileSize:[self bytesTransferred]];
+}
+
+- (NSNumber *)percentTransferred
+{
+	double size = [self computeFileSize];
+	return (size > 0) ? [NSNumber numberWithDouble:([self bytesTransferred] / (size) * 100.0)]
+					  : nil;
+}
+
+static NSMutableDictionary *_iconsByExtension = nil;
+
+- (NSImage *)iconForExtension:(NSString *)extension
+{
+	NSImage *icon = [_iconsByExtension objectForKey:extension];
+	if (!_iconsByExtension) _iconsByExtension = [[NSMutableDictionary alloc] init];
+	if (!icon) {
+		icon = [[NSWorkspace sharedWorkspace] iconForFileType:extension];
+		[icon setSize:NSMakeSize(16.0, 16.0)];
+		[_iconsByExtension setObject:icon forKey:extension];
+	}
+	return icon;
+}
+
+- (NSImage *)fileIcon
+{
+	return [self iconForExtension:NSFileTypeForHFSTypeCode(kOpenFolderIcon)];
+}
+
+- (NSString *)dirString
+{
+	return @"<-?->";
+}
+
+- (NSImage *)direction
+{
+    if (direction) return direction;    
+    NSString * dirString = [self dirString];
+
+    BOOL changedFromDefault = [self changedFromDefault];
+    
+    if ([dirString isEqual:@"<-?->"]) {
+        if (changedFromDefault | resolved) {
+            direction = [NSImage imageNamed: @"table-skip.tif"];
+			directionSortString = @"3";
+		}
+        else {
+            direction = [NSImage imageNamed: @"table-conflict.tif"];
+			directionSortString = @"2";
+        }
+    }
+    
+    else if ([dirString isEqual:@"---->"]) {
+        if (changedFromDefault) {
+            direction = [NSImage imageNamed: @"table-right-blue.tif"];
+            directionSortString = @"6";
+        }
+	else {
+            direction = [NSImage imageNamed: @"table-right-green.tif"];
+            directionSortString = @"8";
+        }
+    }
+    
+    else if ([dirString isEqual:@"<----"]) {
+        if (changedFromDefault) {
+            direction = [NSImage imageNamed: @"table-left-blue.tif"];
+            directionSortString = @"5";
+        }
+        else {
+            direction = [NSImage imageNamed: @"table-left-green.tif"];
+            directionSortString = @"7";
+        }
+    }
+
+    else if ([dirString isEqual:@"<-M->"]) {
+        direction = [NSImage imageNamed: @"table-merge.tif"];
+        directionSortString = @"4";
+    }
+    
+	else if ([dirString isEqual:@"<--->"]) {
+		direction = [NSImage imageNamed: @"table-mixed.tif"];
+		directionSortString = @"9";
+	}
+
+    else {
+        direction = [NSImage imageNamed: @"table-error.tif"];
+        directionSortString = @"1";
+    }
+    
+    [direction retain];
+    return direction;
+}
+
+- (void)setDirection:(char *)d
+{
+    [direction autorelease];
+    direction = nil;
+}
+
+- (void)doAction:(unichar)action
+{
+    switch (action) {
+    case '>':
+        [self setDirection:"unisonRiSetRight"];
+        break;
+    case '<':
+        [self setDirection:"unisonRiSetLeft"];
+        break;
+    case '/':
+        [self setDirection:"unisonRiSetConflict"];
+        resolved = YES;
+        break;
+    case '-':
+        [self setDirection:"unisonRiForceOlder"];
+        break;
+    case '+':
+        [self setDirection:"unisonRiForceNewer"];
+        break;
+    case 'm':
+        [self setDirection:"unisonRiSetMerge"];
+        break;
+    case 'd':
+        [self showDiffs];
+        break;
+    case 'R':
+        [self revertDirection];
+        break;
+    default:
+        NSLog(@"ReconItem.doAction : unknown action");
+        break;
+    }
+}
+
+- (void)doIgnore:(unichar)action
+{
+    switch (action) {
+    case 'I':
+		ocamlCall("xS", "unisonIgnorePath", [self fullPath]);
+        break;
+    case 'E':
+		ocamlCall("xS", "unisonIgnoreExt", [self path]);
+        break;
+    case 'N':
+		ocamlCall("xS", "unisonIgnoreName", [self path]);
+        break;
+    default:
+        NSLog(@"ReconItem.doIgnore : unknown ignore");
+        break;
+    }
+}
+
+/* Sorting functions. These have names equal to
+   column identifiers + "SortKey", and return NSStrings that
+   can be automatically sorted with their compare method */
+
+- (NSString *) leftSortKey
+{
+    return [self replicaSortKey:[self left]];
+}
+
+- (NSString *) rightSortKey
+{
+    return [self replicaSortKey:[self right]];
+}
+
+- (NSString *) replicaSortKey:(NSString *)sortString
+{
+    /* sort order for left and right replicas */
+
+    if ([sortString isEqualToString:@"Created"]) return @"1";
+    else if ([sortString isEqualToString:@"Deleted"]) return @"2";
+    else if ([sortString isEqualToString:@"Modified"]) return @"3";
+    else if ([sortString isEqualToString:@""]) return @"4";
+    else return @"5";
+}
+
+- (NSString *) directionSortKey
+{
+    /* Since the direction indicators are unsortable images, use
+       directionSortString instead */
+
+    if ([directionSortString isEqual:@""])
+        [self direction];
+    return directionSortString;
+}
+
+- (NSString *) progressSortKey
+{
+    /* Percentages, "done" and "" are sorted OK without help,
+       but "start " should be sorted after "" and before "0%" */
+
+    NSString * progressString = [self progress];
+    if ([progressString isEqualToString:@"start "]) progressString = @" ";
+    return progressString;
+}
+
+- (NSString *) pathSortKey
+{
+    /* default alphanumeric sort is fine for paths */
+    return [self path];
+}
+
+- (NSString *)progress
+{
+	return nil;
+}
+
+- (BOOL)transferInProgress
+{
+	double soFar = [self bytesTransferred];
+	return (soFar > 0) && (soFar < [self fileSize]);
+}
+
+- (void)resetProgress
+{
+}
+
+- (NSString *)progressString
+{
+	NSString *progress = [self progress];
+	if ([progress length] == 0. || [progress hasSuffix:@"%"])
+		progress = [self transferInProgress] ? [self bytesTransferredString] : @"";
+	else if ([progress isEqual:@"done"]) progress = @"";
+	return progress;
+}
+
+- (NSString *)details
+{
+	return nil;
+}
+
+- (NSString *)updateDetails
+{
+    return [self details];
+}
+
+- (BOOL)isConflict
+{
+	return NO;
+}
+
+- (BOOL)changedFromDefault
+{
+	return NO;
+}
+
+- (void)revertDirection
+{
+	[self willChange];
+    [direction release];
+    direction = nil;
+    resolved = NO;
+}
+
+- (BOOL)canDiff
+{
+	return NO;
+}
+
+- (void)showDiffs
+{
+}
+
+- (ReconItem *)collapseParentsWithSingleChildren:(BOOL)isRoot
+{
+	return self;
+}
+
+- (NSString *)description
+{
+    return [NSString stringWithFormat:@"ReconItem: %@ %@", fullPath, path];
+}
+
+- (NSString *)debugDescription
+{
+    return [self description];
+}
+ at end
+
+
+// --- Leaf items -- actually corresponding to ReconItems in OCaml
+ at implementation LeafReconItem
+
+- initWithRiAndIndex:(OCamlValue *)v index:(long)i
+{
+    [super init];
+    ri = [v retain];
+	index = i;
+    resolved = NO;
+    directionSortString = @"";
+    return self;
+}
+
+-(void)dealloc
+{
+    [ri release];
+    [left release];
+    [right release];
+    [progress release];
+    [details release];
+	
+    [super dealloc];
+}
+
+- (NSString *)path
+{
+    if (!path) path = [(NSString *)ocamlCall("S@", "unisonRiToPath", ri) retain];
+    return path;
+}
+
+- (NSString *)left
+{
+    if (!left) left = [(NSString *)ocamlCall("S@", "unisonRiToLeft", ri) retain];
+	return left;
+}
+
+- (NSString *)right
+{
+    if (!right)	right = [(NSString *)ocamlCall("S@", "unisonRiToRight", ri) retain];    
+	return right;
+}
+
+- (double)computeFileSize
+{
+  return [(NSNumber *)ocamlCall("N@", "unisonRiToFileSize", ri) doubleValue];
+}
+
+- (double)bytesTransferred
+{
+	if (bytesTransferred == -1.) {
+		// need to force to fileSize if done, otherwise may not match up to 100%
+		bytesTransferred = ([[self progress] isEqual:@"done"]) ? [self fileSize]
+                  : [(NSNumber*)ocamlCall("N@", "unisonRiToBytesTransferred", ri) doubleValue];
+	}
+	return bytesTransferred;
+}
+
+- (NSImage *)fileIcon
+{
+	NSString *extension = [[self path] pathExtension];
+	
+	if ([@"" isEqual:extension]) {
+		NSString *type = (NSString *)ocamlCall("S@", "unisonRiToFileType", ri);
+		extension = [type isEqual:@"dir"] 
+			? NSFileTypeForHFSTypeCode(kGenericFolderIcon)
+			: NSFileTypeForHFSTypeCode(kGenericDocumentIcon);
+	}
+	return [self iconForExtension:extension];
+}
+
+- (NSString *)dirString
+{
+	return (NSString *)ocamlCall("S@", "unisonRiToDirection", ri);
+}
+
+- (void)setDirection:(char *)d
+{
+	[self willChange];
+    [super setDirection:d];
+	ocamlCall("x@", d, ri);
+}
+
+- (NSString *)progress
+{
+    if (!progress) {
+		progress = 	[(NSString *)ocamlCall("S@", "unisonRiToProgress", ri) retain];
+		if ([progress isEqual:@"FAILED"]) [self updateDetails];
+    }
+	return progress;
+}
+
+- (void)resetProgress
+{
+    // Get rid of the memoized progress because we expect it to change
+	[self willChange];
+	bytesTransferred = -1.;
+    [progress release];
+	
+	// Force update now so we get the result while the OCaml thread is available
+	// [self progress];
+	// [self bytesTransferred];
+    progress = nil;
+}
+
+- (NSString *)details
+{
+    if (details) return details;
+    return [self updateDetails];
+}
+
+- (NSString *)updateDetails
+{
+	[details autorelease];
+	details = [(NSString *)ocamlCall("S@", "unisonRiToDetails", ri) retain];
+    return details;
+}
+
+- (BOOL)isConflict
+{
+	return ((long)ocamlCall("i@", "unisonRiIsConflict", ri) ? YES : NO);
+}
+
+- (BOOL)changedFromDefault
+{
+	return ((long)ocamlCall("i@", "changedFromDefault", ri) ? YES : NO);
+}
+
+- (void)revertDirection
+{
+	ocamlCall("x@", "unisonRiRevert", ri);
+	[super revertDirection];
+}
+
+- (BOOL)canDiff
+{
+	return ((long)ocamlCall("i@", "canDiff", ri) ? YES : NO);
+}
+
+- (void)showDiffs
+{
+	ocamlCall("x at i", "runShowDiffs", ri, index);
+}
+
+ at end
+
+ at interface NSImage (TintedImage)
+- (NSImage *)tintedImageWithColor:(NSColor *) tint operation:(NSCompositingOperation) op;
+ at end
+
+ at implementation NSImage (TintedImage)
+
+- (NSImage *)tintedImageWithColor:(NSColor *) tint operation:(NSCompositingOperation) op  
+{
+	NSSize size = [self size];
+	NSRect imageBounds = NSMakeRect(0, 0, size.width, size.height);    
+	NSImage *newImage = [[NSImage alloc] initWithSize:size];
+	
+	[newImage lockFocus];
+	[self compositeToPoint:NSZeroPoint operation:NSCompositeSourceOver];
+	[tint set];
+	NSRectFillUsingOperation(imageBounds, op);
+	[newImage unlockFocus];
+	
+	return [newImage autorelease];
+}
+
+ at end
+
+// ----  Parent nodes in grouped items
+ at implementation ParentReconItem
+
+- init 
+{
+	[super init];
+	_children = [[NSMutableArray alloc] init];
+	return self;
+}
+
+- initWithPath:(NSString *)aPath
+{
+	[self init];
+	path = [aPath retain];
+	return self;
+}
+
+- (void)dealloc
+{
+	[_children release];
+	[super dealloc];
+}
+
+- (NSArray *)children;
+{
+	return _children;
+}
+
+- (ReconItem *)findChildWithPath:(NSArray *)pathArray level:level{
+    ReconItem *item;
+    NSString *element = [pathArray count] ? [pathArray objectAtIndex:level] : @"";
+    
+    for (item in _children) {
+        if ([item isKindOfClass:[ParentReconItem class]] && [[item path] isEqual:element]) {
+            return item;
+        }
+    }
+    return nil;
+}
+
+- (void)addChild:(ReconItem *)item pathArray:(NSArray *)pathArray level:(int)level
+{
+  //    NSLog(@"Adding child: %@", pathArray);
+	NSString *element = [pathArray count] ? [pathArray objectAtIndex:level] : @"";
+
+	// if we're at the leaf of the path, then add the item
+	if (((0 == [pathArray count]) && (0 == level)) || (level == [pathArray count]-1)) {
+		[item setParent:self];
+		[item setPath:element];
+		[_children addObject:item];
+		return;
+	}
+		
+	// find / add matching parent node
+	ReconItem *parentItem = [self findChildWithPath:pathArray level:level];
+	if (parentItem == nil || ![parentItem isKindOfClass:[ParentReconItem class]]) {
+		parentItem = [[ParentReconItem alloc] initWithPath:element];
+		[parentItem setParent:self];
+		[_children addObject:parentItem];
+		[parentItem release];
+	}
+	
+	[(ParentReconItem *)parentItem addChild:item pathArray:pathArray level:level+1];
+}
+
+- (void)addChild:(ReconItem *)item nested:(BOOL)nested
+{
+	[item setPath:nil]; // invalidate/reset
+	
+	if (nested) {
+		[self addChild:item pathArray:[[item path] pathComponents] level:0];
+	} else {
+		[item setParent:self];
+		[_children addObject:item];
+	}
+}
+
+- (void)sortUsingDescriptors:(NSArray *)sortDescriptors
+{
+	// sort our children
+	[_children sortUsingDescriptors:sortDescriptors];
+	
+	// then have them sort theirs
+	int i = [_children count];
+	while (i--) {
+		id child = [_children objectAtIndex:i];
+		if ([child isKindOfClass:[ParentReconItem class]]) [child sortUsingDescriptors:sortDescriptors];
+	}
+}
+
+- (ReconItem *)collapseParentsWithSingleChildren:(BOOL)isRoot
+{
+	// replace ourselves?
+	if (!isRoot && [_children count] == 1) {
+		ReconItem *child = [_children lastObject];
+		[child setPath:[path stringByAppendingFormat:@"/%@", [child path]]];
+		return [child collapseParentsWithSingleChildren:NO];
+	}
+	
+	// recurse
+	int i = [_children count];
+	while (i--) {
+		ReconItem *child = [_children objectAtIndex:i];
+		ReconItem *replacement = [child collapseParentsWithSingleChildren:NO];
+		if (child != replacement) {
+			[_children replaceObjectAtIndex:i withObject:replacement];
+			[replacement setParent:self];
+		}
+	}
+	return self;
+}
+
+- (void)willChange
+{
+	// invalidate child-based state
+	// Assuming caches / constant, so not retained / released
+	// [direction autorelease]; 
+	// [directionSortString autorelease]; 
+	direction = nil;
+	directionSortString = nil;
+	bytesTransferred = -1.;
+	// fileSize = -1;
+    // resolved = NO;
+
+	// propagate up parent chain
+	[parent willChange];
+}
+
+// Propagation methods
+- (void)doAction:(unichar)action
+{
+	int i = [_children count];
+	while (i--) {
+		ReconItem *child = [_children objectAtIndex:i];
+		[child doAction:action]; 
+	}
+}
+
+- (void)doIgnore:(unichar)action
+{
+	// handle Path ignores at this level, name and extension at the child nodes
+	if (action == 'I') {
+		[super doIgnore:'I'];
+	} else {
+		int i = [_children count];
+		while (i--) {
+			ReconItem *child = [_children objectAtIndex:i];
+			[child doIgnore:action]; 
+		}
+	}
+}
+
+// Rollup methods
+- (long)fileCount
+{
+	if (fileCount == 0) {
+		int i = [_children count];
+		while (i--) {
+			ReconItem *child = [_children objectAtIndex:i];
+			fileCount += [child fileCount]; 
+		}
+	}
+	return fileCount;
+}
+
+- (double)computeFileSize
+{
+	double size = 0;
+	int i = [_children count];
+	while (i--) {
+		ReconItem *child = [_children objectAtIndex:i];
+		size += [child fileSize]; 
+	}
+	return size;
+}
+
+- (double)bytesTransferred
+{
+	if (bytesTransferred == -1.) {
+		bytesTransferred = 0.;
+		int i = [_children count];
+		while (i--) {
+			ReconItem *child = [_children objectAtIndex:i];
+			bytesTransferred += [child bytesTransferred]; 
+		}
+	}
+	return bytesTransferred;
+}
+
+
+
+- (NSString *)dirString
+{
+	NSString *rollup = nil;
+	int i = [_children count];
+	while (i--) {
+		ReconItem *child = [_children objectAtIndex:i];
+		NSString *dirString = [child dirString];
+		if (!rollup || [dirString isEqual:rollup]) {
+			rollup = dirString;
+		} else {
+			// conflict
+			if ([dirString isEqual:@"---->"] || [dirString isEqual:@"<----"] || [dirString isEqual:@"<--->"]) {
+				if ([rollup isEqual:@"---->"] || [rollup isEqual:@"<----"] || [rollup isEqual:@"<--->"]) {
+					rollup = @"<--->";
+				}
+			} else {
+				rollup = @"<-?->";
+			}
+		}
+	}
+	// NSLog(@"dirString for %@: %@", path, rollup);
+	return rollup;
+}
+
+- (BOOL)hasConflictedChildren
+{
+	NSString *dirString = [self dirString];
+	BOOL result = [dirString isEqual:@"<--->"] || [dirString isEqual:@"<-?->"];
+	// NSLog(@"hasConflictedChildren (%@): %@: %i", [self path], dirString, result);
+	return result;
+}
+
+static NSMutableDictionary *_parentImages = nil;
+static NSColor *_veryLightGreyColor = nil;
+- (NSImage *)direction
+{
+	if (!_parentImages) {
+		_parentImages = [[NSMutableDictionary alloc] init];
+		_veryLightGreyColor = [[NSColor colorWithCalibratedRed:0.7 green:0.7 blue:0.7 alpha:1.0] retain];
+	}
+	NSImage *baseImage = [super direction];
+	NSImage *parentImage = [_parentImages objectForKey:baseImage];
+	if (!parentImage) {
+		// make parent images a grey version of the leaf images
+		parentImage = [baseImage tintedImageWithColor:_veryLightGreyColor operation:NSCompositeSourceIn];
+		[_parentImages setObject:parentImage forKey:baseImage];
+	}
+	return parentImage;
+}
+
+ at end
+

Added: trunk/src/uimac14/ReconTableView.h
===================================================================
--- trunk/src/uimac14/ReconTableView.h	                        (rev 0)
+++ trunk/src/uimac14/ReconTableView.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,43 @@
+//
+//  ReconTableView.h
+//  
+//  NSTableView extended to handle additional keyboard events for the reconcile window.
+//  The keyDown: method is redefined.
+//
+//  Created by Trevor Jim on Wed Aug 27 2003.
+//  Copyright (c) 2003, 2014, licensed under GNU GPL.
+//
+
+#import <AppKit/AppKit.h>
+
+ at interface ReconTableView : NSOutlineView {
+    BOOL editable;
+}
+- (BOOL)editable;
+- (void)setEditable:(BOOL)x;
+- (BOOL)validateItem:(SEL) action;
+- (BOOL)validateMenuItem:(NSMenuItem *)menuItem;
+- (BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem;
+- (IBAction)ignorePath:(id)sender;
+- (IBAction)ignoreExt:(id)sender;
+- (IBAction)ignoreName:(id)sender;
+- (IBAction)copyLR:(id)sender;
+- (IBAction)copyRL:(id)sender;
+- (IBAction)leaveAlone:(id)sender;
+- (IBAction)forceOlder:(id)sender;
+- (IBAction)forceNewer:(id)sender;
+- (IBAction)selectConflicts:(id)sender;
+- (IBAction)revert:(id)sender;
+- (IBAction)merge:(id)sender;
+- (IBAction)showDiff:(id)sender;
+- (BOOL)canDiffSelection;
+ at end
+
+ at interface NSOutlineView (_UnisonExtras)
+- (NSArray *)selectedObjects;
+- (NSEnumerator *)selectedObjectEnumerator;
+- (void)setSelectedObjects:(NSArray *)selection;
+
+- (void)expandChildrenIfSpace;
+
+ at end

Added: trunk/src/uimac14/ReconTableView.m
===================================================================
--- trunk/src/uimac14/ReconTableView.m	                        (rev 0)
+++ trunk/src/uimac14/ReconTableView.m	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,298 @@
+//
+//  ReconTableView.m
+//  Unison
+//
+//  Created by Trevor Jim on Wed Aug 27 2003.
+//  Copyright (c) 2003, 2014.  See file COPYING for details.
+//
+
+#import "ReconTableView.h"
+#import "ReconItem.h"
+#import "MyController.h"
+
+ at implementation NSOutlineView (_UnisonExtras)
+
+- (NSArray *)selectedObjects
+{
+	NSMutableArray *result = [NSMutableArray array];
+  NSIndexSet *set = [self selectedRowIndexes];
+  NSUInteger index = [set firstIndex];
+  while (index != NSNotFound) {
+    [result addObject:[self itemAtRow:index]];
+    index = [set indexGreaterThanIndex: index];
+  }
+  return result;
+}
+
+- (void)setSelectedObjects:(NSArray *)selectedObjects
+{
+	NSMutableIndexSet *set = [NSMutableIndexSet indexSet];
+	int i = [selectedObjects count];
+	while (i--) {
+		int index = [self rowForItem:[selectedObjects objectAtIndex:i]];
+		if (index >= 0)	[set addIndex:index];
+	}
+	[self selectRowIndexes:set byExtendingSelection:NO];
+}
+
+- (NSEnumerator *)selectedObjectEnumerator
+{
+	return [[self selectedObjects] objectEnumerator];
+}
+
+- (int)rowCapacityWithoutScrolling 
+{
+	float bodyHeight = [self visibleRect].size.height;
+	bodyHeight -=  [[self headerView] visibleRect].size.height;
+	return bodyHeight / ([self rowHeight] + 2.0);
+}
+
+- (BOOL)_canAcceptRowCountWithoutScrolling:(int)rows
+{
+	return ([self numberOfRows] + rows) <= [self rowCapacityWithoutScrolling];
+}
+
+- (BOOL)_expandChildrenIfSpace:(id)parent level:(int)level
+{
+	BOOL didExpand = NO;
+	id dataSource = [self dataSource];
+	int count = [dataSource outlineView:self numberOfChildrenOfItem:parent];
+	if (level == 0) {
+		if (count && ([self isItemExpanded:parent] || [self _canAcceptRowCountWithoutScrolling:count])) {
+			[self expandItem:parent expandChildren:NO];
+			didExpand = YES;
+		}
+	} else {
+		// try expanding each of our children.  If all expand, then return YES,
+		// indicating that it may be worth trying the next level
+		int i;
+		for (i=0; i < count; i++) {
+			id child = [dataSource outlineView:self child:i ofItem:parent];
+			didExpand = [self _expandChildrenIfSpace:child level:level-1] || didExpand;
+		}
+	}
+
+	return didExpand;
+}
+
+- (void)expandChildrenIfSpace
+{
+	int level = 1;
+	while ([self _expandChildrenIfSpace:nil level:level]) level++;
+}
+
+ at end
+
+ at implementation ReconTableView
+
+- (BOOL)editable
+{
+    return editable;
+}
+
+- (void)setEditable:(BOOL)x
+{
+    editable = x;
+}
+
+- (BOOL)validateItem:(SEL) action
+{
+    if (action == @selector(selectAll:)
+        || action == @selector(selectConflicts:)
+        || action == @selector(copyLR:)
+        || action == @selector(copyRL:)
+        || action == @selector(leaveAlone:)
+        || action == @selector(forceNewer:)
+        || action == @selector(forceOlder:)
+        || action == @selector(revert:)
+        || action == @selector(ignorePath:)
+        || action == @selector(ignoreExt:)
+        || action == @selector(ignoreName:))
+        return editable;
+    else if (action == @selector(merge:)) {
+        if (!editable) return NO;
+        else return [self canDiffSelection];
+    }
+    else if (action == @selector(showDiff:)) {
+        if ((!editable) || (!([self numberOfSelectedRows]==1)))
+            return NO;
+	else return [self canDiffSelection];
+    }
+    else return YES;
+}
+
+- (BOOL)validateMenuItem:(NSMenuItem *)menuItem
+{
+	return [self validateItem:[menuItem action]];
+}
+
+- (BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem
+{
+       return [self validateItem:[toolbarItem action]];
+}
+
+- (void)doIgnore:(unichar)c
+{
+    NSEnumerator *e = [self selectedObjectEnumerator];
+	ReconItem *item, *last = nil;
+    while (item = [e nextObject]) {
+        [item doIgnore:c];
+		last = item;
+    }
+    if (last) { // something was selected
+        MyController* controller = (MyController*) [self dataSource];
+        last = [controller updateForIgnore:last];
+        [self selectRowIndexes:[NSIndexSet indexSetWithIndex:[self rowForItem:last]] byExtendingSelection:NO];
+        [self reloadData];
+    }
+}
+
+- (IBAction)ignorePath:(id)sender
+{
+    [self doIgnore:'I'];
+}
+
+- (IBAction)ignoreExt:(id)sender
+{
+    [self doIgnore:'E'];
+}
+
+- (IBAction)ignoreName:(id)sender
+{
+    [self doIgnore:'N'];
+}
+
+- (void)doAction:(unichar)c
+{
+    int numSelected = 0;
+    NSEnumerator *e = [self selectedObjectEnumerator];
+	ReconItem *item, *last = nil;
+    while (item = [e nextObject]) {
+        numSelected++;
+        [item doAction:c];
+		last = item;
+    }
+    if (numSelected>0) {
+		int nextRow = [self rowForItem:last] + 1;
+        if (numSelected == 1 && [self numberOfRows] > nextRow && c!='d') {
+            // Move to next row, unless already at last row, or if more than one row selected
+            [self selectRowIndexes:[NSIndexSet indexSetWithIndex:nextRow] byExtendingSelection:NO];
+            [self scrollRowToVisible:nextRow];
+        }
+        [self reloadData];
+    }
+}
+
+- (IBAction)copyLR:(id)sender
+{
+    [self doAction:'>'];
+}
+
+- (IBAction)copyRL:(id)sender
+{
+    [self doAction:'<'];
+}
+
+- (IBAction)leaveAlone:(id)sender
+{
+    [self doAction:'/'];
+}
+
+- (IBAction)forceOlder:(id)sender
+{
+    [self doAction:'-'];
+}
+
+- (IBAction)forceNewer:(id)sender
+{
+    [self doAction:'+'];
+}
+
+- (IBAction)selectConflicts:(id)sender
+{
+    [self deselectAll:self];
+    MyController* controller = (MyController*) [self dataSource];
+    NSMutableArray *reconItems = [controller reconItems];
+    int i = 0;
+    for (; i < [reconItems count]; i++) {
+		ReconItem *item = [reconItems objectAtIndex:i]; 
+        if ([item isConflict])
+            [self selectRowIndexes:[NSIndexSet indexSetWithIndex:[self rowForItem:item]] byExtendingSelection:YES];
+    }
+}
+
+- (IBAction)revert:(id)sender
+{
+    [self doAction:'R'];
+}
+
+- (IBAction)merge:(id)sender
+{
+    [self doAction:'m'];
+}
+
+- (IBAction)showDiff:(id)sender
+{
+    [self doAction:'d'];
+}
+
+/* There are menu commands for these, but we add some shortcuts so you don't
+   have to press the Command key */
+- (void)keyDown:(NSEvent *)event
+{
+    /* some keys return zero-length strings */
+    if ([[event characters] length] == 0) {
+        [super keyDown:event];
+        return;
+    }
+
+    /* actions are disabled when when menu items are */
+    if (!editable) {
+        [super keyDown:event];
+        return;
+    }
+
+    unichar c = [[event characters] characterAtIndex:0];
+    switch (c) {
+    case '>':
+    case NSRightArrowFunctionKey:
+        [self doAction:'>'];
+        break;
+    case '<':
+    case NSLeftArrowFunctionKey:
+        [self doAction:'<'];
+        break;
+    case '?':
+    case '/':
+        [self doAction:'/'];
+        break;
+    default:
+        [super keyDown:event];
+        break;
+    }
+}
+
+- (BOOL)canDiffSelection
+{
+    BOOL canDiff = YES;
+    NSEnumerator *e = [self selectedObjectEnumerator];
+	ReconItem *item;
+    while (item = [e nextObject]) {
+        if (![item canDiff]) canDiff= NO;
+    }    
+    return canDiff;
+}
+
+/* Override default highlight colour because it's hard to see the 
+   conflict/resolution icons */
+- (id)_highlightColorForCell:(NSCell *)cell
+{   
+    if(([[self window] firstResponder] == self) &&
+        [[self window] isMainWindow] &&
+        [[self window] isKeyWindow])
+
+        return [NSColor colorWithCalibratedRed:0.7 green:0.75 blue:0.8 alpha:1.0];
+    else return [NSColor colorWithCalibratedRed:0.8 green:0.8 blue:0.8 alpha:1.0];
+}
+
+ at end

Added: trunk/src/uimac14/TrevorsUnison.icns
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/TrevorsUnison.icns
===================================================================
--- trunk/src/uimac14/TrevorsUnison.icns	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/TrevorsUnison.icns	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/TrevorsUnison.icns
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/Unison.icns
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/Unison.icns
===================================================================
--- trunk/src/uimac14/Unison.icns	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/Unison.icns	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/Unison.icns
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/UnisonToolbar.h
===================================================================
--- trunk/src/uimac14/UnisonToolbar.h	                        (rev 0)
+++ trunk/src/uimac14/UnisonToolbar.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,33 @@
+//
+//  UnisonToolbar.h
+//  
+//  Extended NSToolbar with several views
+//
+//  Created by Ben Willmore on Sun March 12 2006.
+//  Copyright (c) 2006, licensed under GNU GPL.
+//
+
+#import <AppKit/AppKit.h>
+
+ at class ReconTableView, MyController;
+
+ at interface UnisonToolbar : NSToolbar
+#if (MAC_OS_X_VERSION_MAX_ALLOWED >= 1060)
+  <NSToolbarDelegate>
+#endif
+{
+	ReconTableView*  tableView;
+	MyController*    myController;
+	NSString*        currentView;
+	NSView*          tableModeView;
+}
+
+- initWithIdentifier:(NSString *) identifier :(MyController *) aController :(ReconTableView *) aTableView;
+- (NSToolbarItem *) toolbar: (NSToolbar *)toolbar itemForItemIdentifier: (NSString *) itemIdent willBeInsertedIntoToolbar:(BOOL) willBeInserted;
+- (NSArray *) itemIdentifiersForView: (NSString *) whichView;
+- (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar;
+- (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar;
+- (void) setView: (NSString *) whichView;
+- (void)takeTableModeView:(NSView *)view;
+
+ at end

Added: trunk/src/uimac14/UnisonToolbar.m
===================================================================
--- trunk/src/uimac14/UnisonToolbar.m	                        (rev 0)
+++ trunk/src/uimac14/UnisonToolbar.m	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,216 @@
+//
+//  UnisonToolbar.h
+//  
+//  Extended NSToolbar with several views
+//
+//  Created by Ben Willmore on Sun March 12 2006.
+//  Copyright (c) 2006, licensed under GNU GPL.
+//
+
+#import "UnisonToolbar.h"
+#import "MyController.h"
+
+static NSString*        QuitItemIdentifier      = @"Quit";
+static NSString*        OpenItemIdentifier      = @"Open";
+static NSString*        NewItemIdentifier       = @"New";
+static NSString*        GoItemIdentifier        = @"Go";
+static NSString*        CancelItemIdentifier    = @"Cancel";
+static NSString*        SaveItemIdentifier      = @"Save";
+static NSString*        RestartItemIdentifier   = @"Restart";
+static NSString*        RescanItemIdentifier    = @"Rescan";
+static NSString*        RToLItemIdentifier      = @"RToL";
+static NSString*        MergeItemIdentifier     = @"Merge";
+static NSString*        LToRItemIdentifier      = @"LToR";
+static NSString*        SkipItemIdentifier      = @"Skip";
+static NSString*        DiffItemIdentifier      = @"Diff";
+static NSString*        TableModeIdentifier     = @"TableMode";
+
+ at implementation UnisonToolbar
+
+- initWithIdentifier:(NSString *) identifier :(MyController *) aController :(ReconTableView *) aTableView {
+
+    if ((self = [super initWithIdentifier: identifier])) {
+		[self setAllowsUserCustomization: NO];
+		[self setAutosavesConfiguration: NO];
+		[self setDelegate: self];
+		myController = aController;
+		tableView = aTableView;
+		currentView = @"";	
+    }
+
+    return self;
+}
+
+- (void)takeTableModeView:(NSView *)view
+{
+	tableModeView = [view retain];
+	[view setHidden:YES];	
+}
+
+- (NSToolbarItem *) toolbar: (NSToolbar *)toolbar itemForItemIdentifier: (NSString *) itemIdent willBeInsertedIntoToolbar:(BOOL) willBeInserted {
+
+    NSToolbarItem *toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdent] autorelease];
+    if ([itemIdent isEqual: QuitItemIdentifier]) {
+		[toolbarItem setLabel: @"Quit"];
+		[toolbarItem setImage: [NSImage imageNamed: @"quit.tif"]];
+		[toolbarItem setTarget:NSApp];
+		[toolbarItem setAction:@selector(terminate:)];
+	}
+	else if ([itemIdent isEqual: OpenItemIdentifier]) {
+        [toolbarItem setLabel: @"Open"];
+        [toolbarItem setImage: [NSImage imageNamed: @"go.tif"]];
+        [toolbarItem setTarget:myController];
+        [toolbarItem setAction:@selector(openButton:)];
+    }
+	else if ([itemIdent isEqual: NewItemIdentifier]) {
+        [toolbarItem setLabel: @"New"];
+        [toolbarItem setImage: [NSImage imageNamed: @"add.tif"]];
+        [toolbarItem setTarget:myController];
+        [toolbarItem setAction:@selector(createButton:)];
+    }
+	else if ([itemIdent isEqual: CancelItemIdentifier]) {
+        [toolbarItem setLabel: @"Cancel"];
+        [toolbarItem setImage: [NSImage imageNamed: @"restart.tif"]];
+        [toolbarItem setTarget:myController];
+        [toolbarItem setAction:@selector(chooseProfiles)];
+    }
+	else if ([itemIdent isEqual: SaveItemIdentifier]) {
+        [toolbarItem setLabel: @"Save"];
+        [toolbarItem setImage: [NSImage imageNamed: @"save.tif"]];
+        [toolbarItem setTarget:myController];
+        [toolbarItem setAction:@selector(saveProfileButton:)];
+    }	
+	else if ([itemIdent isEqual: GoItemIdentifier]) {
+        [toolbarItem setLabel: @"Go"];
+        [toolbarItem setImage: [NSImage imageNamed: @"go.tif"]];
+        [toolbarItem setTarget:myController];
+        [toolbarItem setAction:@selector(syncButton:)];
+    }
+    else if ([itemIdent isEqual: RestartItemIdentifier]) {
+        [toolbarItem setLabel: @"Restart"];
+        [toolbarItem setImage: [NSImage imageNamed: @"restart.tif"]];
+        [toolbarItem setTarget:myController];
+        [toolbarItem setAction:@selector(restartButton:)];
+    }
+    else if ([itemIdent isEqual: RescanItemIdentifier]) {
+        [toolbarItem setLabel: @"Rescan"];
+        [toolbarItem setImage: [NSImage imageNamed: @"rescan.tif"]];
+        [toolbarItem setTarget:myController];
+        [toolbarItem setAction:@selector(rescan:)];
+    }
+    else if ([itemIdent isEqual: RToLItemIdentifier]) {
+        [toolbarItem setLabel: @"Right to left"];
+        [toolbarItem setImage: [NSImage imageNamed: @"left.tif"]];
+        [toolbarItem setTarget:tableView];
+        [toolbarItem setAction:@selector(copyRL:)];
+    }
+    else if ([itemIdent isEqual: MergeItemIdentifier]) {
+        [toolbarItem setLabel: @"Merge"];
+        [toolbarItem setImage: [NSImage imageNamed: @"merge.tif"]];
+        [toolbarItem setTarget:tableView];
+	[toolbarItem setAction:@selector(merge:)];
+    }
+	else if ([itemIdent isEqual: LToRItemIdentifier]) {
+        [toolbarItem setLabel: @"Left to right"];
+        [toolbarItem setImage: [NSImage imageNamed: @"right.tif"]];
+        [toolbarItem setTarget:tableView];
+        [toolbarItem setAction:@selector(copyLR:)];
+	}
+	else if ([itemIdent isEqual: SkipItemIdentifier]) {
+        [toolbarItem setLabel: @"Skip"];
+        [toolbarItem setImage: [NSImage imageNamed: @"skip.tif"]];
+        [toolbarItem setTarget:tableView];
+        [toolbarItem setAction:@selector(leaveAlone:)];
+	}
+	else if ([itemIdent isEqual: DiffItemIdentifier]) {
+        [toolbarItem setLabel: @"Diff"];
+        [toolbarItem setImage: [NSImage imageNamed: @"diff.tif"]];
+        [toolbarItem setTarget:tableView];
+        [toolbarItem setAction:@selector(showDiff:)];
+	}
+	else if ([itemIdent isEqual: TableModeIdentifier]) {
+		[toolbarItem setLabel:@"Layout"];
+		[toolbarItem setToolTip:@"Switch table nesting"];
+		[tableModeView setHidden:NO];	
+		[toolbarItem setView:tableModeView];
+		//[toolbarItem setMinSize:NSMakeSize(NSWidth([tableModeView frame]),NSHeight([tableModeView frame])+10)];
+		//[toolbarItem setMaxSize:NSMakeSize(NSWidth([tableModeView frame]),NSHeight([tableModeView frame])+10)];
+	}
+
+	return toolbarItem;
+}
+
+- (NSArray *) itemIdentifiersForView: (NSString *) whichView {
+    if ([whichView isEqual: @"chooseProfileView"]) {
+	    return [NSArray arrayWithObjects:   QuitItemIdentifier, NewItemIdentifier, OpenItemIdentifier, nil];
+	}
+	else if ([whichView isEqual: @"preferencesView"]) {
+		return [NSArray arrayWithObjects:   QuitItemIdentifier, SaveItemIdentifier, CancelItemIdentifier, nil];
+	}
+	else if ([whichView isEqual: @"ConnectingView"]) {
+		return [NSArray arrayWithObjects:   QuitItemIdentifier, nil];
+	}
+	else if ([whichView isEqual: @"updatesView"]) {
+		return [NSArray arrayWithObjects:   QuitItemIdentifier,
+			RestartItemIdentifier, 
+			NSToolbarSpaceItemIdentifier,
+			GoItemIdentifier,
+			RescanItemIdentifier,
+			NSToolbarSpaceItemIdentifier,
+			RToLItemIdentifier, MergeItemIdentifier, LToRItemIdentifier, 
+			SkipItemIdentifier,
+      NSToolbarSpaceItemIdentifier,
+			DiffItemIdentifier, 
+			TableModeIdentifier, nil];
+	}
+	else {
+		return [NSArray arrayWithObjects: QuitItemIdentifier, Nil];
+	}
+}
+
+- (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar {
+    return [NSArray arrayWithObjects:   QuitItemIdentifier, NewItemIdentifier, OpenItemIdentifier, nil];
+}
+
+- (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar {
+    return [NSArray arrayWithObjects:   QuitItemIdentifier, OpenItemIdentifier, NewItemIdentifier, 
+	    CancelItemIdentifier, SaveItemIdentifier,
+	    GoItemIdentifier, RestartItemIdentifier, RescanItemIdentifier,
+	    RToLItemIdentifier, MergeItemIdentifier, LToRItemIdentifier, 
+	    SkipItemIdentifier, DiffItemIdentifier,
+	    NSToolbarSpaceItemIdentifier, nil];
+}
+
+- (void) setView: (NSString *) whichView {
+	if ([whichView isEqual:currentView]) return;
+
+	currentView = whichView;
+  
+	int i;
+	NSArray *identifiers;
+	NSString *oldIdentifier;
+	NSString *newIdentifier;
+	
+	identifiers=[self itemIdentifiersForView:whichView];
+	for (i=0; i<[identifiers count]; i++) {
+		newIdentifier = [identifiers objectAtIndex:i];
+		if (i<[[self items] count]) {
+			oldIdentifier = [[[self items] objectAtIndex:i] itemIdentifier];
+			if ([newIdentifier isEqual: oldIdentifier] ) {
+				[[[self items] objectAtIndex:i] setEnabled:YES];
+			}
+			else {
+				[self removeItemAtIndex:i];
+				[self insertItemWithItemIdentifier:newIdentifier atIndex:i];
+			}
+		}
+		else {
+			[self insertItemWithItemIdentifier:newIdentifier atIndex:i];
+		}
+	}
+	while ([[self items] count] > [identifiers count]) {
+		[self removeItemAtIndex:[identifiers count]];
+	}
+}
+
+ at end

Added: trunk/src/uimac14/cltool.c
===================================================================
--- trunk/src/uimac14/cltool.c	                        (rev 0)
+++ trunk/src/uimac14/cltool.c	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,67 @@
+/* cltool.c
+
+   This is a command-line tool for Mac OS X that looks up the unison
+   application, where ever it has been installed, and runs it.  This
+   is intended to be installed in a standard place (e.g.,
+   /usr/bin/unison) to make it easy to invoke unison as a server, or
+   to use unison from the command line when it has been installed with
+   a GUI.
+
+ */
+
+#import <CoreServices/CoreServices.h>
+#import <ApplicationServices/ApplicationServices.h>
+#include <stdio.h>
+
+#define BUFSIZE 1024
+#define EXECPATH "/Contents/MacOS/Unison"
+
+int main(int argc, char **argv) {
+
+  /* Look up the application by its bundle identifier, which is given
+     in the Info.plist file.  This will continue to work even if the
+     user changes the name of the application, unlike
+     fullPathForApplication. */
+
+  FSRef fsref;
+  OSStatus status;
+  int len;
+  char buf[BUFSIZE];
+
+  status = LSFindApplicationForInfo(kLSUnknownCreator,CFSTR("edu.upenn.cis.Unison"),NULL,&fsref,NULL);
+  if (status) {
+    if (status == kLSApplicationNotFoundErr) {
+      fprintf(stderr,"Error: can't find the Unison application using the Launch Services database.\n");
+      fprintf(stderr,"Try launching Unison from the Finder, and then try this again.\n",status);
+    }
+    else fprintf(stderr,"Error: can't find Unison application (%ld).\n",status);
+    exit(1);
+  }
+
+  status = FSRefMakePath(&fsref,(UInt8 *)buf,BUFSIZE);
+  if (status) {
+    fprintf(stderr,"Error: problem building path to Unison application (%ld).\n",status);
+    exit(1);
+  }
+
+  len = strlen(buf);
+  if (len + strlen(EXECPATH) + 1 > BUFSIZE) {
+    fprintf(stderr,"Error: path to Unison application exceeds internal buffer size (%d).\n",BUFSIZE);
+    exit(1);
+  }
+  strcat(buf,EXECPATH);
+
+  /* It's important to pass the absolute path on to the GUI,
+     that's how it knows where to find the bundle, e.g., the
+     Info.plist file. */
+  argv[0] = buf;
+
+  // printf("The Unison executable is at %s\n",argv[0]);
+  // printf("Running...\n");
+
+  execv(argv[0],argv);
+
+  /* If we get here the execv has failed; print an error message to stderr */
+  perror("unison");
+  exit(1);
+}

Added: trunk/src/uimac14/main.m
===================================================================
--- trunk/src/uimac14/main.m	                        (rev 0)
+++ trunk/src/uimac14/main.m	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,53 @@
+//
+//  main.m
+//  uimac
+//
+//  Created by Trevor Jim on Sun Aug 17 2003.
+//  Copyright (c) 2003, see file COPYING for details.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "Bridge.h"
+
+int main(int argc, const char *argv[])
+{
+  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+  int i;
+    
+  /* When you click-start or use the open command, the program is invoked with
+   a command-line arg of the form -psn_XXXXXXXXX.  The XXXXXXXX is a "process
+   serial number" and it seems to be important for Carbon programs.  We need
+   to get rid of it if it's there so the ocaml code won't exit.  Note, the
+   extra arg is not added if the binary is invoked directly from the command
+   line without using the open command. */
+  if (argc == 2 && strncmp(argv[1],"-psn_",5) == 0) {
+    argc--;
+    argv[1] = NULL;
+  }
+	
+	[Bridge startup:argv];
+	
+  /* Check for invocations that don't start up the gui */
+  for (i=1; i<argc; i++) {
+    if (!strcmp(argv[i],"-doc") ||
+        !strcmp(argv[i],"-help") ||
+        !strcmp(argv[i],"-version") ||
+        !strcmp(argv[i],"-server") ||
+        !strcmp(argv[i],"-socket") ||
+        !strcmp(argv[i],"-ui")) {
+			NSLog(@"Calling nonGuiStartup");
+			@try {
+				ocamlCall("x", "unisonNonGuiStartup");
+			} @catch (NSException *ex) {
+				NSLog(@"Uncaught exception: %@", [ex reason]);
+				exit(1);
+			}
+      /* If we get here without exiting first, the non GUI startup detected a
+       -ui graphic or command-line profile, and we should in fact start the GUI. */
+    }
+  }
+	
+	/* go! */
+  [pool release];
+  return NSApplicationMain(argc, argv);
+}

Added: trunk/src/uimac14/progressicons/ProgressBarAdvanced.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/progressicons/ProgressBarAdvanced.png
===================================================================
--- trunk/src/uimac14/progressicons/ProgressBarAdvanced.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/progressicons/ProgressBarAdvanced.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/progressicons/ProgressBarAdvanced.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/progressicons/ProgressBarBlue.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/progressicons/ProgressBarBlue.png
===================================================================
--- trunk/src/uimac14/progressicons/ProgressBarBlue.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/progressicons/ProgressBarBlue.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/progressicons/ProgressBarBlue.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/progressicons/ProgressBarEndAdvanced.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/progressicons/ProgressBarEndAdvanced.png
===================================================================
--- trunk/src/uimac14/progressicons/ProgressBarEndAdvanced.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/progressicons/ProgressBarEndAdvanced.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/progressicons/ProgressBarEndAdvanced.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/progressicons/ProgressBarEndBlue.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/progressicons/ProgressBarEndBlue.png
===================================================================
--- trunk/src/uimac14/progressicons/ProgressBarEndBlue.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/progressicons/ProgressBarEndBlue.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/progressicons/ProgressBarEndBlue.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/progressicons/ProgressBarEndGray.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/progressicons/ProgressBarEndGray.png
===================================================================
--- trunk/src/uimac14/progressicons/ProgressBarEndGray.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/progressicons/ProgressBarEndGray.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/progressicons/ProgressBarEndGray.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/progressicons/ProgressBarEndGreen.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/progressicons/ProgressBarEndGreen.png
===================================================================
--- trunk/src/uimac14/progressicons/ProgressBarEndGreen.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/progressicons/ProgressBarEndGreen.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/progressicons/ProgressBarEndGreen.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/progressicons/ProgressBarEndWhite.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/progressicons/ProgressBarEndWhite.png
===================================================================
--- trunk/src/uimac14/progressicons/ProgressBarEndWhite.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/progressicons/ProgressBarEndWhite.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/progressicons/ProgressBarEndWhite.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/progressicons/ProgressBarGray.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/progressicons/ProgressBarGray.png
===================================================================
--- trunk/src/uimac14/progressicons/ProgressBarGray.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/progressicons/ProgressBarGray.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/progressicons/ProgressBarGray.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/progressicons/ProgressBarGreen.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/progressicons/ProgressBarGreen.png
===================================================================
--- trunk/src/uimac14/progressicons/ProgressBarGreen.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/progressicons/ProgressBarGreen.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/progressicons/ProgressBarGreen.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/progressicons/ProgressBarLightGreen.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/progressicons/ProgressBarLightGreen.png
===================================================================
--- trunk/src/uimac14/progressicons/ProgressBarLightGreen.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/progressicons/ProgressBarLightGreen.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/progressicons/ProgressBarLightGreen.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/progressicons/ProgressBarWhite.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/progressicons/ProgressBarWhite.png
===================================================================
--- trunk/src/uimac14/progressicons/ProgressBarWhite.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/progressicons/ProgressBarWhite.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/progressicons/ProgressBarWhite.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/ssselectabletoolbar/README
===================================================================
--- trunk/src/uimac14/ssselectabletoolbar/README	                        (rev 0)
+++ trunk/src/uimac14/ssselectabletoolbar/README	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,58 @@
+SSSelectable Toolbar
+--------------------
+
+Copyright (c) 2011 Steve Streeting
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of 
+this software and associated documentation files (the "Software"), to deal in 
+the Software without restriction, including without limitation the rights to 
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all 
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Why?
+----
+
+I needed a preference-pane style selectable toolbar which switched views easily,
+allowing different sizes per pane, and not requiring a lot of manual code. I
+wanted to do most of the work in Interface Builder still.
+
+I liked the selectable toolbar in BWToolkit, but it had a few issues such as
+crashing Interface Builder, getting the vertical position wrong at times, and
+also that in XCode 4, Interface Builder plugins are no longer supported. So I
+needed a selectable toolbar that worked in IB without any plugins.
+
+How to use
+----------
+
+1) Add all the source files in the 'toolbar' subfolder to your XCode project
+2) In Interface Builder, drag & drop an NSToolbar on to your window
+3) Change the type to 'SSSelectableToolbar'
+4) Connect the 'window' outlet of the toolbar to the parent window
+5) Drag & drop NSToolbarItem instances on to the toolbar and check the 
+   'Selectable' option
+6) Change the type of each one to 'SSSelectableToolbarItem'
+7) Create a Custom View instance at the root of the document (not in the window)
+   for each pane and populate them how you like
+8) Connect the 'linkedView' outlet of each toolbar item to the corresponding 
+   pane view
+9) Connect the 'nextKeyView' outlet of each custom view to the control that
+   should become the first responder when switching to that tab (Optional)
+
+And you're ready to go. Each toolbar item will switch to its corresponding pane, 
+resizing the window as necessary. You can make the window resizable if you like, 
+and the user size will be remembered when switching back and forth.
+   
+    
+
+

Added: trunk/src/uimac14/ssselectabletoolbar/SSSelectableToolbar.h
===================================================================
--- trunk/src/uimac14/ssselectabletoolbar/SSSelectableToolbar.h	                        (rev 0)
+++ trunk/src/uimac14/ssselectabletoolbar/SSSelectableToolbar.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,27 @@
+//
+//  SSToolbar.h
+//  SelectableToolbarHelper
+//
+//  Created by Steven Streeting on 19/06/2011.
+//  Copyright 2011 Torus Knot Software Ltd. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+ at interface SSSelectableToolbar : NSToolbar 
+{
+	NSWindow* window;
+	NSView* blankView;
+	NSInteger defaultItemIndex;
+}
+ at property (nonatomic, retain) IBOutlet NSWindow* window;
+ at property (nonatomic, assign) NSInteger defaultItemIndex;
+
+-(NSToolbarItem*)itemWithIdentifier:(NSString*)identifier;
+// select the item with the given index, ordered as per the palette and ignoring 
+// all types of buttons except SSSelectableToolbarItem
+-(void)selectItemWithIndex:(NSInteger)idx;
+// Convert a selectable item index (ignoring all except selectable items in palette)
+// to a main index which can be used for other purposes
+-(NSInteger)selectableItemIndexToMainIndex:(NSInteger)idx;
+ at end

Added: trunk/src/uimac14/ssselectabletoolbar/SSSelectableToolbar.m
===================================================================
--- trunk/src/uimac14/ssselectabletoolbar/SSSelectableToolbar.m	                        (rev 0)
+++ trunk/src/uimac14/ssselectabletoolbar/SSSelectableToolbar.m	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,157 @@
+//
+//  SSToolbar.m
+//  SelectableToolbarHelper
+//
+//  Created by Steven Streeting on 19/06/2011.
+//  Copyright 2011 Torus Knot Software Ltd. All rights reserved.
+//
+
+#import "SSSelectableToolbar.h"
+#import "SSSelectableToolbarItem.h"
+
+
+ at implementation SSSelectableToolbar
+ at synthesize window;
+ at synthesize defaultItemIndex;
+
+- (id) initWithIdentifier:(NSString *)identifier
+{
+	if (self = [super initWithIdentifier:identifier])
+	{
+		blankView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
+	}
+	return self;
+}
+
+- (void) dealloc
+{
+	[blankView release];
+	[window release];
+	[super dealloc];
+
+}
+-(IBAction)toolbarItemClicked:sender
+{
+	// this is really only here so I can set up a target / action which makes button clickable
+}
+
+-(void)selectDefaultItem:sender
+{
+	// select the default item first time becomes key
+	[self selectItemWithIndex:defaultItemIndex];
+	// Don't tell us again
+	[[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowDidBecomeKeyNotification object:window];
+
+}
+
+-(void) awakeFromNib
+{
+	// Set target / action on all buttons to make them clickable
+	NSArray* items = [self visibleItems];
+	for (NSToolbarItem* item in items)
+	{
+		if ([item isKindOfClass:[SSSelectableToolbarItem class]])
+		{
+			[item setTarget:self];
+			[item setAction:@selector(toolbarItemClicked:)];			
+		}
+	}
+	
+	// Wait until window displayed before sizing (important for displaying in sheets)
+	[[NSNotificationCenter defaultCenter] addObserver:self 
+											 selector:@selector(selectDefaultItem:)
+												 name:NSWindowDidBecomeKeyNotification 
+											   object:window];
+	
+
+}
+
+-(NSToolbarItem*)itemWithIdentifier:(NSString*)identifier
+{
+	for (NSToolbarItem* item in [self items])
+	{
+		if ([[item itemIdentifier] isEqual:identifier])
+			return item;
+	}
+	return nil;
+}
+
+- (void)setSelectedItemIdentifier:(NSString *)itemIdentifier
+{
+	[super setSelectedItemIdentifier:itemIdentifier];
+	
+	NSToolbarItem* item = [self itemWithIdentifier:itemIdentifier];
+	if ([item isKindOfClass:[SSSelectableToolbarItem class]])
+	{
+		SSSelectableToolbarItem* ssitem = (SSSelectableToolbarItem*)item;
+		
+		NSView* view = [ssitem linkedView];
+		if (view && window)
+		{
+			NSView* oldView = [window contentView];
+			NSRect oldFrame = [oldView frame];
+			NSRect newFrame = [view frame];
+			NSRect oldWinFrame = [window frame];
+			NSRect winFrame = oldWinFrame;
+			float toolbarHeight = NSHeight(oldWinFrame) - NSHeight(oldFrame);
+
+			// resize
+			winFrame.size.width = newFrame.size.width;
+			winFrame.size.height = newFrame.size.height + toolbarHeight;
+			winFrame.origin.y -=  NSHeight(winFrame) - NSHeight(oldWinFrame);
+			[window setContentView:blankView];
+			[window setFrame:winFrame display:YES animate:YES];
+			[window setContentView:view];
+			
+			// change title
+			[window setTitle:[ssitem label]];
+			
+			// tab to first control (if nextKeyView connected)
+			NSView* keyView = [view nextKeyView];
+			if (keyView)
+				[window makeFirstResponder:keyView];
+			
+			
+		}
+	}
+}
+
+-(void)selectItemWithIndex:(NSInteger)idx
+{
+	NSInteger currIdx = 0;
+	for (NSToolbarItem* item in [self items])
+	{
+		if ([item isKindOfClass:[SSSelectableToolbarItem class]])
+		{
+			if (currIdx == idx)
+			{
+				[self setSelectedItemIdentifier:[item itemIdentifier]];
+				return;
+			}
+			// We're only counting these types, ignore spacing and other default items
+			++currIdx;
+		}
+	}
+			
+}
+
+-(NSInteger)selectableItemIndexToMainIndex:(NSInteger)idx
+{
+	NSInteger selIdx = 0;
+	NSInteger mainIdx = 0;
+	for (NSToolbarItem* item in [self items])
+	{
+		if ([item isKindOfClass:[SSSelectableToolbarItem class]])
+		{
+			if (selIdx == idx)
+			{
+				return mainIdx;
+			}
+			++selIdx;
+		}
+		++mainIdx;
+	}
+	
+	return -1;
+}
+ at end

Added: trunk/src/uimac14/ssselectabletoolbar/SSSelectableToolbarItem.h
===================================================================
--- trunk/src/uimac14/ssselectabletoolbar/SSSelectableToolbarItem.h	                        (rev 0)
+++ trunk/src/uimac14/ssselectabletoolbar/SSSelectableToolbarItem.h	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,19 @@
+//
+//  SSToolbarItem.h
+//  SelectableToolbarHelper
+//
+//  Created by Steven Streeting on 19/06/2011.
+//  Copyright 2011 Torus Knot Software Ltd. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+ at interface SSSelectableToolbarItem : NSToolbarItem 
+{
+	NSView* linkedView;
+}
+
+ at property (nonatomic, retain) IBOutlet NSView* linkedView;
+
+ at end

Added: trunk/src/uimac14/ssselectabletoolbar/SSSelectableToolbarItem.m
===================================================================
--- trunk/src/uimac14/ssselectabletoolbar/SSSelectableToolbarItem.m	                        (rev 0)
+++ trunk/src/uimac14/ssselectabletoolbar/SSSelectableToolbarItem.m	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,22 @@
+//
+//  SSToolbarItem.m
+//  SelectableToolbarHelper
+//
+//  Created by Steven Streeting on 19/06/2011.
+//  Copyright 2011 Torus Knot Software Ltd. All rights reserved.
+//
+
+#import "SSSelectableToolbarItem.h"
+
+
+ at implementation SSSelectableToolbarItem
+
+ at synthesize linkedView;
+
+-(void) dealloc
+{
+	[linkedView release];
+	[super dealloc];
+}
+
+ at end

Added: trunk/src/uimac14/tableicons/Change_Absent.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/Change_Absent.png
===================================================================
--- trunk/src/uimac14/tableicons/Change_Absent.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/Change_Absent.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/Change_Absent.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/Change_Created.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/Change_Created.png
===================================================================
--- trunk/src/uimac14/tableicons/Change_Created.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/Change_Created.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/Change_Created.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/Change_Deleted.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/Change_Deleted.png
===================================================================
--- trunk/src/uimac14/tableicons/Change_Deleted.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/Change_Deleted.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/Change_Deleted.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/Change_Modified.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/Change_Modified.png
===================================================================
--- trunk/src/uimac14/tableicons/Change_Modified.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/Change_Modified.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/Change_Modified.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/Change_PropsChanged.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/Change_PropsChanged.png
===================================================================
--- trunk/src/uimac14/tableicons/Change_PropsChanged.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/Change_PropsChanged.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/Change_PropsChanged.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/Change_Unmodified.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/Change_Unmodified.png
===================================================================
--- trunk/src/uimac14/tableicons/Change_Unmodified.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/Change_Unmodified.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/Change_Unmodified.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/Outline-Deep.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/Outline-Deep.png
===================================================================
--- trunk/src/uimac14/tableicons/Outline-Deep.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/Outline-Deep.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/Outline-Deep.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/Outline-Flat.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/Outline-Flat.png
===================================================================
--- trunk/src/uimac14/tableicons/Outline-Flat.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/Outline-Flat.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/Outline-Flat.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/Outline-Flattened.png
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/Outline-Flattened.png
===================================================================
--- trunk/src/uimac14/tableicons/Outline-Flattened.png	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/Outline-Flattened.png	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/Outline-Flattened.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/table-conflict.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/table-conflict.tif
===================================================================
--- trunk/src/uimac14/tableicons/table-conflict.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/table-conflict.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/table-conflict.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/table-error.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/table-error.tif
===================================================================
--- trunk/src/uimac14/tableicons/table-error.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/table-error.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/table-error.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/table-left-blue.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/table-left-blue.tif
===================================================================
--- trunk/src/uimac14/tableicons/table-left-blue.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/table-left-blue.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/table-left-blue.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/table-left-green.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/table-left-green.tif
===================================================================
--- trunk/src/uimac14/tableicons/table-left-green.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/table-left-green.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/table-left-green.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/table-merge.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/table-merge.tif
===================================================================
--- trunk/src/uimac14/tableicons/table-merge.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/table-merge.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/table-merge.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/table-mixed.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/table-mixed.tif
===================================================================
--- trunk/src/uimac14/tableicons/table-mixed.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/table-mixed.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/table-mixed.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/table-right-blue.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/table-right-blue.tif
===================================================================
--- trunk/src/uimac14/tableicons/table-right-blue.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/table-right-blue.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/table-right-blue.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/table-right-green.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/table-right-green.tif
===================================================================
--- trunk/src/uimac14/tableicons/table-right-green.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/table-right-green.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/table-right-green.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/tableicons/table-skip.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/tableicons/table-skip.tif
===================================================================
--- trunk/src/uimac14/tableicons/table-skip.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/tableicons/table-skip.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/tableicons/table-skip.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/toolbar/add.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/toolbar/add.tif
===================================================================
--- trunk/src/uimac14/toolbar/add.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/toolbar/add.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/toolbar/add.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/toolbar/diff.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/toolbar/diff.tif
===================================================================
--- trunk/src/uimac14/toolbar/diff.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/toolbar/diff.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/toolbar/diff.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/toolbar/go.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/toolbar/go.tif
===================================================================
--- trunk/src/uimac14/toolbar/go.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/toolbar/go.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/toolbar/go.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/toolbar/left.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/toolbar/left.tif
===================================================================
--- trunk/src/uimac14/toolbar/left.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/toolbar/left.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/toolbar/left.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/toolbar/merge.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/toolbar/merge.tif
===================================================================
--- trunk/src/uimac14/toolbar/merge.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/toolbar/merge.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/toolbar/merge.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/toolbar/quit.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/toolbar/quit.tif
===================================================================
--- trunk/src/uimac14/toolbar/quit.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/toolbar/quit.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/toolbar/quit.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/toolbar/rescan.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/toolbar/rescan.tif
===================================================================
--- trunk/src/uimac14/toolbar/rescan.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/toolbar/rescan.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/toolbar/rescan.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/toolbar/restart.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/toolbar/restart.tif
===================================================================
--- trunk/src/uimac14/toolbar/restart.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/toolbar/restart.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/toolbar/restart.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/toolbar/right.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/toolbar/right.tif
===================================================================
--- trunk/src/uimac14/toolbar/right.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/toolbar/right.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/toolbar/right.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/toolbar/save.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/toolbar/save.tif
===================================================================
--- trunk/src/uimac14/toolbar/save.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/toolbar/save.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/toolbar/save.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/toolbar/skip.tif
===================================================================
(Binary files differ)

Index: trunk/src/uimac14/toolbar/skip.tif
===================================================================
--- trunk/src/uimac14/toolbar/skip.tif	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimac14/toolbar/skip.tif	2014-07-05 21:55:19 UTC (rev 527)

Property changes on: trunk/src/uimac14/toolbar/skip.tif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/src/uimac14/uimacnew.xcodeproj/project.pbxproj
===================================================================
--- trunk/src/uimac14/uimacnew.xcodeproj/project.pbxproj	                        (rev 0)
+++ trunk/src/uimac14/uimacnew.xcodeproj/project.pbxproj	2014-07-05 21:55:19 UTC (rev 527)
@@ -0,0 +1,796 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXAggregateTarget section */
+		2A124E780DE1C48400524237 /* Create ExternalSettings */ = {
+			isa = PBXAggregateTarget;
+			buildConfigurationList = 2A124E7C0DE1C4A200524237 /* Build configuration list for PBXAggregateTarget "Create ExternalSettings" */;
+			buildPhases = (
+				2A124E7E0DE1C4BE00524237 /* Run Script (version, ocaml lib dir) */,
+			);
+			dependencies = (
+			);
+			name = "Create ExternalSettings";
+			productName = "Create ExternalSettings";
+		};
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+		2A3C3F7D09922D4900E404E9 /* NotificationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A3C3F7B09922D4900E404E9 /* NotificationController.m */; };
+		2E282CC80D9AE2B000439D01 /* unison-blob.o in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E282CC70D9AE2B000439D01 /* unison-blob.o */; };
+		44042CB60BE4FC9B00A6BBB2 /* ProgressCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 44042CB40BE4FC9B00A6BBB2 /* ProgressCell.m */; };
+		44042D1B0BE52AED00A6BBB2 /* ProgressBarAdvanced.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D100BE52AED00A6BBB2 /* ProgressBarAdvanced.png */; };
+		44042D1C0BE52AEE00A6BBB2 /* ProgressBarBlue.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D110BE52AED00A6BBB2 /* ProgressBarBlue.png */; };
+		44042D1D0BE52AEE00A6BBB2 /* ProgressBarEndAdvanced.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D120BE52AED00A6BBB2 /* ProgressBarEndAdvanced.png */; };
+		44042D1E0BE52AEE00A6BBB2 /* ProgressBarEndBlue.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D130BE52AED00A6BBB2 /* ProgressBarEndBlue.png */; };
+		44042D1F0BE52AEE00A6BBB2 /* ProgressBarEndGray.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D140BE52AED00A6BBB2 /* ProgressBarEndGray.png */; };
+		44042D200BE52AEE00A6BBB2 /* ProgressBarEndGreen.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D150BE52AED00A6BBB2 /* ProgressBarEndGreen.png */; };
+		44042D210BE52AEE00A6BBB2 /* ProgressBarEndWhite.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D160BE52AED00A6BBB2 /* ProgressBarEndWhite.png */; };
+		44042D220BE52AEE00A6BBB2 /* ProgressBarGray.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D170BE52AED00A6BBB2 /* ProgressBarGray.png */; };
+		44042D230BE52AEE00A6BBB2 /* ProgressBarGreen.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D180BE52AED00A6BBB2 /* ProgressBarGreen.png */; };
+		44042D240BE52AEE00A6BBB2 /* ProgressBarLightGreen.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D190BE52AED00A6BBB2 /* ProgressBarLightGreen.png */; };
+		44042D250BE52AEE00A6BBB2 /* ProgressBarWhite.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D1A0BE52AED00A6BBB2 /* ProgressBarWhite.png */; };
+		440EEAF30C03EC3D00ACAAB0 /* Change_Created.png in Resources */ = {isa = PBXBuildFile; fileRef = 440EEAF20C03EC3D00ACAAB0 /* Change_Created.png */; };
+		440EEAF90C03F0B800ACAAB0 /* Change_Deleted.png in Resources */ = {isa = PBXBuildFile; fileRef = 440EEAF60C03F0B800ACAAB0 /* Change_Deleted.png */; };
+		440EEAFA0C03F0B800ACAAB0 /* Change_Modified.png in Resources */ = {isa = PBXBuildFile; fileRef = 440EEAF70C03F0B800ACAAB0 /* Change_Modified.png */; };
+		440EEAFB0C03F0B800ACAAB0 /* Change_PropsChanged.png in Resources */ = {isa = PBXBuildFile; fileRef = 440EEAF80C03F0B800ACAAB0 /* Change_PropsChanged.png */; };
+		445A291B0BFA5B3300E4E641 /* Outline-Deep.png in Resources */ = {isa = PBXBuildFile; fileRef = 445A291A0BFA5B3300E4E641 /* Outline-Deep.png */; };
+		445A29270BFA5C1200E4E641 /* Outline-Flat.png in Resources */ = {isa = PBXBuildFile; fileRef = 445A29260BFA5C1200E4E641 /* Outline-Flat.png */; };
+		445A29290BFA5C1B00E4E641 /* Outline-Flattened.png in Resources */ = {isa = PBXBuildFile; fileRef = 445A29280BFA5C1B00E4E641 /* Outline-Flattened.png */; };
+		445A2A5E0BFAB6C300E4E641 /* ImageAndTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 445A2A5D0BFAB6C300E4E641 /* ImageAndTextCell.m */; };
+		449F03E10BE00DE9003F15C8 /* Bridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 449F03DF0BE00DE9003F15C8 /* Bridge.m */; };
+		44A794A10BE16C380069680C /* ExceptionHandling.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44A794A00BE16C380069680C /* ExceptionHandling.framework */; };
+		44A797F40BE3F9B70069680C /* table-mixed.tif in Resources */ = {isa = PBXBuildFile; fileRef = 44A797F10BE3F9B70069680C /* table-mixed.tif */; };
+		44F472B10C0DB735006428EF /* Change_Absent.png in Resources */ = {isa = PBXBuildFile; fileRef = 44F472AF0C0DB735006428EF /* Change_Absent.png */; };
+		44F472B20C0DB735006428EF /* Change_Unmodified.png in Resources */ = {isa = PBXBuildFile; fileRef = 44F472B00C0DB735006428EF /* Change_Unmodified.png */; };
+		69C625E70664EC3300B3C46A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
+		69C625E80664EC3300B3C46A /* Unison.icns in Resources */ = {isa = PBXBuildFile; fileRef = 69C625CA0664E94E00B3C46A /* Unison.icns */; };
+		69C625EA0664EC3300B3C46A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
+		69C625EB0664EC3300B3C46A /* MyController.m in Sources */ = {isa = PBXBuildFile; fileRef = 69660DC704F08CC100CF23A4 /* MyController.m */; };
+		69C625EC0664EC3300B3C46A /* ProfileController.m in Sources */ = {isa = PBXBuildFile; fileRef = 690F564504F11EC300CF23A4 /* ProfileController.m */; };
+		69C625ED0664EC3300B3C46A /* ReconItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 69D3C6F904F1CC3700CF23A4 /* ReconItem.m */; };
+		69C625EE0664EC3300B3C46A /* ReconTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 69BA7DA904FD695200CF23A4 /* ReconTableView.m */; };
+		69C625EF0664EC3300B3C46A /* PreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 697985CE050CFA2D00CF23A4 /* PreferencesController.m */; };
+		69C625F00664EC3300B3C46A /* ProfileTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 691CE181051BB44A00CF23A4 /* ProfileTableView.m */; };
+		69C625F20664EC3300B3C46A /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+		69E407BA07EB95AA00D37AA1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69E407B907EB95AA00D37AA1 /* Security.framework */; };
+		8450B1381918859E00A2C4D6 /* ColorGradientView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8450B1371918859E00A2C4D6 /* ColorGradientView.m */; };
+		849BE4FF191AC10E001B6FBF /* README in Resources */ = {isa = PBXBuildFile; fileRef = 849BE4FA191AC10E001B6FBF /* README */; };
+		849BE500191AC10E001B6FBF /* SSSelectableToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 849BE4FC191AC10E001B6FBF /* SSSelectableToolbar.m */; };
+		849BE501191AC10E001B6FBF /* SSSelectableToolbarItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 849BE4FE191AC10E001B6FBF /* SSSelectableToolbarItem.m */; };
+		B518071C09D6652100B1B21F /* add.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071209D6652100B1B21F /* add.tif */; };
+		B518071D09D6652100B1B21F /* diff.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071309D6652100B1B21F /* diff.tif */; };
+		B518071E09D6652100B1B21F /* go.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071409D6652100B1B21F /* go.tif */; };
+		B518071F09D6652100B1B21F /* left.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071509D6652100B1B21F /* left.tif */; };
+		B518072009D6652100B1B21F /* merge.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071609D6652100B1B21F /* merge.tif */; };
+		B518072109D6652100B1B21F /* quit.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071709D6652100B1B21F /* quit.tif */; };
+		B518072209D6652100B1B21F /* restart.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071809D6652100B1B21F /* restart.tif */; };
+		B518072309D6652100B1B21F /* right.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071909D6652100B1B21F /* right.tif */; };
+		B518072409D6652100B1B21F /* save.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071A09D6652100B1B21F /* save.tif */; };
+		B518072509D6652100B1B21F /* skip.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071B09D6652100B1B21F /* skip.tif */; };
+		B554004109C4E5AA0089E1C3 /* UnisonToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = B554004009C4E5AA0089E1C3 /* UnisonToolbar.m */; };
+		B5B44C1909DF61A4000DC7AF /* table-conflict.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5B44C1109DF61A4000DC7AF /* table-conflict.tif */; };
+		B5B44C1A09DF61A4000DC7AF /* table-error.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5B44C1209DF61A4000DC7AF /* table-error.tif */; };
+		B5B44C1B09DF61A4000DC7AF /* table-left-blue.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5B44C1309DF61A4000DC7AF /* table-left-blue.tif */; };
+		B5B44C1C09DF61A4000DC7AF /* table-left-green.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5B44C1409DF61A4000DC7AF /* table-left-green.tif */; };
+		B5B44C1D09DF61A4000DC7AF /* table-merge.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5B44C1509DF61A4000DC7AF /* table-merge.tif */; };
+		B5B44C1E09DF61A4000DC7AF /* table-right-blue.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5B44C1609DF61A4000DC7AF /* table-right-blue.tif */; };
+		B5B44C1F09DF61A4000DC7AF /* table-right-green.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5B44C1709DF61A4000DC7AF /* table-right-green.tif */; };
+		B5B44C2009DF61A4000DC7AF /* table-skip.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5B44C1809DF61A4000DC7AF /* table-skip.tif */; };
+		B5E03B3909E38B9E0058C7B9 /* rescan.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5E03B3809E38B9E0058C7B9 /* rescan.tif */; };
+		BB1ADE26114AEB1100575BFC /* Growl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = BBE2BCAC11355CDD00B187F2 /* Growl.framework */; };
+		BBE2BCAE11355CDD00B187F2 /* Growl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBE2BCAC11355CDD00B187F2 /* Growl.framework */; };
+		DE2444D610C294EA007E1546 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = DE2444D410C294EA007E1546 /* MainMenu.xib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		2A124E7F0DE1C4E400524237 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 2A124E780DE1C48400524237;
+			remoteInfo = "Create ExternalSettings";
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		2A3C3F3709922AA600E404E9 /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				BB1ADE26114AEB1100575BFC /* Growl.framework in CopyFiles */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		BB6E50CF10CAA57600E23F8A /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 7;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
+		29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+		2A3C3F7A09922D4900E404E9 /* NotificationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NotificationController.h; sourceTree = "<group>"; };
+		2A3C3F7B09922D4900E404E9 /* NotificationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NotificationController.m; sourceTree = "<group>"; };
+		2E282CC70D9AE2B000439D01 /* unison-blob.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; name = "unison-blob.o"; path = "../unison-blob.o"; sourceTree = SOURCE_ROOT; };
+		2E282CCC0D9AE2E800439D01 /* ExternalSettings.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = ExternalSettings.xcconfig; sourceTree = "<group>"; };
+		44042CB30BE4FC9B00A6BBB2 /* ProgressCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ProgressCell.h; sourceTree = "<group>"; };
+		44042CB40BE4FC9B00A6BBB2 /* ProgressCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ProgressCell.m; sourceTree = "<group>"; };
+		44042D100BE52AED00A6BBB2 /* ProgressBarAdvanced.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarAdvanced.png; path = progressicons/ProgressBarAdvanced.png; sourceTree = "<group>"; };
+		44042D110BE52AED00A6BBB2 /* ProgressBarBlue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarBlue.png; path = progressicons/ProgressBarBlue.png; sourceTree = "<group>"; };
+		44042D120BE52AED00A6BBB2 /* ProgressBarEndAdvanced.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarEndAdvanced.png; path = progressicons/ProgressBarEndAdvanced.png; sourceTree = "<group>"; };
+		44042D130BE52AED00A6BBB2 /* ProgressBarEndBlue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarEndBlue.png; path = progressicons/ProgressBarEndBlue.png; sourceTree = "<group>"; };
+		44042D140BE52AED00A6BBB2 /* ProgressBarEndGray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarEndGray.png; path = progressicons/ProgressBarEndGray.png; sourceTree = "<group>"; };
+		44042D150BE52AED00A6BBB2 /* ProgressBarEndGreen.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarEndGreen.png; path = progressicons/ProgressBarEndGreen.png; sourceTree = "<group>"; };
+		44042D160BE52AED00A6BBB2 /* ProgressBarEndWhite.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarEndWhite.png; path = progressicons/ProgressBarEndWhite.png; sourceTree = "<group>"; };
+		44042D170BE52AED00A6BBB2 /* ProgressBarGray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarGray.png; path = progressicons/ProgressBarGray.png; sourceTree = "<group>"; };
+		44042D180BE52AED00A6BBB2 /* ProgressBarGreen.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarGreen.png; path = progressicons/ProgressBarGreen.png; sourceTree = "<group>"; };
+		44042D190BE52AED00A6BBB2 /* ProgressBarLightGreen.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarLightGreen.png; path = progressicons/ProgressBarLightGreen.png; sourceTree = "<group>"; };
+		44042D1A0BE52AED00A6BBB2 /* ProgressBarWhite.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarWhite.png; path = progressicons/ProgressBarWhite.png; sourceTree = "<group>"; };
+		440EEAF20C03EC3D00ACAAB0 /* Change_Created.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Change_Created.png; sourceTree = "<group>"; };
+		440EEAF60C03F0B800ACAAB0 /* Change_Deleted.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Change_Deleted.png; sourceTree = "<group>"; };
+		440EEAF70C03F0B800ACAAB0 /* Change_Modified.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Change_Modified.png; sourceTree = "<group>"; };
+		440EEAF80C03F0B800ACAAB0 /* Change_PropsChanged.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Change_PropsChanged.png; sourceTree = "<group>"; };
+		445A291A0BFA5B3300E4E641 /* Outline-Deep.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Outline-Deep.png"; sourceTree = "<group>"; };
+		445A29260BFA5C1200E4E641 /* Outline-Flat.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Outline-Flat.png"; sourceTree = "<group>"; };
+		445A29280BFA5C1B00E4E641 /* Outline-Flattened.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Outline-Flattened.png"; sourceTree = "<group>"; };
+		445A2A5B0BFAB6A100E4E641 /* ImageAndTextCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ImageAndTextCell.h; sourceTree = "<group>"; };
+		445A2A5D0BFAB6C300E4E641 /* ImageAndTextCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ImageAndTextCell.m; sourceTree = "<group>"; };
+		449F03DE0BE00DE9003F15C8 /* Bridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bridge.h; sourceTree = "<group>"; };
+		449F03DF0BE00DE9003F15C8 /* Bridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Bridge.m; sourceTree = "<group>"; };
+		44A794A00BE16C380069680C /* ExceptionHandling.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ExceptionHandling.framework; path = /System/Library/Frameworks/ExceptionHandling.framework; sourceTree = "<absolute>"; };
+		44A797F10BE3F9B70069680C /* table-mixed.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-mixed.tif"; sourceTree = "<group>"; };
+		44F472AF0C0DB735006428EF /* Change_Absent.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Change_Absent.png; sourceTree = "<group>"; };
+		44F472B00C0DB735006428EF /* Change_Unmodified.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Change_Unmodified.png; sourceTree = "<group>"; };
+		690F564404F11EC300CF23A4 /* ProfileController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ProfileController.h; sourceTree = "<group>"; };
+		690F564504F11EC300CF23A4 /* ProfileController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ProfileController.m; sourceTree = "<group>"; };
+		691CE180051BB44A00CF23A4 /* ProfileTableView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ProfileTableView.h; sourceTree = "<group>"; };
+		691CE181051BB44A00CF23A4 /* ProfileTableView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ProfileTableView.m; sourceTree = "<group>"; };
+		69660DC604F08CC100CF23A4 /* MyController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyController.h; sourceTree = "<group>"; };
+		69660DC704F08CC100CF23A4 /* MyController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyController.m; sourceTree = "<group>"; };
+		697985CD050CFA2D00CF23A4 /* PreferencesController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PreferencesController.h; sourceTree = "<group>"; };
+		697985CE050CFA2D00CF23A4 /* PreferencesController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PreferencesController.m; sourceTree = "<group>"; };
+		69BA7DA804FD695200CF23A4 /* ReconTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReconTableView.h; sourceTree = "<group>"; };
+		69BA7DA904FD695200CF23A4 /* ReconTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ReconTableView.m; sourceTree = "<group>"; };
+		69C625CA0664E94E00B3C46A /* Unison.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Unison.icns; sourceTree = "<group>"; };
+		69C625F40664EC3300B3C46A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		69C625F50664EC3300B3C46A /* Unison.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Unison.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		69D3C6F904F1CC3700CF23A4 /* ReconItem.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ReconItem.m; sourceTree = "<group>"; };
+		69D3C6FA04F1CC3700CF23A4 /* ReconItem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ReconItem.h; sourceTree = "<group>"; };
+		69E407B907EB95AA00D37AA1 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = "<absolute>"; };
+		8450B1361918859E00A2C4D6 /* ColorGradientView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColorGradientView.h; sourceTree = "<group>"; };
+		8450B1371918859E00A2C4D6 /* ColorGradientView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ColorGradientView.m; sourceTree = "<group>"; };
+		849BE4FA191AC10E001B6FBF /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
+		849BE4FB191AC10E001B6FBF /* SSSelectableToolbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSSelectableToolbar.h; sourceTree = "<group>"; };
+		849BE4FC191AC10E001B6FBF /* SSSelectableToolbar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSSelectableToolbar.m; sourceTree = "<group>"; };
+		849BE4FD191AC10E001B6FBF /* SSSelectableToolbarItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSSelectableToolbarItem.h; sourceTree = "<group>"; };
+		849BE4FE191AC10E001B6FBF /* SSSelectableToolbarItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSSelectableToolbarItem.m; sourceTree = "<group>"; };
+		B518071209D6652100B1B21F /* add.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = add.tif; sourceTree = "<group>"; };
+		B518071309D6652100B1B21F /* diff.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = diff.tif; sourceTree = "<group>"; };
+		B518071409D6652100B1B21F /* go.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = go.tif; sourceTree = "<group>"; };
+		B518071509D6652100B1B21F /* left.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = left.tif; sourceTree = "<group>"; };
+		B518071609D6652100B1B21F /* merge.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = merge.tif; sourceTree = "<group>"; };
+		B518071709D6652100B1B21F /* quit.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = quit.tif; sourceTree = "<group>"; };
+		B518071809D6652100B1B21F /* restart.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = restart.tif; sourceTree = "<group>"; };
+		B518071909D6652100B1B21F /* right.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = right.tif; sourceTree = "<group>"; };
+		B518071A09D6652100B1B21F /* save.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = save.tif; sourceTree = "<group>"; };
+		B518071B09D6652100B1B21F /* skip.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = skip.tif; sourceTree = "<group>"; };
+		B554003E09C4E5A00089E1C3 /* UnisonToolbar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = UnisonToolbar.h; sourceTree = "<group>"; };
+		B554004009C4E5AA0089E1C3 /* UnisonToolbar.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = UnisonToolbar.m; sourceTree = "<group>"; };
+		B5B44C1109DF61A4000DC7AF /* table-conflict.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-conflict.tif"; sourceTree = "<group>"; };
+		B5B44C1209DF61A4000DC7AF /* table-error.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-error.tif"; sourceTree = "<group>"; };
+		B5B44C1309DF61A4000DC7AF /* table-left-blue.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-left-blue.tif"; sourceTree = "<group>"; };
+		B5B44C1409DF61A4000DC7AF /* table-left-green.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-left-green.tif"; sourceTree = "<group>"; };
+		B5B44C1509DF61A4000DC7AF /* table-merge.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-merge.tif"; sourceTree = "<group>"; };
+		B5B44C1609DF61A4000DC7AF /* table-right-blue.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-right-blue.tif"; sourceTree = "<group>"; };
+		B5B44C1709DF61A4000DC7AF /* table-right-green.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-right-green.tif"; sourceTree = "<group>"; };
+		B5B44C1809DF61A4000DC7AF /* table-skip.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-skip.tif"; sourceTree = "<group>"; };
+		B5E03B3809E38B9E0058C7B9 /* rescan.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = rescan.tif; sourceTree = "<group>"; };
+		BBE2BCAC11355CDD00B187F2 /* Growl.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Growl.framework; path = Frameworks/Growl.framework; sourceTree = "<group>"; };
+		DE2444D510C294EA007E1546 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		69C625F10664EC3300B3C46A /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				69C625F20664EC3300B3C46A /* Cocoa.framework in Frameworks */,
+				69E407BA07EB95AA00D37AA1 /* Security.framework in Frameworks */,
+				44A794A10BE16C380069680C /* ExceptionHandling.framework in Frameworks */,
+				2E282CC80D9AE2B000439D01 /* unison-blob.o in Frameworks */,
+				BBE2BCAE11355CDD00B187F2 /* Growl.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		19C28FACFE9D520D11CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				69C625F50664EC3300B3C46A /* Unison.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		29B97314FDCFA39411CA2CEA /* uimac */ = {
+			isa = PBXGroup;
+			children = (
+				44042D0F0BE52AD700A6BBB2 /* progressicons */,
+				B5B44C1009DF61A4000DC7AF /* tableicons */,
+				B518071109D6652000B1B21F /* toolbar */,
+				44A795C90BE2B91B0069680C /* Classes */,
+				29B97315FDCFA39411CA2CEA /* Other Sources */,
+				29B97317FDCFA39411CA2CEA /* Resources */,
+				29B97323FDCFA39411CA2CEA /* Frameworks */,
+				19C28FACFE9D520D11CA2CBB /* Products */,
+				69C625F40664EC3300B3C46A /* Info.plist */,
+				2E282CCC0D9AE2E800439D01 /* ExternalSettings.xcconfig */,
+				2E282CB80D9AE16300439D01 /* External objects */,
+			);
+			name = uimac;
+			sourceTree = "<group>";
+		};
+		29B97315FDCFA39411CA2CEA /* Other Sources */ = {
+			isa = PBXGroup;
+			children = (
+				29B97316FDCFA39411CA2CEA /* main.m */,
+			);
+			name = "Other Sources";
+			sourceTree = "<group>";
+		};
+		29B97317FDCFA39411CA2CEA /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				DE2444D410C294EA007E1546 /* MainMenu.xib */,
+				089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
+				69C625CA0664E94E00B3C46A /* Unison.icns */,
+			);
+			name = Resources;
+			sourceTree = "<group>";
+		};
+		29B97323FDCFA39411CA2CEA /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
+				BBE2BCAC11355CDD00B187F2 /* Growl.framework */,
+				44A794A00BE16C380069680C /* ExceptionHandling.framework */,
+				69E407B907EB95AA00D37AA1 /* Security.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		2E282CB80D9AE16300439D01 /* External objects */ = {
+			isa = PBXGroup;
+			children = (
+				2E282CC70D9AE2B000439D01 /* unison-blob.o */,
+			);
+			name = "External objects";
+			sourceTree = "<group>";
+		};
+		44042D0F0BE52AD700A6BBB2 /* progressicons */ = {
+			isa = PBXGroup;
+			children = (
+				44042D100BE52AED00A6BBB2 /* ProgressBarAdvanced.png */,
+				44042D110BE52AED00A6BBB2 /* ProgressBarBlue.png */,
+				44042D120BE52AED00A6BBB2 /* ProgressBarEndAdvanced.png */,
+				44042D130BE52AED00A6BBB2 /* ProgressBarEndBlue.png */,
+				44042D140BE52AED00A6BBB2 /* ProgressBarEndGray.png */,
+				44042D150BE52AED00A6BBB2 /* ProgressBarEndGreen.png */,
+				44042D160BE52AED00A6BBB2 /* ProgressBarEndWhite.png */,
+				44042D170BE52AED00A6BBB2 /* ProgressBarGray.png */,
+				44042D180BE52AED00A6BBB2 /* ProgressBarGreen.png */,
+				44042D190BE52AED00A6BBB2 /* ProgressBarLightGreen.png */,
+				44042D1A0BE52AED00A6BBB2 /* ProgressBarWhite.png */,
+			);
+			name = progressicons;
+			sourceTree = "<group>";
+		};
+		44A795C90BE2B91B0069680C /* Classes */ = {
+			isa = PBXGroup;
+			children = (
+				849BE4F9191AC10E001B6FBF /* ssselectabletoolbar */,
+				8450B1361918859E00A2C4D6 /* ColorGradientView.h */,
+				8450B1371918859E00A2C4D6 /* ColorGradientView.m */,
+				69660DC604F08CC100CF23A4 /* MyController.h */,
+				69660DC704F08CC100CF23A4 /* MyController.m */,
+				2A3C3F7A09922D4900E404E9 /* NotificationController.h */,
+				2A3C3F7B09922D4900E404E9 /* NotificationController.m */,
+				69BA7DA804FD695200CF23A4 /* ReconTableView.h */,
+				69BA7DA904FD695200CF23A4 /* ReconTableView.m */,
+				69D3C6FA04F1CC3700CF23A4 /* ReconItem.h */,
+				69D3C6F904F1CC3700CF23A4 /* ReconItem.m */,
+				445A2A5B0BFAB6A100E4E641 /* ImageAndTextCell.h */,
+				445A2A5D0BFAB6C300E4E641 /* ImageAndTextCell.m */,
+				44042CB30BE4FC9B00A6BBB2 /* ProgressCell.h */,
+				44042CB40BE4FC9B00A6BBB2 /* ProgressCell.m */,
+				690F564404F11EC300CF23A4 /* ProfileController.h */,
+				690F564504F11EC300CF23A4 /* ProfileController.m */,
+				697985CD050CFA2D00CF23A4 /* PreferencesController.h */,
+				697985CE050CFA2D00CF23A4 /* PreferencesController.m */,
+				691CE180051BB44A00CF23A4 /* ProfileTableView.h */,
+				691CE181051BB44A00CF23A4 /* ProfileTableView.m */,
+				B554003E09C4E5A00089E1C3 /* UnisonToolbar.h */,
+				B554004009C4E5AA0089E1C3 /* UnisonToolbar.m */,
+				449F03DE0BE00DE9003F15C8 /* Bridge.h */,
+				449F03DF0BE00DE9003F15C8 /* Bridge.m */,
+			);
+			name = Classes;
+			sourceTree = "<group>";
+		};
+		849BE4F9191AC10E001B6FBF /* ssselectabletoolbar */ = {
+			isa = PBXGroup;
+			children = (
+				849BE4FA191AC10E001B6FBF /* README */,
+				849BE4FB191AC10E001B6FBF /* SSSelectableToolbar.h */,
+				849BE4FC191AC10E001B6FBF /* SSSelectableToolbar.m */,
+				849BE4FD191AC10E001B6FBF /* SSSelectableToolbarItem.h */,
+				849BE4FE191AC10E001B6FBF /* SSSelectableToolbarItem.m */,
+			);
+			path = ssselectabletoolbar;
+			sourceTree = "<group>";
+		};
+		B518071109D6652000B1B21F /* toolbar */ = {
+			isa = PBXGroup;
+			children = (
+				B5E03B3809E38B9E0058C7B9 /* rescan.tif */,
+				B518071209D6652100B1B21F /* add.tif */,
+				B518071309D6652100B1B21F /* diff.tif */,
+				B518071409D6652100B1B21F /* go.tif */,
+				B518071509D6652100B1B21F /* left.tif */,
+				B518071609D6652100B1B21F /* merge.tif */,
+				B518071709D6652100B1B21F /* quit.tif */,
+				B518071809D6652100B1B21F /* restart.tif */,
+				B518071909D6652100B1B21F /* right.tif */,
+				B518071A09D6652100B1B21F /* save.tif */,
+				B518071B09D6652100B1B21F /* skip.tif */,
+			);
+			path = toolbar;
+			sourceTree = "<group>";
+		};
+		B5B44C1009DF61A4000DC7AF /* tableicons */ = {
+			isa = PBXGroup;
+			children = (
+				44F472AF0C0DB735006428EF /* Change_Absent.png */,
+				44F472B00C0DB735006428EF /* Change_Unmodified.png */,
+				440EEAF60C03F0B800ACAAB0 /* Change_Deleted.png */,
+				440EEAF70C03F0B800ACAAB0 /* Change_Modified.png */,
+				440EEAF80C03F0B800ACAAB0 /* Change_PropsChanged.png */,
+				440EEAF20C03EC3D00ACAAB0 /* Change_Created.png */,
+				44A797F10BE3F9B70069680C /* table-mixed.tif */,
+				B5B44C1109DF61A4000DC7AF /* table-conflict.tif */,
+				B5B44C1209DF61A4000DC7AF /* table-error.tif */,
+				B5B44C1309DF61A4000DC7AF /* table-left-blue.tif */,
+				B5B44C1409DF61A4000DC7AF /* table-left-green.tif */,
+				B5B44C1509DF61A4000DC7AF /* table-merge.tif */,
+				B5B44C1609DF61A4000DC7AF /* table-right-blue.tif */,
+				B5B44C1709DF61A4000DC7AF /* table-right-green.tif */,
+				B5B44C1809DF61A4000DC7AF /* table-skip.tif */,
+				445A291A0BFA5B3300E4E641 /* Outline-Deep.png */,
+				445A29260BFA5C1200E4E641 /* Outline-Flat.png */,
+				445A29280BFA5C1B00E4E641 /* Outline-Flattened.png */,
+			);
+			path = tableicons;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		69C625DD0664EC3300B3C46A /* uimac */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 2A3C3F280992245300E404E9 /* Build configuration list for PBXNativeTarget "uimac" */;
+			buildPhases = (
+				2E282CBA0D9AE17300439D01 /* Run Script (make unison-blob.o) */,
+				69C625E50664EC3300B3C46A /* Resources */,
+				69C625E90664EC3300B3C46A /* Sources */,
+				69C625F10664EC3300B3C46A /* Frameworks */,
+				2A3C3F3709922AA600E404E9 /* CopyFiles */,
+				BB6E50CF10CAA57600E23F8A /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				2A124E800DE1C4E400524237 /* PBXTargetDependency */,
+			);
+			name = uimac;
+			productInstallPath = "$(HOME)/Applications";
+			productName = uimac;
+			productReference = 69C625F50664EC3300B3C46A /* Unison.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		29B97313FDCFA39411CA2CEA /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0410;
+			};
+			buildConfigurationList = 2A3C3F2C0992245300E404E9 /* Build configuration list for PBXProject "uimacnew" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 1;
+			knownRegions = (
+				English,
+				Japanese,
+				French,
+				German,
+			);
+			mainGroup = 29B97314FDCFA39411CA2CEA /* uimac */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				69C625DD0664EC3300B3C46A /* uimac */,
+				2A124E780DE1C48400524237 /* Create ExternalSettings */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		69C625E50664EC3300B3C46A /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				69C625E70664EC3300B3C46A /* InfoPlist.strings in Resources */,
+				69C625E80664EC3300B3C46A /* Unison.icns in Resources */,
+				B518071C09D6652100B1B21F /* add.tif in Resources */,
+				B518071D09D6652100B1B21F /* diff.tif in Resources */,
+				B518071E09D6652100B1B21F /* go.tif in Resources */,
+				B518071F09D6652100B1B21F /* left.tif in Resources */,
+				B518072009D6652100B1B21F /* merge.tif in Resources */,
+				B518072109D6652100B1B21F /* quit.tif in Resources */,
+				B518072209D6652100B1B21F /* restart.tif in Resources */,
+				B518072309D6652100B1B21F /* right.tif in Resources */,
+				B518072409D6652100B1B21F /* save.tif in Resources */,
+				B518072509D6652100B1B21F /* skip.tif in Resources */,
+				B5B44C1909DF61A4000DC7AF /* table-conflict.tif in Resources */,
+				B5B44C1A09DF61A4000DC7AF /* table-error.tif in Resources */,
+				B5B44C1B09DF61A4000DC7AF /* table-left-blue.tif in Resources */,
+				B5B44C1C09DF61A4000DC7AF /* table-left-green.tif in Resources */,
+				B5B44C1D09DF61A4000DC7AF /* table-merge.tif in Resources */,
+				B5B44C1E09DF61A4000DC7AF /* table-right-blue.tif in Resources */,
+				B5B44C1F09DF61A4000DC7AF /* table-right-green.tif in Resources */,
+				B5B44C2009DF61A4000DC7AF /* table-skip.tif in Resources */,
+				B5E03B3909E38B9E0058C7B9 /* rescan.tif in Resources */,
+				44A797F40BE3F9B70069680C /* table-mixed.tif in Resources */,
+				44042D1B0BE52AED00A6BBB2 /* ProgressBarAdvanced.png in Resources */,
+				44042D1C0BE52AEE00A6BBB2 /* ProgressBarBlue.png in Resources */,
+				44042D1D0BE52AEE00A6BBB2 /* ProgressBarEndAdvanced.png in Resources */,
+				44042D1E0BE52AEE00A6BBB2 /* ProgressBarEndBlue.png in Resources */,
+				44042D1F0BE52AEE00A6BBB2 /* ProgressBarEndGray.png in Resources */,
+				44042D200BE52AEE00A6BBB2 /* ProgressBarEndGreen.png in Resources */,
+				44042D210BE52AEE00A6BBB2 /* ProgressBarEndWhite.png in Resources */,
+				44042D220BE52AEE00A6BBB2 /* ProgressBarGray.png in Resources */,
+				44042D230BE52AEE00A6BBB2 /* ProgressBarGreen.png in Resources */,
+				44042D240BE52AEE00A6BBB2 /* ProgressBarLightGreen.png in Resources */,
+				44042D250BE52AEE00A6BBB2 /* ProgressBarWhite.png in Resources */,
+				445A291B0BFA5B3300E4E641 /* Outline-Deep.png in Resources */,
+				445A29270BFA5C1200E4E641 /* Outline-Flat.png in Resources */,
+				445A29290BFA5C1B00E4E641 /* Outline-Flattened.png in Resources */,
+				440EEAF30C03EC3D00ACAAB0 /* Change_Created.png in Resources */,
+				440EEAF90C03F0B800ACAAB0 /* Change_Deleted.png in Resources */,
+				440EEAFA0C03F0B800ACAAB0 /* Change_Modified.png in Resources */,
+				440EEAFB0C03F0B800ACAAB0 /* Change_PropsChanged.png in Resources */,
+				44F472B10C0DB735006428EF /* Change_Absent.png in Resources */,
+				44F472B20C0DB735006428EF /* Change_Unmodified.png in Resources */,
+				DE2444D610C294EA007E1546 /* MainMenu.xib in Resources */,
+				849BE4FF191AC10E001B6FBF /* README in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+		2A124E7E0DE1C4BE00524237 /* Run Script (version, ocaml lib dir) */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "Run Script (version, ocaml lib dir)";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "if [ -x /usr/libexec/path_helper ]; then\n  eval `/usr/libexec/path_helper -s`\nfi\nif [ ! -x ${PROJECT_DIR}/../Makefile.ProjectInfo ]; then\n  if [ ! -x ${PROJECT_DIR}/../mkProjectInfo ]; then\n    cd ${PROJECT_DIR}/..; ocamlc -o mkProjectInfo unix.cma str.cma mkProjectInfo.ml\n  fi\n  cd ${PROJECT_DIR}/..; ./mkProjectInfo > Makefile.ProjectInfo\nfi\nOCAMLLIBDIR=`ocamlc -v | tail -n -1 | sed -e 's/.* //g' | sed -e 's/\\\\\\/\\\\//g' | tr -d '\\r'`\nsource ${PROJECT_DIR}/../Makefile.ProjectInfo\necho MARKETING_VERSION = $VERSION > ${PROJECT_DIR}/ExternalSettings.xcconfig\necho OCAMLLIBDIR = $OCAMLLIBDIR >> ${PROJECT_DIR}/ExternalSettings.xcconfig";
+		};
+		2E282CBA0D9AE17300439D01 /* Run Script (make unison-blob.o) */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "Run Script (make unison-blob.o)";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "echo \"Building unison-blob.o...\"\nif [ -x /usr/libexec/path_helper ]; then\n  eval `/usr/libexec/path_helper -s`\nfi\ncd ${PROJECT_DIR}/..\nmake unison-blob.o\necho \"done\"";
+		};
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		69C625E90664EC3300B3C46A /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				69C625EA0664EC3300B3C46A /* main.m in Sources */,
+				69C625EB0664EC3300B3C46A /* MyController.m in Sources */,
+				69C625EC0664EC3300B3C46A /* ProfileController.m in Sources */,
+				69C625ED0664EC3300B3C46A /* ReconItem.m in Sources */,
+				69C625EE0664EC3300B3C46A /* ReconTableView.m in Sources */,
+				69C625EF0664EC3300B3C46A /* PreferencesController.m in Sources */,
+				69C625F00664EC3300B3C46A /* ProfileTableView.m in Sources */,
+				2A3C3F7D09922D4900E404E9 /* NotificationController.m in Sources */,
+				B554004109C4E5AA0089E1C3 /* UnisonToolbar.m in Sources */,
+				449F03E10BE00DE9003F15C8 /* Bridge.m in Sources */,
+				44042CB60BE4FC9B00A6BBB2 /* ProgressCell.m in Sources */,
+				445A2A5E0BFAB6C300E4E641 /* ImageAndTextCell.m in Sources */,
+				8450B1381918859E00A2C4D6 /* ColorGradientView.m in Sources */,
+				849BE500191AC10E001B6FBF /* SSSelectableToolbar.m in Sources */,
+				849BE501191AC10E001B6FBF /* SSSelectableToolbarItem.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		2A124E800DE1C4E400524237 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 2A124E780DE1C48400524237 /* Create ExternalSettings */;
+			targetProxy = 2A124E7F0DE1C4E400524237 /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+		089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				089C165DFE840E0CC02AAC07 /* English */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+		DE2444D410C294EA007E1546 /* MainMenu.xib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				DE2444D510C294EA007E1546 /* English */,
+			);
+			name = MainMenu.xib;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		2A124E790DE1C48400524237 /* Development */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				PRODUCT_NAME = "Create ExternalSettings";
+			};
+			name = Development;
+		};
+		2A124E7A0DE1C48400524237 /* Deployment */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				PRODUCT_NAME = "Create ExternalSettings";
+				ZERO_LINK = NO;
+			};
+			name = Deployment;
+		};
+		2A124E7B0DE1C48400524237 /* Default */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = "Create ExternalSettings";
+			};
+			name = Default;
+		};
+		2A3C3F290992245300E404E9 /* Development */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				COPY_PHASE_STRIP = NO;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(FRAMEWORK_SEARCH_PATHS)",
+					"$(SRCROOT)",
+					"$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
+					"\"$(SRCROOT)/Frameworks\"",
+				);
+				FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/Frameworks\"";
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				LIBRARY_SEARCH_PATHS = "";
+				NSZombieEnabled = YES;
+				OTHER_CFLAGS = "";
+				OTHER_LDFLAGS = (
+					"-L$(OCAMLLIBDIR)",
+					"-lunix",
+					"-lthreadsnat",
+					"-lcamlstr",
+					"-lbigarray",
+					"-lasmrun",
+				);
+				PRODUCT_NAME = Unison;
+				SECTORDER_FLAGS = "";
+				WARNING_CFLAGS = (
+					"-Wmost",
+					"-Wno-four-char-constants",
+					"-Wno-unknown-pragmas",
+				);
+				WRAPPER_EXTENSION = app;
+				ZERO_LINK = YES;
+			};
+			name = Development;
+		};
+		2A3C3F2A0992245300E404E9 /* Deployment */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				COPY_PHASE_STRIP = YES;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(FRAMEWORK_SEARCH_PATHS)",
+					"$(SRCROOT)",
+					"$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
+					"\"$(SRCROOT)/Frameworks\"",
+				);
+				FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/Frameworks\"";
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				LIBRARY_SEARCH_PATHS = "";
+				OTHER_CFLAGS = "";
+				OTHER_LDFLAGS = (
+					"-L$(OCAMLLIBDIR)",
+					"-lunix",
+					"-lthreadsnat",
+					"-lcamlstr",
+					"-lbigarray",
+					"-lasmrun",
+				);
+				PRODUCT_NAME = Unison;
+				SECTORDER_FLAGS = "";
+				WARNING_CFLAGS = (
+					"-Wmost",
+					"-Wno-four-char-constants",
+					"-Wno-unknown-pragmas",
+				);
+				WRAPPER_EXTENSION = app;
+				ZERO_LINK = NO;
+			};
+			name = Deployment;
+		};
+		2A3C3F2B0992245300E404E9 /* Default */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(FRAMEWORK_SEARCH_PATHS)",
+					"$(SRCROOT)",
+					"$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
+					"\"$(SRCROOT)/Frameworks\"",
+				);
+				FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/Frameworks\"";
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				LIBRARY_SEARCH_PATHS = "";
+				OTHER_CFLAGS = "";
+				OTHER_LDFLAGS = (
+					"-L$(OCAMLLIBDIR)",
+					"-lunix",
+					"-lthreadsnat",
+					"-lcamlstr",
+					"-lbigarray",
+					"-lasmrun",
+				);
+				PRODUCT_NAME = Unison;
+				SECTORDER_FLAGS = "";
+				WARNING_CFLAGS = (
+					"-Wmost",
+					"-Wno-four-char-constants",
+					"-Wno-unknown-pragmas",
+				);
+				WRAPPER_EXTENSION = app;
+				ZERO_LINK = NO;
+			};
+			name = Default;
+		};
+		2A3C3F2D0992245300E404E9 /* Development */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 2E282CCC0D9AE2E800439D01 /* ExternalSettings.xcconfig */;
+			buildSettings = {
+				FRAMEWORK_SEARCH_PATHS = "Frameworks/**";
+				LIBRARY_SEARCH_PATHS = "";
+				SDKROOT = macosx;
+				USER_HEADER_SEARCH_PATHS = $OCAMLLIBDIR;
+			};
+			name = Development;
+		};
+		2A3C3F2E0992245300E404E9 /* Deployment */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 2E282CCC0D9AE2E800439D01 /* ExternalSettings.xcconfig */;
+			buildSettings = {
+				FRAMEWORK_SEARCH_PATHS = "Frameworks/**";
+				LIBRARY_SEARCH_PATHS = "";
+				SDKROOT = macosx;
+				USER_HEADER_SEARCH_PATHS = $OCAMLLIBDIR;
+			};
+			name = Deployment;
+		};
+		2A3C3F2F0992245300E404E9 /* Default */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 2E282CCC0D9AE2E800439D01 /* ExternalSettings.xcconfig */;
+			buildSettings = {
+				FRAMEWORK_SEARCH_PATHS = "Frameworks/**";
+				LIBRARY_SEARCH_PATHS = "";
+				SDKROOT = macosx;
+				USER_HEADER_SEARCH_PATHS = $OCAMLLIBDIR;
+			};
+			name = Default;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		2A124E7C0DE1C4A200524237 /* Build configuration list for PBXAggregateTarget "Create ExternalSettings" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				2A124E790DE1C48400524237 /* Development */,
+				2A124E7A0DE1C48400524237 /* Deployment */,
+				2A124E7B0DE1C48400524237 /* Default */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Default;
+		};
+		2A3C3F280992245300E404E9 /* Build configuration list for PBXNativeTarget "uimac" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				2A3C3F290992245300E404E9 /* Development */,
+				2A3C3F2A0992245300E404E9 /* Deployment */,
+				2A3C3F2B0992245300E404E9 /* Default */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Default;
+		};
+		2A3C3F2C0992245300E404E9 /* Build configuration list for PBXProject "uimacnew" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				2A3C3F2D0992245300E404E9 /* Development */,
+				2A3C3F2E0992245300E404E9 /* Deployment */,
+				2A3C3F2F0992245300E404E9 /* Default */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Default;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
+}

Modified: trunk/src/uimacbridgenew.ml
===================================================================
--- trunk/src/uimacbridgenew.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimacbridgenew.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -443,7 +443,7 @@
 Callback.register "unisonRiToFileType" unisonRiToFileType;;
 
 let direction2niceString = function (* from Uicommon where it's not exported *)
-    Conflict           -> "<-?->"
+    Conflict _         -> "<-?->"
   | Replica1ToReplica2 -> "---->"
   | Replica2ToReplica1 -> "<----"
   | Merge              -> "<-M->"
@@ -466,7 +466,7 @@
 let unisonRiSetConflict ri =
   match ri.ri.replicas with
     Problem _ -> ()
-  | Different diff -> diff.direction <- Conflict;;
+  | Different diff -> diff.direction <- Conflict "skip requested";;
 Callback.register "unisonRiSetConflict" unisonRiSetConflict;;
 let unisonRiSetMerge ri =
   match ri.ri.replicas with
@@ -484,7 +484,7 @@
   match (ri.statusMessage, ri.whatHappened,ri.ri.replicas) with
     (None,None,_) -> ""
   | (Some s,None,_) -> Unicode.protect s
-  | (_,_,Different {direction = Conflict}) -> ""
+  | (_,_,Different {direction = Conflict "files differed"}) -> ""
   | (_,_,Problem _) -> ""
   | (_,Some Util.Succeeded,_) -> "done"
   | (_,Some (Util.Failed s),_) -> "FAILED";;
@@ -664,9 +664,9 @@
            match si.ri.replicas with
              Problem err ->
                (si, [err], "error during update detection") :: l
-           | Different diff when diff.direction = Conflict ->
+           | Different diff when (isConflict diff.direction) ->
                (si, [],
-                if diff.default_direction = Conflict then
+                if (isConflict diff.default_direction) then
                   "conflict"
                 else "skipped") :: l
            | _ ->
@@ -758,7 +758,7 @@
    the current setting is Conflict *)
 let unisonRiIsConflict ri =
   match ri.ri.replicas with
-  | Different {default_direction = Conflict} -> true
+  | Different {default_direction = Conflict "files differ"} -> true
   | _ -> false;;
 Callback.register "unisonRiIsConflict" unisonRiIsConflict;;
 

Modified: trunk/src/uimacnew/Info.plist.template
===================================================================
--- trunk/src/uimacnew/Info.plist.template	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uimacnew/Info.plist.template	2014-07-05 21:55:19 UTC (rev 527)
@@ -23,9 +23,9 @@
 	<key>CFBundleShortVersionString</key>
 	<string>@@VERSION@@</string>
 	<key>CFBundleGetInfoString</key>
-	<string>@@VERSION@@. ©1999-2007, licensed under GNU GPL.</string>
+	<string>@@VERSION@@. ©1999-2014, licensed under GNU GPL.</string>
 	<key>NSHumanReadableCopyright</key>
-	<string>©1999-2006, licensed under GNU GPL.</string>
+	<string>©1999-2014, licensed under GNU GPL.</string>
 	<key>NSMainNibFile</key>
 	<string>MainMenu</string>
 	<key>NSPrincipalClass</key>

Modified: trunk/src/uitext.ml
===================================================================
--- trunk/src/uitext.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uitext.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/uitext.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/uitext.mli
===================================================================
--- trunk/src/uitext.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uitext.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,4 +1,4 @@
 (* Unison file synchronizer: src/uitext.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 module Body : Uicommon.UI

Modified: trunk/src/unicode.ml
===================================================================
--- trunk/src/unicode.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/unicode.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/unicode.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/unicode.mli
===================================================================
--- trunk/src/unicode.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/unicode.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/unicode.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 exception Invalid
 

Modified: trunk/src/update.ml
===================================================================
--- trunk/src/update.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/update.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/update.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/update.mli
===================================================================
--- trunk/src/update.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/update.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/update.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 module NameMap : MyMap.S with type key = Name.t
 

Modified: trunk/src/uutil.ml
===================================================================
--- trunk/src/uutil.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uutil.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/uutil.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/uutil.mli
===================================================================
--- trunk/src/uutil.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/uutil.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/uutil.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* This module collects a number of low-level, Unison-specific utility
    functions.  It is kept separate from the Util module so that that module

Modified: trunk/src/xferhint.ml
===================================================================
--- trunk/src/xferhint.ml	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/xferhint.ml	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/xferhint.ml *)
-(* Copyright 1999-2012, Benjamin C. Pierce 
+(* Copyright 1999-2014, Benjamin C. Pierce 
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

Modified: trunk/src/xferhint.mli
===================================================================
--- trunk/src/xferhint.mli	2014-01-21 22:58:27 UTC (rev 526)
+++ trunk/src/xferhint.mli	2014-07-05 21:55:19 UTC (rev 527)
@@ -1,5 +1,5 @@
 (* Unison file synchronizer: src/xferhint.mli *)
-(* Copyright 1999-2012, Benjamin C. Pierce (see COPYING for details) *)
+(* Copyright 1999-2014, Benjamin C. Pierce (see COPYING for details) *)
 
 (* This module maintains a cache that can be used to map
    an Os.fullfingerprint to a (Fspath.t * Path.t) naming a file that *may*



More information about the Unison-hackers mailing list