Unnecessary self-merge (I'm just being confused with hg. Sorry.)
authorJens Alfke <jens@mooseyard.com>
Sun May 10 19:05:52 2009 -0700 (2009-05-10)
changeset 4650dc5502ef46
parent 45 8efb48eabd08
parent 44 d8a559a39284
child 47 60f2b46d9a3b
Unnecessary self-merge (I'm just being confused with hg. Sorry.)
Bonjour/MYAddressLookup.m
     1.1 --- a/.hgignore	Sun May 10 19:00:50 2009 -0700
     1.2 +++ b/.hgignore	Sun May 10 19:05:52 2009 -0700
     1.3 @@ -8,5 +8,8 @@
     1.4  (*)
     1.5  *.pbxuser
     1.6  *.perspectivev3
     1.7 +*.mode1v3
     1.8 +*.mode2v3
     1.9  *.mpkg
    1.10  *.framework
    1.11 +*.orig
     2.1 --- a/MYNetwork-iPhone.xcodeproj/project.pbxproj	Sun May 10 19:00:50 2009 -0700
     2.2 +++ b/MYNetwork-iPhone.xcodeproj/project.pbxproj	Sun May 10 19:05:52 2009 -0700
     2.3 @@ -48,6 +48,40 @@
     2.4  		27D915CB0FA8EAD0002B0DEC /* MYBonjourQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 27D915C60FA8EAD0002B0DEC /* MYBonjourQuery.m */; };
     2.5  		27D915CC0FA8EAD0002B0DEC /* MYBonjourRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 27D915C80FA8EAD0002B0DEC /* MYBonjourRegistration.m */; };
     2.6  		280E754F0DD40C5E005A515E /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 280E754C0DD40C5E005A515E /* MainWindow.xib */; };
     2.7 +		384A72AE0FB00523006A0B19 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
     2.8 +		384A72AF0FB00523006A0B19 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 270E9B4E0EE63F8F003F17CA /* CFNetwork.framework */; };
     2.9 +		384A72B00FB00523006A0B19 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 270E9AE80EE61167003F17CA /* libz.dylib */; };
    2.10 +		384A72B10FB00523006A0B19 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; };
    2.11 +		384A72B20FB00523006A0B19 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2777C78C0F75E141007F8D30 /* Security.framework */; };
    2.12 +		384A72B70FB0062C006A0B19 /* ConcurrentOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 384A72B60FB0062C006A0B19 /* ConcurrentOperation.m */; };
    2.13 +		384A72B80FB006DF006A0B19 /* IPAddress.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9AA20EE61113003F17CA /* IPAddress.m */; };
    2.14 +		384A72B90FB006DF006A0B19 /* TCPConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9AA50EE61113003F17CA /* TCPConnection.m */; };
    2.15 +		384A72BA0FB006DF006A0B19 /* TCPEndpoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9AA70EE61113003F17CA /* TCPEndpoint.m */; };
    2.16 +		384A72BB0FB006DF006A0B19 /* TCPListener.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9AA90EE61113003F17CA /* TCPListener.m */; };
    2.17 +		384A72BC0FB006DF006A0B19 /* TCPStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9AAB0EE61113003F17CA /* TCPStream.m */; };
    2.18 +		384A72BD0FB006DF006A0B19 /* TCPWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9AAD0EE61113003F17CA /* TCPWriter.m */; };
    2.19 +		384A72BE0FB006DF006A0B19 /* BLIPConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9AB20EE61113003F17CA /* BLIPConnection.m */; };
    2.20 +		384A72BF0FB006DF006A0B19 /* BLIPDispatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9AB40EE61113003F17CA /* BLIPDispatcher.m */; };
    2.21 +		384A72C00FB006DF006A0B19 /* BLIPMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9AB60EE61113003F17CA /* BLIPMessage.m */; };
    2.22 +		384A72C10FB006DF006A0B19 /* BLIPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9AB80EE61113003F17CA /* BLIPRequest.m */; };
    2.23 +		384A72C20FB006DF006A0B19 /* BLIPProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9ABA0EE61113003F17CA /* BLIPProperties.m */; };
    2.24 +		384A72C30FB006DF006A0B19 /* BLIPReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9ABC0EE61113003F17CA /* BLIPReader.m */; };
    2.25 +		384A72C40FB006DF006A0B19 /* BLIPWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9ABE0EE61113003F17CA /* BLIPWriter.m */; };
    2.26 +		384A72C50FB006DF006A0B19 /* CollectionUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9AD10EE6111A003F17CA /* CollectionUtils.m */; };
    2.27 +		384A72C60FB006DF006A0B19 /* ExceptionUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9AD30EE6111A003F17CA /* ExceptionUtils.m */; };
    2.28 +		384A72C70FB006DF006A0B19 /* Logging.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9AD50EE6111A003F17CA /* Logging.m */; };
    2.29 +		384A72C80FB006DF006A0B19 /* Target.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9AD70EE6111A003F17CA /* Target.m */; };
    2.30 +		384A72C90FB006DF006A0B19 /* Test.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9AD90EE6111A003F17CA /* Test.m */; };
    2.31 +		384A72CA0FB006DF006A0B19 /* GTMNSData+zlib.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E9ADD0EE6111A003F17CA /* GTMNSData+zlib.m */; };
    2.32 +		384A72CB0FB006DF006A0B19 /* MYPortMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 278C1B2C0F9F865800954AE1 /* MYPortMapper.m */; };
    2.33 +		384A72CC0FB006DF006A0B19 /* PortMapperTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 278C1B2D0F9F865800954AE1 /* PortMapperTest.m */; };
    2.34 +		384A72CD0FB006DF006A0B19 /* MYDNSService.m in Sources */ = {isa = PBXBuildFile; fileRef = 27D915BC0FA8EABC002B0DEC /* MYDNSService.m */; };
    2.35 +		384A72CE0FB006DF006A0B19 /* MYAddressLookup.m in Sources */ = {isa = PBXBuildFile; fileRef = 27D915BE0FA8EABC002B0DEC /* MYAddressLookup.m */; };
    2.36 +		384A72CF0FB006DF006A0B19 /* MYBonjourBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 27D915C20FA8EAD0002B0DEC /* MYBonjourBrowser.m */; };
    2.37 +		384A72D00FB006DF006A0B19 /* MYBonjourService.m in Sources */ = {isa = PBXBuildFile; fileRef = 27D915C40FA8EAD0002B0DEC /* MYBonjourService.m */; };
    2.38 +		384A72D10FB006DF006A0B19 /* MYBonjourQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 27D915C60FA8EAD0002B0DEC /* MYBonjourQuery.m */; };
    2.39 +		384A72D20FB006DF006A0B19 /* MYBonjourRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 27D915C80FA8EAD0002B0DEC /* MYBonjourRegistration.m */; };
    2.40 +		384A72D30FB006DF006A0B19 /* ConcurrentOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 384A72B60FB0062C006A0B19 /* ConcurrentOperation.m */; };
    2.41  /* End PBXBuildFile section */
    2.42  
    2.43  /* Begin PBXFileReference section */
    2.44 @@ -127,6 +161,9 @@
    2.45  		27D915C80FA8EAD0002B0DEC /* MYBonjourRegistration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MYBonjourRegistration.m; path = Bonjour/MYBonjourRegistration.m; sourceTree = "<group>"; };
    2.46  		280E754C0DD40C5E005A515E /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = "<group>"; };
    2.47  		29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = iPhone/main.m; sourceTree = "<group>"; };
    2.48 +		384A72A90FB0050B006A0B19 /* libMYNetwork.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMYNetwork.a; sourceTree = BUILT_PRODUCTS_DIR; };
    2.49 +		384A72B50FB0062C006A0B19 /* ConcurrentOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConcurrentOperation.h; sourceTree = "<group>"; };
    2.50 +		384A72B60FB0062C006A0B19 /* ConcurrentOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConcurrentOperation.m; sourceTree = "<group>"; };
    2.51  		8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
    2.52  /* End PBXFileReference section */
    2.53  
    2.54 @@ -143,6 +180,18 @@
    2.55  			);
    2.56  			runOnlyForDeploymentPostprocessing = 0;
    2.57  		};
    2.58 +		384A72A70FB0050B006A0B19 /* Frameworks */ = {
    2.59 +			isa = PBXFrameworksBuildPhase;
    2.60 +			buildActionMask = 2147483647;
    2.61 +			files = (
    2.62 +				384A72AE0FB00523006A0B19 /* Foundation.framework in Frameworks */,
    2.63 +				384A72AF0FB00523006A0B19 /* CFNetwork.framework in Frameworks */,
    2.64 +				384A72B00FB00523006A0B19 /* libz.dylib in Frameworks */,
    2.65 +				384A72B10FB00523006A0B19 /* UIKit.framework in Frameworks */,
    2.66 +				384A72B20FB00523006A0B19 /* Security.framework in Frameworks */,
    2.67 +			);
    2.68 +			runOnlyForDeploymentPostprocessing = 0;
    2.69 +		};
    2.70  /* End PBXFrameworksBuildPhase section */
    2.71  
    2.72  /* Begin PBXGroup section */
    2.73 @@ -150,6 +199,7 @@
    2.74  			isa = PBXGroup;
    2.75  			children = (
    2.76  				1D6058910D05DD3D006BFB54 /* BLIPEcho.app */,
    2.77 +				384A72A90FB0050B006A0B19 /* libMYNetwork.a */,
    2.78  			);
    2.79  			name = Products;
    2.80  			sourceTree = "<group>";
    2.81 @@ -220,6 +270,8 @@
    2.82  		270E9ACD0EE6111A003F17CA /* MYUtilities */ = {
    2.83  			isa = PBXGroup;
    2.84  			children = (
    2.85 +				384A72B50FB0062C006A0B19 /* ConcurrentOperation.h */,
    2.86 +				384A72B60FB0062C006A0B19 /* ConcurrentOperation.m */,
    2.87  				270E9ACE0EE6111A003F17CA /* MYUtilitiesTest_main.m */,
    2.88  				270E9ACF0EE6111A003F17CA /* MYUtilities_Prefix.pch */,
    2.89  				270E9AD00EE6111A003F17CA /* CollectionUtils.h */,
    2.90 @@ -345,6 +397,16 @@
    2.91  		};
    2.92  /* End PBXGroup section */
    2.93  
    2.94 +/* Begin PBXHeadersBuildPhase section */
    2.95 +		384A72A50FB0050B006A0B19 /* Headers */ = {
    2.96 +			isa = PBXHeadersBuildPhase;
    2.97 +			buildActionMask = 2147483647;
    2.98 +			files = (
    2.99 +			);
   2.100 +			runOnlyForDeploymentPostprocessing = 0;
   2.101 +		};
   2.102 +/* End PBXHeadersBuildPhase section */
   2.103 +
   2.104  /* Begin PBXNativeTarget section */
   2.105  		1D6058900D05DD3D006BFB54 /* MYNetwork-iPhone */ = {
   2.106  			isa = PBXNativeTarget;
   2.107 @@ -363,6 +425,23 @@
   2.108  			productReference = 1D6058910D05DD3D006BFB54 /* BLIPEcho.app */;
   2.109  			productType = "com.apple.product-type.application";
   2.110  		};
   2.111 +		384A72A80FB0050B006A0B19 /* MYNetwork */ = {
   2.112 +			isa = PBXNativeTarget;
   2.113 +			buildConfigurationList = 384A72B40FB00534006A0B19 /* Build configuration list for PBXNativeTarget "MYNetwork" */;
   2.114 +			buildPhases = (
   2.115 +				384A72A50FB0050B006A0B19 /* Headers */,
   2.116 +				384A72A60FB0050B006A0B19 /* Sources */,
   2.117 +				384A72A70FB0050B006A0B19 /* Frameworks */,
   2.118 +			);
   2.119 +			buildRules = (
   2.120 +			);
   2.121 +			dependencies = (
   2.122 +			);
   2.123 +			name = MYNetwork;
   2.124 +			productName = MYNetwork;
   2.125 +			productReference = 384A72A90FB0050B006A0B19 /* libMYNetwork.a */;
   2.126 +			productType = "com.apple.product-type.library.static";
   2.127 +		};
   2.128  /* End PBXNativeTarget section */
   2.129  
   2.130  /* Begin PBXProject section */
   2.131 @@ -383,6 +462,7 @@
   2.132  			projectRoot = "";
   2.133  			targets = (
   2.134  				1D6058900D05DD3D006BFB54 /* MYNetwork-iPhone */,
   2.135 +				384A72A80FB0050B006A0B19 /* MYNetwork */,
   2.136  			);
   2.137  		};
   2.138  /* End PBXProject section */
   2.139 @@ -438,6 +518,42 @@
   2.140  				27D915CA0FA8EAD0002B0DEC /* MYBonjourService.m in Sources */,
   2.141  				27D915CB0FA8EAD0002B0DEC /* MYBonjourQuery.m in Sources */,
   2.142  				27D915CC0FA8EAD0002B0DEC /* MYBonjourRegistration.m in Sources */,
   2.143 +				384A72B70FB0062C006A0B19 /* ConcurrentOperation.m in Sources */,
   2.144 +			);
   2.145 +			runOnlyForDeploymentPostprocessing = 0;
   2.146 +		};
   2.147 +		384A72A60FB0050B006A0B19 /* Sources */ = {
   2.148 +			isa = PBXSourcesBuildPhase;
   2.149 +			buildActionMask = 2147483647;
   2.150 +			files = (
   2.151 +				384A72B80FB006DF006A0B19 /* IPAddress.m in Sources */,
   2.152 +				384A72B90FB006DF006A0B19 /* TCPConnection.m in Sources */,
   2.153 +				384A72BA0FB006DF006A0B19 /* TCPEndpoint.m in Sources */,
   2.154 +				384A72BB0FB006DF006A0B19 /* TCPListener.m in Sources */,
   2.155 +				384A72BC0FB006DF006A0B19 /* TCPStream.m in Sources */,
   2.156 +				384A72BD0FB006DF006A0B19 /* TCPWriter.m in Sources */,
   2.157 +				384A72BE0FB006DF006A0B19 /* BLIPConnection.m in Sources */,
   2.158 +				384A72BF0FB006DF006A0B19 /* BLIPDispatcher.m in Sources */,
   2.159 +				384A72C00FB006DF006A0B19 /* BLIPMessage.m in Sources */,
   2.160 +				384A72C10FB006DF006A0B19 /* BLIPRequest.m in Sources */,
   2.161 +				384A72C20FB006DF006A0B19 /* BLIPProperties.m in Sources */,
   2.162 +				384A72C30FB006DF006A0B19 /* BLIPReader.m in Sources */,
   2.163 +				384A72C40FB006DF006A0B19 /* BLIPWriter.m in Sources */,
   2.164 +				384A72C50FB006DF006A0B19 /* CollectionUtils.m in Sources */,
   2.165 +				384A72C60FB006DF006A0B19 /* ExceptionUtils.m in Sources */,
   2.166 +				384A72C70FB006DF006A0B19 /* Logging.m in Sources */,
   2.167 +				384A72C80FB006DF006A0B19 /* Target.m in Sources */,
   2.168 +				384A72C90FB006DF006A0B19 /* Test.m in Sources */,
   2.169 +				384A72CA0FB006DF006A0B19 /* GTMNSData+zlib.m in Sources */,
   2.170 +				384A72CB0FB006DF006A0B19 /* MYPortMapper.m in Sources */,
   2.171 +				384A72CC0FB006DF006A0B19 /* PortMapperTest.m in Sources */,
   2.172 +				384A72CD0FB006DF006A0B19 /* MYDNSService.m in Sources */,
   2.173 +				384A72CE0FB006DF006A0B19 /* MYAddressLookup.m in Sources */,
   2.174 +				384A72CF0FB006DF006A0B19 /* MYBonjourBrowser.m in Sources */,
   2.175 +				384A72D00FB006DF006A0B19 /* MYBonjourService.m in Sources */,
   2.176 +				384A72D10FB006DF006A0B19 /* MYBonjourQuery.m in Sources */,
   2.177 +				384A72D20FB006DF006A0B19 /* MYBonjourRegistration.m in Sources */,
   2.178 +				384A72D30FB006DF006A0B19 /* ConcurrentOperation.m in Sources */,
   2.179  			);
   2.180  			runOnlyForDeploymentPostprocessing = 0;
   2.181  		};
   2.182 @@ -460,6 +576,31 @@
   2.183  			};
   2.184  			name = Release;
   2.185  		};
   2.186 +		384A72AA0FB0050C006A0B19 /* Debug */ = {
   2.187 +			isa = XCBuildConfiguration;
   2.188 +			buildSettings = {
   2.189 +				ALWAYS_SEARCH_USER_PATHS = NO;
   2.190 +				COPY_PHASE_STRIP = NO;
   2.191 +				GCC_DYNAMIC_NO_PIC = NO;
   2.192 +				GCC_OPTIMIZATION_LEVEL = 0;
   2.193 +				PREBINDING = NO;
   2.194 +				PRODUCT_NAME = MYNetwork;
   2.195 +			};
   2.196 +			name = Debug;
   2.197 +		};
   2.198 +		384A72AB0FB0050C006A0B19 /* Release */ = {
   2.199 +			isa = XCBuildConfiguration;
   2.200 +			buildSettings = {
   2.201 +				ALWAYS_SEARCH_USER_PATHS = NO;
   2.202 +				COPY_PHASE_STRIP = YES;
   2.203 +				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
   2.204 +				GCC_ENABLE_FIX_AND_CONTINUE = NO;
   2.205 +				PREBINDING = NO;
   2.206 +				PRODUCT_NAME = MYNetwork;
   2.207 +				ZERO_LINK = NO;
   2.208 +			};
   2.209 +			name = Release;
   2.210 +		};
   2.211  		C01FCF4F08A954540054247B /* Debug */ = {
   2.212  			isa = XCBuildConfiguration;
   2.213  			baseConfigurationReference = 278C1B330F9F86A100954AE1 /* MYUtilities_Debug.xcconfig */;
   2.214 @@ -494,6 +635,15 @@
   2.215  			defaultConfigurationIsVisible = 0;
   2.216  			defaultConfigurationName = Release;
   2.217  		};
   2.218 +		384A72B40FB00534006A0B19 /* Build configuration list for PBXNativeTarget "MYNetwork" */ = {
   2.219 +			isa = XCConfigurationList;
   2.220 +			buildConfigurations = (
   2.221 +				384A72AA0FB0050C006A0B19 /* Debug */,
   2.222 +				384A72AB0FB0050C006A0B19 /* Release */,
   2.223 +			);
   2.224 +			defaultConfigurationIsVisible = 0;
   2.225 +			defaultConfigurationName = Release;
   2.226 +		};
   2.227  		C01FCF4E08A954540054247B /* Build configuration list for PBXProject "MYNetwork-iPhone" */ = {
   2.228  			isa = XCConfigurationList;
   2.229  			buildConfigurations = (
     3.1 --- a/TCP/TCPListener.h	Sun May 10 19:00:50 2009 -0700
     3.2 +++ b/TCP/TCPListener.h	Sun May 10 19:05:52 2009 -0700
     3.3 @@ -32,6 +32,7 @@
     3.4      CFSocketRef _ipv6socket;
     3.5      
     3.6      NSString *_bonjourServiceType, *_bonjourServiceName;
     3.7 +    NSNetServiceOptions _bonjourServiceOptions;
     3.8      NSNetService *_netService;
     3.9      NSDictionary *_bonjourTXTRecord;
    3.10      BOOL _bonjourPublished;
    3.11 @@ -88,6 +89,9 @@
    3.12      automatically generated if Bonjour is enabled (by setting -bonjourServiceType). */
    3.13  @property (copy) NSString *bonjourServiceName;
    3.14  
    3.15 +/** Options to use when publishing the Bonjour service. */
    3.16 +@property NSNetServiceOptions bonjourServiceOptions;
    3.17 +
    3.18  /** The dictionary form of the Bonjour TXT record: metadata about the service that can be browsed
    3.19      by peers. Changes to this dictionary will be pushed in near-real-time to interested peers. */
    3.20  @property (copy) NSDictionary *bonjourTXTRecord;
     4.1 --- a/TCP/TCPListener.m	Sun May 10 19:00:50 2009 -0700
     4.2 +++ b/TCP/TCPListener.m	Sun May 10 19:05:52 2009 -0700
     4.3 @@ -53,7 +53,7 @@
     4.4  
     4.5  
     4.6  @synthesize delegate=_delegate, port=_port, useIPv6=_useIPv6,
     4.7 -            bonjourServiceType=_bonjourServiceType,
     4.8 +            bonjourServiceType=_bonjourServiceType, bonjourServiceOptions=_bonjourServiceOptions,
     4.9              bonjourPublished=_bonjourPublished, bonjourError=_bonjourError,
    4.10              bonjourService=_netService,
    4.11              pickAvailablePort=_pickAvailablePort;
    4.12 @@ -261,7 +261,7 @@
    4.13              [_netService setDelegate:self];
    4.14              if( _bonjourTXTRecord )
    4.15                  [self _updateTXTRecord];
    4.16 -            [_netService publish];
    4.17 +            [_netService publishWithOptions: _bonjourServiceOptions];
    4.18          } else {
    4.19              self.bonjourError = -1;
    4.20              Warn(@"%@: Failed to create NSNetService",self);