From 42cf7bbe564d70233a0d73baee613f209eb00eb6 Mon Sep 17 00:00:00 2001 From: Charles McGarvey Date: Wed, 12 Nov 2003 12:00:00 -0700 Subject: [PATCH] The Cheat 1.0b3 New Features: - Change values on a time interval to make variables seem constant. - Informative about box added. - Remote cheating (cheat games over a network). - Pause target (pause without switching applications). - New icon. Bug Fixes: - Searching implemented for all supported types. - Changing values now works. - Searching/changing decimal numbers is no longer broken. - Targets can now be paused before the first search. - Some user interface glitches fixed. - Other minor bugs. --- AboutBoxController.h | 22 + AboutBoxController.m | 40 + AppController.h | 77 +- AppController.m | 991 +- CheatClient.h | 32 + CheatClient.m | 230 + CheatListener.h | 40 + CheatListener.m | 182 + CheatServer.h | 104 + CheatServer.m | 2035 ++++ ClientDelegate.h | 20 + English.lproj/AboutBox.nib/classes.nib | 13 + English.lproj/AboutBox.nib/info.nib | 16 + English.lproj/AboutBox.nib/keyedobjects.nib | Bin 0 -> 6680 bytes English.lproj/AboutBox.nib/objects.nib | Bin 0 -> 3253 bytes English.lproj/AboutBox~.nib/classes.nib | 13 + English.lproj/AboutBox~.nib/info.nib | 16 + English.lproj/AboutBox~.nib/keyedobjects.nib | Bin 0 -> 6671 bytes English.lproj/AboutBox~.nib/objects.nib | Bin 0 -> 3216 bytes English.lproj/Credits.rtf | 11 + English.lproj/InfoPlist.strings | Bin 540 -> 404 bytes English.lproj/MainMenu.nib/classes.nib | 56 +- English.lproj/MainMenu.nib/info.nib | 10 +- English.lproj/MainMenu.nib/keyedobjects.nib | Bin 26124 -> 9057 bytes English.lproj/MainMenu.nib/objects.nib | Bin 14816 -> 4629 bytes English.lproj/MainMenu~.nib/classes.nib | 57 +- English.lproj/MainMenu~.nib/info.nib | 10 +- English.lproj/MainMenu~.nib/keyedobjects.nib | Bin 26156 -> 9057 bytes English.lproj/MainMenu~.nib/objects.nib | Bin 14818 -> 4629 bytes English.lproj/MyDocument.nib/classes.nib | 55 + English.lproj/MyDocument.nib/info.nib | 37 + English.lproj/MyDocument.nib/keyedobjects.nib | Bin 0 -> 22858 bytes English.lproj/MyDocument.nib/objects.nib | Bin 0 -> 11982 bytes English.lproj/MyDocument~.nib/classes.nib | 54 + English.lproj/MyDocument~.nib/info.nib | 37 + .../MyDocument~.nib/keyedobjects.nib | Bin 0 -> 22742 bytes English.lproj/MyDocument~.nib/objects.nib | Bin 0 -> 11950 bytes English.lproj/NetTraffic.nib/classes.nib | 21 + English.lproj/NetTraffic.nib/info.nib | 18 + English.lproj/NetTraffic.nib/keyedobjects.nib | Bin 0 -> 6495 bytes English.lproj/NetTraffic.nib/objects.nib | Bin 0 -> 2640 bytes English.lproj/NetTraffic~.nib/classes.nib | 21 + English.lproj/NetTraffic~.nib/info.nib | 18 + .../NetTraffic~.nib/keyedobjects.nib | Bin 0 -> 6495 bytes English.lproj/NetTraffic~.nib/objects.nib | Bin 0 -> 2640 bytes English.lproj/Preferences.nib/classes.nib | 27 + English.lproj/Preferences.nib/info.nib | 16 + .../Preferences.nib/keyedobjects.nib | Bin 0 -> 7158 bytes English.lproj/Preferences.nib/objects.nib | Bin 0 -> 2961 bytes English.lproj/Preferences~.nib/classes.nib | 27 + English.lproj/Preferences~.nib/info.nib | 16 + .../Preferences~.nib/keyedobjects.nib | Bin 0 -> 7112 bytes English.lproj/Preferences~.nib/objects.nib | Bin 0 -> 2959 bytes Info-The_Cheat__Upgraded_.plist | 43 + ListenerDelegate.h | 22 + MenuExtras.h | 25 + MenuExtras.m | 89 + MyDocument.h | 198 + MyDocument.m | 1737 +++ NetTrafficController.h | 45 + NetTrafficController.m | 167 + NetTrafficControlling.h | 21 + PreferenceController.h | 41 + PreferenceController.m | 127 + PreferenceControlling.h | 20 + Read Me.pdf | Bin 0 -> 25635 bytes Read Me.rtf | 30 + Read Me.txt | 50 - SearchResults.h | 33 + SearchResults.m | 68 + ServerDelegate.h | 29 + ServerDelegate.m | 18 + ServerHolder.h | 42 + ServerHolder.m | 102 + The Cheat.pbproj/chaz.pbxuser | 9675 ++++++++++++++++- The Cheat.pbproj/project.pbxproj | 1368 ++- The_Cheat_Prefix.h => The_Cheat_Prefix.pch | 8 +- cheat_globals.h | 40 + cheat_globals.m | 28 + cheat_net.h | 49 + cheat_net.m | 113 + cheat_shared.h | 19 + cheat_shared.m | 22 + cheat_types.h | 40 + icon_b.icns | Bin 0 -> 50914 bytes main.m | 15 +- 86 files changed, 17256 insertions(+), 1350 deletions(-) create mode 100644 AboutBoxController.h create mode 100644 AboutBoxController.m create mode 100644 CheatClient.h create mode 100644 CheatClient.m create mode 100644 CheatListener.h create mode 100644 CheatListener.m create mode 100644 CheatServer.h create mode 100644 CheatServer.m create mode 100644 ClientDelegate.h create mode 100644 English.lproj/AboutBox.nib/classes.nib create mode 100644 English.lproj/AboutBox.nib/info.nib create mode 100644 English.lproj/AboutBox.nib/keyedobjects.nib create mode 100644 English.lproj/AboutBox.nib/objects.nib create mode 100644 English.lproj/AboutBox~.nib/classes.nib create mode 100644 English.lproj/AboutBox~.nib/info.nib create mode 100644 English.lproj/AboutBox~.nib/keyedobjects.nib create mode 100644 English.lproj/AboutBox~.nib/objects.nib create mode 100644 English.lproj/Credits.rtf create mode 100644 English.lproj/MyDocument.nib/classes.nib create mode 100644 English.lproj/MyDocument.nib/info.nib create mode 100644 English.lproj/MyDocument.nib/keyedobjects.nib create mode 100644 English.lproj/MyDocument.nib/objects.nib create mode 100644 English.lproj/MyDocument~.nib/classes.nib create mode 100644 English.lproj/MyDocument~.nib/info.nib create mode 100644 English.lproj/MyDocument~.nib/keyedobjects.nib create mode 100644 English.lproj/MyDocument~.nib/objects.nib create mode 100644 English.lproj/NetTraffic.nib/classes.nib create mode 100644 English.lproj/NetTraffic.nib/info.nib create mode 100644 English.lproj/NetTraffic.nib/keyedobjects.nib create mode 100644 English.lproj/NetTraffic.nib/objects.nib create mode 100644 English.lproj/NetTraffic~.nib/classes.nib create mode 100644 English.lproj/NetTraffic~.nib/info.nib create mode 100644 English.lproj/NetTraffic~.nib/keyedobjects.nib create mode 100644 English.lproj/NetTraffic~.nib/objects.nib create mode 100644 English.lproj/Preferences.nib/classes.nib create mode 100644 English.lproj/Preferences.nib/info.nib create mode 100644 English.lproj/Preferences.nib/keyedobjects.nib create mode 100644 English.lproj/Preferences.nib/objects.nib create mode 100644 English.lproj/Preferences~.nib/classes.nib create mode 100644 English.lproj/Preferences~.nib/info.nib create mode 100644 English.lproj/Preferences~.nib/keyedobjects.nib create mode 100644 English.lproj/Preferences~.nib/objects.nib create mode 100644 Info-The_Cheat__Upgraded_.plist create mode 100644 ListenerDelegate.h create mode 100644 MenuExtras.h create mode 100644 MenuExtras.m create mode 100644 MyDocument.h create mode 100644 MyDocument.m create mode 100644 NetTrafficController.h create mode 100644 NetTrafficController.m create mode 100644 NetTrafficControlling.h create mode 100644 PreferenceController.h create mode 100644 PreferenceController.m create mode 100644 PreferenceControlling.h create mode 100644 Read Me.pdf create mode 100644 Read Me.rtf delete mode 100644 Read Me.txt create mode 100644 SearchResults.h create mode 100644 SearchResults.m create mode 100644 ServerDelegate.h create mode 100644 ServerDelegate.m create mode 100644 ServerHolder.h create mode 100644 ServerHolder.m rename The_Cheat_Prefix.h => The_Cheat_Prefix.pch (62%) create mode 100644 cheat_globals.h create mode 100644 cheat_globals.m create mode 100644 cheat_net.h create mode 100644 cheat_net.m create mode 100644 cheat_shared.h create mode 100644 cheat_shared.m create mode 100644 cheat_types.h create mode 100644 icon_b.icns diff --git a/AboutBoxController.h b/AboutBoxController.h new file mode 100644 index 0000000..2b9901d --- /dev/null +++ b/AboutBoxController.h @@ -0,0 +1,22 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: AboutBoxController.h +// Created: Mon Nov 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + + +@interface AboutBoxController : NSWindowController +{ + IBOutlet NSWindow *aboutWindow; +} + +- (IBAction)launchWebsiteButton:(id)sender; +- (IBAction)launchEmailButton:(id)sender; + +@end diff --git a/AboutBoxController.m b/AboutBoxController.m new file mode 100644 index 0000000..68e2c6d --- /dev/null +++ b/AboutBoxController.m @@ -0,0 +1,40 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: AboutBoxController.m +// Created: Mon Nov 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import "AboutBoxController.h" + +#include "cheat_shared.h" + + +@implementation AboutBoxController + + +- (id)init +{ + return [super initWithWindowNibName:@"AboutBox"]; +} + +- (void)windowDidLoad +{ + [aboutWindow center]; +} + +- (IBAction)launchWebsiteButton:(id)sender +{ + LaunchWebsite(); +} + +- (IBAction)launchEmailButton:(id)sender +{ + LaunchEmail(); +} + + +@end diff --git a/AppController.h b/AppController.h index 7917887..fb222b3 100644 --- a/AppController.h +++ b/AppController.h @@ -10,60 +10,47 @@ #import +#import "PreferenceControlling.h" +#import "NetTrafficControlling.h" +#import "ListenerDelegate.h" +#import "ServerDelegate.h" -// constants -enum -{ - TYPE_STRING, TYPE_INTEGER, TYPE_FLOAT -}; +#include "cheat_globals.h" -enum -{ - SIZE_8_BIT, SIZE_16_BIT, SIZE_32_BIT, SIZE_64_BIT -}; + +@class AboutBoxController; +@class PreferenceController; +@class NetTrafficController; -@interface AppController : NSObject +@interface AppController : NSObject < PreferenceControlling, NetTrafficControlling, ListenerDelegate, ServerDelegate > { - BOOL cheating; - - NSArray *processList; - - NSMutableArray *addressList; - BOOL searching; - - IBOutlet id window; - IBOutlet id processPopup; - IBOutlet id searchTextField; - IBOutlet id changeTextField; - IBOutlet id searchButton; - IBOutlet id changeButton; - IBOutlet id typePopup; - IBOutlet id sizePopup; - IBOutlet id statusText; - IBOutlet id statusBar; - IBOutlet id addressTable; + BOOL waitingToListen; + NSConnection *connection; + int connectionPort; + BOOL connectionRemote; + int sockfd; + NSNetService *service, *oldService; + + NSMutableArray *servers; + + AboutBoxController *aboutBoxController; + PreferenceController *preferenceController; + NetTrafficController *netTrafficController; } -- (void)reset; - -- (void)firstSearch:(id)nothing; -- (void)search:(id)nothing; - -- (void)change; +- (void)listenOnPort:(int)port remote:(BOOL)remote; +- (void)stopListener; -- (void)updateProcessPopup; -- (void)updateTypePopup; -- (void)updateSizePopup; -- (void)updateSearchButton; -- (void)updateChangeButton; -- (void)updateStatusText; +- (void)broadcastWithName:(NSString *)name; +- (void)stopBroadcast; -- (void)rebuildProcessList; +- (IBAction)showAboutBoxWindow:(id)sender; +- (IBAction)showPreferenceWindow:(id)sender; +- (IBAction)showNetTrafficWindow:(id)sender; -- (IBAction)processPopup:(id)sender; -- (IBAction)typePopup:(id)sender; -- (IBAction)searchButton:(id)sender; -- (IBAction)changeButton:(id)sender; +- (IBAction)launchHelpFile:(id)sender; +- (IBAction)launchWebsiteMenu:(id)sender; +- (IBAction)launchDebugEmailMenu:(id)sender; @end \ No newline at end of file diff --git a/AppController.m b/AppController.m index d5de59e..c8750c0 100644 --- a/AppController.m +++ b/AppController.m @@ -10,902 +10,389 @@ #import "AppController.h" -#include -#include +#include "cheat_shared.h" +#import "AboutBoxController.h" +#import "PreferenceController.h" +#import "NetTrafficController.h" -// defines -#define PID_SELECTED [[[processList objectAtIndex:[processPopup indexOfSelectedItem]] objectForKey:@"NSApplicationProcessIdentifier"] intValue] -#define TYPE_SELECTED [typePopup indexOfSelectedItem] -#define SIZE_SELECTED [sizePopup indexOfSelectedItem] +#import "CheatListener.h" +#import "CheatServer.h" + +#import "ServerHolder.h" @implementation AppController ++ (void)initialize +{ + NSMutableDictionary *defaults = [NSMutableDictionary dictionary]; + char temp[104]; + + // change the socket path to reside in the home directory of the current user + strncpy( temp, [NSHomeDirectory() lossyCString], 103 ); + strncat( temp, TCDefaultListenPath, 103 - strlen(TCDefaultListenPath) ); + strncpy( TCDefaultListenPath, temp, 103 ); + + [defaults setObject:[NSNumber numberWithBool:TCGlobalPlaySounds] forKey:TCPlaySoundsPref]; + [defaults setObject:[NSNumber numberWithBool:TCGlobalWindowsOnTop] forKey:TCWindowsOnTopPref]; + [defaults setObject:[NSNumber numberWithBool:TCGlobalAllowRemote] forKey:TCAllowRemotePref]; + [defaults setObject:[NSNumber numberWithInt:TCGlobalListenPort] forKey:TCListenPortPref]; + [defaults setObject:[NSString stringWithFormat:@"%@'s Computer", NSFullUserName()] forKey:TCBroadcastNamePref]; + + [[NSUserDefaults standardUserDefaults] registerDefaults:defaults]; + + TCGlobalPlaySounds = [[NSUserDefaults standardUserDefaults] integerForKey:TCPlaySoundsPref]; + TCGlobalWindowsOnTop = [[NSUserDefaults standardUserDefaults] integerForKey:TCWindowsOnTopPref]; + TCGlobalListenPort = [[NSUserDefaults standardUserDefaults] integerForKey:TCListenPortPref]; + TCGlobalAllowRemote = [[NSUserDefaults standardUserDefaults] boolForKey:TCAllowRemotePref]; +} + - (id)init { if ( self = [super init] ) { + servers = [[NSMutableArray alloc] init]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willQuit:) name:@"NSApplicationWillTerminateNotification" object:nil]; + + [self listenOnPort:TCGlobalListenPort remote:TCGlobalAllowRemote]; + [self broadcastWithName:TCGlobalBroadcastName]; } return self; } -- (void)awakeFromNib -{ - NSNotificationCenter *nc = [[NSWorkspace sharedWorkspace] notificationCenter]; - [self rebuildProcessList]; - [self updateProcessPopup]; - [self updateTypePopup]; - [self updateSizePopup]; - [self updateChangeButton]; - [self updateStatusText]; +- (void)listenOnPort:(int)port remote:(BOOL)remote +{ + if ( connection ) + { + [self stopListener]; - [nc addObserver:self selector:@selector(processListChanged:) name:@"NSWorkspaceDidLaunchApplicationNotification" object:nil]; - [nc addObserver:self selector:@selector(processListChanged:) name:@"NSWorkspaceDidTerminateApplicationNotification" object:nil]; - - [self reset]; + waitingToListen = YES; + connectionPort = port; + connectionRemote = remote; + } + else + { + connection = [[CheatListener listenerWithDelegate:self port:port remote:remote] retain]; + connectionPort = port; + connectionRemote = remote; + } } - -- (void)reset +- (void)stopListener { - if ( cheating ) + if ( connection ) { - cheating = NO; - - [addressList release], addressList = nil; - - // update the interface - [typePopup setEnabled:YES]; - [sizePopup setEnabled:YES]; - [searchTextField setStringValue:@""]; - [changeTextField setStringValue:@""]; - [addressTable reloadData]; + close( sockfd ); + [connection release], connection = nil; } } -- (void)firstSearch:(id)nothing +- (void)broadcastWithName:(NSString *)name { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - - pid_t pid = (pid_t)PID_SELECTED; - vm_map_t task; - - kern_return_t result; - - vm_address_t address = 0x0; - vm_size_t size = 0; - vm_region_basic_info_data_t info; - mach_msg_type_number_t infoCnt = 8; - mach_port_t object_name = 0; - - char unsigned *data; - vm_size_t dataCnt; + if ( TCGlobalAllowRemote ) + { + [self stopBroadcast]; + + service = [[NSNetService alloc] initWithDomain:@"local." type:@"_cheat._tcp." name:name port:TCGlobalListenPort]; + [service setDelegate:self]; + [service publish]; + } +} - char unsigned *string8bit = (char unsigned *)[[searchTextField stringValue] lossyCString]; - long unsigned stringSize = strlen( string8bit ); - char integer8bit = (char)[searchTextField intValue]; - short integer16bit = (short)[searchTextField intValue]; - long integer32bit = (long)[searchTextField intValue]; - long long integer64bit = (long long)[searchTextField intValue]; - float float32bit = (float)[searchTextField floatValue]; - double float64bit = (double)[searchTextField doubleValue]; +- (void)stopBroadcast +{ + oldService = service; + [oldService stop], service = nil; +} - BOOL done = NO; - if ( (result = task_for_pid( current_task(), pid, &task)) != KERN_SUCCESS ) +- (IBAction)showAboutBoxWindow:(id)sender +{ + if ( !aboutBoxController ) { - NSLog( @"task_for_pid returned error: %i", result ); - return; + aboutBoxController = [[AboutBoxController alloc] init]; } + + [aboutBoxController showWindow:self]; +} - addressList = [[NSMutableArray alloc] init]; - - while ( !done ) +- (IBAction)showPreferenceWindow:(id)sender +{ + if ( !preferenceController ) { - if ( (result = vm_region( task, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS ) - { - if ( result != KERN_INVALID_ADDRESS ) - { - NSLog( @"vm_region returned error: %i", result ); - } + preferenceController = [[PreferenceController alloc] initWithDelegate:self]; + } - done = YES; - } + [preferenceController showWindow:self]; +} - //NSLog( @"address: %X, size: %i", address, size ); +- (IBAction)showNetTrafficWindow:(id)sender +{ + if ( !netTrafficController ) + { + netTrafficController = [[NetTrafficController alloc] initWithDelegate:self]; + } - if ( (info.protection & VM_PROT_READ) && ((info.protection & VM_PROT_WRITE) >> 1) ) - { - data = (char unsigned *)malloc( size ); - dataCnt = size; - - if ( (result = vm_read_overwrite( task, address, size, (vm_address_t)data, &dataCnt )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE ) - { - NSLog( @"vm_read_overwrite returned error: %i", result ); - free( data ); - done = YES; - } - - if ( result == KERN_SUCCESS ) - { - long unsigned i, max = (long unsigned)dataCnt; - - //NSLog( @"data: %X, size: %i", (vm_address_t)data, dataCnt ); - - switch ( TYPE_SELECTED ) - { - case TYPE_STRING: - switch ( SIZE_SELECTED ) - { - case SIZE_8_BIT: - { - long unsigned maxString = max - stringSize; - - for ( i = 0; i < maxString; i += sizeof(char unsigned) ) - { - if ( strncmp( string8bit, data+i, stringSize ) == 0 ) - { - [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; - } - } - } - break; - } - break; - - case TYPE_INTEGER: - switch ( SIZE_SELECTED ) - { - case SIZE_8_BIT: - { - for ( i = 0; i < max; i += sizeof(char) ) - { - if ( integer8bit == *((char *)(data+i)) ) - { - [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; - } - } - } - break; - - case SIZE_16_BIT: - { - for ( i = 0; i < max; i += sizeof(short) ) - { - if ( integer16bit == *((short *)(data+i)) ) - { - [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; - } - } - } - break; - - case SIZE_32_BIT: - { - for ( i = 0; i < max; i += sizeof(long) ) - { - if ( integer32bit == *((long *)(data+i)) ) - { - [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; - } - } - } - break; - - case SIZE_64_BIT: - { - for ( i = 0; i < max; i += sizeof(long long) ) - { - if ( integer64bit == *((long long *)(data+i)) ) - { - [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; - } - } - } - break; - } - break; - - case TYPE_FLOAT: - switch ( SIZE_SELECTED+2 ) - { - case SIZE_32_BIT: - { - for ( i = 0; i < max; i += sizeof(float) ) - { - if ( float32bit == *((float *)(data+i)) ) - { - [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; - } - } - } - break; - - case SIZE_64_BIT: - { - for ( i = 0; i < max; i += sizeof(double) ) - { - if ( float64bit == *((double *)(data+i)) ) - { - [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; - } - } - } - break; - } - break; - } - } - - free( data ); - } + [netTrafficController showWindow:self]; +} - address += size; - } - searching = NO; +- (IBAction)launchHelpFile:(id)sender +{ + //[[NSWorkspace sharedWorkspace] openFile:[[NSBundle mainBundle] pathForResource:@"Read Me" ofType:@"html"] withApplication:@"Safari"]; + [[NSWorkspace sharedWorkspace] openURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Read Me" ofType:@"pdf"]]]; +} - // update the interface - [statusBar stopAnimation:self]; - [self updateProcessPopup]; - [self updateSearchButton]; - [self updateTypePopup]; - [self updateSizePopup]; - [self updateChangeButton]; - [self updateStatusText]; - [addressTable reloadData]; +- (IBAction)launchWebsiteMenu:(id)sender +{ + LaunchWebsite(); +} - [pool release]; +- (IBAction)launchDebugEmailMenu:(id)sender +{ + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"mailto:thecheat@brokenzipper.com"]]; } -- (void)search:(id)nothing + +- (void)dealloc { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - - pid_t pid = (pid_t)PID_SELECTED; - vm_map_t task; + [[NSNotificationCenter defaultCenter] removeObserver:self]; - kern_return_t result; + [self stopListener]; + [self stopBroadcast]; - vm_address_t address = 0x0; - vm_size_t size = 0; - vm_region_basic_info_data_t info; - mach_msg_type_number_t infoCnt = 8; - mach_port_t object_name = 0; + [servers release]; - char unsigned *data; - vm_size_t dataCnt; + [super dealloc]; +} - char unsigned *string8bit = (char unsigned *)[[searchTextField stringValue] lossyCString]; - long unsigned stringSize = strlen( string8bit ); - char integer8bit = (char)[searchTextField intValue]; - short integer16bit = (short)[searchTextField intValue]; - long integer32bit = (long)[searchTextField intValue]; - long long integer64bit = (long long)[searchTextField intValue]; - float float32bit = (float)[searchTextField floatValue]; - double float64bit = (double)[searchTextField doubleValue]; - long unsigned j, max = [addressList count]; +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% PreferenceControlling +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - NSMutableArray *newList = [[NSMutableArray alloc] init]; - if ( (result = task_for_pid( current_task(), pid, &task)) != KERN_SUCCESS ) +- (void)preferenceAllowRemoteChanged:(BOOL)allow +{ + [self listenOnPort:TCGlobalListenPort remote:allow]; + + if ( allow ) { - NSLog( @"task_for_pid returned error: %i", result ); - return; + [self broadcastWithName:TCGlobalBroadcastName]; } - - for ( j = 0; j < max; j++ ) + else { - long unsigned item = [[addressList objectAtIndex:j] unsignedLongValue]; + [self stopBroadcast]; + } - address = (vm_address_t)item; + [netTrafficController allowRemoteChanged:allow]; +} - if ( (result = vm_region( task, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS ) - { - if ( result != KERN_INVALID_ADDRESS ) - { - NSLog( @"vm_region returned error: %i", result ); - } +- (void)preferenceListenPortChanged:(int)port +{ + [self listenOnPort:port remote:TCGlobalAllowRemote]; + [self broadcastWithName:TCGlobalBroadcastName]; - break; - } + [netTrafficController listenPortChanged:port]; +} - //NSLog( @"address: %X, size: %i", address, size ); +- (void)preferenceBroadcastNameChanged:(NSString *)name +{ + [self broadcastWithName:name]; - if ( (info.protection & VM_PROT_READ) && ((info.protection & VM_PROT_WRITE) >> 1) ) - { - data = (char unsigned *)malloc( size ); - dataCnt = size; - - if ( (result = vm_read_overwrite( task, address, size, (vm_address_t)data, &dataCnt )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE ) - { - NSLog( @"vm_read_overwrite returned error: %i", result ); - free( data ); - break; - } - - if ( result == KERN_SUCCESS ) - { - long unsigned i = item - (long unsigned)address; - - if ( i < (long unsigned)dataCnt ) - { - //NSLog( @"data: %X, size: %i", (vm_address_t)data, dataCnt ); - - switch ( TYPE_SELECTED ) - { - case TYPE_STRING: - switch ( SIZE_SELECTED ) - { - case SIZE_8_BIT: - { - if ( strncmp( string8bit, data+i, stringSize ) == 0 ) - { - [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; - } - } - break; - } - break; - - case TYPE_INTEGER: - switch ( SIZE_SELECTED ) - { - case SIZE_8_BIT: - { - if ( integer8bit == *((char *)(data+i)) ) - { - [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; - } - } - break; - - case SIZE_16_BIT: - { - if ( integer16bit == *((short *)(data+i)) ) - { - [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; - } - } - break; - - case SIZE_32_BIT: - { - if ( integer32bit == *((long *)(data+i)) ) - { - [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; - } - } - break; - - case SIZE_64_BIT: - { - if ( integer64bit == *((long long *)(data+i)) ) - { - [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; - } - } - break; - } - break; - - case TYPE_FLOAT: - switch ( SIZE_SELECTED+2 ) - { - case SIZE_32_BIT: - { - if ( float32bit == *((float *)(data+i)) ) - { - [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; - } - } - break; - - case SIZE_64_BIT: - { - if ( float64bit == *((double *)(data+i)) ) - { - [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]]; - } - } - break; - } - break; - } - } - } - - free( data ); - } - } + [netTrafficController broadcastNameChanged:name]; +} - [addressList release]; - addressList = newList; - searching = NO; +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% NetTrafficControlling +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - // update the interface - [statusBar stopAnimation:self]; - [self updateProcessPopup]; - [self updateSearchButton]; - [self updateTypePopup]; - [self updateSizePopup]; - [self updateChangeButton]; - [self updateStatusText]; - [addressTable reloadData]; - [pool release]; +- (int)netTrafficConnectionCount +{ + return [servers count]; } - -- (void)change +- (NSArray *)netTrafficConnectionList { - pid_t pid = (pid_t)PID_SELECTED; - vm_map_t task; + return servers; +} - kern_return_t result; +- (void)netTrafficKillConnection:(int)index +{ + NSLog( @"kill connection" ); - char unsigned *string8bit = (char unsigned *)[[changeTextField stringValue] lossyCString]; - long unsigned stringSize = strlen( string8bit ); - char integer8bit = (char)[changeTextField intValue]; - short integer16bit = (short)[changeTextField intValue]; - long integer32bit = (long)[changeTextField intValue]; - long long integer64bit = (long long)[changeTextField intValue]; - float float32bit = (float)[changeTextField floatValue]; - double float64bit = (double)[changeTextField doubleValue]; + close( [[servers objectAtIndex:index] sockfd] ); +} - NSEnumerator *enumerator = [addressTable selectedRowEnumerator]; - NSNumber *row; - if ( (result = task_for_pid( current_task(), pid, &task)) != KERN_SUCCESS ) - { - NSLog( @"task_for_pid returned error: %i", result ); - return; - } +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% ListenerDelegate +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - while ( row = [enumerator nextObject] ) - { - long unsigned item = [[addressList objectAtIndex:[row intValue]] unsignedLongValue]; - //NSLog( @"address: %X", item ); +- (void)listenerListeningWithSocket:(int)sock +{ + sockfd = sock; - switch ( TYPE_SELECTED ) - { - case TYPE_STRING: - switch ( SIZE_SELECTED ) - { - case SIZE_8_BIT: - { - result = vm_write( task, (vm_address_t)item, (vm_offset_t)string8bit, (mach_msg_type_number_t)stringSize ); - } - break; - } - break; - - case TYPE_INTEGER: - switch ( SIZE_SELECTED ) - { - case SIZE_8_BIT: - { - result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&integer8bit), sizeof(char) ); - } - break; - - case SIZE_16_BIT: - { - result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&integer16bit), sizeof(short) ); - } - break; - - case SIZE_32_BIT: - { - result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&integer32bit), sizeof(long) ); - } - break; - - case SIZE_64_BIT: - { - result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&integer64bit), sizeof(long long) ); - } - break; - } - break; - - case TYPE_FLOAT: - switch ( SIZE_SELECTED+2 ) - { - case SIZE_32_BIT: - { - result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&float32bit), sizeof(float) ); - } - break; - - case SIZE_64_BIT: - { - result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&float64bit), sizeof(double) ); - } - break; - } - break; - } - } + TCGlobalListening = YES; + [[NSNotificationCenter defaultCenter] postNotificationName:@"TCListenerStarted" object:nil]; } - -- (void)updateProcessPopup +- (void)listenerDisconnected { - if ( searching ) + if ( waitingToListen ) { - [processPopup setEnabled:NO]; + waitingToListen = NO; + connection = [[CheatListener listenerWithDelegate:self port:connectionPort remote:connectionRemote] retain]; } else { - [processPopup setEnabled:YES]; + [self stopListener]; } + + TCGlobalListening = NO; + [[NSNotificationCenter defaultCenter] postNotificationName:@"TCListenerStopped" object:nil]; } -- (void)updateTypePopup +- (void)listenerError:(NSString *)error message:(NSString *)message { - if ( cheating || searching ) - { - [typePopup setEnabled:NO]; - } - else - { - int selected = [typePopup indexOfSelectedItem]; - - [typePopup setEnabled:YES]; - - [typePopup removeAllItems]; - - [typePopup addItemWithTitle:@"String"]; - [typePopup addItemWithTitle:@"Integer"]; - [typePopup addItemWithTitle:@"Float"]; + NSRunCriticalAlertPanel( error, message, @"OK", nil, nil ); +} - [typePopup selectItemAtIndex:selected]; - } +- (void)listenerReceivedNewConnection:(int)sock +{ + [servers addObject:[ServerHolder holderWithConnection:[CheatServer serverWithDelegate:self socket:sock] socket:sock]]; } -- (void)updateSizePopup + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% ServerDelegate +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +- (void)server:(CheatServer *)server connectedWithSocket:(int)sock { - if ( cheating || searching ) - { - [sizePopup setEnabled:NO]; - } - else - { - [sizePopup setEnabled:YES]; - - [sizePopup removeAllItems]; + int i, top = [servers count]; - switch ( TYPE_SELECTED ) + for ( i = 0; i < top; i++ ) + { + if ( [(ServerHolder *)[servers objectAtIndex:i] sockfd] == sock ) { - case TYPE_STRING: - [sizePopup addItemWithTitle:@" 8-bit"]; - break; - - case TYPE_INTEGER: - [sizePopup addItemWithTitle:@" 8-bit"]; - [sizePopup addItemWithTitle:@"16-bit"]; - [sizePopup addItemWithTitle:@"32-bit"]; - [sizePopup addItemWithTitle:@"64-bit"]; - break; - - case TYPE_FLOAT: - [sizePopup addItemWithTitle:@"32-bit"]; - [sizePopup addItemWithTitle:@"64-bit"]; - break; + [(ServerHolder *)[servers objectAtIndex:i] setServer:server]; + break; } } -} -- (void)updateSearchButton -{ - if ( searching ) - { - [searchTextField setEnabled:NO]; - [searchButton setEnabled:NO]; - } - else - { - [searchTextField setEnabled:YES]; - [searchButton setEnabled:YES]; - } + [netTrafficController connectionListChanged]; } -- (void)updateChangeButton +- (void)serverDisconnected:(CheatServer *)server { - if ( [addressTable selectedRow] == -1 || searching ) - { - [changeTextField setEnabled:NO]; - [changeButton setEnabled:NO]; - } - else - { - [changeTextField setEnabled:YES]; - [changeButton setEnabled:YES]; - } -} + int i, top = [servers count]; -- (void)updateStatusText -{ - if ( searching ) + for ( i = 0; i < top; i++ ) { - [statusText setStringValue:@"Searching..."]; - } - else if ( !cheating ) - { - [statusText setStringValue:[NSString stringWithFormat:@"PID: %i", PID_SELECTED]]; - } - else // cheating - { - [statusText setStringValue:[NSString stringWithFormat:@"Found: %i", [addressList count]]]; + if ( [(ServerHolder *)[servers objectAtIndex:i] server] == server ) + { + [servers removeObjectAtIndex:i]; + break; + } } - [statusText display]; + [netTrafficController connectionListChanged]; } - -- (void)processListChanged:(NSNotification *)note +- (void)server:(CheatServer *)server changedAddress:(NSString *)address { - if ( cheating && [[note name] isEqualToString:@"NSWorkspaceDidTerminateApplicationNotification"] ) + int i, top = [servers count]; + + for ( i = 0; i < top; i++ ) { - int pid = PID_SELECTED; - int other = [[[note userInfo] objectForKey:@"NSApplicationProcessIdentifier"] intValue]; - - // check to make sure the program we were cheating wasn't the one that quit - if ( pid == other ) + if ( [(ServerHolder *)[servers objectAtIndex:i] server] == server ) { - // it was, so let's take care of it - NSBeginAlertSheet( @"", @"OK", nil, nil, window, nil, nil, nil, 0, @"The application that was being cheated has quit." ); - - [self reset]; + [(ServerHolder *)[servers objectAtIndex:i] setAddress:address]; + break; } } - [self rebuildProcessList]; - [self updateProcessPopup]; - [self updateStatusText]; + [netTrafficController connectionListChanged]; } - -- (void)rebuildProcessList +- (void)server:(CheatServer *)server changedAction:(NSString *)action { - NSString *selected = [[processPopup titleOfSelectedItem] retain]; - int i, max; - - [processList release]; - processList = [[[NSWorkspace sharedWorkspace] launchedApplications] retain]; + int i, top = [servers count]; - max = [processList count]; - - [processPopup setImagePosition:NSImageOverlaps]; - - [processPopup removeAllItems]; - - for ( i = 0; i < max; i++ ) + for ( i = 0; i < top; i++ ) { - NSString *name = [[processList objectAtIndex:i] objectForKey:@"NSApplicationName"]; - NSString *path = [[processList objectAtIndex:i] objectForKey:@"NSApplicationPath"]; - - NSImage *image = [[NSWorkspace sharedWorkspace] iconForFile:path]; - - [processPopup addItemWithTitle:name]; - - [image setScalesWhenResized:YES]; - [image setSize:NSMakeSize( 16.0, 16.0 )]; - - [[processPopup itemAtIndex:i] setImage:image]; - - if ( [selected isEqualToString:[processPopup itemTitleAtIndex:i]] ) + if ( [(ServerHolder *)[servers objectAtIndex:i] server] == server ) { - [processPopup selectItemAtIndex:i]; + [(ServerHolder *)[servers objectAtIndex:i] setAction:action]; + break; } } - [selected release]; + [netTrafficController connectionListChanged]; } - -- (void)dealloc +- (NSArray *)serverProcessList { - [self reset]; - - [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self]; + return [[NSWorkspace sharedWorkspace] launchedApplications]; +} - [processList release]; - - [super dealloc]; +- (pid_t)serverFirstProcess +{ + return (pid_t)[[[[[NSWorkspace sharedWorkspace] launchedApplications] objectAtIndex:0] objectForKey:@"NSApplicationProcessIdentifier"] intValue]; } -- (IBAction)processPopup:(id)sender -{ - [self reset]; +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% NetService Delegate +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - [self updateStatusText]; -} -- (IBAction)typePopup:(id)sender +- (void)netServiceWillPublish:(NSNetService *)sender { - [self updateSizePopup]; + NSLog( @"service will publish" ); + [sender resolve]; } -- (IBAction)searchButton:(id)sender +- (void)netService:(NSNetService *)sender didNotPublish:(NSDictionary *)errorDict { - if ( [[searchTextField stringValue] isEqualToString:@""] ) - { - NSBeep(); - return; - } - - searching = YES; - - // update the interface - [statusBar startAnimation:self]; - [self updateProcessPopup]; - [self updateSearchButton]; - [self updateTypePopup]; - [self updateSizePopup]; - [self updateChangeButton]; - [self updateStatusText]; - - if ( !cheating ) + NSLog( @"service did not publish" ); + + if ( [[errorDict objectForKey:@"NSNetServicesErrorCode"] intValue] == NSNetServicesCollisionError ) { - cheating = YES; - - [NSThread detachNewThreadSelector:@selector(firstSearch:) toTarget:self withObject:nil]; + [self broadcastWithName:[NSString stringWithFormat:@"%@ %i", TCGlobalBroadcastName, TCGlobalAlternateBroadcastNameCount++]]; } else { - [NSThread detachNewThreadSelector:@selector(search:) toTarget:self withObject:nil]; + NSRunCriticalAlertPanel( @"Network Error", @"Server couldn't broadcast. Local can't be cheated by remote computers.", @"OK", nil, nil ); } -/* - { - pid_t pid = (pid_t)PID_SELECTED; - vm_map_t task; - - kern_return_t result; - //int waitStatus; - - addressList = [[NSMutableArray alloc] init]; - - result = task_for_pid( current_task(), pid, &task ); - - if ( result == KERN_SUCCESS ) - NSLog( @"KERN_SUCCESS" ); - else if ( result == KERN_INVALID_ADDRESS ) - NSLog( @"KERN_INVALID_ADDRESS" ); - else if ( result == KERN_INVALID_ARGUMENT ) - NSLog( @"KERN_INVALID_ARGUMENT" ); - else if ( result == KERN_PROTECTION_FAILURE ) - NSLog( @"KERN_PROTECTION_FAILURE" ); - else if ( result == KERN_NO_SPACE ) - NSLog( @"KERN_NO_SPACE" ); - - if ( ptrace( PT_ATTACH, pid, 0, 0 ) != -1 ) - { - if ( waitpid( pid, &waitStatus, WUNTRACED ) == pid ) - { - if ( WIFSTOPPED(waitStatus) ) - { - NSLog( @"process stopped" ); - } - else - { - NSLog( @"process didn't stop" ); - } - - { - vm_address_t address = 0x1b000; - vm_size_t size = 0; - vm_region_basic_info_data_t info; - mach_msg_type_number_t infoCnt = 8; - mach_port_t object_name = 0; - - BOOL canRead, canWrite, canExecute; - - char unsigned *data; - vm_size_t dataCnt; - - NSLog( @"pid: %i, task: %i", pid, task ); - - result = vm_region( task, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name ); - - NSLog( @"info count: %i", (int)infoCnt ); - - if ( result == KERN_SUCCESS ) - NSLog( @"KERN_SUCCESS" ); - else if ( result == KERN_INVALID_ADDRESS ) - NSLog( @"KERN_INVALID_ADDRESS" ); - else if ( result == KERN_INVALID_ARGUMENT ) - NSLog( @"KERN_INVALID_ARGUMENT" ); - else if ( result == KERN_PROTECTION_FAILURE ) - NSLog( @"KERN_PROTECTION_FAILURE" ); - else if ( result == KERN_NO_SPACE ) - NSLog( @"KERN_NO_SPACE" ); - - NSLog( @"address: %X, size: %i", address, size ); - - canRead = info.protection & VM_PROT_READ; - canWrite = (info.protection & VM_PROT_WRITE) >> 1; - canExecute = (info.protection & VM_PROT_EXECUTE) >> 2; - - if ( canRead ) - NSLog( @"can read" ); - if ( canWrite ) - NSLog( @"can write" ); - if ( canExecute ) - NSLog( @"can execute" ); - - data = (char unsigned *)malloc( size ); - dataCnt = size; - - result = vm_read_overwrite( task, address, size, (vm_address_t)data, &dataCnt ); - - if ( result == KERN_SUCCESS ) - NSLog( @"KERN_SUCCESS" ); - else if ( result == KERN_INVALID_ADDRESS ) - NSLog( @"KERN_INVALID_ADDRESS" ); - else if ( result == KERN_INVALID_ARGUMENT ) - NSLog( @"KERN_INVALID_ARGUMENT" ); - else if ( result == KERN_PROTECTION_FAILURE ) - NSLog( @"KERN_PROTECTION_FAILURE" ); - else if ( result == KERN_NO_SPACE ) - NSLog( @"KERN_NO_SPACE" ); - - NSLog( @"data: %X, size: %i", (vm_address_t)data, dataCnt ); - - free( data ); - } - } - else - { - NSLog( @"waitpid() failed" ); - } - - ptrace( PT_DETACH, pid, 0, 0 ); - } - else - { - NSLog( @"ptrace() failed" ); - } - }*/ } -- (IBAction)changeButton:(id)sender +- (void)netServiceDidStop:(NSNetService *)sender { - [self change]; + NSLog( @"service stopped" ); + [oldService release], oldService = nil; } -- (int)numberOfRowsInTableView:(NSTableView *)table -{ - if ( cheating && !searching ) - return [addressList count]; - - return 0; -} - -- (id)tableView:(NSTableView *)table objectValueForTableColumn:(NSTableColumn *)column row:(int)row -{ - return [NSString stringWithFormat:@"%X", [[addressList objectAtIndex:row] unsignedLongValue]]; -} +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% NSApplication Notification +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -- (void)tableView:(NSTableView *) setObjectValue:(id)object forTableColumn:(NSTableColumn *)column row:(int)row -{ - return; -} -- (void)tableViewSelectionDidChange:(NSNotification *)note +- (void)willQuit:(NSNotification *)note { - [self updateChangeButton]; + //[self listenPortTextField:self]; + //[self broadcastNameTextField:self]; } diff --git a/CheatClient.h b/CheatClient.h new file mode 100644 index 0000000..553e238 --- /dev/null +++ b/CheatClient.h @@ -0,0 +1,32 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: CheatClient.h +// Created: Mon Sep 22 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + +#include "cheat_types.h" +#include "cheat_globals.h" +#include "cheat_net.h" + + +@interface CheatClient : NSObject +{ + id rootProxy; + int sockfd; +} + ++ (NSConnection *)clientWithDelegate:(id)delegate server:(NSData *)server name:(NSString *)name; ++ (void)clientThread:(NSArray *)array; + +- (id)initWithRootProxy:(id)proxy; + +- (void)connectToServer:(NSData *)data name:(NSString *)name; +- (void)run; + +@end \ No newline at end of file diff --git a/CheatClient.m b/CheatClient.m new file mode 100644 index 0000000..a7df9fa --- /dev/null +++ b/CheatClient.m @@ -0,0 +1,230 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: CheatClient.m +// Created: Mon Sep 22 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import "CheatClient.h" + +#import "MyDocument.h" + + +@implementation CheatClient + + ++ (NSConnection *)clientWithDelegate:(id)delegate server:(NSData *)server name:(NSString *)name +{ + NSPort *rPort = [NSPort port], *sPort = [NSPort port]; + NSConnection *connection; + NSArray *array; + + connection = [[NSConnection alloc] initWithReceivePort:rPort sendPort:sPort]; + [connection setRootObject:delegate]; + + array = [NSArray arrayWithObjects:sPort, rPort, server, name, nil]; + [NSThread detachNewThreadSelector:@selector(clientThread:) toTarget:self withObject:array]; + + return [connection autorelease]; +} + ++ (void)clientThread:(NSArray *)array +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSConnection *connection = [NSConnection connectionWithReceivePort:[array objectAtIndex:0] sendPort:[array objectAtIndex:1]]; + CheatClient *object = [[self alloc] initWithRootProxy:[connection rootProxy]]; + + [object connectToServer:[array objectAtIndex:2] name:[array objectAtIndex:3]]; + [object run]; + + [object release]; + [pool release]; +} + + +- (id)initWithRootProxy:(id)proxy +{ + if ( self = [super init] ) + { + rootProxy = proxy; + sockfd = -1; + } + + return self; +} + + +- (void)connectToServer:(NSData *)data name:(NSString *)name +{ + struct sockaddr identifier; + + [data getBytes:&identifier length:sizeof(identifier)]; + + if ( (sockfd = socket( identifier.sa_family, SOCK_STREAM, 0 )) == -1 ) + { + NSLog( @"ERROR: socket() failed" ); + [rootProxy clientError:@"Network Error" message:@"Attempt to connect to server failed."]; + return; + } + + if ( identifier.sa_family == AF_INET ) + { + struct sockaddr_in addr; + + [data getBytes:&addr]; + + if ( connect( sockfd, (struct sockaddr *)(&addr), sizeof(addr) ) == -1 ) + { + close( sockfd ); + + NSLog( @"ERROR: connect() failed" ); + [rootProxy clientError:@"Network Error" message:@"Attempt to connect to server failed."]; + return; + } + } + else + { + struct sockaddr_un addr; + + [data getBytes:&addr]; + + if ( connect( sockfd, (struct sockaddr *)(&addr), sizeof(addr) ) == -1 ) + { + close( sockfd ); + + NSLog( @"ERROR: connect() failed" ); + [rootProxy clientError:@"Network Error" message:@"Attempt to connect to server failed."]; + return; + } + } + + [rootProxy clientConnectedWithSocket:sockfd name:name]; +} + +- (void)run +{ + int result; + + PacketHeader header; + + NSData *data; + char *bytes = NULL; + + if ( sockfd == -1 ) + { + NSLog( @"ERROR: can't run when not connected" ); + return; + } + + NSLog( @"CLIENT start" ); + + for (;;) + { + if ( (result = ReadBuffer( sockfd, (char *)(&header), sizeof(header) )) != sizeof(header) ) + { + if ( result != 0 && result != -1 ) + { + NSLog( @"ERROR: incomplete header received" ); + close( sockfd ); + break; + } + + break; + } + + if ( !VerifyChecksum( header.checksum ) ) + { + NSLog( @"ERROR: checksum verification failed" ); + close( sockfd ); + break; + } + + NSLog( @"CLIENT message %i/%i/%i", header.checksum, header.function, header.size ); + + if ( header.size != 0 ) + { + if ( (bytes = (char *)malloc( header.size )) == NULL ) + { + NSLog( @"ERROR: failed to allocate buffer for reading a network packet" ); + close( sockfd ); + break; + } + + if ( (result = ReadBuffer( sockfd, bytes, header.size )) != header.size ) + { + NSLog( @"ERROR: failed to read the data of a network packet; only read %i bytes out of %i", result, header.size ); + free( bytes ); + close( sockfd ); + break; + } + } + + data = [NSData dataWithBytes:bytes length:header.size]; + + switch ( header.function ) + { + case 2: + [rootProxy receivedProcessList:data]; + break; + + case 6: + [rootProxy receivedSearchFinished]; + break; + + case 7: + [rootProxy receivedVariableList:data]; + break; + + case 9: + [rootProxy receivedChangeFinished]; + break; + + case 11: + [rootProxy receivedError:data]; + break; + + case 15: + [rootProxy receivedUndoFinished]; + break; + + case 17: + [rootProxy receivedRedoFinished]; + break; + + case 19: + [rootProxy receivedUndoRedoStatus:data]; + break; + + case 21: + [rootProxy receivedAppLaunched:data]; + break; + + case 22: + [rootProxy receivedAppQuit:data]; + break; + + case 23: + [rootProxy receivedTargetQuit]; + break; + + case 24: + [rootProxy receivedPauseFinished:data]; + break; + } + + if ( header.size != 0 ) + { + free( bytes ); + } + } + + [rootProxy clientDisconnected]; + + NSLog( @"CLIENT close" ); +} + + +@end \ No newline at end of file diff --git a/CheatListener.h b/CheatListener.h new file mode 100644 index 0000000..78b4bed --- /dev/null +++ b/CheatListener.h @@ -0,0 +1,40 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: CheatListener.h +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + +#import "ListenerDelegate.h" + +#include "cheat_globals.h" +#include "cheat_net.h" + +#include "stdio.h" + +@class CheatServer; + + +@interface CheatListener : NSObject +{ + id rootProxy; + int sockfd; + + BOOL listenRemote; +} + ++ (NSConnection *)listenerWithDelegate:(id)del port:(int)port remote:(BOOL)remote; ++ (void)listenerThread:(NSArray *)array; + +- (id)initWithRootProxy:(id)proxy; + +- (void)listenOnPort:(int)port remote:(BOOL)remote; +- (void)run; +- (void)cleanup; + +@end \ No newline at end of file diff --git a/CheatListener.m b/CheatListener.m new file mode 100644 index 0000000..40c4eb0 --- /dev/null +++ b/CheatListener.m @@ -0,0 +1,182 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: CheatListener.m +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import "CheatListener.h" + +#import "CheatServer.h" + +#include + + +@implementation CheatListener + + ++ (NSConnection *)listenerWithDelegate:(id)del port:(int)port remote:(BOOL)remote +{ + NSPort *rPort = [NSPort port], *sPort = [NSPort port]; + NSConnection *connection; + NSArray *array; + + connection = [[NSConnection alloc] initWithReceivePort:rPort sendPort:sPort]; + [connection setRootObject:del]; + + array = [NSArray arrayWithObjects:sPort, rPort, [NSNumber numberWithInt:port], [NSNumber numberWithBool:remote], nil]; + [NSThread detachNewThreadSelector:@selector(listenerThread:) toTarget:self withObject:array]; + + return [connection autorelease]; +} + ++ (void)listenerThread:(NSArray *)array +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSConnection *connection = [NSConnection connectionWithReceivePort:[array objectAtIndex:0] sendPort:[array objectAtIndex:1]]; + CheatListener *object = [[self alloc] initWithRootProxy:[connection rootProxy]]; + + [object listenOnPort:[[array objectAtIndex:2] intValue] remote:[[array objectAtIndex:3] boolValue]]; + [object run]; + [object cleanup]; + + [object release]; + [pool release]; +} + + +- (id)initWithRootProxy:(id)proxy +{ + if ( self = [super init] ) + { + rootProxy = proxy; + sockfd = -1; + } + + return self; +} + + +- (void)listenOnPort:(int)port remote:(BOOL)remote +{ + short family = remote? AF_INET : AF_UNIX; + + int yes = 1; // for setsockopt() + + if ( (sockfd = socket( family, SOCK_STREAM, 0 )) == -1 ) + { + NSLog( @"ERROR: failed to start server because socket() failed" ); + [rootProxy listenerError:@"Network Error" message:@"Server couldn't start. Local can't be cheated."]; + return; + } + + if ( family == AF_INET ) + { + struct sockaddr_in addr; + + addr.sin_family = family; + addr.sin_port = htonl( port ); + addr.sin_addr.s_addr = INADDR_ANY; + + if ( setsockopt( sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int) ) == -1 ) + { + NSLog( @"ERROR: failed to start server because setsockopt() failed" ); + [rootProxy listenerError:@"Network Error" message:@"Server couldn't start. Local can't be cheated."]; + return; + } + + if ( bind( sockfd, (struct sockaddr *)(&addr), sizeof(struct sockaddr) ) == -1 ) + { + NSLog( @"ERROR: failed to start server because bind() failed" ); + [rootProxy listenerError:@"Network Error" message:@"The cheat server could not start, probably because the port is already in use. Local can not be cheated."]; + return; + } + } + else + { + struct sockaddr_un addr; + + addr.sun_family = family; + strncpy( addr.sun_path, TCDefaultListenPath, 103 ); + + remove( TCDefaultListenPath ); + + if ( bind( sockfd, (struct sockaddr *)(&addr), sizeof(addr) ) == -1 ) + { + NSLog( @"ERROR: failed to start server because bind() failed" ); + [rootProxy listenerError:@"Network Error" message:@"The cheat server could not start, probably because the path is already in use. Local can not be cheated."]; + return; + } + } + + if ( listen( sockfd, 50 ) == -1 ) + { + NSLog( @"ERROR: failed to start server because listen() failed" ); + [rootProxy listenerError:@"Network Error" message:@"Server couldn't start. Local can't be cheated."]; + return; + } + + listenRemote = remote; + + [rootProxy listenerListeningWithSocket:sockfd]; +} + +- (void)run +{ + int result; + + NSLog( @"LISTENER start" ); + + if ( listenRemote ) + { + struct sockaddr_in addr; + int addrLen; + + for (;;) + { + addrLen = sizeof(addr); + + if ( (result = accept( sockfd, (struct sockaddr *)(&addr), &addrLen )) == -1 ) + { + break; + } + + [rootProxy listenerReceivedNewConnection:result]; + } + } + else + { + struct sockaddr_un addr; + int addrLen; + + for (;;) + { + addrLen = sizeof(addr); + + if ( (result = accept( sockfd, (struct sockaddr *)(&addr), &addrLen )) == -1 ) + { + break; + } + + [rootProxy listenerReceivedNewConnection:result]; + } + } + + NSLog( @"LISTENER close" ); + + [rootProxy listenerDisconnected]; +} + +- (void)cleanup +{ + if ( listenRemote ) + { + remove( TCDefaultListenPath ); + } +} + + +@end \ No newline at end of file diff --git a/CheatServer.h b/CheatServer.h new file mode 100644 index 0000000..e313dbf --- /dev/null +++ b/CheatServer.h @@ -0,0 +1,104 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: CheatServer.h +// Created: Sun Sep 07 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + +#import "ServerDelegate.h" + +#include +#include + +#include + +#include +#include +#include +#include + +#include "cheat_types.h" +#include "cheat_net.h" + + +@class SearchResults; + + +@interface CheatServer : NSObject +{ + id rootProxy; + int sockfd; + + pid_t processID; + vm_map_t processTask; + + BOOL processPaused; + + NSMutableArray *searchResults; + NSMutableArray *searchResultsUndone; +} + ++ (NSConnection *)serverWithDelegate:(id)delegate socket:(int)sock; ++ (void)serverThread:(NSArray *)array; + +- (id)initWithRootProxy:(id)proxy; + +- (void)handleSocket:(int)sock; +- (void)run; + +- (void)setAddress:(NSString *)address; +- (void)setAction:(NSString *)action; + +- (void)firstSearchString8bit:(char const *)value size:(int)vsize; +- (void)firstSearchIntegerChar:(int8_t)value; +- (void)firstSearchIntegerShort:(int16_t)value; +- (void)firstSearchIntegerLong:(int32_t)value; +- (void)firstSearchDecimalFloat:(float)value; +- (void)firstSearchDecimalDouble:(double)value; + +- (void)searchString8bit:(char const *)value size:(int)vsize; +- (void)searchIntegerChar:(int8_t)value; +- (void)searchIntegerShort:(int16_t)value; +- (void)searchIntegerLong:(int32_t)value; +- (void)searchDecimalFloat:(float)value; +- (void)searchDecimalDouble:(double)value; + +- (void)changeString8bit:(char const *)value size:(int)vsize addresses:(TCaddress *)addresses count:(int)count; +- (void)changeIntegerChar:(int8_t)value addresses:(TCaddress *)addresses count:(int)count; +- (void)changeIntegerShort:(int16_t)value addresses:(TCaddress *)addresses count:(int)count; +- (void)changeIntegerLong:(int32_t)value addresses:(TCaddress *)addresses count:(int)count; +- (void)changeDecimalFloat:(float)value addresses:(TCaddress *)addresses count:(int)count; +- (void)changeDecimalDouble:(double)value addresses:(TCaddress *)addresses count:(int)count; + +- (void)sendProcessList; +- (void)sendSearchFinished; +- (void)sendVariableList:(TCaddress const *)data amount:(int)amount; +- (void)sendChangeFinished; +- (void)sendError:(NSString *)msg fatal:(BOOL)fatal; +- (void)sendVariableValue:(u_int32_t)index; +- (void)sendUndoFinished; +- (void)sendRedoFinished; +- (void)sendUndoRedoStatus; +- (void)sendAppLaunched:(NSDictionary *)appInfo; +- (void)sendAppQuit:(NSDictionary *)appInfo; +- (void)sendTargetAppQuit; +- (void)sendPauseFinished:(BOOL)paused; + +- (void)handleClearSearch; +- (void)handleSearch:(char const *)data size:(int)dataSize; +- (void)handleChange:(char const *)data size:(int)dataSize; +- (void)handlePauseTarget; +- (void)handleUndo; +- (void)handleRedo; +- (void)handleSetTargetPID:(char const *)data size:(int)size; + +- (void)unpause; +- (void)setPID:(pid_t)pid; + +@end + diff --git a/CheatServer.m b/CheatServer.m new file mode 100644 index 0000000..2a8ed8c --- /dev/null +++ b/CheatServer.m @@ -0,0 +1,2035 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: CheatServer.m +// Created: Sun Sep 07 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import "CheatServer.h" + +#import "SearchResults.h" + +#include +#include + + +// Internal Functions +BOOL inline compare_float( float a, float b ); +BOOL inline compare_double( double a, double b ); + + +@implementation CheatServer + + ++ (NSConnection *)serverWithDelegate:(id)delegate socket:(int)sock +{ + NSPort *rPort = [NSPort port], *sPort = [NSPort port]; + NSConnection *connection; + NSArray *array; + + connection = [[NSConnection alloc] initWithReceivePort:rPort sendPort:sPort]; + [connection setRootObject:delegate]; + + array = [NSArray arrayWithObjects:sPort, rPort, [NSNumber numberWithInt:sock], nil]; + [NSThread detachNewThreadSelector:@selector(serverThread:) toTarget:self withObject:array]; + + return [connection autorelease]; +} + ++ (void)serverThread:(NSArray *)array +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSConnection *connection = [NSConnection connectionWithReceivePort:[array objectAtIndex:0] sendPort:[array objectAtIndex:1]]; + CheatServer *object = [[self alloc] initWithRootProxy:[connection rootProxy]]; + + [object handleSocket:[[array objectAtIndex:2] intValue]]; + [object run]; + + [object release]; + [pool release]; +} + + +- (id)initWithRootProxy:(id)proxy +{ + if ( self = [super init] ) + { + NSNotificationCenter *nc = [[NSWorkspace sharedWorkspace] notificationCenter]; + + rootProxy = proxy; + + [nc addObserver:self selector:@selector(processListChanged:) name:@"NSWorkspaceDidLaunchApplicationNotification" object:nil]; + [nc addObserver:self selector:@selector(processListChanged:) name:@"NSWorkspaceDidTerminateApplicationNotification" object:nil]; + + [self setPID:[rootProxy serverFirstProcess]]; + + processPaused = NO; + + searchResults = [[NSMutableArray alloc] init]; + searchResultsUndone = [[NSMutableArray alloc] init]; + } + + return self; +} + + +- (void)handleSocket:(int)sock +{ + struct sockaddr identifier; + int addrLen = sizeof(identifier); + + NSString *address; + char *addressCString; + + sockfd = sock; + + if ( getpeername( sockfd, &identifier, &addrLen ) == -1 ) + { + NSLog( @"ERROR: getpeername() failed" ); + } + + if ( identifier.sa_family == AF_INET ) + { + struct sockaddr_in addr; + + addrLen = sizeof(addr); + + if ( getpeername( sockfd, (struct sockaddr *)(&addr), &addrLen ) == -1 ) + { + NSLog( @"ERROR: getpeername() failed" ); + } + + if ( (addressCString = inet_ntoa( addr.sin_addr )) == NULL ) + { + NSLog( @"ERROR: inet_ntoa() failed" ); + } + + address = [NSString stringWithCString:addressCString]; + } + else + { + struct sockaddr_un addr; + + addrLen = sizeof(addr); + + if ( getpeername( sockfd, (struct sockaddr *)(&addr), &addrLen ) == -1 ) + { + NSLog( @"ERROR: getpeername() failed" ); + } + + NSLog( @"client connection: %s", addr.sun_path ); + + address = [NSString stringWithString:@"127.0.0.1"]; + } + + [rootProxy server:self connectedWithSocket:sockfd]; + + [self setAddress:address]; + [self setAction:nil]; +} + +- (void)run +{ + struct timeval tv; + fd_set fdset, master; + int numfds; + + int result; + + PacketHeader header; + char *data = NULL; + + tv.tv_sec = 2; + tv.tv_usec = 0; + + FD_ZERO( &fdset ); + FD_ZERO( &master ); + FD_SET( sockfd, &master ); + + numfds = sockfd + 1; + + NSLog( @"SERVER start" ); + + for (;;) + { + fdset = master; + + select( numfds, &fdset, NULL, NULL, &tv ); + + if ( FD_ISSET( sockfd, &fdset ) ) + { + if ( (result = ReadBuffer( sockfd, (char *)(&header), sizeof(header) )) != sizeof(header) ) + { + break; + } + + if ( !VerifyChecksum( header.checksum ) ) + { + NSLog( @"checksum failed" ); + } + + if ( header.size != 0 ) + { + if ( (data = (char *)malloc( header.size )) == NULL ) + { + NSLog( @"failed to allocate buffer for reading a network packet" ); + break; + } + + if ( (result = ReadBuffer( sockfd, data, header.size )) != header.size ) + { + NSLog( @"failed to read the data of a network packet" ); + free( data ); + break; + } + } + + NSLog( @"SERVER message %i/%i/%i", header.checksum, header.function, header.size ); + + switch ( header.function ) + { + case 1: + [self sendProcessList]; + break; + + case 3: + [self handleClearSearch]; + break; + + case 5: + [self handleSearch:data size:header.size]; + break; + + case 8: + [self handleChange:data size:header.size]; + break; + + case 10: + [self handlePauseTarget]; + break; + + case 14: + [self handleUndo]; + break; + + case 16: + [self handleRedo]; + break; + + case 18: + [self handleSetTargetPID:data size:header.size]; + break; + + } + + if ( header.size != 0 ) + { + free( data ); + } + } + } + + close( sockfd ); + + NSLog( @"SERVER close" ); + + [rootProxy serverDisconnected:self]; +} + + +- (void)setAddress:(NSString *)address +{ + [rootProxy server:self changedAddress:address]; +} + +- (void)setAction:(NSString *)action +{ + if ( action == nil ) + { + [rootProxy server:self changedAction:@"Idle"]; + } + else + { + [rootProxy server:self changedAction:action]; + } +} + +- (void)firstSearchString8bit:(char const *)value size:(int)vsize +{ + kern_return_t result; + + vm_address_t address = 0x0; + vm_size_t size = 0; + vm_region_basic_info_data_t info; + mach_msg_type_number_t infoCnt = 8; + mach_port_t object_name = 0; + + char *data; + vm_size_t dataLength; + + TCaddress *results = NULL; + int resultsAmount = 0; + + NSLog( @"string search: %s", value ); + + for (;;) + { + if ( (result = vm_region( processTask, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS ) + { + if ( result != KERN_INVALID_ADDRESS ) + { + NSLog( @"vm_region returned error: %i", result ); + } + break; + } + + if ( (info.protection & VM_PROT_READ) && (info.protection & VM_PROT_WRITE)) + { + data = (char *)malloc( size ); + dataLength = size; + + if ( (result = vm_read_overwrite( processTask, address, size, (vm_address_t)data, &dataLength )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE ) + { + NSLog( @"vm_read_overwrite returned error: %i", result ); + free( data ); + break; + } + + if ( result == KERN_SUCCESS ) + { + int i, top = dataLength - vsize; + + if ( (results = realloc( results, TCAddressSize*resultsAmount + dataLength )) == NULL ) + { + NSLog( @"ERROR: could not expand buffer" ); + exit(0); + } + + for ( i = 0; i < top; i++ ) + { + if ( strncmp( value, data+i, vsize ) == 0 ) + { + results[resultsAmount++] = (TCaddress)address + i; + } + } + } + + free( data ); + } + + address += size; + } + + realloc( results, TCAddressSize*resultsAmount ); + [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_8_BIT data:results amount:resultsAmount]]; + + NSLog( @"found %i of %i", resultsAmount, value ); +} + +- (void)firstSearchIntegerChar:(int8_t)value +{ + kern_return_t result; + + vm_address_t address = 0x0; + vm_size_t size = 0; + vm_region_basic_info_data_t info; + mach_msg_type_number_t infoCnt = 8; + mach_port_t object_name = 0; + + int8_t *data; + vm_size_t dataLength; + + TCaddress *results = NULL; + int resultsAmount = 0; + + for (;;) + { + if ( (result = vm_region( processTask, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS ) + { + if ( result != KERN_INVALID_ADDRESS ) + { + NSLog( @"vm_region returned error: %i", result ); + } + break; + } + + if ( (info.protection & VM_PROT_READ) && (info.protection & VM_PROT_WRITE)) + { + data = (int8_t *)malloc( size ); + dataLength = size; + + if ( (result = vm_read_overwrite( processTask, address, size, (vm_address_t)data, &dataLength )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE ) + { + NSLog( @"vm_read_overwrite returned error: %i", result ); + free( data ); + break; + } + + if ( result == KERN_SUCCESS ) + { + int i; + + if ( (results = (TCaddress *)realloc( results, TCAddressSize*resultsAmount + TCAddressSize*dataLength )) == NULL ) + { + NSLog( @"ERROR: could not expand buffer" ); + exit(0); + } + + for ( i = 0; i < dataLength; i++ ) + { + if ( *(data+i) == value ) + { + results[resultsAmount++] = (TCaddress)address + i; + } + } + } + + free( data ); + } + + address += size; + } + + realloc( results, TCAddressSize*resultsAmount ); + [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_8_BIT data:results amount:resultsAmount]]; + + NSLog( @"found %i of %i", resultsAmount, value ); +} + +- (void)firstSearchIntegerShort:(int16_t)value +{ + kern_return_t result; + + vm_address_t address = 0x0; + vm_size_t size = 0; + vm_region_basic_info_data_t info; + mach_msg_type_number_t infoCnt = 8; + mach_port_t object_name = 0; + + int16_t *data; + vm_size_t dataLength; + + TCaddress *results = NULL; + int resultsAmount = 0; + + for (;;) + { + if ( (result = vm_region( processTask, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS ) + { + if ( result != KERN_INVALID_ADDRESS ) + { + NSLog( @"vm_region returned error: %i", result ); + } + break; + } + + if ( (info.protection & VM_PROT_READ) && (info.protection & VM_PROT_WRITE)) + { + data = (int16_t *)malloc( size ); + dataLength = size; + + if ( (result = vm_read_overwrite( processTask, address, size, (vm_address_t)data, &dataLength )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE ) + { + NSLog( @"vm_read_overwrite returned error: %i", result ); + free( data ); + break; + } + + if ( result == KERN_SUCCESS ) + { + int i, top = dataLength / sizeof(value); + + if ( (results = (TCaddress *)realloc( results, TCAddressSize*resultsAmount + 2*dataLength )) == NULL ) + { + NSLog( @"ERROR: could not expand buffer" ); + exit(0); + } + + for ( i = 0; i < top; i++ ) + { + if ( *(data+i) == value ) + { + results[resultsAmount++] = (TCaddress)address + i * sizeof(value); + } + } + } + + free( data ); + } + + address += size; + } + + realloc( results, TCAddressSize*resultsAmount ); + [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_16_BIT data:results amount:resultsAmount]]; + + NSLog( @"found %i of %i", resultsAmount, value ); +} + +- (void)firstSearchIntegerLong:(int32_t)value +{ + kern_return_t result; + + vm_address_t address = 0x0; + vm_size_t size = 0; + vm_region_basic_info_data_t info; + mach_msg_type_number_t infoCnt = 8; + mach_port_t object_name = 0; + + int32_t *data; + vm_size_t dataLength; + + TCaddress *results = NULL; + int resultsAmount = 0; + + unsigned zone_count = 10; + vm_address_t *zones = (vm_address_t *)malloc( zone_count * sizeof(vm_address_t) ); + //memory_reader_t reader; + + if ( (result = malloc_get_all_zones( processTask, NULL, &zones, &zone_count )) != KERN_SUCCESS ) + { + NSLog( @"malloc_get_all_zones error: %i", result ); + } + else + { + //address = zones[0]; + + /*int i; + + for ( i = 0; i < 10; i++ ) + { + NSLog( @"malloc_get_all_zones[%i] = %X", i, (vm_address_t)zones[i] ); + }*/ + } + + for (;;) + { + if ( (result = vm_region( processTask, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS ) + { + if ( result != KERN_INVALID_ADDRESS ) + { + NSLog( @"vm_region returned error: %i", result ); + } + break; + } + + if ( (info.protection & VM_PROT_READ) && (info.protection & VM_PROT_WRITE) ) + { + data = (int32_t *)malloc( size ); + dataLength = size; + + NSLog( @"address: %.8X size: %i", address, size ); + + if ( (result = vm_read_overwrite( processTask, address, size, (vm_address_t)data, &dataLength )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE ) + { + NSLog( @"vm_read_overwrite returned error: %i", result ); + free( data ); + break; + } + + if ( result == KERN_SUCCESS ) + { + int i, top = dataLength / sizeof(value); + + if ( (results = (TCaddress *)realloc( results, TCAddressSize*resultsAmount + dataLength )) == NULL ) + { + NSLog( @"ERROR: could not expand buffer" ); + exit(0); + } + + for ( i = 0; i < top; i++ ) + { + if ( *(data+i) == value ) + { + results[resultsAmount++] = (TCaddress)address + i * sizeof(value); + } + } + } + + free( data ); + } + + address += size; + } + + realloc( results, TCAddressSize*resultsAmount ); + [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_32_BIT data:results amount:resultsAmount]]; + + NSLog( @"found %i of %i", resultsAmount, value ); +} + + +- (void)firstSearchDecimalFloat:(float)value +{ + kern_return_t result; + + vm_address_t address = 0x0; + vm_size_t size = 0; + vm_region_basic_info_data_t info; + mach_msg_type_number_t infoCnt = 8; + mach_port_t object_name = 0; + + float *data; + vm_size_t dataLength; + + TCaddress *results = NULL; + int resultsAmount = 0; + + for (;;) + { + if ( (result = vm_region( processTask, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS ) + { + if ( result != KERN_INVALID_ADDRESS ) + { + NSLog( @"vm_region returned error: %i", result ); + } + break; + } + + if ( (info.protection & VM_PROT_READ) && (info.protection & VM_PROT_WRITE)) + { + data = (float *)malloc( size ); + dataLength = size; + + if ( (result = vm_read_overwrite( processTask, address, size, (vm_address_t)data, &dataLength )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE ) + { + NSLog( @"vm_read_overwrite returned error: %i", result ); + free( data ); + break; + } + + if ( result == KERN_SUCCESS ) + { + int i, top = dataLength / sizeof(value); + + if ( (results = realloc( results, TCAddressSize*resultsAmount + dataLength )) == NULL ) + { + NSLog( @"ERROR: could not expand buffer" ); + exit(0); + } + + for ( i = 0; i < top; i++ ) + { + if ( compare_float( *(data+i), value ) ) + { + results[resultsAmount++] = (TCaddress)address + i * sizeof(value); + } + } + } + + free( data ); + } + + address += size; + } + + realloc( results, TCAddressSize*resultsAmount ); + [searchResults addObject:[SearchResults resultsWithType:TYPE_DECIMAL size:SIZE_32_BIT data:results amount:resultsAmount]]; + + NSLog( @"found %i of %i", resultsAmount, value ); +} + +- (void)firstSearchDecimalDouble:(double)value +{ + kern_return_t result; + + vm_address_t address = 0x0; + vm_size_t size = 0; + vm_region_basic_info_data_t info; + mach_msg_type_number_t infoCnt = 8; + mach_port_t object_name = 0; + + double *data; + vm_size_t dataLength; + + TCaddress *results = NULL; + int resultsAmount = 0; + + NSLog( @"float search" ); + + for (;;) + { + if ( (result = vm_region( processTask, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS ) + { + if ( result != KERN_INVALID_ADDRESS ) + { + NSLog( @"vm_region returned error: %i", result ); + } + break; + } + + if ( (info.protection & VM_PROT_READ) && (info.protection & VM_PROT_WRITE)) + { + data = (double *)malloc( size ); + dataLength = size; + + if ( (result = vm_read_overwrite( processTask, address, size, (vm_address_t)data, &dataLength )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE ) + { + NSLog( @"vm_read_overwrite returned error: %i", result ); + free( data ); + break; + } + + if ( result == KERN_SUCCESS ) + { + int i, top = dataLength / sizeof(value); + + if ( (results = realloc( results, TCAddressSize*resultsAmount + dataLength )) == NULL ) + { + NSLog( @"ERROR: could not expand buffer" ); + exit(0); + } + + for ( i = 0; i < top; i++ ) + { + if ( compare_double( *(data+i), value ) ) + { + results[resultsAmount++] = (TCaddress)address + i * sizeof(value); + } + } + } + + free( data ); + } + + address += size; + } + + realloc( results, TCAddressSize*resultsAmount ); + [searchResults addObject:[SearchResults resultsWithType:TYPE_DECIMAL size:SIZE_64_BIT data:results amount:resultsAmount]]; + + NSLog( @"found %i of %i", resultsAmount, value ); +} + + +- (void)searchString8bit:(char const *)value size:(int)vsize +{ + kern_return_t result; + + int8_t data; + vm_size_t dataLength; + + TCaddress *results; + int resultsAmount = 0; + + SearchResults *lastResults = [searchResults lastObject]; + TCaddress *lastResultsData = [lastResults data]; + int i, lastResultsAmount = [lastResults amount]; + + if ( [lastResults type] != TYPE_INTEGER || [lastResults size] != SIZE_8_BIT ) + { + [self sendError:@"This search is incompatible with the previous search." fatal:NO]; + return; + } + + if ( (results = (TCaddress *)malloc( TCAddressSize*lastResultsAmount )) == NULL ) + { + NSLog( @"ERROR: could not create buffer" ); + + [self sendError:@"The server cancelled the search because it ran out of memory." fatal:NO]; + return; + } + + for ( i = 0; i < lastResultsAmount; i++ ) + { + TCaddress address = lastResultsData[i]; + + dataLength = sizeof(data); + + if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS ) + { + if ( data == value[0] ) + { + results[resultsAmount++] = address; + } + } + else + { + if ( result != KERN_PROTECTION_FAILURE ) + { + NSLog( @"vm_read_overwrite returned error: %i", result ); + break; + } + } + } + + realloc( results, TCAddressSize*resultsAmount ); + [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_8_BIT data:results amount:resultsAmount]]; + + NSLog( @"found %i of %i", resultsAmount, value ); +} + +- (void)searchIntegerChar:(int8_t)value +{ + kern_return_t result; + + int8_t data; + vm_size_t dataLength; + + TCaddress *results; + int resultsAmount = 0; + + SearchResults *lastResults = [searchResults lastObject]; + TCaddress *lastResultsData = [lastResults data]; + int i, lastResultsAmount = [lastResults amount]; + + if ( [lastResults type] != TYPE_INTEGER || [lastResults size] != SIZE_8_BIT ) + { + [self sendError:@"This search is incompatible with the previous search." fatal:NO]; + return; + } + + if ( (results = (TCaddress *)malloc( TCAddressSize*lastResultsAmount )) == NULL ) + { + NSLog( @"ERROR: could not create buffer" ); + + [self sendError:@"The server cancelled the search because it ran out of memory." fatal:NO]; + return; + } + + for ( i = 0; i < lastResultsAmount; i++ ) + { + TCaddress address = lastResultsData[i]; + + dataLength = sizeof(data); + + if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS ) + { + if ( data == value ) + { + results[resultsAmount++] = address; + } + } + else + { + if ( result != KERN_PROTECTION_FAILURE ) + { + NSLog( @"vm_read_overwrite returned error: %i", result ); + break; + } + } + } + + realloc( results, TCAddressSize*resultsAmount ); + [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_8_BIT data:results amount:resultsAmount]]; + + NSLog( @"found %i of %i", resultsAmount, value ); +} + +- (void)searchIntegerShort:(int16_t)value +{ + kern_return_t result; + + int16_t data; + vm_size_t dataLength; + + TCaddress *results; + int resultsAmount = 0; + + SearchResults *lastResults = [searchResults lastObject]; + TCaddress *lastResultsData = [lastResults data]; + int i, lastResultsAmount = [lastResults amount]; + + if ( [lastResults type] != TYPE_INTEGER || [lastResults size] != SIZE_16_BIT ) + { + [self sendError:@"This search is incompatible with the previous search." fatal:NO]; + return; + } + + if ( (results = (TCaddress *)malloc( TCAddressSize*lastResultsAmount )) == NULL ) + { + NSLog( @"ERROR: could not create buffer" ); + + [self sendError:@"The server cancelled the search because it ran out of memory." fatal:NO]; + return; + } + + for ( i = 0; i < lastResultsAmount; i++ ) + { + TCaddress address = lastResultsData[i]; + + dataLength = sizeof(data); + + if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS ) + { + if ( data == value ) + { + results[resultsAmount++] = address; + } + } + else + { + if ( result != KERN_PROTECTION_FAILURE ) + { + NSLog( @"vm_read_overwrite returned error: %i", result ); + break; + } + } + } + + realloc( results, TCAddressSize*resultsAmount ); + [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_16_BIT data:results amount:resultsAmount]]; + + NSLog( @"found %i of %i", resultsAmount, value ); +} + +- (void)searchIntegerLong:(int32_t)value +{ + kern_return_t result; + + int32_t data; + vm_size_t dataLength; + + TCaddress *results; + int resultsAmount = 0; + + SearchResults *lastResults = [searchResults lastObject]; + TCaddress *lastResultsData = [lastResults data]; + int i, lastResultsAmount = [lastResults amount]; + + if ( [lastResults type] != TYPE_INTEGER || [lastResults size] != SIZE_32_BIT ) + { + [self sendError:@"This search is incompatible with the previous search." fatal:NO]; + return; + } + + if ( (results = (TCaddress *)malloc( TCAddressSize*lastResultsAmount )) == NULL ) + { + NSLog( @"ERROR: could not create buffer" ); + + [self sendError:@"The server cancelled the search because it ran out of memory." fatal:NO]; + return; + } + + for ( i = 0; i < lastResultsAmount; i++ ) + { + TCaddress address = lastResultsData[i]; + + dataLength = sizeof(data); + + if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS ) + { + if ( data == value ) + { + results[resultsAmount++] = address; + } + } + else + { + if ( result != KERN_PROTECTION_FAILURE ) + { + NSLog( @"vm_read_overwrite returned error: %i", result ); + break; + } + } + } + + realloc( results, TCAddressSize*resultsAmount ); + [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_32_BIT data:results amount:resultsAmount]]; + + NSLog( @"found %i of %i", resultsAmount, value ); +} + +- (void)searchDecimalFloat:(float)value +{ + kern_return_t result; + + float data; + vm_size_t dataLength; + + TCaddress *results; + int resultsAmount = 0; + + SearchResults *lastResults = [searchResults lastObject]; + TCaddress *lastResultsData = [lastResults data]; + int i, lastResultsAmount = [lastResults amount]; + + if ( [lastResults type] != TYPE_DECIMAL || [lastResults size] != SIZE_32_BIT ) + { + [self sendError:@"This search is incompatible with the previous search." fatal:NO]; + return; + } + + if ( (results = (TCaddress *)malloc( TCAddressSize*lastResultsAmount )) == NULL ) + { + NSLog( @"ERROR: could not create buffer" ); + + [self sendError:@"The server cancelled the search because it ran out of memory." fatal:NO]; + return; + } + + for ( i = 0; i < lastResultsAmount; i++ ) + { + TCaddress address = lastResultsData[i]; + + dataLength = sizeof(data); + + if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS ) + { + if ( compare_float( data, value ) ) + { + results[resultsAmount++] = address; + } + } + else + { + if ( result != KERN_PROTECTION_FAILURE ) + { + NSLog( @"vm_read_overwrite returned error: %i", result ); + break; + } + } + } + + realloc( results, TCAddressSize*resultsAmount ); + [searchResults addObject:[SearchResults resultsWithType:TYPE_DECIMAL size:SIZE_32_BIT data:results amount:resultsAmount]]; + + NSLog( @"found %i of %i", resultsAmount, value ); +} + +- (void)searchDecimalDouble:(double)value +{ + kern_return_t result; + + double data; + vm_size_t dataLength; + + TCaddress *results; + int resultsAmount = 0; + + SearchResults *lastResults = [searchResults lastObject]; + TCaddress *lastResultsData = [lastResults data]; + int i, lastResultsAmount = [lastResults amount]; + + if ( [lastResults type] != TYPE_DECIMAL || [lastResults size] != SIZE_64_BIT ) + { + [self sendError:@"This search is incompatible with the previous search." fatal:NO]; + return; + } + + if ( (results = (TCaddress *)malloc( TCAddressSize*lastResultsAmount )) == NULL ) + { + NSLog( @"ERROR: could not create buffer" ); + + [self sendError:@"The server cancelled the search because it ran out of memory." fatal:NO]; + return; + } + + for ( i = 0; i < lastResultsAmount; i++ ) + { + TCaddress address = lastResultsData[i]; + + dataLength = sizeof(data); + + if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS ) + { + if ( compare_double( data, value ) ) + { + results[resultsAmount++] = address; + } + } + else + { + if ( result != KERN_PROTECTION_FAILURE ) + { + NSLog( @"vm_read_overwrite returned error: %i", result ); + break; + } + } + } + + realloc( results, TCAddressSize*resultsAmount ); + [searchResults addObject:[SearchResults resultsWithType:TYPE_DECIMAL size:SIZE_64_BIT data:results amount:resultsAmount]]; + + NSLog( @"found %i of %i", resultsAmount, value ); +} + + +- (void)changeString8bit:(char const *)value size:(int)vsize addresses:(TCaddress *)addresses count:(int)count +{ + int failCount = 0; + int i; + + NSLog( @"change string: %s", value ); + + for ( i = 0; i < count; i++ ) + { + if ( vm_write( processTask, (vm_address_t)addresses[i], (vm_offset_t)value, vsize ) != KERN_SUCCESS ) + { + failCount++; + } + } + + if ( failCount > 0 ) + { + [self sendError:[NSString stringWithFormat:@"%i of the selected variables could not be changed.", failCount] fatal:NO]; + } +} + +- (void)changeIntegerChar:(int8_t)value addresses:(TCaddress *)addresses count:(int)count +{ + int failCount = 0; + int i; + + for ( i = 0; i < count; i++ ) + { + if ( vm_write( processTask, (vm_address_t)addresses[i], (vm_offset_t)(&value), sizeof(value) ) != KERN_SUCCESS ) + { + failCount++; + } + } + + if ( failCount > 0 ) + { + [self sendError:[NSString stringWithFormat:@"%i of the selected variables could not be changed.", failCount] fatal:NO]; + } +} + +- (void)changeIntegerShort:(int16_t)value addresses:(TCaddress *)addresses count:(int)count +{ + int failCount = 0; + int i; + + for ( i = 0; i < count; i++ ) + { + if ( vm_write( processTask, (vm_address_t)addresses[i], (vm_offset_t)(&value), sizeof(value) ) != KERN_SUCCESS ) + { + failCount++; + } + } + + if ( failCount > 0 ) + { + [self sendError:[NSString stringWithFormat:@"%i of the selected variables could not be changed.", failCount] fatal:NO]; + } +} + +- (void)changeIntegerLong:(int32_t)value addresses:(TCaddress *)addresses count:(int)count +{ + int failCount = 0; + int i; + + for ( i = 0; i < count; i++ ) + { + if ( vm_write( processTask, (vm_address_t)addresses[i], (vm_offset_t)(&value), sizeof(value) ) != KERN_SUCCESS ) + { + failCount++; + } + } + + if ( failCount > 0 ) + { + [self sendError:[NSString stringWithFormat:@"%i of the selected variables could not be changed.", failCount] fatal:NO]; + } +} + +- (void)changeDecimalFloat:(float)value addresses:(TCaddress *)addresses count:(int)count +{ + int failCount = 0; + int i; + + for ( i = 0; i < count; i++ ) + { + if ( vm_write( processTask, (vm_address_t)addresses[i], (vm_offset_t)(&value), sizeof(value) ) != KERN_SUCCESS ) + { + failCount++; + } + } + + if ( failCount > 0 ) + { + [self sendError:[NSString stringWithFormat:@"%i of the selected variables could not be changed.", failCount] fatal:NO]; + } +} + +- (void)changeDecimalDouble:(double)value addresses:(TCaddress *)addresses count:(int)count +{ + int failCount = 0; + int i; + + for ( i = 0; i < count; i++ ) + { + if ( vm_write( processTask, (vm_address_t)addresses[i], (vm_offset_t)(&value), sizeof(value) ) != KERN_SUCCESS ) + { + failCount++; + } + } + + if ( failCount > 0 ) + { + [self sendError:[NSString stringWithFormat:@"%i of the selected variables could not be changed.", failCount] fatal:NO]; + } +} + + +- (void)sendProcessList +{ + NSArray *processList = [rootProxy serverProcessList]; + + NSNumber *pid; + u_int32_t pidNum; + NSString *name; + + PacketHeader header; + + char *buffer, *ptr; + + // PROCESS COUNT + int length = sizeof(u_int32_t); + int lengthAfter; + + u_int32_t processCount = [processList count]; + + int i, max = processCount; + + header.checksum = RandomChecksum(); + header.function = 2; + + for ( i = 0; i < max; i++ ) + { + pid = [[processList objectAtIndex:i] objectForKey:@"NSApplicationProcessIdentifier"]; + name = [[processList objectAtIndex:i] objectForKey:@"NSApplicationName"]; + + // PID NAME + length += sizeof(u_int32_t) + [name length] + 1; + } + + header.size = length; + length += sizeof(header); + // HEADER + + if ( (buffer = (char *)malloc( length ))==NULL ) + { + NSLog( @"sendProcessList failed" ); + return; + } + + ptr = buffer; + + COPY_TO_BUFFER( ptr, &header, sizeof(header) ); + COPY_TO_BUFFER( ptr, &processCount, sizeof(processCount) ); + + for ( i = 0; i < max; i++ ) + { + pidNum = [[[processList objectAtIndex:i] objectForKey:@"NSApplicationProcessIdentifier"] unsignedLongValue]; + name = [[processList objectAtIndex:i] objectForKey:@"NSApplicationName"]; + + COPY_TO_BUFFER( ptr, &pidNum, sizeof(pid) ); + COPY_TO_BUFFER( ptr, [name lossyCString], [name length] + 1 ); + } + + lengthAfter = length; + + if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length ) + { + NSLog( @"sendProcessList failed" ); + } + + free( buffer ); +} + + +- (void)sendSearchFinished +{ + PacketHeader header; + int length = sizeof(header); + + header.checksum = RandomChecksum(); + header.function = 6; + header.size = 0; + + if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) ) + { + NSLog( @"sendSearchFinished failed" ); + } +} + +- (void)sendVariableList:(TCaddress const *)data amount:(int)amount +{ + PacketHeader header; + int length; + int lengthAfter; + + char *buffer, *ptr; + + header.checksum = RandomChecksum(); + header.function = 7; + header.size = sizeof(amount) + TCAddressSize*amount; + // AMOUNT DATA + + lengthAfter = length = header.size + sizeof(header); + + if ( (buffer = (char *)malloc( length )) == NULL ) + { + NSLog( @"sendVariableList:amount: failed" ); + return; + } + + ptr = buffer; + + COPY_TO_BUFFER( ptr, &header, sizeof(header) ); + COPY_TO_BUFFER( ptr, &amount, sizeof(amount) ); + COPY_TO_BUFFER( ptr, data, TCAddressSize*amount ); + + if ( SendBuffer( sockfd, buffer, &length ) == -1 || lengthAfter != length ) + { + NSLog( @"sendVariableList:amount: failed" ); + } + + free( buffer ); +} + +- (void)sendChangeFinished +{ + PacketHeader header; + int length = sizeof(header); + + header.checksum = RandomChecksum(); + header.function = 9; + header.size = 0; + + if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) ) + { + NSLog( @"sendChangeFinished failed" ); + } +} + +- (void)sendError:(NSString *)msg fatal:(BOOL)fatal +{ + PacketHeader header; + int length; + int lengthAfter; + + u_int32_t type = (fatal)? 1:0; + + char *buffer, *ptr; + + header.checksum = RandomChecksum(); + header.function = 11; + header.size = sizeof(type) + [msg length] + 1; + // FATAL STRING + + lengthAfter = length = header.size + sizeof(header); + + if ( (buffer = (char *)malloc( length )) == NULL ) + { + NSLog( @"sendError:fatal: failed" ); + return; + } + + ptr = buffer; + + COPY_TO_BUFFER( ptr, &header, sizeof(header) ); + COPY_TO_BUFFER( ptr, &type, sizeof(type) ); + COPY_TO_BUFFER( ptr, [msg lossyCString], [msg length] + 1 ); + + if ( SendBuffer( sockfd, buffer, &length ) == -1 || lengthAfter != length ) + { + NSLog( @"sendError:fatal: failed" ); + } + + free( buffer ); +} + +- (void)sendVariableValue:(u_int32_t)index +{ + +} + +- (void)sendUndoFinished +{ + PacketHeader header; + int length = sizeof(header); + + header.checksum = RandomChecksum(); + header.function = 15; + header.size = 0; + + if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) ) + { + NSLog( @"sendUndoFinished failed" ); + } +} + +- (void)sendRedoFinished +{ + PacketHeader header; + int length = sizeof(header); + + header.checksum = RandomChecksum(); + header.function = 17; + header.size = 0; + + if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) ) + { + NSLog( @"sendRedoFinished failed" ); + } +} + +- (void)sendUndoRedoStatus +{ + PacketHeader header; + int length; + int lengthAfter; + + u_int32_t undoCount = (u_int32_t)[searchResults count]; + u_int32_t redoCount = (u_int32_t)[searchResultsUndone count]; + + char *buffer, *ptr; + + header.checksum = RandomChecksum(); + header.function = 19; + header.size = 2 * sizeof(u_int32_t); + + length = lengthAfter = sizeof(header) + header.size; + + if ( (buffer = (char *)malloc( length )) == NULL ) + { + NSLog( @"sendSetTargetPID: failed" ); + } + + ptr = buffer; + + COPY_TO_BUFFER( ptr, &header, sizeof(header) ); + COPY_TO_BUFFER( ptr, &undoCount, sizeof(undoCount) ); + COPY_TO_BUFFER( ptr, &redoCount, sizeof(redoCount) ); + + if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length ) + { + NSLog( @"sendUndoRedoStatus: failed" ); + } + + free( buffer ); +} + +- (void)sendAppLaunched:(NSDictionary *)appInfo +{ + PacketHeader header; + + char *buffer, *ptr; + + int length = 0; + int lengthAfter; + + u_int32_t pid = [[appInfo objectForKey:@"NSApplicationProcessIdentifier"] unsignedLongValue]; + NSString *name = [appInfo objectForKey:@"NSApplicationName"]; + + // PID NAME + length += sizeof(u_int32_t) + [name length] + 1; + + header.checksum = RandomChecksum(); + header.function = 21; + header.size = length; + + length += sizeof(header); + // HEADER + + if ( (buffer = (char *)malloc( length ))==NULL ) + { + NSLog( @"sendAppLaunched: failed" ); + + return; + } + + ptr = buffer; + + COPY_TO_BUFFER( ptr, &header, sizeof(header) ); + COPY_TO_BUFFER( ptr, &pid, sizeof(pid) ); + COPY_TO_BUFFER( ptr, [name lossyCString], [name length] + 1 ); + + lengthAfter = length; + + if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length ) + { + NSLog( @"sendAppLaunched: failed" ); + } + + free( buffer ); +} + + +- (void)sendAppQuit:(NSDictionary *)appInfo +{ + PacketHeader header; + + char *buffer, *ptr; + + int length = 0; + int lengthAfter; + + u_int32_t pid = [[appInfo objectForKey:@"NSApplicationProcessIdentifier"] unsignedLongValue]; + + // PID + length += sizeof(pid); + + header.checksum = RandomChecksum(); + header.function = 22; + header.size = length; + + length += sizeof(header); + // HEADER + + if ( (buffer = (char *)malloc( length ))==NULL ) + { + NSLog( @"sendAppQuit: failed" ); + + return; + } + + ptr = buffer; + + COPY_TO_BUFFER( ptr, &header, sizeof(header) ); + COPY_TO_BUFFER( ptr, &pid, sizeof(pid) ); + + lengthAfter = length; + + if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length ) + { + NSLog( @"sendAppQuit: failed" ); + } + + free( buffer ); +} + +- (void)sendTargetAppQuit +{ + PacketHeader header; + int length = sizeof(header); + + header.checksum = RandomChecksum(); + header.function = 23; + header.size = 0; + + if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) ) + { + NSLog( @"sendTargetAppQuit failed" ); + } +} + +- (void)sendPauseFinished:(BOOL)paused +{ + PacketHeader header; + + char *buffer, *ptr; + + // PAUSED + int length = sizeof(paused); + int lengthAfter; + + header.checksum = RandomChecksum(); + header.function = 24; + header.size = length; + + length += sizeof(header); + // HEADER + + if ( (buffer = (char *)malloc( length ))==NULL ) + { + NSLog( @"sendPauseFinished: failed" ); + + return; + } + + ptr = buffer; + + COPY_TO_BUFFER( ptr, &header, sizeof(header) ); + COPY_TO_BUFFER( ptr, &paused, sizeof(paused) ); + + lengthAfter = length; + + if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length ) + { + NSLog( @"sendPauseFinished: failed" ); + } + + free( buffer ); +} + + +- (void)handleClearSearch +{ + [searchResults removeAllObjects]; + [searchResultsUndone removeAllObjects]; + + [self unpause]; +} + +- (void)handleSearch:(char const *)data size:(int)dataSize +{ + TCtype type; + TCsize size; + + char *ptr = (char *)data; + + [self setAction:@"Searching"]; + + COPY_FROM_BUFFER( &type, ptr, sizeof(type) ); + COPY_FROM_BUFFER( &size, ptr, sizeof(size) ); + + if ( ![searchResults lastObject] ) + { + switch ( type ) + { + case TYPE_STRING: + { + switch ( size ) + { + case SIZE_8_BIT: + { + [self firstSearchString8bit:ptr size:(dataSize - (ptr - data))]; + } + break; + } + } + break; + + case TYPE_INTEGER: + { + switch ( size ) + { + case SIZE_8_BIT: + { + int8_t value; + + COPY_FROM_BUFFER( &value, ptr, sizeof(value) ); + [self firstSearchIntegerChar:value]; + } + break; + + case SIZE_16_BIT: + { + int16_t value; + + COPY_FROM_BUFFER( &value, ptr, sizeof(value) ); + [self firstSearchIntegerShort:value]; + } + break; + + case SIZE_32_BIT: + { + int32_t value; + + COPY_FROM_BUFFER( &value, ptr, sizeof(value) ); + [self firstSearchIntegerLong:value]; + } + break; + } + } + break; + + case TYPE_DECIMAL: + { + switch ( size ) + { + case SIZE_32_BIT: + { + float value; + + COPY_FROM_BUFFER( &value, ptr, sizeof(value) ); + [self firstSearchDecimalFloat:value]; + } + break; + + case SIZE_64_BIT: + { + double value; + + COPY_FROM_BUFFER( &value, ptr, sizeof(value) ); + [self firstSearchDecimalDouble:value]; + } + break; + } + } + break; + } + } + else + { + switch ( type ) + { + case TYPE_STRING: + { + switch ( size ) + { + case SIZE_8_BIT: + { + [self searchString8bit:ptr size:(dataSize - (ptr - data))]; + + break; + } + } + } + break; + + case TYPE_INTEGER: + { + switch ( size ) + { + case SIZE_8_BIT: + { + int8_t value; + + COPY_FROM_BUFFER( &value, ptr, sizeof(value) ); + [self searchIntegerChar:value]; + + break; + } + + case SIZE_16_BIT: + { + int16_t value; + + COPY_FROM_BUFFER( &value, ptr, sizeof(value) ); + [self searchIntegerShort:value]; + + break; + } + + case SIZE_32_BIT: + { + int32_t value; + + COPY_FROM_BUFFER( &value, ptr, sizeof(value) ); + [self searchIntegerLong:value]; + + break; + } + } + } + break; + + case TYPE_DECIMAL: + { + switch ( size ) + { + case SIZE_32_BIT: + { + float value; + + COPY_FROM_BUFFER( &value, ptr, sizeof(value) ); + [self searchDecimalFloat:value]; + } + break; + + case SIZE_64_BIT: + { + double value; + + COPY_FROM_BUFFER( &value, ptr, sizeof(value) ); + [self searchDecimalDouble:value]; + } + break; + } + } + break; + } + } + + [self sendVariableList:[(SearchResults *)[searchResults lastObject] data] amount:[[searchResults lastObject] amount]]; + [self sendSearchFinished]; + [self sendUndoRedoStatus]; + + [self setAction:nil]; +} + +- (void)handleChange:(char const *)data size:(int)dataSize +{ + TCtype type; + TCsize size; + + TCaddress *addresses = NULL; + int count; + + char *ptr = (char *)data; + + [self setAction:@"Changing"]; + + // read out the type and size of the variable. + COPY_FROM_BUFFER( &type, ptr, sizeof(type) ); + COPY_FROM_BUFFER( &size, ptr, sizeof(size) ); + + // read the amount of addresses. + COPY_FROM_BUFFER( &count, ptr, sizeof(count) ); + + // save the pointer to the addresses. + addresses = (TCaddress *)ptr; + ptr += TCAddressSize*count; + + switch ( type ) + { + case TYPE_STRING: + { + switch ( size ) + { + case SIZE_8_BIT: + { + [self changeString8bit:ptr size:(dataSize - (ptr - data)) addresses:addresses count:count]; + } + break; + } + } + break; + + case TYPE_INTEGER: + { + switch ( size ) + { + case SIZE_8_BIT: + { + int8_t value; + + COPY_FROM_BUFFER( &value, ptr, sizeof(value) ); + [self changeIntegerChar:value addresses:addresses count:count]; + } + break; + + case SIZE_16_BIT: + { + int16_t value; + + COPY_FROM_BUFFER( &value, ptr, sizeof(value) ); + [self changeIntegerShort:value addresses:addresses count:count]; + } + break; + + case SIZE_32_BIT: + { + int32_t value; + + COPY_FROM_BUFFER( &value, ptr, sizeof(value) ); + [self changeIntegerLong:value addresses:addresses count:count]; + } + break; + } + } + break; + + case TYPE_DECIMAL: + { + switch ( size ) + { + case SIZE_32_BIT: + { + float value; + + COPY_FROM_BUFFER( &value, ptr, sizeof(value) ); + [self changeDecimalFloat:value addresses:addresses count:count]; + } + break; + + case SIZE_64_BIT: + { + double value; + + COPY_FROM_BUFFER( &value, ptr, sizeof(value) ); + [self changeDecimalDouble:value addresses:addresses count:count]; + } + break; + } + } + break; + } + + [self sendChangeFinished]; + + [self setAction:nil]; +} + +- (void)handlePauseTarget +{ + if ( !processPaused ) + { + int wait_status; + + if ( ptrace( PT_ATTACH, processID, 0, 0 ) != -1 ) + { + if ( waitpid( processID, &wait_status, WUNTRACED ) == processID ) + { + if ( WIFSTOPPED(wait_status) ) + { + processPaused = YES; + [self sendPauseFinished:YES]; + } + else + { + NSLog( @"ERROR: process couldn't be paused" ); + [self sendPauseFinished:NO]; + [self sendError:@"Process couldn't be paused." fatal:NO]; + } + } + else + { + NSLog( @"ERROR: process couldn't be paused" ); + [self sendPauseFinished:NO]; + [self sendError:@"Process couldn't be paused." fatal:NO]; + } + } + else + { + NSLog( @"ERROR: process couldn't be paused" ); + [self sendPauseFinished:NO]; + [self sendError:@"Process couldn't be paused." fatal:NO]; + } + } + else + { + ptrace( PT_DETACH, processID, 0, 0 ); + + processPaused = NO; + [self sendPauseFinished:NO]; + } +} + +- (void)handleUndo +{ + SearchResults *results = [searchResults lastObject]; + + if ( results ) + { + [searchResultsUndone addObject:results]; + [searchResults removeLastObject]; + } + + results = [searchResults lastObject]; + if ( results ) + { + [self sendVariableList:[results data] amount:[results amount]]; + } + else + { + [self sendVariableList:NULL amount:0]; + } + + [self sendUndoFinished]; + [self sendUndoRedoStatus]; +} + +- (void)handleRedo +{ + SearchResults *results = [searchResultsUndone lastObject]; + + if ( results ) + { + [searchResults addObject:results]; + [searchResultsUndone removeLastObject]; + } + + results = [searchResults lastObject]; + if ( results ) + { + [self sendVariableList:[results data] amount:[results amount]]; + } + else + { + [self sendVariableList:NULL amount:0]; + } + + [self sendRedoFinished]; + [self sendUndoRedoStatus]; +} + +- (void)handleSetTargetPID:(char const *)data size:(int)size +{ + char *ptr = (char *)data; + + pid_t pid; + + COPY_FROM_BUFFER( &pid, ptr, sizeof(pid) ); + + [self setPID:pid]; +} + + +- (void)unpause +{ + if ( processPaused ) + { + [self handlePauseTarget]; + } +} + +- (void)setPID:(pid_t)pid +{ + kern_return_t result; + + [self unpause]; + + processID = pid; + + if ( (result = task_for_pid( current_task(), processID, &processTask)) != KERN_SUCCESS ) + { + NSLog( @"task_for_pid returned error: %i", result ); + } +} + + +- (void)dealloc +{ + [self unpause]; + + [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self]; + + [searchResults release]; + [searchResultsUndone release]; + + [super dealloc]; +} + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% NSWorkspaceDidLaunchApplicationNotification Notification +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +- (void)processListChanged:(NSNotification *)note +{ + pid_t pid = [[[note userInfo] objectForKey:@"NSApplicationProcessIdentifier"] intValue]; + + if ( /*pid != getpid()*/ sockfd != -1 ) + { + if ( [[note name] isEqualToString:@"NSWorkspaceDidLaunchApplicationNotification"] ) + { + [self sendAppLaunched:[note userInfo]]; + } + else + { + [self sendAppQuit:[note userInfo]]; + + if ( pid == processID ) + { + [self sendTargetAppQuit]; + + // we can't set the new target here because this method is not called + // in the server thread. the client will have to change it. + //[self setPID:[rootProxy serverFirstProcess]]; + processPaused = NO; + } + } + } +} + + +@end + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% Internal Functions +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +BOOL compare_float( float a, float b ) +{ + float const feps = 0.0001f; + + return feps > fabsf( a - b ); +} + +BOOL compare_double( double a, double b ) +{ + double const deps = 0.0000001; + + return deps > fabs( a - b ); +} \ No newline at end of file diff --git a/ClientDelegate.h b/ClientDelegate.h new file mode 100644 index 0000000..6c5dc79 --- /dev/null +++ b/ClientDelegate.h @@ -0,0 +1,20 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: ClientDelegate.h +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + + +@protocol ClientDelegate + +- (void)clientConnectedWithSocket:(int)sock name:(NSString *)name; +- (void)clientDisconnected; +- (void)clientError:(NSString *)error message:(NSString *)message; + +@end \ No newline at end of file diff --git a/English.lproj/AboutBox.nib/classes.nib b/English.lproj/AboutBox.nib/classes.nib new file mode 100644 index 0000000..c9c6005 --- /dev/null +++ b/English.lproj/AboutBox.nib/classes.nib @@ -0,0 +1,13 @@ +{ + IBClasses = ( + { + ACTIONS = {launchEmailButton = id; launchWebsiteButton = id; }; + CLASS = AboutBoxController; + LANGUAGE = ObjC; + OUTLETS = {aboutWindow = NSWindow; }; + SUPERCLASS = NSWindowController; + }, + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/English.lproj/AboutBox.nib/info.nib b/English.lproj/AboutBox.nib/info.nib new file mode 100644 index 0000000..f0d37b7 --- /dev/null +++ b/English.lproj/AboutBox.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 85 112 356 241 0 0 1280 1002 + IBFramework Version + 349.0 + IBOpenObjects + + 5 + + IBSystem Version + 7C107 + + diff --git a/English.lproj/AboutBox.nib/keyedobjects.nib b/English.lproj/AboutBox.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..c7aeaac32c220cfed473acc9e5e3b89420163886 GIT binary patch literal 6680 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 C!}w$X literal 0 HcmV?d00001 diff --git a/English.lproj/AboutBox~.nib/classes.nib b/English.lproj/AboutBox~.nib/classes.nib new file mode 100644 index 0000000..c9c6005 --- /dev/null +++ b/English.lproj/AboutBox~.nib/classes.nib @@ -0,0 +1,13 @@ +{ + IBClasses = ( + { + ACTIONS = {launchEmailButton = id; launchWebsiteButton = id; }; + CLASS = AboutBoxController; + LANGUAGE = ObjC; + OUTLETS = {aboutWindow = NSWindow; }; + SUPERCLASS = NSWindowController; + }, + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/English.lproj/AboutBox~.nib/info.nib b/English.lproj/AboutBox~.nib/info.nib new file mode 100644 index 0000000..f0d37b7 --- /dev/null +++ b/English.lproj/AboutBox~.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 85 112 356 241 0 0 1280 1002 + IBFramework Version + 349.0 + IBOpenObjects + + 5 + + IBSystem Version + 7C107 + + diff --git a/English.lproj/AboutBox~.nib/keyedobjects.nib b/English.lproj/AboutBox~.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..9eb8afaa7045ae5e8ce40541c782dca8913ce819 GIT binary patch literal 6671 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 EKezG4bpQYW literal 0 HcmV?d00001 diff --git a/English.lproj/AboutBox~.nib/objects.nib b/English.lproj/AboutBox~.nib/objects.nib new file mode 100644 index 0000000000000000000000000000000000000000..eeedf8fe284b918d4e5582c76192f5e7a4b823b1 GIT binary patch literal 3216 zcmbtWO>Epm6dvbiNt?|dw3HSE15}_wS(>Ke&_mfIZAt{)M(m0rAr4-9k__>BEZf^{ zdI6_n3vpbfRu+&26_r|u5G6|am5_oFKRM(O5frJ1oGQeDGruiw?9FboB&ZUb?5zFf zy*Kaoo7d8APZ~tEY?H_Zr}<|tr8(!Fne6bu$^0usv5(5O?4UKy+cMdhg4}Y9Zhyq*IHmN=)O>^n-JNxsjXb-S6gG{$grfJ0VT#rk%!w25>Og2Z(*h7?P z>Tb@rWwKSaeVivU*%v4&!4q&jPb`D!DlyS?nZI3jD~Ko4@ENUsVtY;$Z8@)ze$$jE z5$AVgvhm||rCnGIdWH+~7!hjsyj2b=C~#dDHj!b z=N=yTVb$T8fX~us`z)H3;F|;oAQ*?C=H2ofZ&uQ2 z5jXI9kZBCcaW=u5MSx~z64^BrvxK=QlciEAl{eW0(a%!DAZAKo1@BYW{W$V;fp4=cN=53^4*G7lH04dDZ-U8? zM9v{M>-`dUx}dxKv&!C&ZYR7~)`JT|;3)sPRt;SadVLGOzG?7drvkZ7Z|%Y2=XJZk z<=+bfe~3=Iwf4|2b`R8E&xQ!jHxyP^)*uR%HJlrl^$F{+2afKCYC3c%uBN^JT}@A* z0mP7o)GHm;nrefZio?7#hd%!bQvHcY^ajIz+N3EO4NLaxs!2*XTcGxMJ$K7nDh+Q( z=`pn=&}~H43UXcP%9cv6+=kMwQ&iKaT)+dYq`}ot*Sorf-p3sD*HM97e;wU4Imv3* zTe)!pZBJwyQw!VhQq*i(0D#4cpu%C;VxuN;P z!)jK+4*+lA>N!Pqm6dX&V2I1p zk$#)z9h8dOKL#nKxyg~vz>8gW%bdXbaXPd5`d-c_uzebDaUkm)Tz`uUpUk)lszXIw2Zfi5l zLC;?V63j6%0{43UTmuV`mVnf8s}#^y8fd+sY5{04O~tA_f3=aN56o$x9R#s8puzlB zGpe@_^j`;JYwWha+#u8o`{#j{6r;wY7Cu?hVM;6Wi|-*=->GaDmk>-M8Je$-XYixL zXvjdN@Bf=sol51{Uk`313gSG;+OUCSU=~_`SZewL@BBSac`iQ(k_b;GcFK8<{ajb;els}X4K?`O&|<~lw(ZGQA6xL zD`te5nTH0WE*~d=1UAD&*t@aCQbKL({6Ye_QyaNYQ?S1V55gDBM(g!fm0S^$j~r7~ z3a|vT93TuX0cZm>!HWVW;ZXpqqDic(#IlfhpbGFRvFMl%BV(UUn_EwOXoV$ky2ARU-Avl9p20aD?h9m~ViGAV| W-zpiBq=!L=L1A(jqupdV#xek`>KBCo diff --git a/English.lproj/MainMenu.nib/classes.nib b/English.lproj/MainMenu.nib/classes.nib index e08ceca..ad916b0 100644 --- a/English.lproj/MainMenu.nib/classes.nib +++ b/English.lproj/MainMenu.nib/classes.nib @@ -1,25 +1,71 @@ { IBClasses = ( { - ACTIONS = {changeButton = id; processPopup = id; searchButton = id; typePopup = id; }; + ACTIONS = { + launchDebugEmailMenu = id; + launchHelpFile = id; + launchWebsiteMenu = id; + showAboutBoxWindow = id; + showNetTrafficWindow = id; + showPreferenceWindow = id; + }; CLASS = AppController; LANGUAGE = ObjC; + SUPERCLASS = NSObject; + }, + { + ACTIONS = {redoMenu = id; undoMenu = id; }; + CLASS = FirstResponder; + LANGUAGE = ObjC; + SUPERCLASS = NSObject; + }, + { + ACTIONS = { + changeButton = id; + disconnectButton = id; + pauseButton = id; + processMenuItem = id; + searchButton = id; + searchUnknownButton = id; + serverMenuItem = id; + serverMenuLocal = id; + sizeMenu16bit = id; + sizeMenu32bit = id; + sizeMenu64bit = id; + sizeMenu8bit = id; + startButton = id; + typeMenuFloat = id; + typeMenuInteger = id; + typeMenuString = id; + typeMenuUnknown = id; + }; + CLASS = MyDocument; + LANGUAGE = ObjC; OUTLETS = { addressTable = id; changeButton = id; changeTextField = id; + cheatWindow = id; + processMenu = id; processPopup = id; searchButton = id; + searchPopup = id; searchTextField = id; + searchUnknownButton = id; + serverMenu = id; + serverPopup = id; + sizeMenu = id; sizePopup = id; + startButton = id; statusBar = id; statusText = id; + typeMenu = id; typePopup = id; - window = id; + typeTabs = id; + variableValueText = id; }; - SUPERCLASS = NSObject; - }, - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; } + SUPERCLASS = NSDocument; + } ); IBVersion = 1; } \ No newline at end of file diff --git a/English.lproj/MainMenu.nib/info.nib b/English.lproj/MainMenu.nib/info.nib index 6ea9806..6ea4596 100644 --- a/English.lproj/MainMenu.nib/info.nib +++ b/English.lproj/MainMenu.nib/info.nib @@ -3,21 +3,19 @@ IBDocumentLocation - 88 78 356 240 0 0 1280 1002 + 485 133 356 240 0 0 1280 1002 IBEditorPositions 29 - 122 595 201 44 0 0 1280 1002 + 87 519 377 44 0 0 1280 1002 IBFramework Version - 291.0 + 349.0 IBOpenObjects 29 - 348 - 410 IBSystem Version - 6L60 + 7C107 diff --git a/English.lproj/MainMenu.nib/keyedobjects.nib b/English.lproj/MainMenu.nib/keyedobjects.nib index 3d050c817d3440bc28605d39766239ac17092f2f..9dba46f75ebc240c9ca6378ce2b0484c0f53f26d 100644 GIT binary patch literal 9057 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 literal 26124 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 Oeye<}-_4(Wfj|(1fcs{4 zC9Nz=PVGM=z4^U2?`z(NFKC`i<3z?Zu#zI}|FxvBWm%zUEHXGYaT>?XVZ~Gk`j2G= zqA`bpa`O&kD4Q|$ltX-d!DjSZyJNj0vR zs;=2N+mh5{6gWG96KmOsiBqKQj|=<~ze6JE#)9Qj!{IQpE-d-pNvNjnsNh~TU>M3d zWLf(_w)nb`56tK1t>4cVtZv|oL^yM}Uj+e6OTKZO&~5l4ePGX_0|?FibbEUn6a(G}=Q8n&g z+gi^1xkHOW%>Gl;ScYgQW`mMeD3hH?0n0#~=UTrAhAYm)2J(VjUP;L78JN(srtFbg z$&VerFFEnN+{!hM$k0gxPhtaWahy4N^r&#p8_jHXG!d!t5~2e!Y@Ag=ZiDeFHES;{ z)nH&O;tKTqFdD1y3a{ECN&gR{PN)g&aT8Cd>DET^Fa`zNm^qD&jBo_!dA0fm8+
q_W)k7u+4EPqTu1e;L2N4WDGb#BLb21c9uvU+ zIw+VTaWPMXDcv!wCFBu|6BA1Oj4&$EQiZAl{`Xa=05h$wzOYmQ!KLESm&K*Q4|F{x zH{tgdQwQENs%mOVJ&!9aJmRTlT5{XU%X48U)-7M4D?5tK8QnM|pE8umNj2VJPQ5xW zEB2K^-aUEJ%cd@m7`oP2-zt*1(?gJ=jz2PuNqPb&(+zrgA`DGcKq^TZ5KazNYoP3$ zg45n^<+Q*{IL#6L*_vowlc5;M@8gLE4XgG+=5iZ@U}LolxJ^V11G^`0!7fr%rt1Z| zb)ViV(K{vj^a))p&|rYxEb-QobCPK+jWu~3$MG&cuJcmRi>y3@gF;B>P!cPKEPTIH zovIyR!y&N2xoTLCXH#%xC0<+f(H3nh(;Fqa0*#OI!J`|h&Jcv&(344QzzbfaFUs^v zfj)Um@0RGbBE4Uv?PVGY)XWLQ(m0uf{`Fp)OsUiBg5LV=c_(Z@x4y+pUmbfZB1Mf$8rKP}P1 zRoWAv54LLF=orQm**#q0Vk!ZBL-?U<9H(`|lofe!7k;lgMfypJ-nvOYF40Q`x+aDe zC$pgRYl#L^JYj%`Cm?Wj2QNFv#MS#at>XU4R(^Ew`#D~Y;#p^6oZ6eCTX4Wwa#q!| zP9JVsv}<}DdM|@zXUv0fN}kjW+0h;f1K#`6-dLRHF|TJ;AtF^yH{<0kt3Zp3G~lPD zYxH)BKHQ?u%XG7pKTPwyA~+*A-x=Pt=@x7U$fj%c2Yoi(1WJ3~oAAvK5D7jDKykMV zn_hw+p6$b?hk>x;>Cvk@K^s8ms@>oB6`LN}K{{sBRUmn^1j-_)(8b4w*D~_hj0Vq| z_SJ*FX48jUPx!nCC%!)TvuWE1edKC?r5^uPo2~%Gs|?_SBQ(JA;FuzO*5+qg&e8RH z3CC@Ee}q2Z@Z&HCS{9e(u5s9e&8mY>izb2vE`k8CoIk`-2cxm5I^h;5_|RYh&<%oa zi51d0a%i7fu-e1n@QWN=(VNBw_L9ozub@-i>q9#3n>m1O_tq@z+ zpgvnw(Voxczhkw9Rf2v&q!a8sL7VJjg8t36-enKRm`Tt-SPzlH>{%~+Or%kEgP`BA zCq()l>-~`Zgh+3(vjkmZ1%enO$Rg4(J4_@WTP0|j1$B0dpg9KFy3URew88Gj05wOX z0oL{dc88$fv2}tjvFAiO&JwS&O9U0zmxy$jm0xA|Kq)p$(7#yVG;rBO`ZjwMVVeXI z`1vy;eTx;3uulm3E!!s2H`w)lwn5NkwkWX`f>zmSf-bO630h3E(5+amBzn%_dobA+UoIffyMWGhsvqVvh+iVUwo2W@x9Ud#LUn z9=opIp}KT;J)78Prj&79kZ42&VqzlfCT)lj*91+}Bt}hKlUOHjUx`U1Il_Mby;arK zJ>4(}(pB}}|Ni&C|NB0yYE11M)*{K2u7!p~<*yCiX&6RxZ?I?0hAr1>;nd}!R7kL& z8Ae@iP(fHGt5CYq$y8!U0T+%L6`jF!8Pnj=K?^+_&{K=2ds5nv;3vmukQxON?1?d>D%#oE$&B0fRDC28O__=X zXQ9@@zaqZYK~>)1qHb|P!so}DyipkGf9b?#gl1%W+#s;<%^2@@~;8grD*WNh^M z)2C0f3`oxG4XRmPr6m(-J*+Jpvw#S?Jwu@ZjXKc;!DiQ1Ej&0B(g#g5V|>xN2QBDK zE$gE@v`8=&N@-|1xN zB8Sh8T)i=r1ZzZkbnjZDVkK2u8Z2bO=Ft8(4P_AJ#^#+4sJrRo$tAhPPj@5bt#sX87gn{w8V$or0 zU-@wM_{1nXrdm0*VrqTlG}QcI!>9*xBAx=lg%4*Rp8&`B!bR}Zx zp*S47js)D<84jb@XdML!!)SGo)@mUrqf3j$=1Sl1({`k~qgpINpv$COR)@*a>AO`b zlipS%TtuUzRpJyJqKb5Q5JaKrZp^xUY~npo$VDFvZ?1tdF2KK2r`eS(&B83oA}qu{ z%5?n3@vfmi?{9>nTxEgqO67G%Wtbv{3=5b{0ycA?(x~X~-+kGA_wD7T@sk5JMkU6E zFVqBg!YhWza$B~_InhjHFT$(*CgY}Q8b3NR+SYNZlN}}ZxyUr0pEw_!F1=WB+N?NT z&l2D*1a1?IeSL<*TLld18tE}-#0g=f`!Jca&^M0;HGA#+gva`n@WxH2h_qpeflal4+1g{(r z%vev@#(L?M~XJ0f2FIb$L78F$=4*|K3n zYO9I>N#)^hx$(CNF*1x08Mrc@&NPCuCKf;eMK36 zlVh*S{(ooMCIT^EN!j)FV(mRH*uRtZ@LMqI9}86A4O98VIZCm{m12D#>Zj5od=dhy zB7uER3ai!;R&{T1O=8D|GDAo)slfYiw$X|66%~Rfkca3u+vs!Yw)YF3tfq!!wL2@L zR>kHp0^yI9NFmPK_EcgF5~JDNh%n;GsNU6!V0Q@icnC5IO-n+p=PIE#PeQ@yt}{qz zR$fBwQbNVL`2?(jrsb zgmipCeg^a84BjAX^hx?{!5$Ut^8vEQ&j(!1$!PK?#|!F~D=%n<7wD+~s!No|@qxS} z%zpyvnxp(&y1DXo1d+LvftITb)CTn;SFS}~jIj~?rjRkiEaZg{ga>ljCeL47<6BV5 z_!jt$Pq5rn^LwV8*)4RV0 zZo|hzv9uQWsIG1I+Yh5KOZM|Y*pF+1O$s--RZqtU{n#=nyVy=dSs|_MRN=(9V6RZT z#czS++<05psU&xSs@JthU?ikRsrC#+lYx%q%PwA=m*%P*;}m9}A`Vpr`kN(0{5MOo zi+sj08}%dsohG+Ru0e5y`V{)DpfsT>OELt?Ds0TCMLYe0E%Of3pb}MD1F%nJyM5~7 z=OfRz6Lq6K+wHRl%xY}gsnzW0!Re>dCSSFvDzddX?o~yzQ%FF?CDF^WSX3n#wW}0_ z5>1MRY!}@6Jl?ZiKd+vzm$TgsrEPbL$ zMaP5zDa*-axKTx9Fm5#ymA^f}zbQ#vk#8|>CXRdSF%pj3t6)7gwO{ditW7X0MdGtkS<(WD5c>uAw_AzxF}WHupgx(6 zp%*V3W4ZM?BrI95zjA@>E}6t~tBjq%RnILWb1-tFmu1hm^r0*Z>E^3C!ESOgEtt+n zc}hy-U_@qHqqTr-#0R)NyWvKV7K_Ak}5eVGEoKTa_Uxc5Jo;Lu$O58gI`E;T-lrqXRs3Z$ggM- zgI`xNIZTChpKXjH&<#8Qwd1>0L%EPMT8 znRQM=xziQO>!gLeMY22AIV(E9n#;P-UFYsX_qZ-pf96%4V0Zidhqi6pY<5VnuS5Nu zo=OD3^aq10e5JW>9>ZoycH>SlJczI&>*#G3{1w(=ZRqyxgVeYgPOdd>hglw$d8%%G zG#(wo3RP}e51HjQ<^?-M6}{VS)*3q8pv~?;DiP?`v3uvQ)@5z)Zt4@|W^BeP4wAG< zWSaX%5gFLQa{KBS$3h~6n_<^BZ%=|9Au-PR2f;IPBOp`litr3RbVQj;-VC`Q@5C?W zbJQ_Iyjh`~wPKkkw8AoB-$bJlKu*f7W%ZUsIu*#*5eMC4l%gXFEE~@5@{) zG$F@t_@~jlHX1=e>MyeR*0aro3bRJpQSRBP`BSg+y(6j;vZY>i!L5ny^5ms>X08po z%$?clTr8s5{IPV@uU~-pwsKP-u{1#}bh4*S)4+39Z6#cFuda$o%wl~g8ke2bh5&in z3r;cVNwRo?KcPeo#2j)`zJod=ER8!^fa%7C(ztL#?D|73n48C)Ic~M)!1-M|eqIER z*8WNBt&`T=dE`17$#K(jiI=Pb4+(R1i5AS3!vk!g?6ub>cy|TORa?j zdlL2sTez7F;w4f@IA>kD0w0f1!||MT|D^S;oHcKb^>)shL#PI<-lC)B8E_frs4u4J z5Z5?bpHlR`N?Aa#|5aZHU~yLexV5(1+LW^vEh8kFVZnZm$F~W)GUqeJ z?r3c40j|#!F-eI6Q*=W7X=#d;z1Ttki#%S={*=op?Ai^(T72>1#j;0YIz1YxN8lRP4lq)B8q` zohc>zCtKYWOC(jvuzfmHtqO)l6nb(x=naG(Se)6Y;ssaK=X5 zcL)TvRC?IuV&inUsN0CbDCKq;F4u+P0y)Yxn_#j(Ad_uxwO%97xDnNx_24AlCdi$> z1N+D0XwJHBm$hre+D5=}-NIqvOIBmf8lmqW5rLDh71(^dV6$EpWW_cQ6c|&rR4jk5 zG^W~aY^b>0_m|_|-=m&-1bXSzihN~YI(=ryK8QCX(L`G1`N(woop&|1xzxTbj?@GF z2|YlR4l+I_I?_nw&I(+ufP8EtMbRhICr9WunrM( zZ>oWxrGb|%vF7KjqqsWa=Hj~GFiv0TG^IE^_zZ%IC>ISzf%6FDWd31k6pe0+YZxob zNz31>SzZwexP7IV&s@zq!(C9=F%U`yKAA`d=%8`R47>m*)%5fU2;)}xhxGu7hHaA)+-Rf9k)zn&Di!8w}8K3xsH33`3ofHbH zv{%2>v<3mGm*?K{ycpeYngV$V5Z^T})1s|t=l%|9>`39~o&L{SeE8`f=!eS7bF84 zw&U)MX*~_3!aFgh)e0Ccg88XQ25$zuXyB6o`R9c!Ub6FXKru}I77+;E4_JXbzXbqJ zN-*;`Rg)^fE(Yjr0E&j515n|dF+;(g1-PmMf9T_H_$aDD$OZs)D`RUuK0N743X^^a z$n@j8R+WtS>cba?b;edB0BUiGbo`@fbpfPg$qA9mzQw)1T`IwUU?5TfA}S+efLeQB+T~SU~hDb zvlPK2j?0{MZSwo_W|L}Cu+}jomM>@Eh_i<^9Yx3x?V;iFj*e}#m9#l5_#l~7tj zxR8s3uAaEuB=a>tOR=^grRiAT;q1!Sa*SH$C3M^@l$~%VA|46p5xM0gW#L19iY)QG zt=MmoyC%N7#YrF5lY~`GSU%tnWY=_@z}U$v+4T@jqAHwDdHo(FNX;xCft*sJLvGM}0to!nnliVLg-qzqJv0`BnlAqfIJkLpp^Exqkf! z{sjp8Z&*{JOVhBr)CJE=4=Yt1Q?2CqElGJ>!pn;V2ox1t!tzwIB!Wr`+vR~{UdgvO zDMV3LuHnrBb%xWd=oU0fzP4e|db)x>m0?Pg^+}jiaT7UmeNx^QTNBcKbD-$l6pBRX z;;#&PzBUz6oBV7Rv{IaI@^hJ=qT$TJFIsPk+f-wNHwUK$v*VYjwmMSdfV>Y*uHm$h zKHA|osc0zH9o3U5?`m_NuL&n!#}Td9X*=bazI3l+$96g6MsPo0ZN0eNoR+Dhl8sP- z(x7BVN_P86J2VIqY(8|i!pJq_9|9M!#;Q}T4ZP5mzai_P}lZ?A$zYBd+ zA;SqI`t!GN%5g#dP?FkWA2sq9qDDgU?)8+TNFHCB;uN_k&%gxfj=%5D5KZ2juQG*_ z6c>1sawrjlQ>l5RsQ4;L=sk4g;?67yMIn*~Lb?X!BOpftxa_KVRH&dVN#z|VptT&W zcPM_U_e=72PBVP19F=$KEwpAR$<{k1NabZog41xm{m0gBK=-N9L-03_QA|k8JSjBb=>b^Ixzp8Wo*U z!Cx2rqxOS>-ERwy9qu)F{0u7(8walYY>L>t#Rm3&+4sX??QaPlv_%C@6z{Qd!SiZh zyooIrfN=9@(4HswE`X2&|AYrNx=s6}-~*ufL%}b?0~;5XX+ zf`8gRD%e4E!v6JcAY!xVKk#*z;Pde~Ao#lg{Hx$s*zJOU5*;fAUk}jN1^XHvcfQx| z7JRoI7W^)|Rq%hZk=Xu#p3h?E!QPLxKi=;YybX_^&$gR!!Q9p>><4hM*J`J!oUZezbf8*K+ari{KMrqe<`~Jl-w%7Xidp{4IFw z6?`@x*o_=T=NAP3Aih9q5?|=oW6u@*p8-02zP&*3e+3i@c))HHd^6s0b!q_~Sca?v z&Wp=I9!C;a0(3XvNU*%lJ|TD*fX4-YKOWx`d@-;fnSa3}07N|AC-^}d71g~!_?lo} z!Q)w639|}8N5-tpgM`1fuI9S*NzL`WaBMjqssUrnqHV^KP`9^?J%x?v#*1}*~1WCEkC5Jv|KEB6u7ioYi~*z~=;CWqiI3|91N|!8h5<1>b8g!D+mGjo_e+J4Jj3@ShQUsXY$u(f0PZ-68lL sfc~H0FdueAa8k%o!Ec2>AD&=YtTtx$tm#UG6QOQBG^A}$(EpqG|4e2RXaE2J diff --git a/English.lproj/MainMenu~.nib/classes.nib b/English.lproj/MainMenu~.nib/classes.nib index e08ceca..bfbeb7d 100644 --- a/English.lproj/MainMenu~.nib/classes.nib +++ b/English.lproj/MainMenu~.nib/classes.nib @@ -1,25 +1,72 @@ { IBClasses = ( { - ACTIONS = {changeButton = id; processPopup = id; searchButton = id; typePopup = id; }; + ACTIONS = { + launchDebugEmailMenu = id; + launchEmailMenu = id; + launchHelpFile = id; + launchWebsiteMenu = id; + showAboutBoxWindow = id; + showNetTrafficWindow = id; + showPreferenceWindow = id; + }; CLASS = AppController; LANGUAGE = ObjC; + SUPERCLASS = NSObject; + }, + { + ACTIONS = {redoMenu = id; undoMenu = id; }; + CLASS = FirstResponder; + LANGUAGE = ObjC; + SUPERCLASS = NSObject; + }, + { + ACTIONS = { + changeButton = id; + disconnectButton = id; + pauseButton = id; + processMenuItem = id; + searchButton = id; + searchUnknownButton = id; + serverMenuItem = id; + serverMenuLocal = id; + sizeMenu16bit = id; + sizeMenu32bit = id; + sizeMenu64bit = id; + sizeMenu8bit = id; + startButton = id; + typeMenuFloat = id; + typeMenuInteger = id; + typeMenuString = id; + typeMenuUnknown = id; + }; + CLASS = MyDocument; + LANGUAGE = ObjC; OUTLETS = { addressTable = id; changeButton = id; changeTextField = id; + cheatWindow = id; + processMenu = id; processPopup = id; searchButton = id; + searchPopup = id; searchTextField = id; + searchUnknownButton = id; + serverMenu = id; + serverPopup = id; + sizeMenu = id; sizePopup = id; + startButton = id; statusBar = id; statusText = id; + typeMenu = id; typePopup = id; - window = id; + typeTabs = id; + variableValueText = id; }; - SUPERCLASS = NSObject; - }, - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; } + SUPERCLASS = NSDocument; + } ); IBVersion = 1; } \ No newline at end of file diff --git a/English.lproj/MainMenu~.nib/info.nib b/English.lproj/MainMenu~.nib/info.nib index 6ea9806..6ea4596 100644 --- a/English.lproj/MainMenu~.nib/info.nib +++ b/English.lproj/MainMenu~.nib/info.nib @@ -3,21 +3,19 @@ IBDocumentLocation - 88 78 356 240 0 0 1280 1002 + 485 133 356 240 0 0 1280 1002 IBEditorPositions 29 - 122 595 201 44 0 0 1280 1002 + 87 519 377 44 0 0 1280 1002 IBFramework Version - 291.0 + 349.0 IBOpenObjects 29 - 348 - 410 IBSystem Version - 6L60 + 7C107 diff --git a/English.lproj/MainMenu~.nib/keyedobjects.nib b/English.lproj/MainMenu~.nib/keyedobjects.nib index 026ec00f89de79efef60b9d94332ef9db162ace0..9dba46f75ebc240c9ca6378ce2b0484c0f53f26d 100644 GIT binary patch literal 9057 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 literal 26156 zcmbU}2Vhi1(_3CS5|Z4dl7u9eN=rg|g^*q#7swTAAcW+AK*)s@s=!-%kt)51-kV6b zAR-E)fFdfQh>D_E5h)7%^WNn`KvBOR&D|@zv$M0)c4qblR8^GM)J8;nfG{G6A`bCL zK%&a0S5QfH>EQAa=IWk7@KIB4sq7hK88F0LT3cfbsz^w)B&ZTUZ^+fgNjf;WJa|}LKD#xG!@N4E6^&m1#LsGq2uTz zdK0~k-a#Lu>*yQw6Z#q5Lif<0m|_m|Si}z46}#aU*b{qWAMA^@I1snOZE-ssh9ht! zj=`}w9w*^+oPjfO4$g;f9WKCyxI6BFE$Am)jcf2kJPl9Bv+*1}7r%fP;l+3fUWQlT zRd@~Fh_~WhcsJgUU&06RA$$zKieJNT;FI_*dpx4bIA*230X>(kriYOSw}XIjbt;~PIi+Q z$$s(@IY^F>W8`J>DtVo}NluZs$lK%{@*Z5BBj?End@tpDv(_>2kV?uBPkgdb&woFS?a(gLjPXpnK?xbU!^r57T2Zjp?iOHFz_HzE0ny zXX$(NeR`38LNC)R^fUSe{fb_v-_RTMJNiBS31`rsWnQAUlyQEecj+JWPY!XIOH|x@ z+CwzTmEL-*7kJ{rB+xCif%v6L*jMgL}v$E{3Q0CNJ$XTkzg+)spw)wR|8S#0T>sd}}_OkAUkaKAMl?6H#A2neWJV;xqYd z?kt~6RD2%ah0o`^^4)j?Z{$sUcfKdzn=j`3^Ci5QAIJ|zz4;3G8^&AsDt;-4R zO>h@H1TVo`Xesy!TESlk5`u*gp^ea1XeYFXmJvdGAzDZfl7$XJMmkO_8f4l{65snM5qxbM(d{{Wa zw-w$HP6FgNVa!u}jIbVhzXc;4!<%rC@V1N%e6Pow;OaE=E)w1n&Is=aXNC8~k>V(E zv^Yi_D?TTV6UU1aL`h`gL~)WhS)3wH6{m^Q#TnvEahCYJI9r?}&K2j0^Th??3*tg? zk+@h~A}$q|iOa2k}SoC-G%WKL9RG52|SC&~u z)^sm0=q;Aoq5=cFujyV=QD?4EEPjUE)!gs|;AU7VE5RoK_n-#u3QC4GdDqqIE`XCz z)7uJ2zLYyzfyj4#0JUo9HPTW&6s{Ej@^fXd1_0LKCB*1P4c;Y*5@F;aBY#Sp8ClQp z2}T|;@`ofavW}7Z3qYqfs4Z#-;FN)6m=Z5h`9&BCN9|$e;Wf3@<&}dZ4zNk90w<`n zM4rP16p5lxG>YkMrBNkx?P<)S>)8FfMVNQVkgSJVv^B0Vx7BQl}xs0Zo^i)UTU?&ao@Fy|h|?23{>GX1TO zjpel!W_YeEuQZg8QLaix$ybdX^{}$VYK^Ufp>}kISyxgsR9PG=ko1z$p+HFJVkoUP zn=9omjUy=Jhh>lvP_88hX`^%1D1;TYNmEn6KS1fFEuY#w-`G%HX=4u8yOQd zE>t@>t!5l)@BSgm(&7*t;5=A*w-k-{s0J5jQXPzGynvl6ahzrb1HMU z-ds~?|Mq^+x#-iuYI5ZwjKsvy8 zghF%}URN?oVPqgxW_8I(T?w$zC?J1TxzYm2WT>k$SIa0$E*h>`U}`U<{FBt0NIS{- zJPgJpjg_?~p~(QU8vvD|tV5GfT(R1H?AWMSnP@SIG65sw;4*I9IBSn-XnL{Q1^QH5 z234DDYVs<}WTv-NZ$Q()yv#&#AoDUY0g*Rz!DRU-4d~XP)qv_6WkuGa zdRWwTXg%71Hlj^vGu&+ivX@#H2CmX`GAtFAYPia@l*%|s9VHJA9^b#O(03Ae!&|!209Yx3B{$=zEdQ}l2Sx^R5 zTk0yyY@->i7y#oJ81jH-)urZ&3PV*%DaccnFr z8zE&?$~vhGl#NlofC1`;Re}oj_$%NZ-|&MIehK-bqn&Q72=q?Q_tB=2IiE3jTDz8)?TP01o1oGvYOF;PLZc?<=E+B)*lY)5$WR8K!`pIK% zN1vd}=u>nBeTF_qSJ4;f8u}7_g}w%c0Ew)!R4eNMAQbkE0^%8gf0b2)YZ$>s@!W1s>=3Jge#0L%i^ z>Z1I*((?8C+f~D{lognUTy= za9%`swDJ$B!2rtE?LPVg+A3|o3sRGL-Ccb48g~vuq^!7?!peZ~?3K1U9)iPr;`% z;L}CQRAVV4pwqay9~Y}V$Bqq)jED%;%AYd%q7(xgJ8m2(+6K!TWz~PN&?>Ug^y03# z8?dq!2`fRmS_vYnpJL#BS)+m-!Fr^_25iJ8upK(7NXk>&Nx6z$mvw7oOtdm=G+al4 zUH@F|jO=kw+zZ5^w=5924=%!eaX(y)`=cwk1P{QaxD1=oT|5vELSLgHcrY% z@E|-CSHSl$T#54(+3Qwq9%!zvHkW0U4KgcFz(!{cuPYx>QUME~cn@h6V5cfeYQe@R zR^IBT!xEKSz@5l6SCovF6|lLoF3+kQ6jrv3>}IJcmmTb4wR3^N1RDtXb#}F7nA}v^ ze>6hQ8wQ&c5SsM5+FDDc&1Fzt*BEMHXa$CCNX2jhf}kE`P#{oE`b9~7qz9GZwYUzCz$5V}+yN&8 zQAgu3cr1PnkHh0}9-aV;CgDo-HD-XfuF^crQdwS_Zz+XU*OiYlmnl1+LF;3_I*g|Ds`8-f%xG`fX-w*1y2R_Y@>LM z)LZH$^(+D}uN0g-Z9YVIWl?Q|XW*H57JeQG1m2yc4rEHv<_4)y(!=l#D1r)>L4mVf zI&@e`^-!x6&BODRHL`AHZ2i~cd3b@Ww>7~a?8+|3_NwWS3ni1%S%#}nqhS#>#Z{In zQ+ujPYNdGfI$UZ~scUh)LgsEV zWGf@cMq@Kxi`U`xc!Sl_$XXYWkwswh6jYD*IScdc|>(MlDHR(ky@t#ktCNrR-pQu+TN zh;IUlr|=0`5Tzl~(8ogZHa;y4lPY={M^~8@nP>otm)kh%-Fp1`({q*=@EpwfyfWu1 z$zt7N$!ix8XPq>xT~y?_ak4dO^h)ptvM-69@J0L~>?5z?OQ2>yLSHMKDR2F19@|o> zS{g3ZD%xn_@P}zlHPI)y3jG+61}px=@`AU6@Tai6pn6?uVeuaWQ`Y&(#6Fv~B2O}|oR`J6OL8fi5-v0z{mtvksG*Z@RFjT;BspC`;snPO-L;9{8X zH~3p+IV)i~Z-7=D3OxHAn3?aTvC zk45YXz6JYxd(t4e1OEwb`(0S92lyd=1R)Te?013h zTvJt24c1FmrvnGpm}{*TOVPGAqXcR?-BK<4u)rR&c*ubfSu;SVbjv9DsY;qAjh7}# z6Qs$~#0H)rxE?={SFBjsXbwOYLXkxRId=wk02o8D)={$Mw(W&x5IK@6Z?+ZjiIQ0< zy1}Z0R|dXB_p$ISLUG9CZ3!?Eu>-PR!~2N6G*z0?Ks(|fV`imQbK$)^Y>l`ur+ZdZp2+#@R{lWX+|S9QP%aAb<#icb=70O{u_oOUc{TURN&86`%BM1 zW+;FvhbI0LLxCL2Ud!+&8H)HxbGl~?E~y-3{#U*r0VGi73z%&X2__*jUr6($h0=U! zk@SLX9b4Cvpr-3sP1>SrX@PZDD=$%kvXar(6_N$)>7@yi7B?=;)8qinNh0tL5~+}5 znY7fZIb&tj87l)${NMdK5~EP2M%J7p_DRi2;y`mQmsUtC8&LWWE(}Q|5hRJkDVlSY zw7OAqk`AP!v{qWvOWv&ht>z?Y^(5A|tx&kniHIGuPUPJ`wk>1wmUQ|RP zIL}^Vqr+n&q7tIa?V`bmG`X=x5J(OICm2H14Pi_3u&N4h1J{up8_#zpU1V3QAv9~Q zT~9ibd=v+AU@+I(R=HreI*D{8-AEzP69X|46X{NRke;L$=}r2OBGQ-iBgLdYDIo($ zDJdgnGLQ@+gGo6VLWYtGGK^Fb3#lT*Nj0e5gL3_CHbVc3OXH-;K+iQ!y^O$=8uJeJ|<49{hFF~iFkUc>MvhPS{PlbK`|d7jKBbHD@4FBxF20B6Ra zIET_MX{WRme3Ay=chr+!FPTT?lLcUAw@cfk9Uwe-61pM#qhujjL>4pBfsu}kB=>}{ zO!+Y2ox))@0fFtC3&c4GTB?W1FTshahWA$IkE|rCKs+EQQa+$z#|mF^g27U~9$v0S zap1gJUs|6&p2b>HFYS}|JR9ZpWWK`RdqF{`%h7*rT1ADn)}n=dNTtFi;O~=7u=6Q_ z%{Zu+yh`Ow5=;*$wMC)TR^&srfoaJ!*VLB7MhNya(jjU8vq#-Qc9LB{r~}eV(!r*L z+C%n|eT;-K63Iw#zrwomT5V&XyKuOTTnBo?j%%1al=%rn4gn&ErDM_&&^O8&J+VUM zDA}n@_9#pzZGfe&32YnWSBlj>irG_U3GQTNSxI%7(zshmrMcpX;a-E`j!Va-SDrCb za)P`8Gd+o!Gi0NX^s4k)pWN~?vsQ85YYGR0E*K2=%59U3OU)CboQ6@(NN-9fo-qm@ zPtL+9?*cvFkWThf256+2NrwLfxC;R8ed)CH*0aG~Y@pNIJq?2`BV~>NMC&SLP;mVO zqK{eaWAce~PI~9rP(LMC$Y+4$yV6mL{TIRFJ-szIY~Bsv=itGXQ%{`qF5E1ZCkE8$bsWMAVz0NS&x!x*=VEHY{g= zm`dTk30|JmOZq|j{@Jivk}Hao-Rusb4|A=#N15{VmAhsMfyn|2vU0q9Tg!^DQ7ge1?a(k7<2R7?8pXqI+{QI+6ppH((eKcxRPmnvwoxQXg+_O~k5ux& zjor!fG=>JCO6h)I>j>5@@8gL=gLr5#T>7)G75dW+0Lvs)0k9wTss)EynQ0?3O3KQrA?%^VTbnk>MwM~{p{ObH zO&jE);c^32QB&j_8^Gl9VRAzlw(Hw;rJk66S7=eeaP!`c(|i0H=BJ0(sSG>zlv!jD zX!Azs@X`ePM0lwN+Xp7Gw!EYwyS%#QarUxl+n&(2iecwIm9V30$f7lU-v*Xjd|18{j9Iun?CE0hRU;V(c4O0nK7EaE`>a3Im2E}pPAv=Fos(;J_8yJf@~>Z z=G(Wyyh8xEbm(IuK#L)eRfS$!=tV2&FtUYKQVXp@L*%qZd4-$@(LvP7T+MJ0!+=tt z;`kXY5Na>4$~9M1!Gw#|?Hg1J#D%makF)pM(Uv;xNK0KsnYN;Qs984crE=Cd+$vGE z6e5j~%+5=f0X2%#I$Em;QzJqn=_nb=5QbY7t6OHtnK^BV7GjKb3P>vpX~BO9Z#s>! z^f?5+RvU)ff(3zCYE6xdzyR~0@=C3>&lBw@P)TN&P=>>b)oq(hNM;|cWgrY#T`p(y zWGK%Va}u45Y8Yya^0hhGZBrf&K%WX>_{0a8V3L1DwCi*eVl%gsjiaWsMN! z2|h8WS@d}{oZ(o8VSn4Ikp>O@Wn}&e;|TzB={%X!5*SV_RtJHRXfoD7Id`gs%{(kF zShzAR1O?4c^nQUZq>C8NW;lo8z8F`#U=A#XIOe zE1kM9+}TPEdB@s7j{nD&mA<41nhCzR#d#@Z=qa zdobLSVY7Mx!$TQXqFYc7lG=Aq9MG5pIJtr3>(DP^$y#ROT8Sce!Z-&cclw}AX z)YJ3-Sa3k!LI>!F=n%a`KavX$V8D;%f&*u}{t{xih~YjA_v>X%;6t#%%IuB#d-^HE zeXUz}IhpoU?%s;S=k@d|!^JX_JdvEI*U&{k9g_3(ONIw9++S|;L@u3v{WzD-a0zhg z<7_p!RF4Cu)^Mqu#s!E<8kc^{aA_eZBNvD<%keWgeh>+HKA40OD3?=rO%iuNzMJR- zeEtA`KQcUs;ei1ur@d}jXQw3U6c`O4lr?FR{gab#kd1`SzW`^-fPMvPp2WcXVD!r$ zC-@+6rNEH`WbqKRZ^}rw>F@Lo!=o7e;Y!VIJ1 z|My4`eV~Zd9Yw4jJ|$LDbCFBhk*Sp=+Ele7T`F|36Q zD=}In4cnAbNnA1)!7y0yrA;4qL$70Uno_2fl47x@lKvB| zfC**(&V7nj1q`omx@_IJT$vD?n?BQX1`f>q>kRK;_}PIyt~=Su^^m=bZ47VkW334= zS3)wmF!`Aks9YaZz!hBXY?_&5hhL1D6li^nx z1`lM9qF7@TWg4TfYE(R^`*BEv^Ml$%0c#9CT$jqAfzal?UG!6d%K@P2C)9=y7k2D>M-ZNk5#xEkm$C-rW? zBx~gq7gxuPaL(;e_=w?y3?Bf|ORui084M1p&I}b)+Qx!aZZtQB8w>d*CD$%z-x)s4 z@F6+oIn?5`Hy*|Pbykd2A(}+s5tYHUVLF0f}>EPplX+s!eK`L0cU}&vA#i!`u3)hH|HdI^(Cco~&?R0fqajRqLH*_-!kDD*Fh<;fa+C zOP^i)01NuMT>HSCa7K^^XZXxNX8eGA?sF%(H?0{zZZCI=dkdN5&E8pt!M(n~@Hrb{ zPSHQ`5 zl{NFut>(Vwu3PDSh2bw4zQ*uX8@<1+=TzeE_$I^OH;@Nie|i`_45PwEzL|BHpBVm8A$^$DHI(;P|Bny{-&{dvDV9LsOAGy^R-g#Plo?cbb(AY zWm6g@7i0dD2HVX0%NmRia8@ZA>;dGvZH(9$+|riUfWeN93GX#FO179Wvc;7BL-{aA zwAC?ccn&FXWn<2_TF1S}?U3Dp8R$Nl$+zL#^6j_~yoV3v!?;b556>%ueMkAgatzyKfQFkXORUH4IU--_9xHRDZx4N6x5jVa-(cQ$I5jU$f z19cs%xRB8auyp^bx%omxWOh9zzj{VmFyaB&b}Ol?F>9^m&sycQPKhmdj;<@S0qbKe zw1|YO=m>CHq5jOq@qCXbGxbnFbIh9fhQ-XQF_@tqN?t}yc0B(bF(pY2sMyK}_yK$=U&e?( zBPon%d+JKcE9F{E+bR!Q&n*DAZ%?C$^W{)=@Ki}I*~t&#hjL1`A6OsGeZdaAj*&n{ zg8J21?;1-^tJej zZ5e6TQ;sK;!?vp_aYpbXc_4T=BkdUpvx%Cm!i68Z7IJ%V)W+6TCft9*tq3~Fscy5} z;~xT;gq|ar~4mR3N`{OUWnT9)C-{$e;g)h>}SC=dtJW z)A<>;u@f0d>fX4wl1sJunKmw&y`IeBW|R7UFfVJ98hK`Y;MT@ajp#HmP?L&oem=i| ze?hTAB%Kj(;M0t9#^|v%TFftDB$JU0+kngJ`Q?mcJu^|vuLPj0U{_7D8OiC_ShAp% z;TCp!=Ej;Xk&kxr_53=1J-z#Wf? zRRSvH4 zQBK}Hrq4e9MMgk57;P-N$400F+xdh1A^tFbgg?q3<6q`q;a}xn z9v)t3`A5Fv&+_l`@9~PLGg8b*Uq<@%k^5@lv@6)yrXqTQf1ihqSqUSc#roUkZ`*e8 zm+JYC7#Z+v1V7==S}9xFJEH<}`4B{q4@kHJ>skkcGm3S?U{Hml0dM}ZziNI6dn#uW zWZiGYTXqL(GRte^gkssVN52Z>`9dboAVvn8GAb-J=E9NBZvHhizb-c)!pKmgp=5-) zu;$sVzk}9LwZh0SMk;&Dt+i=2GWiYQb}5s1qJ)Y6$wu<3?s_xCR%`$BY@dz8Ex_S7 z83%CbYx{PClO|dy5v;3{(dhQMU^jLcvJLM?NjIZwd_Ms$_uIhm0uJ>;R}X%2jLhZfMmQ|>U0 zk?FnU4qEweZ{eV4ckzKPzH*nDjLhn*bb(mkh;mC^P2sayQwV@=fpWLmi~z0O;Sdol zoxG!i5bP$mxh>c=Y*DMT>>=0Pb4hAf^CvtEc5;)HlcmNK$}k=4(}Fi{8|W_YsC6c5z#=@^Nn28*?FE$-a^1V)u;UOR zYn^;BQQ<9amXHI%ItZ4ngrM0FC9t**HrZPtWVQ&-fct>a(sA>l%IXn>J^(QlRl^&&;ugwdLW}cqh)=;~6E{~L zAC8IuUJ&%tL7RGR6Y{amFmJcI2NjfH*iRu_4?T z1cAm)fafPbyH(s`@+bEqJ%}Gb5OfWM6gxq9b1lT}R&#Ul>oC`?5acpITwy1--iCP> zz+A`|bV7m9Rp=%Z3VOjH7zLBiUFae76nY80g+4-&&{yau6bt=@5@CQ)DwGLkVW2Qb z7%Y?vLxiD1g)mI06f8oOFkGk>YJ^&$P8cDK6h;Z7g)zcd;W=TPFkYA-NCFck3X_D% z!W3buFin^)%n)V@vxMh`*}@!Qt}suSFD!tOUl0}wi-g6(5@D&ZOjs_g5LODSgw?_t zVXaWl$Oc9>G6FkDaBQ|PvXzl-jBICQ2O~Qf*~Q3iM)okWm&paQ;9BfwjC-US|Y;9^?&1PBQW)Bc~X7n~~FuoM8lFs%IH_ zmy!1vImgI(MlLY&J|kegFEa8WBbOKfTm3O3pD=Qn5s0r|VFUuRpEGimkuMmz#>kh9 ze8tGuj9h2r8%7}XdV`Vg82O%&n~eOx$d8Qt#K_N#{KCkujND@6H%4wV@;f7U7`e;H zJx1;~IlvdyOF3sIrxBYxRrctziwgqTa4bSjra#fhz?-!@Gv&!uBHB zLu*x|?K%>EP5`zEPd1B$z2W2YsgZCD(b_*I@=176#z^?rICNAGt9LE8Y7!@igfOuH z3-p$vJ%oe8At>)EfS<8h57&p`d@~$0lW!Z4#Mr>msnK=;fg)pD6096aa+`eYtx)$wq^;5cZ8 zdNPC?Mn-b3plf!M9^87;my8CTIEHkCy3q5a1P(KRJtxya`}HJ)@d-$W7|Br3*cM21 zjDW)oJLy9*39uuzHG5~bma5!ku zkC;h+ID#Q@eIPplTAEu6dT$_T?+x5OQUM8|bqxd-&H-J8^TGw;ec=P)qVS<`N%%7p@9l2-k!!g|CFKh3mpM!neW=;XC1b;im9|@T2gP@U!rX@T+i3 z_)WMi{4U%P?h5yW`@$c>pTYy-q3}pVA{L2AMNZ^JK@>%m*i5t&?ZxJzgXkzaiE2?J zI*Tr%tLP@WiymSN(Npviy~UQIkLWA?(E>3q`$X5RIZq>@M~Ydy2ip-eMoINbD>26N|}VHAEKk7JZ)RA5wORK;jBM(r52 zXS6w^4vac7>cps;Q4OQcjJh!D%BUNo?u>dc+JaF}M!gvIX0#=vK8*S@>c^;-QGW(y zr8JPyAVz~34PmquqpcZj!)RMZ+c6r-Xc(j6jJ9Vqg3(AuqZo~5G=|YwM&lTbXEcG) zL`IVsO=h$Mqa7JdVYCyYsf?yEn$BnjqnV6mF`CV24x_n@<}uot(JqYUGpb{>fYGju zc4M@VQ9YvuMvaV`812qz4@P@3+KbWNjP_x)h|#``_G7e|(f*8oyF+$jLv3s4x@7!oyX{WMi(&p z0;3BV6gtwy402m^DWl66UC!tV2Gxsn6{D*eUBl>FM(Y_}$LM-SH)wEK*Dy>RB4> zufg6L+*yNrX|PWHk~&y}CuuMM@2CD%JzWh@T-7cbT%um3!7xgu`o8)b4bE1-sKEo( z^E7z51`pHVP3rj??4q8i!EqW4SmbH&Sak~x9DRQ;656>O@re#xL$)()LS$-SA(HP}vr*Qp0-aG1JCg9|jcxdxZ1Z>fDWxLkv0sDIO7Knws$8mv{{ z(_kQoqXsY1U|xfVXz&ybUZ%mRYJ>U@^&EAQ26xopN;QlVtKOjAuXa;Iv&kB~RfET= z7i(~+`j7^zHMorix7OfD4Q{L6t-%%zUZKG~HF%8%GYy7z4jLS#hCzUEF!QAvyhO2` zDsNRwu&sIN)}IfPe*$Nn${WR^`sSrK{6v^s=`CUS*;P*zh(h5f$&%n#!3yCg z^EShe)%_;^0Y5p{Lgl9lRi&u%RlQY%RW&N6nyp%<+OFEE+M{|=^^)qK>WJ!P)vK!4 zRVP(%sm`d*s?Mq2SADAbR`s3grs}rpQ8V1ksacC=fz3jjr8LWGR?w_Rv;NI2&1##C zYc{XhvSu5aZECi)+4g3iHoMX6mL0aUw{x=#u#2~7foX7{JvLwhJdvbVQ)un)0sZQs^D)IQuk z!amAA#y-wI!9K~pgMEs9vHf8C8hgopru}03rS>cAH`s5o-)g_zevkb=`=j=6+Mlui z%KnGuw0ZO9F3tU#cWd6S`H^R3N~HGie~spjuC zzvF-%>>b=3JRCe7S~~bTXdMC^f*iseA{@*Pqa7wWtajM$aM0m|!&!$<9e#Htj+~?5 zXz!?Ybar%gba(V{^mO!f40H^4?Btl{nCY19*w=BOW3A&j$El7p9A`OhaeUG7sN*Te z3yxPDzjM6l_@m=3$GeUX93MHgbP92bcIxER#i_efPp95aMNa*k`a7AO200CO8to)G zO>>&(w7_YJ(=w+OPFtMzIvsL)+3B>?1*gxQzHs{9=?ACZogS*Gx`jGK9i@&@$Eg$4 zN$ND<&i?9Bb%k0|&r+{aZ&UA8Ur=9FUsHdjzOMdW{e$`^4bt!$QRArb*7$0oHL;pp zO`)c@rc^UrGeR>#Ge@&Xvr4m1vtM&S^P1+Y=7Q$3=DOx*XVJN(v#+z(Ing=Wxtnt@ z=Q8JE&U2iXIInfy=Dfpsm-8Oymz>W!f8zY5^N-H=Tzp-$E&(n*uatxPIySwd;4T zKe+znde;rRQ8(Vr-K~Y2ms_A)H@ALnL)|90O>>*;w%l!l+a|Z|Zadxfx$Sp5;C9IE zq}zG7_uVeKU2^-%?H70CPTV)yt_gL{U15BD*!z16L++(Q6Fb|8zaF1CYJ3MxIyy$Vr!pVpWSZE$UmWZ?U7r$1N_mxYFXg7B^e`*y64y z_O$bK@NDZD>KX2t<5}S;c~114>^aqQuIF0Mjh;t5k9l73{KoT!=PfU_m$R3vm%CSc zuQIQJUW2`ccvW~+dewQ2_nPLlz-xuqCa=q0H@t3n^WM(hzTU09+jzJ04)bpB9qAqI z9qXOqo#w6gHhPzPS9_24p6|WXd#Cqq@4enfykGG?<^7KLMeobrU$w+7X-mGP*wU|M zX3LV6r7g`Z2ep)1zSQzy%U4?7YI(cmotF1n{?YP*kKohH$IGXsPqa_2PiG&4PnA!# zPp!}MK9_tx_POkH#pk-Oi?5rnhi{N?h;M7(DBon?Oy3;ee!e4pC;G1O-Qs)H_ch@Ua=)Q|!~86M!~JUf>ikCfjrJSsH_mT@AM=~!H^pz7-weN5 zezX1N`YrHVNM=kMYl>>uZ!>7VVN>tF6a)PI=2 z#b5HDOLOlUK)&6GC#+MHZ9i&zx$WJyf3$tr4!3h|=hm)8yU2FWwVTjxV!J8r z=CnK7?v-}O+r8WFe7g_YU1@i{-Hmql+dT+Hp)^z*8WahB-55q2peHQjb*jHgchCK==;hy0E;lbgp!?VJ3!@GnJ4j&pmDtuY^%J9|U`@=7W ze-wT>{A&1}_S*J=?L*q9wl8dNY~Q1O@Af0xk7+-y{o?jtwEwF8H|@V`e=9;85f~8? z5gid1kr@>1lFQ7%zIQLUodM&(3xj?zU9j9L-3 zI;uWuTh!60SE7zbU5L6E^-(YK@T#(2iGjPZ+U7ZVoKFQz1BNX)R9s+gLX5iz4E*uAl* zW6#E(i~TmvCr%re5!WkjP~7;qX>l{-OXCN|m&aGcTjHzZ>*7bnkBuK6&*CS?Pm7-! zKRbS2{0s4m@5Nt; zzZm~f{1*u%Auu5%p-n<)Li>c6g#3i^go*@9!nA}f2|E+^Bz&FlZNm2nKPLQ=a6jQe zqGO^aF(k2LqCU}-*e`Kx;`l_CxFYdf;`@moCSFebEb)uPpObJBm*kk_k)%yBCG||| zlhiM%Bxy*}u%z)xENNNNuB5$5N0PotdX(HExm9x88Vs7dt%ch&yr}ojQhgY~L}eV_wH09W5QJJI?L6tmD3pM?1dO@#BuyJO149R>$8v z-b*1VT#7@AbBcS4UrJa?R7#hWf|SCP-YG>X!%{3Mqf%JPft153$5LKRc|GM!%DX9_ zr(8?9*U7Pyrju8v_)bZkI(9O3n%QY~r+J+=ciPkGRHvJr?x)(PI;M6?O;62A%}wo+ z+COzl>f+R8sVh_0q;5&wn|dhqi`4H^e@y))4W%_p)23ym4M}?;ZE@PNv~_7OrX5H- zoOUejWZJuF@1=c_E~LApcS!G)o}QkQ-YvaX`jGUw>4(yfroWPYGX353OX;7b|B!w! z!#Be}BPgR)MrcN2Mu&_}8MzriCI}$-LraS6=fA?4bB>#Rhu<3YiZVs ztW8<3W__D=JKH_mGrMJWKz2}eR(5W7m+WrY`s|wQ5!s`&CudL1UZ1@wduR5C*>|$< zXFtfX&vD2J&xy>5$?2HWDJM6lOU{6tkvU^>Cgp6&*`Bj2XK&7doD(^3=DeMAA?I?= z^_&|yH*qRy+|IeW+#b2Ta>wM3%awBHyXzeFE`JW*E6qAURmDIyvn@cd9`_q@|NbU$lIK^HScuZ z*}QXkpLa%`X=iQcHl4#e$9GY8@$7QC%lrA0^QYy{%%7b?x3{P*%NvyoV%-3pSvOcWR9C4RuB+9J)Q!=N(@DBXx~aMax|O;u zy1lw1x;J#^bysyabiWs<3fv3)3nB_)3py3#6m&1>Q_!zqP(fuuUBS45sRauP))Z_j zI9TvX!I^?f1z#5YP;k2|?%KSoXV<{4;ay|8cI=wnwQIN4-8L8gUU;wY&%#G~qUZH0 zy}jO1uhF~eJ@j6BAH7x|s1MP%(TD2W>!b9s`UHKlK1H9V&(!DWJL`4&ZhC{hyS|sc zNMEcUpf~FW>xb$q^~3eG`jPrE`f++mKS@7TKSTe#ey)Cjevy8ueuaLuzFxmUzgfRc zzf-?Q|DyhY{;>X-{#E_!`jh&%^k?+%>d)&x&|lJjqQ9cQs{c}dU4KJ=Q~#6xSN(1M zUHu>WhX!om45Go#;9yW2Tnz38PeV(CpCP~yY-nw0X9zb$8e$Cbh9pBrL#iRekZs5_ z@(OHLN#mGHf;MFzhz$GrVLtWH@Sg#ciHo6&G7`==>My)Z>7-DQ~Y-RCV|QauV;^HbV}IiSquDsfIK)_Cv>2<6 zb;gm#F~;YN6O0p$Q;gG%GmW#2bBzm(i;PQ+%Z;myYmDoR8;x6x+l{-7dyV^z2aJb| zM~$x-j~m}Go-&>`o;AK_ykNX&ykz{uc*S_t_@(h{<2S||#_x?k8hv3{$x)^FRV>7D-rV-1je diff --git a/English.lproj/MainMenu~.nib/objects.nib b/English.lproj/MainMenu~.nib/objects.nib index 5b9086e1f68f90078970beed897f7cd88497ce76..f524ff74e6322980177ee60878832c0cd0dd7c1f 100644 GIT binary patch literal 4629 zcmb7HeP|oW6`!?bMX_u-JvZsm5W4@AWfj|(1fcs{4 zC9Nz=PVGM=z4^U2?`z(NFKC`i<3z?Zu#zI}|FxvBWm%zUEHXGYaT>?XVZ~Gk`j2G= zqA`bpa`O&kD4Q|$ltX-d!DjSZyJNj0vR zs;=2N+mh5{6gWG96KmOsiBqKQj|=<~ze6JE#)9Qj!{IQpE-d-pNvNjnsNh~TU>M3d zWLf(_w)nb`56tK1t>4cVtZv|oL^yM}Uj+e6OTKZO&~5l4ePGX_0|?FibbEUn6a(G}=Q8n&g z+gi^1xkHOW%>Gl;ScYgQW`mMeD3hH?0n0#~=UTrAhAYm)2J(VjUP;L78JN(srtFbg z$&VerFFEnN+{!hM$k0gxPhtaWahy4N^r&#p8_jHXG!d!t5~2e!Y@Ag=ZiDeFHES;{ z)nH&O;tKTqFdD1y3a{ECN&gR{PN)g&aT8Cd>DET^Fa`zNm^qD&jBo_!dA0fm8+
q_W)k7u+4EPqTu1e;L2N4WDGb#BLb21c9uvU+ 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 diff --git a/English.lproj/MyDocument.nib/classes.nib b/English.lproj/MyDocument.nib/classes.nib new file mode 100644 index 0000000..20e9ef1 --- /dev/null +++ b/English.lproj/MyDocument.nib/classes.nib @@ -0,0 +1,55 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = { + cancelButton = id; + changeButton = id; + clearSearchButton = id; + okButton = id; + pauseButton = id; + processMenuItem = id; + recurringChangeButton = id; + redoMenu = id; + searchButton = id; + serverMenuDisconnect = id; + serverMenuItem = id; + serverMenuLocal = id; + typePopup = id; + undoMenu = id; + }; + CLASS = MyDocument; + LANGUAGE = ObjC; + OUTLETS = { + addressTable = NSTableView; + cancelButton = NSButton; + changeButton = NSButton; + changeSecondsCombo = NSComboBox; + changeSheet = NSWindow; + changeTextField = NSTextField; + cheatWindow = NSWindow; + clearSearchButton = NSButton; + decimalSizeMenu = NSMenu; + integerSizeMenu = NSMenu; + okButton = NSButton; + pauseButton = NSButton; + processMenu = NSMenu; + processPopup = NSPopUpButton; + recurringChangeButton = NSButton; + searchButton = NSButton; + searchRadioMatrix = NSMatrix; + searchTextField = NSTextField; + serverMenu = NSMenu; + serverPopup = NSPopUpButton; + sizePopup = NSPopUpButton; + statusBar = NSProgressIndicator; + statusText = NSTextField; + stringSizeMenu = NSMenu; + typeMenu = NSMenu; + typePopup = NSPopUpButton; + }; + SUPERCLASS = NSDocument; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/English.lproj/MyDocument.nib/info.nib b/English.lproj/MyDocument.nib/info.nib new file mode 100644 index 0000000..defb22a --- /dev/null +++ b/English.lproj/MyDocument.nib/info.nib @@ -0,0 +1,37 @@ + + + + + IBDocumentLocation + 555 97 356 406 0 0 1280 1002 + IBEditorPositions + + 143 + 402 411 134 106 0 0 1280 1002 + 192 + 272 343 101 49 0 0 1280 1002 + 207 + 376 382 134 48 0 0 1280 1002 + 400 + 612 529 69 87 0 0 1280 1002 + 405 + 509 334 77 68 0 0 1280 1002 + 410 + 509 326 77 49 0 0 1280 1002 + + IBFramework Version + 349.0 + IBOldestOS + 2 + IBOpenObjects + + 610 + 285 + 192 + 143 + 400 + + IBSystem Version + 7C107 + + diff --git a/English.lproj/MyDocument.nib/keyedobjects.nib b/English.lproj/MyDocument.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..a85797383067b9870004db21191354faf9247536 GIT binary patch literal 22858 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 literal 0 HcmV?d00001 diff --git a/English.lproj/MyDocument~.nib/classes.nib b/English.lproj/MyDocument~.nib/classes.nib new file mode 100644 index 0000000..9b031d9 --- /dev/null +++ b/English.lproj/MyDocument~.nib/classes.nib @@ -0,0 +1,54 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = { + cancelButton = id; + changeButton = id; + clearSearchButton = id; + okButton = id; + pauseButton = id; + processMenuItem = id; + redoMenu = id; + searchButton = id; + serverMenuDisconnect = id; + serverMenuItem = id; + serverMenuLocal = id; + typePopup = id; + undoMenu = id; + }; + CLASS = MyDocument; + LANGUAGE = ObjC; + OUTLETS = { + addressTable = NSTableView; + cancelButton = NSButton; + changeButton = NSButton; + changeSecondsCombo = NSComboBox; + changeSheet = NSWindow; + changeTextField = NSTextField; + cheatWindow = NSWindow; + clearSearchButton = NSButton; + decimalSizeMenu = NSMenu; + integerSizeMenu = NSMenu; + okButton = NSButton; + pauseButton = NSButton; + processMenu = NSMenu; + processPopup = NSPopUpButton; + recurringChangeButton = NSButton; + searchButton = NSButton; + searchRadioMatrix = NSMatrix; + searchTextField = NSTextField; + serverMenu = NSMenu; + serverPopup = NSPopUpButton; + sizePopup = NSPopUpButton; + statusBar = NSProgressIndicator; + statusText = NSTextField; + stringSizeMenu = NSMenu; + typeMenu = NSMenu; + typePopup = NSPopUpButton; + }; + SUPERCLASS = NSDocument; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/English.lproj/MyDocument~.nib/info.nib b/English.lproj/MyDocument~.nib/info.nib new file mode 100644 index 0000000..288842a --- /dev/null +++ b/English.lproj/MyDocument~.nib/info.nib @@ -0,0 +1,37 @@ + + + + + IBDocumentLocation + 555 97 356 406 0 0 1280 1002 + IBEditorPositions + + 143 + 402 411 134 106 0 0 1280 1002 + 192 + 272 343 101 49 0 0 1280 1002 + 207 + 376 382 134 48 0 0 1280 1002 + 400 + 612 529 69 87 0 0 1280 1002 + 405 + 509 334 77 68 0 0 1280 1002 + 410 + 509 326 77 49 0 0 1280 1002 + + IBFramework Version + 349.0 + IBOldestOS + 2 + IBOpenObjects + + 143 + 610 + 192 + 400 + 285 + + IBSystem Version + 7C107 + + diff --git a/English.lproj/MyDocument~.nib/keyedobjects.nib b/English.lproj/MyDocument~.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..d05cb297e5fa760e05a901d0a4130bd87f7d0caa GIT binary patch literal 22742 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 + + + + IBDocumentLocation + 512 126 356 240 0 0 1280 1002 + IBFramework Version + 349.0 + IBOldestOS + 1 + IBOpenObjects + + 26 + + IBSystem Version + 7C107 + + diff --git a/English.lproj/NetTraffic.nib/keyedobjects.nib b/English.lproj/NetTraffic.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..01c4b5e47a3a00fed6c6e9f63bb9943d3de917d5 GIT binary patch literal 6495 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 BDG>kw literal 0 HcmV?d00001 diff --git a/English.lproj/NetTraffic~.nib/classes.nib b/English.lproj/NetTraffic~.nib/classes.nib new file mode 100644 index 0000000..35f6f8c --- /dev/null +++ b/English.lproj/NetTraffic~.nib/classes.nib @@ -0,0 +1,21 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {killConnectionButton = id; }; + CLASS = NetTrafficController; + LANGUAGE = ObjC; + OUTLETS = { + broadcastNameText = id; + connectionCountText = id; + delegate = id; + killConnectionButton = id; + listenPortText = id; + netTrafficWindow = id; + serverListTable = id; + }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/English.lproj/NetTraffic~.nib/info.nib b/English.lproj/NetTraffic~.nib/info.nib new file mode 100644 index 0000000..95a67e7 --- /dev/null +++ b/English.lproj/NetTraffic~.nib/info.nib @@ -0,0 +1,18 @@ + + + + + IBDocumentLocation + 512 126 356 240 0 0 1280 1002 + IBFramework Version + 349.0 + IBOldestOS + 1 + IBOpenObjects + + 26 + + IBSystem Version + 7C107 + + diff --git a/English.lproj/NetTraffic~.nib/keyedobjects.nib b/English.lproj/NetTraffic~.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..ece02b9bc1409405be91f288245103873b050049 GIT binary patch literal 6495 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 literal 0 HcmV?d00001 diff --git a/English.lproj/NetTraffic~.nib/objects.nib b/English.lproj/NetTraffic~.nib/objects.nib new file mode 100644 index 0000000000000000000000000000000000000000..2a6b2e54b57ba53019ba80270ae1731d5950c2a9 GIT binary patch literal 2640 zcma)8U2NM_6uwTzBHjxS*CN!naO=srDmE+J= z2yITT?<*ooO~VHJVOiBK+BBkUst{;JLQIt_1bbpHL+l0d4onEOoMSsbg9(u;j(dFW zx!?KDch0r1Lz|kQiL|ED__*%+n20E+`ug^-IK0107v0M;cN6M*S( z*?d!?lP@#Yj@ayqZMP{vGu(mK8#Fzkq=0c!Kq2_SQI;m~dH5Tm-PuNB-`d8NC z5wXD9(`iXUq!FFmS}$aIHnIv!2#2U3E*G(@akLv349*cPGFX$|dK<961~{mb4|QP* zs)5%U;OmGLN@rsu0}i&e1F8~Fi1D-*ipIxj1KQ#&L1oO(0-8?IsZEm*a(z4IFM}BB zKHaWQLojoI(_li_0JvWxp$&ZR{ZDiq2PDvADs)&;wFb1MS@O*-i2VgbuDG!`*K=Q| zlix6Nxc+D6-Hn1kZ8E8*4VD`lfMyLr(1p`FsUV&B>(oDQ@M89nQ=k!cqv*|FbJgjH zk*YemeI;KhW(j&YDiVdjenJBK0ko~4>wwwFSC}`M43peG%UWigM-xgdLKu360Czt; z5a!GoT^J1@l+nOH0)0txeeZwp<5$>i9D(=j(uMR8`lg3$F0R4G-{)@wSQKyzwua>Q z2ZLD#P#_(0(@96jmurcS0%X|B0bPc5W!8cdQ><71F}Lyqaq;+=3QQ&(oqWp;0`sEi zr0+y=W7+%X4OFDTIzaq5g_Gg1WPq@{j^Z#-Q&h#4CfLmnut>Ut1ilW3Pz9jhlV=~F z2BG?g4~O~_36-YPTqhrG!^!;#C?1C{c4G7MdJ`J60(BXmW;FtQtNo+1uLK1=Sp>&tiybw^`wNvVV~IYP%L zqm~!&>&1^=vJytD(dl&d*0#5 zhIw{4o}w~mH)njv9j_V!^I=rry@lxBUrWNA9ns7iB@f=_PM%y{<OHeu zF&C=lV%1!#ns>@YzgdLHFgu$L&OO|`2gdGH{j_z`;pQ@!VHVcs(q3*>zy#-RV@AX3 zX>=QsWV$sSIy4D|=4Kg8&1V8P7r;`V$lP3X;xs}-oF%X!wAvWly9YMB<2p7DdV5>~ ztlBW88qDk#zyvq&+AxewcBAOW2JVT*qSEN0j3!e!_UwVJKr4S|A0P0fZVMLXr;&u# zNxPCblK*fl|E9%xhWYdyhm)W&cbqfBU5g0@M{Cmcu|1P?PZ>bw6fJ&e9Bt0(^}qawLfp&+h9!#R>v;u&u6XTGuB_v zS$Cec$Tq9`gtZj1Jlm~>C#~PNSd~qdZ--UhSlnGCdDx(PcwkTwmH3bf+@SV3{~M}X BDNFzW literal 0 HcmV?d00001 diff --git a/English.lproj/Preferences.nib/classes.nib b/English.lproj/Preferences.nib/classes.nib new file mode 100644 index 0000000..d0ff1c9 --- /dev/null +++ b/English.lproj/Preferences.nib/classes.nib @@ -0,0 +1,27 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = { + allowRemoteButton = id; + broadcastNameTextField = id; + listenPortTextField = id; + playSoundsButton = id; + windowsOnTopButton = id; + }; + CLASS = PreferenceController; + LANGUAGE = ObjC; + OUTLETS = { + allowRemoteButton = id; + broadcastNameTextField = id; + delegate = id; + listenPortTextField = id; + playSoundsButton = id; + prefsWindow = id; + windowsOnTopButton = id; + }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/English.lproj/Preferences.nib/info.nib b/English.lproj/Preferences.nib/info.nib new file mode 100644 index 0000000..e8caea5 --- /dev/null +++ b/English.lproj/Preferences.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 531 250 356 240 0 0 1280 1002 + IBFramework Version + 349.0 + IBOpenObjects + + 9 + + IBSystem Version + 7C107 + + diff --git a/English.lproj/Preferences.nib/keyedobjects.nib b/English.lproj/Preferences.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..69fd8d0dda1bb9eeeb547cec7bb1e5f0641d9dd9 GIT binary patch literal 7158 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 Gw*4=~9KAyT literal 0 HcmV?d00001 diff --git a/English.lproj/Preferences~.nib/classes.nib b/English.lproj/Preferences~.nib/classes.nib new file mode 100644 index 0000000..d0ff1c9 --- /dev/null +++ b/English.lproj/Preferences~.nib/classes.nib @@ -0,0 +1,27 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = { + allowRemoteButton = id; + broadcastNameTextField = id; + listenPortTextField = id; + playSoundsButton = id; + windowsOnTopButton = id; + }; + CLASS = PreferenceController; + LANGUAGE = ObjC; + OUTLETS = { + allowRemoteButton = id; + broadcastNameTextField = id; + delegate = id; + listenPortTextField = id; + playSoundsButton = id; + prefsWindow = id; + windowsOnTopButton = id; + }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/English.lproj/Preferences~.nib/info.nib b/English.lproj/Preferences~.nib/info.nib new file mode 100644 index 0000000..e8caea5 --- /dev/null +++ b/English.lproj/Preferences~.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 531 250 356 240 0 0 1280 1002 + IBFramework Version + 349.0 + IBOpenObjects + + 9 + + IBSystem Version + 7C107 + + diff --git a/English.lproj/Preferences~.nib/keyedobjects.nib b/English.lproj/Preferences~.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..0e6a08a90ca4fb76c3e44a719bc3eba2ac0a0f92 GIT binary patch literal 7112 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 Qe}Yi|+e`ax_)bjyA2yp`AOHXW literal 0 HcmV?d00001 diff --git a/English.lproj/Preferences~.nib/objects.nib b/English.lproj/Preferences~.nib/objects.nib new file mode 100644 index 0000000000000000000000000000000000000000..dbaceaec87e8ad4e16071dcf33acd889ba0989e7 GIT binary patch literal 2959 zcma)8Yit`;7QWYZ(ns7TaTBWY5YwfA%A+)Gfhs)eBq+NP;1nEz5JK9?_@)^c&$#0; zA-~Y1ckXXAaz`FOv7&;U0?X31!b7xB1W1)Y0}{KHSXBzqYNb`AWq(v!^;g3=Gq&T> zAYsenJLjHz&i9>r?m0KnWz7~?u4tJ|&fD?-aGK_vZ_i}MhQ}vgWQz5eY{@qHiSx~w zY$PF$8>x(xik6X&gnP?8md2%^mbFY(KSs-(-raZ9WK+y!y23^b-7*bLW2SHfr)sws zX%Cky%g_nuTQb>(&R)(tGudZUHUp!sO!jG3EEsx@nWXIUH_ca^yh{aO ztqPYfzQy0E&;ufh3-ahdbP&i1_KG#CGA+034Yv*yftzC!e!!;P{Yb96->o;OC4g6& zP>32rZ!H{Qn)WE?Nr1Fbp*fN!geQ=_12$kkM*(?%+26xE zobdsazrM7Bqls{7&BN;r;;^Nqwpgbp59D0Q_4>=bJQ^N zvSl$d5%OxilJZ*+B)T6%6}xvo1O!&40IUT$Ia#t;E{Z-TQluAC$0)_{0Hw#&kdtiA zlCn>P;9sIvYY@-K8SxQ~yI%{w8HuG8*n7@zgq2KD^RgC!JF3YFn>MsCVIeVTmU22m z&cbtSGfzB!IQxQ~Aa>WE?T&BkXVdm;ReR_s`|~yX@8<>o)+e9Rv!Hx#^Ji=JmHiv& zI0$_oQl$3?La1;c>Vt4B9e0Vxm2{dyUUV+L4+=Xh*zsXmdFhyGl=R$s)|{r0E-ke! zsMa`y;{{Q_XXSggG=`XI}QbPDcJR3aO=ZCZFjJAPjF^WaCu9xG7$6} z4Cen3__qh=?hX3y50>`_J0A#6(qJJOZ0!qfIviAQ^N;uhFBUyx!y|@b$fHob8CFjr FegWH{yiNcB literal 0 HcmV?d00001 diff --git a/Info-The_Cheat__Upgraded_.plist b/Info-The_Cheat__Upgraded_.plist new file mode 100644 index 0000000..0d9ad20 --- /dev/null +++ b/Info-The_Cheat__Upgraded_.plist @@ -0,0 +1,43 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleDocumentTypes + + + CFBundleTypeName + The Cheat + CFBundleTypeRole + Editor + NSDocumentClass + MyDocument + + + CFBundleExecutable + The Cheat + CFBundleGetInfoString + The Cheat 1.0 + CFBundleIconFile + icon_b.icns + CFBundleIdentifier + com.brokenzipper.TheCheat + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + The Cheat + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ThCh + CFBundleVersion + 1B03 + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/ListenerDelegate.h b/ListenerDelegate.h new file mode 100644 index 0000000..2253e66 --- /dev/null +++ b/ListenerDelegate.h @@ -0,0 +1,22 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: ListenerDelegate.h +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + + +@protocol ListenerDelegate + +- (void)listenerListeningWithSocket:(int)sock; +- (void)listenerDisconnected; +- (void)listenerError:(NSString *)error message:(NSString *)message; + +- (void)listenerReceivedNewConnection:(int)sock; + +@end \ No newline at end of file diff --git a/MenuExtras.h b/MenuExtras.h new file mode 100644 index 0000000..4f9f3a1 --- /dev/null +++ b/MenuExtras.h @@ -0,0 +1,25 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: MenuExtras.h +// Created: Wed Sep 17 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + + +@interface NSMenu (MenuExtras) + +- (void)removeItemWithTitle:(NSString *)title; +- (void)removeAllItemsWithTitle:(NSString *)title; +- (void)removeItemWithTag:(int)tag; + +- (void)removeAllItems; + +- (void)enableAllItems; +- (void)disableAllItems; + +@end \ No newline at end of file diff --git a/MenuExtras.m b/MenuExtras.m new file mode 100644 index 0000000..d8af851 --- /dev/null +++ b/MenuExtras.m @@ -0,0 +1,89 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: MenuExtras.m +// Created: Wed Sep 17 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import "MenuExtras.h" + + +@implementation NSMenu (MenuExtras) + +- (void)removeItemWithTitle:(NSString *)title +{ + int i, top = [self numberOfItems]; + + for ( i = 0; i < top; i++ ) + { + if ( [[[self itemAtIndex:i] title] isEqualToString:title] ) + { + [self removeItemAtIndex:i]; + break; + } + } +} + +- (void)removeAllItemsWithTitle:(NSString *)title +{ + int i, top = [self numberOfItems] - 1; + + for ( i = top; i >= 0; i-- ) + { + if ( [[[self itemAtIndex:i] title] isEqualToString:title] ) + { + [self removeItemAtIndex:i]; + } + } +} + +- (void)removeItemWithTag:(int)tag +{ + int i, top = [self numberOfItems]; + + for ( i = 0; i < top; i++ ) + { + if ( [[self itemAtIndex:i] tag] == tag ) + { + [self removeItemAtIndex:i]; + break; + } + } +} + + +- (void)removeAllItems +{ + int i, top = [self numberOfItems]; + + for ( i = 0; i < top; i++ ) + { + [self removeItemAtIndex:0]; + } +} + + +- (void)enableAllItems +{ + int i, top = [self numberOfItems]; + + for ( i = 0; i < top; i++ ) + { + [[self itemAtIndex:i] setEnabled:YES]; + } +} + +- (void)disableAllItems +{ + int i, top = [self numberOfItems]; + + for ( i = 0; i < top; i++ ) + { + [[self itemAtIndex:i] setEnabled:NO]; + } +} + +@end \ No newline at end of file diff --git a/MyDocument.h b/MyDocument.h new file mode 100644 index 0000000..1e928e0 --- /dev/null +++ b/MyDocument.h @@ -0,0 +1,198 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: MyDocument.h +// Created: Sun Sep 07 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + +#include + +#import "ClientDelegate.h" + +#import "MenuExtras.h" + +#include "cheat_types.h" +#include "cheat_globals.h" +#include "cheat_net.h" + + +@interface MyDocument : NSDocument < ClientDelegate > +{ + // allows for easy interface updating + TCstatus status, lastStatus; + + // dealing with connecting + BOOL waitingToConnect; + NSConnection *connection; + NSData *connectionAddress; + NSString *connectionName; + int sockfd; + NSNetServiceBrowser *browser; + + // for updating the interface + NSString *targetName; + int targetPID; + BOOL targetPaused; + + // list of broadcast servers + NSMutableArray *serverList; + NSMutableArray *addressList; + + TCaddress *searchResults; + int searchResultsAmount; + + // to allow for connecting on new document + BOOL everConnected; + + // for the status field + NSString *savedStatusText; + NSColor *savedStatusColor; + NSTimer *statusTextTimer; + + // for updating the interface + int undoCount, redoCount; + BOOL addressSelected; + + // for changing variables every x seconds + NSTimer *changeTimer; + + // INTERFACE OUTLETS + IBOutlet NSWindow *cheatWindow; + IBOutlet NSPopUpButton *serverPopup; + IBOutlet NSButton *pauseButton; + IBOutlet NSPopUpButton *processPopup; + IBOutlet NSPopUpButton *typePopup; + IBOutlet NSPopUpButton *sizePopup; + IBOutlet NSTextField *searchTextField; + IBOutlet NSMatrix *searchRadioMatrix; + IBOutlet NSButton *searchButton; + IBOutlet NSButton *clearSearchButton; + IBOutlet NSButton *changeButton; + IBOutlet NSTableView *addressTable; + IBOutlet NSTextField *statusText; + IBOutlet NSProgressIndicator *statusBar; + + IBOutlet NSMenu *serverMenu; + IBOutlet NSMenu *processMenu; + IBOutlet NSMenu *typeMenu; + IBOutlet NSMenu *stringSizeMenu; + IBOutlet NSMenu *integerSizeMenu; + IBOutlet NSMenu *decimalSizeMenu; + + // FOR THE CHANGE SHEET + IBOutlet NSWindow *changeSheet; + IBOutlet NSTextField *changeTextField; + IBOutlet NSButton *recurringChangeButton; + IBOutlet NSComboBox *changeSecondsCombo; + IBOutlet NSButton *cancelButton; + IBOutlet NSButton *okButton; +} + +// UPDATE INTERFACE +- (void)initialInterfaceSetup; + +- (void)updateSearchButton; +- (void)updatePauseButton; +- (void)updateSearchBoxes; +- (void)updateChangeButton; + +- (void)setStatusDisconnected; +- (void)setStatusConnected; +- (void)setStatusCheating; +- (void)setStatusSearching; +- (void)setStatusChanging; +- (void)setStatusChangingLater; +- (void)setStatusChangingContinuously; +- (void)setStatusUndoing; +- (void)setStatusRedoing; +- (void)setStatusToLast; + +- (void)setStatusText:(NSString *)msg duration:(NSTimeInterval)seconds; +- (void)setStatusText:(NSString *)msg duration:(NSTimeInterval)seconds color:(NSColor *)color; +- (void)statusTextTimer:(NSTimer *)timer; + +// UPDATE CHANGE SHEET + + + +// CONNECT/DISCONNECT TO SERVER +- (void)connectToLocal; +- (void)connectToServer:(NSData *)addr name:(NSString *)name; +- (void)disconnect; + +// SEND NETWORK MESSAGE +- (void)sendProcessListRequest; +- (void)sendClearSearch; +- (void)sendSearch:(char const *)data size:(int)size; +- (void)sendChange:(char const *)data size:(int)size; +- (void)sendPauseTarget; +- (void)sendVariableValueRequest; +- (void)sendUndoRequest; +- (void)sendRedoRequest; +- (void)sendSetTargetPID:(int)pid; + +// RECEIVED NETWORK MESSAGE +- (void)receivedProcessList:(NSData *)data; +- (void)receivedSearchFinished; +- (void)receivedVariableList:(NSData *)data; +- (void)receivedChangeFinished; +- (void)receivedError:(NSData *)data; +- (void)receivedUndoFinished; +- (void)receivedRedoFinished; +- (void)receivedUndoRedoStatus:(NSData *)data; +- (void)receivedAppLaunched:(NSData *)data; +- (void)receivedAppQuit:(NSData *)data; +- (void)receivedTargetQuit; +- (void)receivedPauseFinished:(NSData *)data; + +// SEARCHING/CHANGING COMMANDS +- (void)search; +- (void)change; + +- (void)changeSheet:(NSWindow *)sheet returned:(int)returned context:(void *)context; + +- (void)changeTimer:(NSTimer *)timer; + +// CHEAT WINDOW INTERFACE +- (IBAction)typePopup:(id)sender; + +- (IBAction)searchButton:(id)sender; +- (IBAction)clearSearchButton:(id)sender; + +- (IBAction)changeButton:(id)sender; + +- (IBAction)serverMenuItem:(id)sender; +- (IBAction)serverMenuDisconnect:(id)sender; +- (IBAction)serverMenuLocal:(id)sender; +- (IBAction)processMenuItem:(id)sender; + +- (IBAction)pauseButton:(id)sender; + +- (IBAction)undoMenu:(id)sender; +- (IBAction)redoMenu:(id)sender; + +// CHANGE SHEET INTERFACE +- (IBAction)cancelButton:(id)sender; +- (IBAction)okButton:(id)sender; + +- (IBAction)recurringChangeButton:(id)sender; + +// CLEAN UP +- (void)clearSearch; +- (void)destroyResults; + +// NOTIFICATION SELECTORS +- (void)listenerStarted:(NSNotification *)note; +- (void)listenerStopped:(NSNotification *)note; + +- (void)windowsOnTopChanged:(NSNotification *)note; + +// ERROR HANDLING +- (void)handleErrorMessage:(NSString *)msg fatal:(BOOL)fatal; + +@end \ No newline at end of file diff --git a/MyDocument.m b/MyDocument.m new file mode 100644 index 0000000..a4733cc --- /dev/null +++ b/MyDocument.m @@ -0,0 +1,1737 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: MyDocument.m +// Created: Sun Sep 07 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import "MyDocument.h" + +#import "CheatClient.h" + + +// Internal Functions +void TCPlaySound( NSString *name ); + + +@implementation MyDocument + +- (id)init +{ + if ( self = [super init] ) + { + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + + // initialize stuff + sockfd = -1; + serverList = [[NSMutableArray alloc] init]; + addressList = [[NSMutableArray alloc] init]; + + // set up the network browser + browser = [[NSNetServiceBrowser alloc] init]; + [browser setDelegate:self]; + [browser searchForServicesOfType:@"_cheat._tcp." inDomain:@"local."]; + + // notifications to receive + [nc addObserver:self selector:@selector(listenerStarted:) name:@"TCListenerStarted" object:nil]; + [nc addObserver:self selector:@selector(listenerStopped:) name:@"TCListenerStopped" object:nil]; + [nc addObserver:self selector:@selector(windowsOnTopChanged:) name:@"TCWindowsOnTopChanged" object:nil]; + + [self connectToLocal]; + } + + return self; +} + +- (NSString *)windowNibName +{ + return @"MyDocument"; +} + +- (NSString *)displayName +{ + return [NSString stringWithFormat:@"The Cheat %i", TCGlobalDocumentCount++]; +} + +- (void)windowControllerDidLoadNib:(NSWindowController *)controller +{ + [super windowControllerDidLoadNib:controller]; + + [self initialInterfaceSetup]; +} + + +- (void)close +{ + // closing the window will automatically disconnect the client from the server, + // but if the application is quitting, the client may not get a chance to exit. + // this _should_ be OK. + [self disconnect]; + + // clean up status timer stuff. + // we do this here because we don't want the timer to fire after the window is gone + // since we need to use the window in that method. + [savedStatusColor release], savedStatusColor = nil; + [savedStatusText release], savedStatusText = nil; + [statusTextTimer invalidate]; + [statusTextTimer release], statusTextTimer = nil; + + [super close]; +} + + +- (void)initialInterfaceSetup +{ + NSString *localName = @"Local"; //[NSString stringWithFormat:@"%@ (local)", TCGlobalBroadcastName]; + + // misc window settings + [cheatWindow useOptimizedDrawing:YES]; + [cheatWindow setFrameAutosaveName:@"TCCheatWindow"]; + + // set options + if ( TCGlobalWindowsOnTop ) + { + [cheatWindow setLevel:NSPopUpMenuWindowLevel]; + } + + // set up the server menu default items + [serverMenu removeAllItems]; + [serverMenu addItemWithTitle:@"Not Connected" action:@selector(serverMenuDisconnect:) keyEquivalent:@""]; + [serverMenu addItemWithTitle:localName action:@selector(serverMenuLocal:) keyEquivalent:@""]; + [processMenu removeAllItems]; + + // give tags to the menu items. + [[typeMenu itemWithTitle:@"Integer"] setTag:TYPE_INTEGER]; + [[typeMenu itemWithTitle:@"String"] setTag:TYPE_STRING]; + [[typeMenu itemWithTitle:@"Decimal"] setTag:TYPE_DECIMAL]; + [[typeMenu itemWithTitle:@"Unknown Value"] setTag:TYPE_UNKNOWN]; + [[stringSizeMenu itemWithTitle:@"8-bit"] setTag:SIZE_8_BIT]; + [[integerSizeMenu itemWithTitle:@"char"] setTag:SIZE_8_BIT]; + [[integerSizeMenu itemWithTitle:@"short"] setTag:SIZE_16_BIT]; + [[integerSizeMenu itemWithTitle:@"long"] setTag:SIZE_32_BIT]; + [[decimalSizeMenu itemWithTitle:@"float"] setTag:SIZE_32_BIT]; + [[decimalSizeMenu itemWithTitle:@"double"] setTag:SIZE_64_BIT]; + + // set default state + [statusText setStringValue:@""]; + [self setStatusDisconnected]; + + // change sheet initial interface. + [changeSecondsCombo setEnabled:NO]; +} + +- (void)updateSearchButton +{ + TCtype type = [typePopup indexOfSelectedItem]; + + if ( type != TYPE_UNKNOWN ) + { + if ( [[searchTextField stringValue] isEqualToString:@""] ) + { + [searchButton setEnabled:NO]; + } + else + { + [searchButton setEnabled:YES]; + } + } + else + { + [searchButton setEnabled:YES]; + } +} + +- (void)updatePauseButton +{ + if ( !targetPaused ) + { + [pauseButton setTitle:@"Pause Target"]; + } + else + { + [pauseButton setTitle:@"Resume Target"]; + } +} + +- (void)updateSearchBoxes +{ + TCtype type = [typePopup indexOfSelectedItem]; + + if ( type != TYPE_UNKNOWN ) + { + [searchTextField setEnabled:YES]; + [searchRadioMatrix setEnabled:NO]; + } + else + { + [searchTextField setEnabled:NO]; + [searchRadioMatrix setEnabled:YES]; + } +} + +- (void)updateChangeButton +{ + if ( addressSelected ) + { + [changeButton setEnabled:YES]; + } + else + { + [changeButton setEnabled:NO]; + } +} + + +- (void)setStatusDisconnected +{ + lastStatus = status; + status = STATUS_DISCONNECTED; + + [serverPopup setEnabled:YES]; + [pauseButton setTitle:@"Pause Target"]; + [pauseButton setEnabled:NO]; + [processPopup setEnabled:NO]; + [typePopup setEnabled:NO]; + [sizePopup setEnabled:NO]; + [searchTextField setEnabled:NO]; + [searchRadioMatrix setEnabled:NO]; + [searchButton setEnabled:NO]; + [clearSearchButton setEnabled:NO]; + [self setStatusText:@"Not Connected" duration:0]; + [statusBar stopAnimation:self]; + [addressTable setEnabled:NO]; + [changeButton setTitle:@"ChangeÉ"]; + [changeButton setEnabled:NO]; + + [[serverMenu itemAtIndex:0] setTitle:@"Not Connected"]; +} + +- (void)setStatusConnected +{ + lastStatus = status; + status = STATUS_CONNECTED; + + [serverPopup setEnabled:YES]; + [self updatePauseButton]; + [pauseButton setEnabled:YES]; + [processPopup setEnabled:YES]; + [typePopup setEnabled:YES]; + [sizePopup setEnabled:YES]; + [self updateSearchBoxes]; + [self updateSearchButton]; + [clearSearchButton setEnabled:NO]; + [self setStatusText:@"Connected" duration:0]; + [statusBar stopAnimation:self]; + [addressTable setEnabled:NO]; + [changeButton setTitle:@"ChangeÉ"]; + [changeButton setEnabled:NO]; + + [[serverMenu itemAtIndex:0] setTitle:@"Disconnect"]; +} + +- (void)setStatusCheating +{ + lastStatus = status; + status = STATUS_CHEATING; + + [serverPopup setEnabled:YES]; + [self updatePauseButton]; + [pauseButton setEnabled:YES]; + [processPopup setEnabled:NO]; + [typePopup setEnabled:NO]; + [sizePopup setEnabled:NO]; + [self updateSearchBoxes]; + [self updateSearchButton]; + [clearSearchButton setEnabled:YES]; + if ( searchResultsAmount < TCMaxSearchResults ) + { + if ( searchResultsAmount == 1 ) + { + [self setStatusText:[NSString stringWithFormat:@"Results: %i", searchResultsAmount] duration:0 color:[NSColor colorWithCalibratedRed:0.0f green:0.5f blue:0.0f alpha:1.0f]]; + } + else if ( searchResultsAmount == 0 ) + { + [self setStatusText:[NSString stringWithFormat:@"Results: %i", searchResultsAmount] duration:0 color:[NSColor colorWithCalibratedRed:0.5f green:0.0f blue:0.0f alpha:1.0f]]; + } + else + { + [self setStatusText:[NSString stringWithFormat:@"Results: %i", searchResultsAmount] duration:0]; + } + } + else + { + [self setStatusText:[NSString stringWithFormat:@"Results: >%i", TCMaxSearchResults] duration:0]; + } + [statusBar stopAnimation:self]; + [addressTable setEnabled:YES]; + [changeButton setTitle:@"ChangeÉ"]; + [self updateChangeButton]; + + [[serverMenu itemAtIndex:0] setTitle:@"Disconnect"]; +} + +- (void)setStatusSearching +{ + lastStatus = status; + status = STATUS_SEARCHING; + + [serverPopup setEnabled:NO]; + [self updatePauseButton]; + [pauseButton setEnabled:NO]; + [processPopup setEnabled:NO]; + [typePopup setEnabled:NO]; + [sizePopup setEnabled:NO]; + [searchTextField setEnabled:NO]; + [searchRadioMatrix setEnabled:NO]; + [searchButton setEnabled:NO]; + [clearSearchButton setEnabled:NO]; + [self setStatusText:@"SearchingÉ" duration:0]; + [statusBar startAnimation:self]; + [addressTable setEnabled:NO]; + [changeButton setTitle:@"ChangeÉ"]; + [changeButton setEnabled:NO]; + + [[serverMenu itemAtIndex:0] setTitle:@"Disconnect"]; +} + +- (void)setStatusChanging +{ + lastStatus = status; + status = STATUS_CHANGING; + + [serverPopup setEnabled:NO]; + [self updatePauseButton]; + [pauseButton setEnabled:NO]; + [processPopup setEnabled:NO]; + [typePopup setEnabled:NO]; + [sizePopup setEnabled:NO]; + [searchTextField setEnabled:NO]; + [searchRadioMatrix setEnabled:NO]; + [searchButton setEnabled:NO]; + [clearSearchButton setEnabled:NO]; + [self setStatusText:@"ChangingÉ" duration:0]; + [statusBar startAnimation:self]; + [addressTable setEnabled:NO]; + [changeButton setEnabled:NO]; + + [[serverMenu itemAtIndex:0] setTitle:@"Disconnect"]; +} + +- (void)setStatusChangingLater +{ + lastStatus = status; + status = STATUS_CHANGING_LATER; + + [serverPopup setEnabled:NO]; + [self updatePauseButton]; + [pauseButton setEnabled:NO]; + [processPopup setEnabled:NO]; + [typePopup setEnabled:NO]; + [sizePopup setEnabled:NO]; + [searchTextField setEnabled:NO]; + [searchRadioMatrix setEnabled:NO]; + [searchButton setEnabled:NO]; + [clearSearchButton setEnabled:NO]; + [self setStatusText:@"Changing LaterÉ" duration:0]; + [statusBar startAnimation:self]; + [addressTable setEnabled:NO]; + [changeButton setTitle:@"Cancel Change"]; + [changeButton setEnabled:YES]; + + [[serverMenu itemAtIndex:0] setTitle:@"Disconnect"]; +} + +- (void)setStatusChangingContinuously +{ + lastStatus = status; + status = STATUS_CHANGING_CONTINUOUSLY; + + [serverPopup setEnabled:NO]; + [self updatePauseButton]; + [pauseButton setEnabled:YES]; + [processPopup setEnabled:NO]; + [typePopup setEnabled:NO]; + [sizePopup setEnabled:NO]; + [searchTextField setEnabled:NO]; + [searchRadioMatrix setEnabled:NO]; + [searchButton setEnabled:NO]; + [clearSearchButton setEnabled:NO]; + [self setStatusText:@"Repeated Change" duration:0]; + [statusBar startAnimation:self]; + [addressTable setEnabled:NO]; + [changeButton setTitle:@"Stop Change"]; + [changeButton setEnabled:YES]; + + [[serverMenu itemAtIndex:0] setTitle:@"Disconnect"]; +} + +- (void)setStatusUndoing +{ + lastStatus = status; + status = STATUS_UNDOING; + + [serverPopup setEnabled:NO]; + [self updatePauseButton]; + [pauseButton setEnabled:NO]; + [processPopup setEnabled:NO]; + [typePopup setEnabled:NO]; + [sizePopup setEnabled:NO]; + [searchTextField setEnabled:NO]; + [searchRadioMatrix setEnabled:NO]; + [searchButton setEnabled:NO]; + [clearSearchButton setEnabled:NO]; + [self setStatusText:@"UndoingÉ" duration:0]; + [statusBar startAnimation:self]; + [addressTable setEnabled:NO]; + [changeButton setTitle:@"ChangeÉ"]; + [changeButton setEnabled:NO]; + + [[serverMenu itemAtIndex:0] setTitle:@"Disconnect"]; +} + +- (void)setStatusRedoing +{ + lastStatus = status; + status = STATUS_REDOING; + + [serverPopup setEnabled:NO]; + [self updatePauseButton]; + [pauseButton setEnabled:NO]; + [processPopup setEnabled:NO]; + [typePopup setEnabled:NO]; + [sizePopup setEnabled:NO]; + [searchTextField setEnabled:NO]; + [searchRadioMatrix setEnabled:NO]; + [searchButton setEnabled:NO]; + [clearSearchButton setEnabled:NO]; + [self setStatusText:@"RedoingÉ" duration:0]; + [statusBar startAnimation:self]; + [addressTable setEnabled:NO]; + [changeButton setTitle:@"ChangeÉ"]; + [changeButton setEnabled:NO]; + + [[serverMenu itemAtIndex:0] setTitle:@"Disconnect"]; +} + +- (void)setStatusToLast +{ + switch ( lastStatus ) + { + case STATUS_DISCONNECTED: + [self setStatusDisconnected]; + break; + + case STATUS_CONNECTED: + [self setStatusConnected]; + break; + + case STATUS_CHEATING: + [self setStatusCheating]; + break; + + case STATUS_SEARCHING: + [self setStatusSearching]; + break; + + case STATUS_CHANGING: + [self setStatusChanging]; + break; + + case STATUS_CHANGING_LATER: + [self setStatusChangingLater]; + break; + + case STATUS_CHANGING_CONTINUOUSLY: + [self setStatusChangingContinuously]; + break; + + case STATUS_UNDOING: + [self setStatusUndoing]; + break; + + case STATUS_REDOING: + [self setStatusRedoing]; + break; + } +} + +- (void)setStatusText:(NSString *)msg duration:(NSTimeInterval)seconds +{ + [self setStatusText:msg duration:seconds color:[NSColor blackColor]]; +} + +- (void)setStatusText:(NSString *)msg duration:(NSTimeInterval)seconds color:(NSColor *)color +{ + if ( seconds == 0 ) + { + [statusText setTextColor:color]; + [statusText setStringValue:msg]; + } + else + { + if ( statusTextTimer ) + { + [statusTextTimer invalidate]; + [statusTextTimer release]; + } + else + { + [savedStatusText release]; + [savedStatusColor release]; + savedStatusText = [[statusText stringValue] retain]; + savedStatusColor = [[statusText textColor] retain]; + } + + [statusText setTextColor:color]; + [statusText setStringValue:msg]; + statusTextTimer = [[NSTimer scheduledTimerWithTimeInterval:seconds target:self selector:@selector(statusTextTimer:) userInfo:nil repeats:NO] retain]; + + } +} + +- (void)statusTextTimer:(NSTimer *)timer +{ + [statusText setTextColor:savedStatusColor]; + [statusText setStringValue:savedStatusText]; + + [savedStatusColor release], savedStatusColor = nil; + [savedStatusText release], savedStatusText = nil; + [statusTextTimer invalidate]; + [statusTextTimer release], statusTextTimer = nil; +} + + +- (void)connectToLocal +{ + NSString *localName = @"Local"; //[NSString stringWithFormat:@"%@ (local)", TCGlobalBroadcastName]; + + // depending on how the listener is listening, we need to use different means to connect to local + if ( TCGlobalListening ) + { + if ( TCGlobalAllowRemote ) + { + struct sockaddr_in addr; + + addr.sin_family = AF_INET; + addr.sin_port = htonl( TCGlobalListenPort ); + addr.sin_addr.s_addr = INADDR_ANY; + + [self connectToServer:[NSData dataWithBytes:&addr length:sizeof(addr)] name:localName]; + } + else + { + struct sockaddr_un addr; + + addr.sun_family = AF_UNIX; + strncpy( addr.sun_path, TCDefaultListenPath, 103 ); + + [self connectToServer:[NSData dataWithBytes:&addr length:sizeof(addr)] name:localName]; + } + } +} + +- (void)connectToServer:(NSData *)addr name:(NSString *)name +{ + everConnected = YES; + + if ( connection ) + { + [self disconnect]; + + waitingToConnect = YES; + connectionAddress = [addr retain]; + connectionName = [name retain]; + } + else + { + connection = [[CheatClient clientWithDelegate:self server:addr name:name] retain]; + connectionAddress = [addr retain]; + connectionName = [name retain]; + } + + [self setStatusConnected]; +} + +- (void)disconnect +{ + if ( connection ) + { + [connection release], connection = nil; + close( sockfd ); + + [self clearSearch]; + + [connectionAddress release], connectionAddress = nil; + [connectionName release], connectionName = nil; + + [processMenu removeAllItems]; + + [serverPopup selectItemAtIndex:0]; + [self setStatusDisconnected]; + } +} + + +- (void)sendProcessListRequest +{ + PacketHeader header; + int length = sizeof(header); + + header.checksum = RandomChecksum(); + header.function = 1; + header.size = 0; + + if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) ) + { + NSLog( @"sendProcessListRequest failed on socket %i", sockfd ); + } +} + +- (void)sendClearSearch +{ + PacketHeader header; + int length = sizeof(header); + + header.checksum = RandomChecksum(); + header.function = 3; + header.size = 0; + + if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) ) + { + NSLog( @"sendClearSearch failed on socket %i", sockfd ); + } +} + +- (void)sendSearch:(char const *)data size:(int)size +{ + PacketHeader header; + int length = sizeof(header) + size; + int lengthAfter = length; + + char *buffer, *ptr; + + header.checksum = RandomChecksum(); + header.function = 5; + header.size = size; + + if ( (buffer = (char *)malloc( length )) == NULL ) + { + NSLog( @"sendSearch:size: failed" ); + } + + ptr = buffer; + + COPY_TO_BUFFER( ptr, &header, sizeof(header) ); + COPY_TO_BUFFER( ptr, data, size ); + + if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length ) + { + NSLog( @"sendSearch:size: failed" ); + } + + free( buffer ); +} + +- (void)sendChange:(char const *)data size:(int)size +{ + PacketHeader header; + int length = sizeof(header) + size; + int lengthAfter = length; + + char *buffer, *ptr; + + header.checksum = RandomChecksum(); + header.function = 8; + header.size = size; + + if ( (buffer = (char *)malloc( length )) == NULL ) + { + NSLog( @"sendChange:size: failed" ); + } + + ptr = buffer; + + COPY_TO_BUFFER( ptr, &header, sizeof(header) ); + COPY_TO_BUFFER( ptr, data, size ); + + if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length ) + { + NSLog( @"sendChange:size: failed" ); + } + + free( buffer ); +} + +- (void)sendPauseTarget; +{ + PacketHeader header; + int length = sizeof(header); + + header.checksum = RandomChecksum(); + header.function = 10; + header.size = 0; + + if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) ) + { + NSLog( @"sendPauseTarget failed" ); + } +} + +- (void)sendVariableValueRequest +{ + +} + +- (void)sendUndoRequest +{ + PacketHeader header; + int length = sizeof(header); + + header.checksum = RandomChecksum(); + header.function = 14; + header.size = 0; + + if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) ) + { + NSLog( @"sendUndoRequest failed" ); + } +} + +- (void)sendRedoRequest +{ + PacketHeader header; + int length = sizeof(header); + + header.checksum = RandomChecksum(); + header.function = 16; + header.size = 0; + + if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) ) + { + NSLog( @"sendRedoRequest failed" ); + } +} + +- (void)sendSetTargetPID:(int)pid +{ + PacketHeader header; + int length = sizeof(header) + sizeof(u_int32_t); + int lengthAfter = length; + + u_int32_t tarPID = (u_int32_t)pid; + + char *buffer, *ptr; + + header.checksum = RandomChecksum(); + header.function = 18; + header.size = sizeof(u_int32_t); + + if ( (buffer = (char *)malloc( length )) == NULL ) + { + NSLog( @"sendSetTargetPID: failed" ); + } + + ptr = buffer; + + COPY_TO_BUFFER( ptr, &header, sizeof(header) ); + COPY_TO_BUFFER( ptr, &tarPID, sizeof(tarPID) ); + + if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length ) + { + NSLog( @"sendSetTargetPID: failed" ); + } + + free( buffer ); +} + + +- (void)receivedProcessList:(NSData *)data +{ + NSMenuItem *item; + u_int32_t processCount = 0; + + char *ptr = (char *)[data bytes]; + int i, max; + + COPY_FROM_BUFFER( &processCount, ptr, sizeof(processCount) ); + + max = (int)processCount; + + for ( i = 0; i < max; i++ ) + { + u_int32_t pid; + NSString *name; + + COPY_FROM_BUFFER( &pid, ptr, sizeof(pid) ); + name = [NSString stringWithCString:ptr], ptr += [name length] + 1; + + item = [[NSMenuItem alloc] initWithTitle:name action:@selector(processMenuItem:) keyEquivalent:@""]; + [item setTag:(int)pid]; + + [processMenu addItem:[item autorelease]]; + } +} + +- (void)receivedSearchFinished +{ + if ( searchResultsAmount == 1 ) + { + TCPlaySound( @"Submarine" ); + } + else if ( searchResultsAmount == 0 ) + { + TCPlaySound( @"Basso" ); + } + + [self setStatusToLast]; + [self setStatusText:@"Search Finished" duration:1.5]; + [cheatWindow makeFirstResponder:searchTextField]; +} + +- (void)receivedVariableList:(NSData *)data +{ + char *ptr = (char *)[data bytes]; + + [self destroyResults]; + + COPY_FROM_BUFFER( &searchResultsAmount, ptr, sizeof(searchResultsAmount) ); + + if ( searchResultsAmount > 0 ) + { + int memSize = TCAddressSize*searchResultsAmount; + + if ( (searchResults = (TCaddress *)malloc( memSize )) == NULL ) + { + NSLog( @"receivedVariableList failed: malloc failed" ); + searchResultsAmount = 0; + return; + } + + COPY_FROM_BUFFER( searchResults, ptr, memSize ); + } + + [addressTable reloadData]; +} + +- (void)receivedChangeFinished +{ + TCPlaySound( @"Tink" ); + + [self setStatusToLast]; + [self setStatusText:@"Change Finished" duration:1.5]; +} + +- (void)receivedError:(NSData *)data +{ + u_int32_t fatal; + NSString *msg; + + char *ptr = (char *)[data bytes]; + + COPY_FROM_BUFFER( &fatal, ptr, sizeof(fatal) ); + + msg = [NSString stringWithCString:ptr]; + + // alert the user. + [self handleErrorMessage:msg fatal:fatal]; +} + +- (void)receivedUndoFinished +{ + [self setStatusToLast]; +} + +- (void)receivedRedoFinished +{ + [self setStatusToLast]; +} + +- (void)receivedUndoRedoStatus:(NSData *)data +{ + char *ptr = (char *)[data bytes]; + + COPY_FROM_BUFFER( &undoCount, ptr, sizeof(undoCount) ); + COPY_FROM_BUFFER( &redoCount, ptr, sizeof(redoCount) ); + + NSLog( @"UNDO: %i, REDO: %i", undoCount, redoCount ); +} + +- (void)receivedAppLaunched:(NSData *)data +{ + NSMenuItem *item; + + char *ptr = (char *)[data bytes]; + + u_int32_t pid; + NSString *name; + + COPY_FROM_BUFFER( &pid, ptr, sizeof(pid) ); + name = [NSString stringWithCString:ptr], ptr += [name length] + 1; + + item = [[NSMenuItem alloc] initWithTitle:name action:@selector(processMenuItem:) keyEquivalent:@""]; + [item setTag:(int)pid]; + + [processMenu addItem:[item autorelease]]; +} + +- (void)receivedAppQuit:(NSData *)data +{ + u_int32_t pid; + + char *ptr = (char *)[data bytes]; + + COPY_FROM_BUFFER( &pid, ptr, sizeof(pid) ); + + [processMenu removeItemWithTag:pid]; +} + +- (void)receivedTargetQuit +{ + [self clearSearch]; + [self sendClearSearch]; + + // tell the server that the first app is now the target. + targetPID = [[processMenu itemAtIndex:0] tag]; + [self sendSetTargetPID:targetPID]; + + // alert the user. + [self handleErrorMessage:@"The application that was being cheated has quit." fatal:NO]; + + [self setStatusConnected]; +} + +- (void)receivedPauseFinished:(NSData *)data +{ + char *ptr = (char *)[data bytes]; + + COPY_FROM_BUFFER( &targetPaused, ptr, sizeof(targetPaused) ); + + if ( targetPaused ) + { + [self setStatusText:@"Target Paused" duration:1.5]; + } + else + { + [self setStatusText:@"Target Resumed" duration:1.5]; + } + + [self updatePauseButton]; +} + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% Searching & Changing +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +- (void)search +{ + TCtype type = [[typePopup selectedItem] tag]; + TCsize size = [[sizePopup selectedItem] tag]; + + char *data, *ptr; + int dataSize = sizeof(type) + sizeof(size); + + data = (char *)malloc( dataSize ); + ptr = data; + + // copy the size and type of the variable. + COPY_TO_BUFFER( ptr, &type, sizeof(type) ); + COPY_TO_BUFFER( ptr, &size, sizeof(size) ); + + // switch to cheating mode if this is the first search. + if ( status == STATUS_CONNECTED ) + { + [self setStatusCheating]; + } + + // copy the value to search for. + switch ( type ) + { + case TYPE_STRING: + { + switch ( size ) + { + case SIZE_8_BIT: + { + NSString *string = [searchTextField stringValue]; + int stringLength = [string length] + 1; + + data = (char *)realloc( data, dataSize + stringLength ); + ptr = data + dataSize; + dataSize += stringLength; + + COPY_TO_BUFFER( ptr, [string cString], stringLength ); + } + break; + } + } + break; + + case TYPE_INTEGER: + { + switch ( size ) + { + case SIZE_8_BIT: + { + int8_t value = [searchTextField intValue]; + + data = (char *)realloc( data, dataSize + sizeof(value) ); + ptr = data + dataSize; + dataSize += sizeof(value); + + COPY_TO_BUFFER( ptr, &value, sizeof(value) ); + } + break; + + case SIZE_16_BIT: + { + int16_t value = [searchTextField intValue]; + + data = (char *)realloc( data, dataSize + sizeof(value) ); + ptr = data + dataSize; + dataSize += sizeof(value); + + COPY_TO_BUFFER( ptr, &value, sizeof(value) ); + } + break; + + case SIZE_32_BIT: + { + int32_t value = [searchTextField intValue]; + + data = (char *)realloc( data, dataSize + sizeof(value) ); + ptr = data + dataSize; + dataSize += sizeof(value); + + COPY_TO_BUFFER( ptr, &value, sizeof(value) ); + } + break; + } + } + break; + + case TYPE_DECIMAL: + { + switch ( size ) + { + case SIZE_32_BIT: + { + float value = [searchTextField floatValue]; + + data = (char *)realloc( data, dataSize + sizeof(value) ); + ptr = data + dataSize; + dataSize += sizeof(value); + + COPY_TO_BUFFER( ptr, &value, sizeof(value) ); + } + break; + + case SIZE_64_BIT: + { + double value = [searchTextField doubleValue]; + + data = (char *)realloc( data, dataSize + sizeof(value) ); + ptr = data + dataSize; + dataSize += sizeof(value); + + COPY_TO_BUFFER( ptr, &value, sizeof(value) ); + } + break; + } + } + break; + + case TYPE_UNKNOWN: + { + u_int32_t value = 0;//[searchTextField intValue]; + + data = (char *)realloc( data, dataSize + sizeof(value) ); + ptr = data + dataSize; + dataSize += sizeof(value); + + COPY_TO_BUFFER( ptr, &value, sizeof(value) ); + } + break; + } + + [self sendSearch:data size:dataSize]; + free( data ); + + [self setStatusSearching]; +} + +- (void)change +{ + TCtype type = [[typePopup selectedItem] tag]; + TCsize size = [[sizePopup selectedItem] tag]; + + NSArray *selectedAddresses = [[addressTable selectedRowEnumerator] allObjects]; + int i, addressCount = [selectedAddresses count]; + + char *data, *ptr; + int dataSize = sizeof(type) + sizeof(size) + sizeof(addressCount) + TCAddressSize*addressCount; + + data = (char *)malloc( dataSize ); + ptr = data; + + // copy the size and type of the variable. + COPY_TO_BUFFER( ptr, &type, sizeof(type) ); + COPY_TO_BUFFER( ptr, &size, sizeof(size) ); + + // copy the amount and the list of addresses to change. + COPY_TO_BUFFER( ptr, &addressCount, sizeof(addressCount) ); + for ( i = 0; i < addressCount; i++ ) + { + COPY_TO_BUFFER( ptr, &((TCaddress *)searchResults)[ [[selectedAddresses objectAtIndex:i] intValue] ], sizeof(TCaddress) ); + } + + // copy the new value. + switch ( type ) + { + case TYPE_STRING: + { + switch ( size ) + { + case SIZE_8_BIT: + { + NSString *string = [changeTextField stringValue]; + int stringLength = [string length] + 1; + + data = (char *)realloc( data, dataSize + stringLength ); + ptr = data + dataSize; + dataSize += stringLength; + + COPY_TO_BUFFER( ptr, [string cString], stringLength ); + } + break; + } + } + break; + + case TYPE_INTEGER: + { + switch ( size ) + { + case SIZE_8_BIT: + { + int8_t value = [changeTextField intValue]; + + data = (char *)realloc( data, dataSize + sizeof(value) ); + ptr = data + dataSize; + dataSize += sizeof(value); + + COPY_TO_BUFFER( ptr, &value, sizeof(value) ); + } + break; + + case SIZE_16_BIT: + { + int16_t value = [changeTextField intValue]; + + data = (char *)realloc( data, dataSize + sizeof(value) ); + ptr = data + dataSize; + dataSize += sizeof(value); + + COPY_TO_BUFFER( ptr, &value, sizeof(value) ); + } + break; + + case SIZE_32_BIT: + { + int32_t value = [changeTextField intValue]; + + data = (char *)realloc( data, dataSize + sizeof(value) ); + ptr = data + dataSize; + dataSize += sizeof(value); + + COPY_TO_BUFFER( ptr, &value, sizeof(value) ); + } + break; + } + } + break; + + case TYPE_DECIMAL: + { + switch ( size ) + { + case SIZE_32_BIT: + { + float value = [changeTextField floatValue]; + + data = (char *)realloc( data, dataSize + sizeof(value) ); + ptr = data + dataSize; + dataSize += sizeof(value); + + COPY_TO_BUFFER( ptr, &value, sizeof(value) ); + } + break; + + case SIZE_64_BIT: + { + double value = [changeTextField doubleValue]; + + data = (char *)realloc( data, dataSize + sizeof(value) ); + ptr = data + dataSize; + dataSize += sizeof(value); + + COPY_TO_BUFFER( ptr, &value, sizeof(value) ); + } + break; + } + } + break; + + case TYPE_UNKNOWN: + { + u_int32_t value = 0;//[searchTextField intValue]; + + data = (char *)realloc( data, dataSize + sizeof(value) ); + ptr = data + dataSize; + dataSize += sizeof(value); + + COPY_TO_BUFFER( ptr, &value, sizeof(value) ); + } + break; + } + + [self sendChange:data size:dataSize]; + free( data ); + + [self setStatusChanging]; +} + + +- (void)changeSheet:(NSWindow *)sheet returned:(int)returned context:(void *)context +{ + if ( returned == 1 ) + { + if ( [recurringChangeButton state] == NSOnState ) + { + float seconds = [changeSecondsCombo floatValue]; + + [self setStatusChangingContinuously]; + + [self change]; + + changeTimer = [[NSTimer scheduledTimerWithTimeInterval:seconds target:self selector:@selector(changeTimer:) userInfo:nil repeats:YES] retain]; + } + else + { + [self change]; + } + } +} + + +- (void)changeTimer:(NSTimer *)timer +{ + [self change]; +} + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% Cheat Window Interface +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +- (IBAction)typePopup:(id)sender +{ + switch ( [typePopup indexOfSelectedItem] ) + { + case TYPE_STRING: + [sizePopup setMenu:stringSizeMenu]; + break; + + case TYPE_INTEGER: + case TYPE_UNKNOWN: + [sizePopup setMenu:integerSizeMenu]; + break; + + case TYPE_DECIMAL: + [sizePopup setMenu:decimalSizeMenu]; + break; + } + + [self updateSearchBoxes]; + [self updateSearchButton]; +} + + +- (IBAction)searchButton:(id)sender +{ + [self search]; +} + +- (IBAction)clearSearchButton:(id)sender +{ + [self clearSearch]; + + [self setStatusConnected]; + [self setStatusText:@"Search Cleared" duration:1.5]; + + [self sendClearSearch]; +} + + +- (IBAction)changeButton:(id)sender +{ + [changeTimer invalidate]; + [changeTimer release], changeTimer = nil; + + if ( status == STATUS_CHANGING_CONTINUOUSLY ) + { + [self setStatusCheating]; + } + else if ( status = STATUS_CHEATING ) + { + [NSApp beginSheet:changeSheet modalForWindow:cheatWindow modalDelegate:self didEndSelector:@selector(changeSheet:returned:context:) contextInfo:NULL]; + //[NSApp runModalForWindow:changeSheet]; + //[NSApp endSheet:changeSheet]; + //[changeSheet orderOut:self]; + } +} + + +- (IBAction)serverMenuItem:(id)sender +{ + NSData *data = [[[serverList objectAtIndex:[sender tag]] addresses] objectAtIndex:0]; +/* struct sockaddr_in addr; + + [data getBytes:&addr];*/ + + [self connectToServer:data name:[serverPopup titleOfSelectedItem]]; +} + +- (IBAction)serverMenuDisconnect:(id)sender +{ + [self disconnect]; +} + +- (IBAction)serverMenuLocal:(id)sender +{ + [self connectToLocal]; +} + +- (IBAction)processMenuItem:(id)sender +{ + targetPID = [sender tag]; + + [self sendSetTargetPID:targetPID]; + + [self setStatusText:[NSString stringWithFormat:@"PID: %i", targetPID] duration:0]; +} + + +- (IBAction)pauseButton:(id)sender +{ + [self sendPauseTarget]; +} + + +- (void)undoMenu:(id)sender +{ + if ( undoCount == 1 ) + { + [self clearSearchButton:self]; + } + else + { + [self sendUndoRequest]; + + [self setStatusUndoing]; + } +} + +- (void)redoMenu:(id)sender +{ + [self sendRedoRequest]; + + [self setStatusRedoing]; +} + +- (BOOL)respondsToSelector:(SEL)aSelector +{ + if ( aSelector == @selector(undoMenu:) ) + { + if ( status == STATUS_CHEATING && undoCount > 0 ) + { + return YES; + } + else + { + return NO; + } + } + + if ( aSelector == @selector(redoMenu:) ) + { + if ( status == STATUS_CHEATING && redoCount > 0 ) + { + return YES; + } + else + { + return NO; + } + } + + return [super respondsToSelector:aSelector]; +} + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% Change Sheet Interface +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +- (IBAction)cancelButton:(id)sender +{ + [changeSheet orderOut:sender]; + [NSApp endSheet:changeSheet returnCode:0]; + //[NSApp stopModal]; +} + +- (IBAction)okButton:(id)sender +{ + [changeSheet orderOut:sender]; + [NSApp endSheet:changeSheet returnCode:1]; + //[NSApp stopModal]; +} + + +- (IBAction)recurringChangeButton:(id)sender +{ + if ( [recurringChangeButton state] == NSOnState ) + { + [changeSecondsCombo setEnabled:YES]; + } + else + { + [changeSecondsCombo setEnabled:NO]; + } +} + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% Cleaning Up +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +- (void)clearSearch +{ + undoCount = 0; + redoCount = 0; + + targetPaused = NO; + + [changeTimer invalidate]; + [changeTimer release], changeTimer = nil; + + [self destroyResults]; + [addressTable reloadData]; +} + +- (void)destroyResults +{ + if ( searchResultsAmount > 0 ) + { + free( searchResults ); + + searchResultsAmount = 0; + } +} + + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + [self disconnect]; + + [browser release]; + + [serverList release]; + [addressList release]; + + // clean up status timer stuff + [savedStatusColor release]; + [savedStatusText release]; + [statusTextTimer invalidate]; + [statusTextTimer release]; + + [changeTimer invalidate]; + [changeTimer release]; + + [self destroyResults]; + + [super dealloc]; +} + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% TCListener Notifications +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +- (void)listenerStarted:(NSNotification *)note +{ + if ( !everConnected ) + { + [self connectToLocal]; + } +} + +- (void)listenerStopped:(NSNotification *)note +{ + +} + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% TCWindowsOnTopChanged Notification +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +- (void)windowsOnTopChanged:(NSNotification *)note +{ + if ( TCGlobalWindowsOnTop ) + { + [cheatWindow setLevel:NSPopUpMenuWindowLevel]; + } + else + { + [cheatWindow setLevel:NSNormalWindowLevel]; + } +} + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% TCWindowsOnTopChanged Notification +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +- (void)handleErrorMessage:(NSString *)msg fatal:(BOOL)fatal +{ + // close the change sheet if it's open. + if ( [cheatWindow attachedSheet] ) + { + [changeSheet orderOut:self]; + [NSApp endSheet:changeSheet returnCode:0]; + } + + // show message. + NSBeginAlertSheet( fatal? @"Fatal Error":@"Error", @"OK", nil, nil, cheatWindow, nil, nil, nil, 0, msg ); +} + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% ClientDelegate +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +- (void)clientConnectedWithSocket:(int)sock name:(NSString *)name +{ + // the client is reporting that a connection has been made. + sockfd = sock; + + [self sendProcessListRequest]; + + [serverPopup selectItemWithTitle:name]; + + [self setStatusConnected]; +} + +- (void)clientDisconnected +{ + // if there is a pending connection, connect now. + if ( waitingToConnect ) + { + waitingToConnect = NO; + connection = [[CheatClient clientWithDelegate:self server:connectionAddress name:connectionName] retain]; + } + // if our connection variable is still valid, we were disconnected unexpectedly. + else if ( connection ) + { + [self disconnect]; + NSBeginAlertSheet( @"Network Failure", @"OK", nil, nil, cheatWindow, nil, nil, nil, 0, @"The server has disconnected you." ); + } +} + +- (void)clientError:(NSString *)error message:(NSString *)message +{ + NSBeginAlertSheet( error, @"OK", nil, nil, cheatWindow, nil, nil, nil, 0, message ); +} + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% NSToolbar Delegate +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +/* +*** A toolbar is no longer used, but the code still remains for possible future use. *** + +- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag +{ + NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier]; + + if ( [itemIdentifier isEqualToString:@"Disconnect"] ) + { + disconnectButton = item; + + [item setLabel:@"Disconnect"]; + [item setPaletteLabel:[item label]]; + [item setImage:[NSImage imageNamed:@"disconnect"]]; + [item setTarget:self]; + [item setToolTip:@"Click here to pause or unpause the program being cheated."]; + } + else if ( [itemIdentifier isEqualToString:@"ServerPopup"] ) + { + NSRect fRect = [typePopup frame]; + NSSize fSize = NSMakeSize( FLT_MAX, fRect.size.height ); + NSMenuItem *menu = [[NSMenuItem alloc] initWithTitle:@"Server" action:@selector(serverPopup:) keyEquivalent:@""]; + + [menu setSubmenu:[serverPopup menu]]; + + [item setLabel:@"Server"]; + [item setPaletteLabel:[item label]]; + [item setView:serverPopup]; + [item setMinSize:fRect.size]; + [item setMaxSize:fSize]; + [item setMenuFormRepresentation:[menu autorelease]]; + [item autorelease]; + } + + return item; +} + +- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar +{ + return [NSArray arrayWithObjects:NSToolbarSeparatorItemIdentifier, + NSToolbarSpaceItemIdentifier, + NSToolbarFlexibleSpaceItemIdentifier, + NSToolbarCustomizeToolbarItemIdentifier, + @"Disconnect", @"ServerPopup", nil]; +} + +- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar +{ + return [NSArray arrayWithObjects:@"Disconnect", @"ServerPopup", nil]; +}*/ + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% NSTableView Data Source/Delegate +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +- (void)controlTextDidChange:(NSNotification *)aNotification +{ + [self updateSearchButton]; +} + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% NSTableView Data Source/Delegate +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +- (int)numberOfRowsInTableView:(NSTableView *)table +{ + return (searchResultsAmount <= TCMaxSearchResults) ? searchResultsAmount : TCMaxSearchResults; +} + +- (id)tableView:(NSTableView *)table objectValueForTableColumn:(NSTableColumn *)column row:(int)row +{ + return [NSString stringWithFormat:@"%0.8X", ((TCaddress *)searchResults)[row]]; +} + +- (void)tableView:(NSTableView *) setObjectValue:(id)object forTableColumn:(NSTableColumn *)column row:(int)row +{ + return; +} + +- (void)tableViewSelectionDidChange:(NSNotification *)note +{ + if ( [addressTable selectedRow] != -1 ) + { + addressSelected = YES; + } + else + { + addressSelected = NO; + } + + [self updateChangeButton]; +} + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% NSNetServiceBrowser Delegate +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +- (void)netServiceBrowser:(NSNetServiceBrowser *)browser didFindService:(NSNetService *)service moreComing:(BOOL)more +{ + // a server has broadcast; not much use until it's resolved. + [service setDelegate:self]; + [service resolve]; +} + +- (void)netServiceBrowser:(NSNetServiceBrowser *)browser didRemoveService:(NSNetService *)service moreComing:(BOOL)more +{ + [serverMenu removeAllItemsWithTitle:[service name]]; + + // if this is the last broadcast server, take away the divider. + if ( [serverMenu numberOfItems] == 3 ) + { + [serverMenu removeItemAtIndex:2]; + } +} + +- (void)netServiceDidResolveAddress:(NSNetService *)service +{ + NSString *name = [service name]; + int tag = [serverList count]; + NSMenuItem *item; + + if ( [serverMenu itemWithTitle:name] == nil ) + { + item = [[NSMenuItem alloc] initWithTitle:[service name] action:@selector(serverMenuItem:) keyEquivalent:@""]; + + [item setTag:tag]; + + // if this is the first server, add a divider. + if ( [serverMenu numberOfItems] <= 2 ) + { + [serverMenu addItem:[NSMenuItem separatorItem]]; + } + + [serverList addObject:service]; + [serverMenu addItem:[item autorelease]]; + + // select the item if we are already connected to the server. + // this could happen if the server rebroadcast as a different name. + if ( connection && [[[service addresses] objectAtIndex:0] isEqualToData:connectionAddress] ) + { + [serverPopup selectItemWithTitle:[service name]]; + } + } +} + + +@end + + +// Internal Functions +void TCPlaySound( NSString *name ) +{ + if ( TCGlobalPlaySounds ) + { + [[NSSound soundNamed:name] play]; + } +} diff --git a/NetTrafficController.h b/NetTrafficController.h new file mode 100644 index 0000000..092ffaf --- /dev/null +++ b/NetTrafficController.h @@ -0,0 +1,45 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: NetTrafficController.h +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + +#import "NetTrafficControlling.h" + +#include "cheat_globals.h" + + +@interface NetTrafficController : NSWindowController +{ + id delegate; + + IBOutlet id netTrafficWindow; + IBOutlet id broadcastNameText; + IBOutlet id listenPortText; + IBOutlet id serverListTable; + IBOutlet id connectionCountText; + IBOutlet id killConnectionButton; +} + +- (id)initWithDelegate:(id)del; + +- (void)initialInterfaceSetup; +- (void)interfaceUpdate; + +- (void)allowRemoteChanged:(BOOL)allow; +- (void)listenPortChanged:(int)port; +- (void)broadcastNameChanged:(NSString *)name; + +- (void)connectionListChanged; + +- (void)setConnectionCount:(int)count; + +- (IBAction)killConnectionButton:(id)sender; + +@end \ No newline at end of file diff --git a/NetTrafficController.m b/NetTrafficController.m new file mode 100644 index 0000000..5649110 --- /dev/null +++ b/NetTrafficController.m @@ -0,0 +1,167 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: NetTrafficController.m +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import "NetTrafficController.h" + +#import "CheatServer.h" + +#import "ServerHolder.h" + + +@implementation NetTrafficController + + +- (id)initWithDelegate:(id)del +{ + if ( self = [super initWithWindowNibName:@"NetTraffic"] ) + { + [self setWindowFrameAutosaveName:@"TCNetTrafficWindowPosition"]; + + delegate = del; + } + + return self; +} + +- (void)windowDidLoad +{ + [self initialInterfaceSetup]; + [self interfaceUpdate]; +} + + +- (void)initialInterfaceSetup +{ + //[netTrafficWindow setResizeIncrements:NSMakeSize( 1.0, 17.0 )]; + + [self allowRemoteChanged:TCGlobalAllowRemote]; + [self listenPortChanged:TCGlobalListenPort]; + [self setConnectionCount:[delegate netTrafficConnectionCount]]; + [serverListTable reloadData]; +} + +- (void)interfaceUpdate +{ + NSArray *array = [[serverListTable selectedRowEnumerator] allObjects]; + + if ( [array count] == 0 ) + { + [killConnectionButton setEnabled:NO]; + } + else + { + [killConnectionButton setEnabled:YES]; + + if ( [array count] > 1 ) + { + [killConnectionButton setTitle:@"Kill Connections"]; + } + else + { + [killConnectionButton setTitle:@"Kill Connection"]; + } + } +} + + +- (void)allowRemoteChanged:(BOOL)allow +{ + if ( allow ) + { + [self broadcastNameChanged:TCGlobalBroadcastName]; + [self listenPortChanged:TCGlobalListenPort]; + } + else + { + [broadcastNameText setStringValue:@"Not accepting new connections from remote clients."]; + [listenPortText setStringValue:@"Listening for local connections only."]; + } +} + +- (void)listenPortChanged:(int)port +{ + if ( TCGlobalAllowRemote ) + { + [listenPortText setStringValue:[NSString stringWithFormat:@"Listening on port %i.", port]]; + } +} + +- (void)broadcastNameChanged:(NSString *)name +{ + if ( TCGlobalAllowRemote ) + { + [broadcastNameText setStringValue:[NSString stringWithFormat:@"Broadcasting service as \"%@.\"", name]]; + } +} + + +- (void)connectionListChanged +{ + [self setConnectionCount:[delegate netTrafficConnectionCount]]; + [serverListTable reloadData]; +} + + +- (void)setConnectionCount:(int)count +{ + [connectionCountText setStringValue:[NSString stringWithFormat:@"Now serving %i clients.", count]]; +} + + +- (IBAction)killConnectionButton:(id)sender +{ + NSArray *array = [[serverListTable selectedRowEnumerator] allObjects]; + int i; + + for ( i = [array count] - 1; i >= 0; i-- ) + { + [delegate netTrafficKillConnection:[(NSNumber *)[array objectAtIndex:i] intValue]]; + } +} + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%% NSTableView Data Source/Delegate +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +- (int)numberOfRowsInTableView:(NSTableView *)table +{ + return [delegate netTrafficConnectionCount]; +} + +- (id)tableView:(NSTableView *)table objectValueForTableColumn:(NSTableColumn *)column row:(int)row +{ + ServerHolder *holder = [[delegate netTrafficConnectionList] objectAtIndex:row]; + + if ( [[column identifier] isEqualToString:@"IP Address"] ) + { + return [holder address]; + } + else if ( [[column identifier] isEqualToString:@"Current Action"] ) + { + return [holder action]; + } + + return @"Unknown"; +} + +- (void)tableView:(NSTableView *) setObjectValue:(id)object forTableColumn:(NSTableColumn *)column row:(int)row +{ + return; +} + +- (void)tableViewSelectionDidChange:(NSNotification *)note +{ + [self interfaceUpdate]; +} + + +@end \ No newline at end of file diff --git a/NetTrafficControlling.h b/NetTrafficControlling.h new file mode 100644 index 0000000..2cd3d9c --- /dev/null +++ b/NetTrafficControlling.h @@ -0,0 +1,21 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: NetTrafficControlling.h +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + + +@protocol NetTrafficControlling + +- (int)netTrafficConnectionCount; +- (NSArray *)netTrafficConnectionList; + +- (void)netTrafficKillConnection:(int)index; + +@end \ No newline at end of file diff --git a/PreferenceController.h b/PreferenceController.h new file mode 100644 index 0000000..681c5c8 --- /dev/null +++ b/PreferenceController.h @@ -0,0 +1,41 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: PreferenceController.h +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + +#import "PreferenceControlling.h" + +#include "cheat_globals.h" + + +@interface PreferenceController : NSWindowController +{ + id delegate; + + IBOutlet id prefsWindow; + IBOutlet id playSoundsButton; + IBOutlet id windowsOnTopButton; + IBOutlet id allowRemoteButton; + IBOutlet id broadcastNameTextField; + IBOutlet id listenPortTextField; +} + +- (id)initWithDelegate:(id)del; + +- (void)initialInterfaceSetup; +- (void)interfaceUpdate; + +- (IBAction)playSoundsButton:(id)sender; +- (IBAction)windowsOnTopButton:(id)sender; +- (IBAction)allowRemoteButton:(id)sender; +- (IBAction)listenPortTextField:(id)sender; +- (IBAction)broadcastNameTextField:(id)sender; + +@end \ No newline at end of file diff --git a/PreferenceController.m b/PreferenceController.m new file mode 100644 index 0000000..fe178fb --- /dev/null +++ b/PreferenceController.m @@ -0,0 +1,127 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: PreferenceController.m +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import "PreferenceController.h" + + +@implementation PreferenceController + + +- (id)initWithDelegate:(id)del +{ + if ( self = [super initWithWindowNibName:@"Preferences"] ) + { + [self setWindowFrameAutosaveName:@"TCPreferencWindowPosition"]; + + delegate = del; + } + + return self; +} + +- (void)windowDidLoad +{ + [self initialInterfaceSetup]; + [self interfaceUpdate]; +} + + +- (void)initialInterfaceSetup +{ + [playSoundsButton setState:(TCGlobalPlaySounds)? NSOnState:NSOffState]; + [windowsOnTopButton setState:(TCGlobalWindowsOnTop)? NSOnState:NSOffState]; + [allowRemoteButton setState:(TCGlobalAllowRemote)? NSOnState:NSOffState]; + [listenPortTextField setIntValue:TCGlobalListenPort]; + [broadcastNameTextField setStringValue:[[NSUserDefaults standardUserDefaults] objectForKey:TCBroadcastNamePref]]; +} + +- (void)interfaceUpdate +{ + if ( TCGlobalAllowRemote ) + { + [listenPortTextField setEnabled:YES]; + [broadcastNameTextField setEnabled:YES]; + } + else + { + [listenPortTextField setEnabled:NO]; + [broadcastNameTextField setEnabled:NO]; + } +} + + +- (IBAction)playSoundsButton:(id)sender +{ + if ( [playSoundsButton state] == NSOnState ) + { + TCGlobalPlaySounds = YES; + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:TCPlaySoundsPref]; + } + else + { + TCGlobalPlaySounds = NO; + [[NSUserDefaults standardUserDefaults] setBool:NO forKey:TCPlaySoundsPref]; + } +} + +- (IBAction)windowsOnTopButton:(id)sender +{ + if ( [windowsOnTopButton state] == NSOnState ) + { + TCGlobalWindowsOnTop = YES; + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:TCWindowsOnTopPref]; + } + else + { + TCGlobalWindowsOnTop = NO; + [[NSUserDefaults standardUserDefaults] setBool:NO forKey:TCWindowsOnTopPref]; + } + + [[NSNotificationCenter defaultCenter] postNotificationName:@"TCWindowsOnTopChanged" object:nil]; +} + +- (IBAction)allowRemoteButton:(id)sender +{ + if ( [allowRemoteButton state] == NSOnState ) + { + TCGlobalAllowRemote = YES; + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:TCAllowRemotePref]; + } + else + { + TCGlobalAllowRemote = NO; + [[NSUserDefaults standardUserDefaults] setBool:NO forKey:TCAllowRemotePref]; + } + + [self interfaceUpdate]; + + [delegate preferenceAllowRemoteChanged:TCGlobalAllowRemote]; +} + +- (IBAction)listenPortTextField:(id)sender +{ + TCGlobalListenPort = [listenPortTextField intValue]; + + [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:TCGlobalListenPort] forKey:TCListenPortPref]; + + [delegate preferenceListenPortChanged:TCGlobalListenPort]; +} + +- (IBAction)broadcastNameTextField:(id)sender +{ + NSString *name = [broadcastNameTextField stringValue]; + + [[NSUserDefaults standardUserDefaults] setObject:name forKey:TCBroadcastNamePref]; + + [delegate preferenceBroadcastNameChanged:name]; +} + + +@end \ No newline at end of file diff --git a/PreferenceControlling.h b/PreferenceControlling.h new file mode 100644 index 0000000..1565412 --- /dev/null +++ b/PreferenceControlling.h @@ -0,0 +1,20 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: PreferenceControlling.h +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + + +@protocol PreferenceControlling + +- (void)preferenceAllowRemoteChanged:(BOOL)allow; +- (void)preferenceListenPortChanged:(int)port; +- (void)preferenceBroadcastNameChanged:(NSString *)name; + +@end \ No newline at end of file diff --git a/Read Me.pdf b/Read Me.pdf new file mode 100644 index 0000000000000000000000000000000000000000..69f0f9dbf3866704f22f2eaea37eec1054181c4d GIT binary patch literal 25635 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 literal 0 HcmV?d00001 diff --git a/Read Me.rtf b/Read Me.rtf new file mode 100644 index 0000000..b92a086 --- /dev/null +++ b/Read Me.rtf @@ -0,0 +1,30 @@ +{\rtf1\mac\ansicpg10000\cocoartf102 +{\fonttbl\f0\fnil\fcharset77 MarkerFelt-Wide;\f1\fnil\fcharset77 AmericanTypewriter;\f2\fnil\fcharset77 Zapfino; +\f3\fswiss\fcharset77 Helvetica;\f4\fswiss\fcharset77 Helvetica-Bold;} +{\colortbl;\red255\green255\blue255;} +\margl1440\margr1440\vieww12440\viewh17240\viewkind1\viewscale100 +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc + +\f0\fs72 \cf0 The Cheat +\f1 +\fs28 v1.0b3 +\f2\fs72 \ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc + +\f0\fs28 \cf0 by Chaz McGarvey\ + +\f3\fs36 November 26, 2003 +\f0\fs28 \ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640 +\cf0 \ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qj + +\f4\b \cf0 What is The Cheat? +\f3\b0 \ +\ +The Cheat is a software program which allows you to attach to other programs running on a computer and change some of its values.....\ +\ + +\fs36 BLAH BLAH BLAH\ + +\fs28 (to be finished later!)} \ No newline at end of file diff --git a/Read Me.txt b/Read Me.txt deleted file mode 100644 index 98588ea..0000000 --- a/Read Me.txt +++ /dev/null @@ -1,50 +0,0 @@ - -The Cheat 1.0b -by Chaz McGarvey - - -WHAT THE CHEAT IS: - -The Cheat is a small, easy-to-use utility that grants you the ability to ultimately "cheat" another application at runtime. The most obvious use is for games. With the help of The Cheat, you can instantly replenish your life, raise your score, give yourself more time, or almost anything else you might need done in a game you are stuck at. - - -HOW DO YOU USE THE CHEAT: - -First, select the program you want to cheat from the list of processes. Then choose the type and size of the variable you want to change using the popup menus. Since The Cheat will have no idea which variable you want to change or where it is, you're going to have to search for it before you can change it. Enter the current value of the variable you want to change in the search text field and push "Search." The Cheat will report what it found. If there are multiple hits, you should search for the variable again after it has changed in the game. Ideally, you would keep searching until there was only one possible location for the variable to be, and then you would change it. If you have searched a million times but there are still more than one results, you can still change the variables one by one or all at the same time if you want (just select the variables from the list on the right). Be careful when doing this if there are very many hits because of the obvious possibility that you might change something that ought not have been changed. If you are searching for a variable and it keeps reporting 0 hits, you may have chosen the wrong type of variable of the game might have incorporated some type of anti-cheat features. Usually even those can be cheated with enough patience, however. - - -HOW DOES THE CHEAT WORK: - -The basic ideas of which The Cheat is based on are not new. There have been many utilities for all of the major platforms that work the same as The Cheat. But it has been hard to find a good "cheater" for Mac OS X until I wrote The Cheat, though I know of at least one other similar utility which only supports integers. This little gem uses "undocumented" BSD-level functions to bypass the protected memory system Mac OS X uses in order to mess around with the memory of other programs. A game's variables (amount of life, time left, strength, special abilities, etc.) are somewhere in its own section of memory. It's simply a matter of finding where a certain variable is stored and changing it to whatever we want. - - -ANYTHING ELSE YOU SHOULD KNOW: - -The Cheat is currently beta software. It is _not_ optimized (it's not running as fast as it could), and I can't even guarantee that it works. I would like The Cheat to be the best it can be, though, so if you have any suggestions or bug fixes or success stories or funny jokes, please send them to me. That's the only way The Cheat will be able to improve. As for the future, The Cheat will be optimized by 1.0, and I hope to have as many bugs squashed as possible. I think I'll even include a decent Read Me and hopefully I'll have an icon. - - -VERSION HISTORY: - -1.0b1 (9/4/03) - First public version. - - -CONTACT ME: - -Chaz McGarvey - -Email: chaz@brokenzipper.com -iChat: ChazMP - -http://www.brokenzipper.com/ - - -IF YOU ARE FEELING CHARITABLE: - -I will probably take donations if you feel I'm worth it. Rest assured, it will be put to good use on a programming book or something. School is keeping me busy, but a little light reading on the side never killed anyone. - -Also, I need an icon if any of you happen to be Photoshop gurus. I have no idea what it should look like, so good luck if you want to help me in that area. I would also be ecstatic if any of you could translate The Cheat (and I suppose the final Read Me) into additional languages, as I quite am languistically challenged. - - -LEGAL STUFF: - -Basically, don't sue me if you think my software broke something of yours because I need to finish school and that would just not be cool. Oh yeah, and The Cheat is copyrighted material, which means I own it and you can't steal it. But it's free, so I don't know why anybody would do that. Anyway, have a nice day. diff --git a/SearchResults.h b/SearchResults.h new file mode 100644 index 0000000..364470a --- /dev/null +++ b/SearchResults.h @@ -0,0 +1,33 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: SearchResults.h +// Created: Sat Oct 04 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + +#include "cheat_types.h" + + +@interface SearchResults : NSObject +{ + TCtype myType; + TCsize mySize; + + TCaddress *myData; + int myAmount; +} + ++ (id)resultsWithType:(TCtype)type size:(TCsize)size data:(TCaddress const *)data amount:(int)amount; +- (id)initWithType:(TCtype)type size:(TCsize)size data:(TCaddress const *)data amount:(int)amount; + +- (TCtype)type; +- (TCsize)size; +- (TCaddress *)data; +- (int)amount; + +@end \ No newline at end of file diff --git a/SearchResults.m b/SearchResults.m new file mode 100644 index 0000000..8e15180 --- /dev/null +++ b/SearchResults.m @@ -0,0 +1,68 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: SearchResults.m +// Created: Sat Oct 04 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import "SearchResults.h" + + +@implementation SearchResults + + ++ (id)resultsWithType:(TCtype)type size:(TCsize)size data:(TCaddress const *)data amount:(int)amount +{ + return [[[SearchResults alloc] initWithType:type size:size data:data amount:amount] autorelease]; +} + +- (id)initWithType:(TCtype)type size:(TCsize)size data:(TCaddress const *)data amount:(int)amount +{ + if ( self = [self init] ) + { + myType = type; + mySize = size; + myData = (TCaddress *)data; + myAmount = amount; + } + + return self; +} + + +- (TCtype)type +{ + return myType; +} + +- (TCsize)size +{ + return mySize; +} + +- (TCaddress *)data +{ + return myData; +} + +- (int)amount +{ + return myAmount; +} + + +- (void)dealloc +{ + if ( myData ) + { + free( myData ); + } + + [super dealloc]; +} + + +@end \ No newline at end of file diff --git a/ServerDelegate.h b/ServerDelegate.h new file mode 100644 index 0000000..f9ee572 --- /dev/null +++ b/ServerDelegate.h @@ -0,0 +1,29 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: ServerDelegate.h +// Created: Thu Sep 25 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + +#include + +@class CheatServer; + + +@protocol ServerDelegate + +- (void)server:(CheatServer *)server connectedWithSocket:(int)sock; +- (void)serverDisconnected:(CheatServer *)server; + +- (void)server:(CheatServer *)server changedAddress:(NSString *)address; +- (void)server:(CheatServer *)server changedAction:(NSString *)action; + +- (NSArray *)serverProcessList; +- (pid_t)serverFirstProcess; + +@end \ No newline at end of file diff --git a/ServerDelegate.m b/ServerDelegate.m new file mode 100644 index 0000000..94e7b2d --- /dev/null +++ b/ServerDelegate.m @@ -0,0 +1,18 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: ServerDelegate.m +// Created: Thu Sep 25 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import "ServerDelegate.h" + + +@implementation ServerDelegate + + + +@end \ No newline at end of file diff --git a/ServerHolder.h b/ServerHolder.h new file mode 100644 index 0000000..e0342ad --- /dev/null +++ b/ServerHolder.h @@ -0,0 +1,42 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: ServerHolder.h +// Created: Sun Sep 28 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + + +@class CheatServer; + + +@interface ServerHolder : NSObject +{ + NSConnection *connection; + CheatServer *server; + int sockfd; + + NSString *address; + NSString *action; +} + ++ (ServerHolder *)holderWithConnection:(NSConnection *)conn socket:(int)sock; +- (id)initWithConnection:(NSConnection *)conn socket:(int)sock; + +- (NSConnection *)connection; +- (void)setConnection:(NSConnection *)conn; +- (CheatServer *)server; +- (void)setServer:(CheatServer *)serv; +- (int)sockfd; +- (void)setSockFD:(int)sock; + +- (NSString *)address; +- (void)setAddress:(NSString *)addr; +- (NSString *)action; +- (void)setAction:(NSString *)act; + +@end \ No newline at end of file diff --git a/ServerHolder.m b/ServerHolder.m new file mode 100644 index 0000000..d6f7290 --- /dev/null +++ b/ServerHolder.m @@ -0,0 +1,102 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: ServerHolder.m +// Created: Sun Sep 28 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import "ServerHolder.h" + +#import "CheatServer.h" + + +@implementation ServerHolder + + ++ (ServerHolder *)holderWithConnection:(NSConnection *)conn socket:(int)sock +{ + return [[[ServerHolder alloc] initWithConnection:conn socket:sock] autorelease]; +} + +- (id)initWithConnection:(NSConnection *)conn socket:(int)sock +{ + if ( self = [super init] ) + { + connection = [conn retain]; + sockfd = sock; + } + + return self; +} + + +- (NSConnection *)connection +{ + return connection; +} + +- (void)setConnection:(NSConnection *)conn +{ + [connection release]; + connection = [conn retain]; +} + +- (CheatServer *)server +{ + return server; +} + +- (void)setServer:(CheatServer *)serv +{ + [server release]; + server = [serv retain]; +} + + +- (int)sockfd +{ + return sockfd; +} + +- (void)setSockFD:(int)sock +{ + sockfd = sock; +} + + +- (NSString *)address +{ + return address; +} + +- (void)setAddress:(NSString *)addr +{ + [address release]; + address = [addr retain]; +} + +- (NSString *)action +{ + return action; +} + +- (void)setAction:(NSString *)act +{ + [action release]; + action = [act retain]; +} + + +- (void)dealloc +{ + [connection release]; + [server release]; + + [super dealloc]; +} + + +@end \ No newline at end of file diff --git a/The Cheat.pbproj/chaz.pbxuser b/The Cheat.pbproj/chaz.pbxuser index 60ee588..3aaa283 100644 --- a/The Cheat.pbproj/chaz.pbxuser +++ b/The Cheat.pbproj/chaz.pbxuser @@ -1,235 +1,784 @@ // !$*UTF8*$! { - 29B97313FDCFA39411CA2CEA = { - activeBuildStyle = 4A9504CCFFE6A4B311CA0CBA; - activeExecutable = 6E31BC0D04EB164300A80003; - activeTarget = 29B97326FDCFA39411CA2CEA; + 089C1660FE840EACC02AAC07 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavSelRange = "{139, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 2A37F4A9FDCFA73011CA2CEA = { + activeBuildStyle = 4A9504D1FFE6A4CB11CA0CBA; + activeExecutable = 6EF8EC0A055A1730008BBE46; + activeTarget = 6EF8EBD9055A1730008BBE46; addToTargets = ( - 29B97326FDCFA39411CA2CEA, + 2A37F4C6FDCFA73011CA2CEA, + 6EF8EBD9055A1730008BBE46, + ); + breakpoints = ( + 6EF0870C0575382B00B81D60, ); - codeSenseManager = 6EAFEFEF05D0CAEA00C357EF; + codeSenseManager = 6EAD5EEB054C3932005761EE; executables = ( - 6E31BC0D04EB164300A80003, + 6E4E0952050BAF7F00A80003, + 6EF8EC0A055A1730008BBE46, ); perUserDictionary = { - PBXPerProjectTemplateStateSaveDate = 97569444; - PBXPrepackagedSmartGroups_v2 = ( - { - PBXTransientLocationAtTop = bottom; - absolutePathToBundle = ""; - activationKey = OldTargetSmartGroup; - clz = PBXTargetSmartGroup; - description = "Displays all targets of the project."; - globalID = 1C37FABC04509CD000000102; - name = Targets; - preferences = { - image = Targets; - }; - }, - { - PBXTransientLocationAtTop = bottom; - absolutePathToBundle = ""; - clz = PBXTargetSmartGroup2; - description = "Displays all targets of the project as well as nested build phases."; - globalID = 1C37FBAC04509CD000000102; - name = Targets; - preferences = { - image = Targets; - }; - }, - { - PBXTransientLocationAtTop = bottom; - absolutePathToBundle = ""; - clz = PBXExecutablesSmartGroup; - description = "Displays all executables of the project."; - globalID = 1C37FAAC04509CD000000102; - name = Executables; - preferences = { - image = Executable; - }; - }, - { - " PBXTransientLocationAtTop " = bottom; - absolutePathToBundle = ""; - clz = PBXErrorsWarningsSmartGroup; - description = "Displays files with errors or warnings."; - globalID = 1C08E77C0454961000C914BD; - name = "Errors and Warnings"; - preferences = { - fnmatch = ""; - image = WarningsErrors; - recursive = 1; - regex = ""; - root = ""; - }; - }, - { - PBXTransientLocationAtTop = bottom; - absolutePathToBundle = ""; - clz = PBXFilenameSmartGroup; - description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter."; - globalID = 1CC0EA4004350EF90044410B; - name = "Implementation Files"; - preferences = { - canSave = 1; - fnmatch = ""; - image = SmartFolder; - isLeaf = 0; - recursive = 1; - regex = "?*\\.[mcMC]"; - root = ""; - }; - }, - { - PBXTransientLocationAtTop = bottom; - absolutePathToBundle = ""; - clz = PBXFilenameSmartGroup; - description = "This group displays Interface Builder NIB Files."; - globalID = 1CC0EA4004350EF90041110B; - name = "NIB Files"; - preferences = { - canSave = 1; - fnmatch = "*.nib"; - image = SmartFolder; - isLeaf = 0; - recursive = 1; - regex = ""; - root = ""; - }; - }, - { - PBXTransientLocationAtTop = no; - absolutePathToBundle = ""; - clz = PBXFindSmartGroup; - description = "Displays Find Results."; - globalID = 1C37FABC05509CD000000102; - name = "Find Results"; - preferences = { - image = spyglass; - }; - }, - { - PBXTransientLocationAtTop = no; - absolutePathToBundle = ""; - clz = PBXBookmarksSmartGroup; - description = "Displays Project Bookmarks."; - globalID = 1C37FABC05539CD112110102; - name = Bookmarks; - preferences = { - image = Bookmarks; - }; - }, - { - PBXTransientLocationAtTop = bottom; - absolutePathToBundle = ""; - clz = XCSCMSmartGroup; - description = "Displays files with interesting SCM status."; - globalID = E2644B35053B69B200211256; - name = SCM; - preferences = { - image = PBXRepository; - isLeaf = 0; - }; - }, - { - PBXTransientLocationAtTop = bottom; - absolutePathToBundle = ""; - clz = PBXSymbolsSmartGroup; - description = "Displays all symbols for the project."; - globalID = 1C37FABC04509CD000100104; - name = "Project Symbols"; - preferences = { - image = ProjectSymbols; - isLeaf = 1; - }; - }, - { - PBXTransientLocationAtTop = bottom; - absolutePathToBundle = ""; - clz = PBXFilenameSmartGroup; - description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter."; - globalID = PBXTemplateMarker; - name = "Simple Filter SmartGroup"; - preferences = { - canSave = 1; - fnmatch = "*.nib"; - image = SmartFolder; - isLeaf = 0; - recursive = 1; - regex = ""; - root = ""; - }; - }, - { - PBXTransientLocationAtTop = bottom; - absolutePathToBundle = ""; - clz = PBXFilenameSmartGroup; - description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter."; - globalID = PBXTemplateMarker; - name = "Simple Regular Expression SmartGroup"; - preferences = { - canSave = 1; - fnmatch = ""; - image = SmartFolder; - isLeaf = 0; - recursive = 1; - regex = "?*\\.[mcMC]"; - root = ""; - }; - }, - ); - "PBXTemplateGeometry-F5F68CF101725D4C0D7A8F4C" = { - Frame = "{{0, 0}, {1280, 873}}"; - PBXProjectWorkspaceModule_GeometryKey_Rev15 = { - }; - RubberWindowFrame = "0 87 1280 915 0 0 1280 1002 "; + PBXConfiguration.PBXFileTableDataSource3.PBXBookmarksDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXBookmarksDataSource_NameID; + PBXFileTableDataSourceColumnWidthsKey = ( + 532.2085, + 517.5991, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXBookmarksDataSource_LocationID, + PBXBookmarksDataSource_NameID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = -1; + PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_LocationID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 669.8799, + 356.2085, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXErrorsWarningsDataSource_TypeID, + PBXErrorsWarningsDataSource_MessageID, + PBXErrorsWarningsDataSource_LocationID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID; + PBXFileTableDataSourceColumnWidthsKey = ( + 22, + 1000, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXExecutablesDataSource_ActiveFlagID, + PBXExecutablesDataSource_NameID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = -1; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 751, + 20, + 133, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXFindDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFindDataSource_LocationID; + PBXFileTableDataSourceColumnWidthsKey = ( + 523.2974, + 526.2085, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFindDataSource_MessageID, + PBXFindDataSource_LocationID, + ); + }; + PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = -1; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 636, + 134, + 20, + 134, + 43, + 43, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXTargetDataSource_PrimaryAttribute, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + ); }; + PBXPerProjectTemplateStateSaveDate = 91586952; PBXWorkspaceContents = ( { - PBXProjectWorkspaceModule_StateKey_Rev39 = { - PBXProjectWorkspaceModule_DEGV_Geometry = { - _collapsingFrameDimension = 0; - _indexOfCollapsedView = 0; - _percentageOfCollapsedView = 0; - isCollapsed = yes; - sizes = ( - "{{0, 0}, {1280, 127}}", - "{{0, 127}, {1280, 746}}", - ); - }; - PBXProjectWorkspaceModule_DataSourceSelectionKey_Rev6 = { - BoundsStr = "{{0, 0}, {1265, 110}}"; - Rows = ( - 0, - ); - VisibleRectStr = "{{0, 0}, {1265, 110}}"; - }; + PBXProjectWorkspaceModule_StateKey_Rev36 = { + PBXProjectWorkspaceModule_DebuggerWindowVisible = true; PBXProjectWorkspaceModule_EditorOpen = true; PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = { - PBXSplitModuleInNavigatorKey = { - Split0 = { - bookmark = 6EAFF00605D0D29D00C357EF; - history = ( - 6EAFEFFD05D0CB9B00C357EF, - ); - }; - SplitCount = 1; - }; - }; - PBXProjectWorkspaceModule_GeometryKey_Rev15 = { - GroupTreeCollapsed = yes; - PBXProjectWorkspaceModule_SGTM_Geometry = { - _collapsingFrameDimension = 182; - _indexOfCollapsedView = 0; - _percentageOfCollapsedView = 0.1421875; - sizes = ( - "{{0, 0}, {1280, 873}}", + Split0 = { + bookmark = 6E330A0C0575C22E0093550E; + history = ( + 6E84B8F20558B3480001B5EB, + 6E84B8F30558B3480001B5EB, + 6E84B8F40558B3480001B5EB, + 6E84B8F80558B3480001B5EB, + 6EF8EC23055A1C39008BBE46, + 6EF8EC26055A1C39008BBE46, + 6EF8EC27055A1C39008BBE46, + 6EF8EC28055A1C39008BBE46, + 6EF8EC29055A1C39008BBE46, + 6EE0048A0560B42800F8A5B1, + 6E5EC36705633214001E3A3E, + 6E5EC36905633214001E3A3E, + 6E5EC36D05633214001E3A3E, + 6E5EC37005633214001E3A3E, + 6E00EF290566EE06001AB46F, + 6E6126C7056B3091006177EC, + 6E6126C8056B3091006177EC, + 6E6126C9056B3091006177EC, + 6E6126CB056B3091006177EC, + 6E6126CC056B3091006177EC, + 6E6126CD056B3091006177EC, + 6E6126CE056B3091006177EC, + 6E6126CF056B3091006177EC, + 6E6126D0056B3091006177EC, + 6E6126D1056B3091006177EC, + 6E6126D2056B3091006177EC, + 6E6126D3056B3091006177EC, + 6E6126D4056B3091006177EC, + 6E6126D5056B3091006177EC, + 6E6126D6056B3091006177EC, + 6E6126D7056B3091006177EC, + 6E6126D8056B3091006177EC, + 6E6126DA056B3091006177EC, + 6E6126DB056B3091006177EC, + 6E6126DC056B3091006177EC, + 6E6126DD056B3091006177EC, + 6E6126DE056B3091006177EC, + 6E6126DF056B3091006177EC, + 6E6126E0056B3091006177EC, + 6E6126E1056B3091006177EC, + 6E6126E2056B3091006177EC, + 6E6126E3056B3091006177EC, + 6E6126E4056B3091006177EC, + 6E51A9060573258100506538, + 6E51A9070573258100506538, + 6E51A9080573258100506538, + 6E51A90C0573258100506538, + 6E51A90D0573258100506538, + 6E51A9A00573385700506538, + 6E51A9A20573385700506538, + 6E51A9A30573385700506538, + 6E51A9A40573385700506538, + 6E51A9A50573385700506538, + 6E51A9A60573385700506538, + 6E51A9A70573385700506538, + 6E51A9A80573385700506538, + 6E51A9AD0573385700506538, + 6E51A9AE0573385700506538, + 6EB8529F057476DD00E260EA, + 6EB852A0057476DD00E260EA, + 6EB852A1057476DD00E260EA, + 6EB852A3057476DD00E260EA, + 6EB852A4057476DD00E260EA, + 6EB852A5057476DD00E260EA, + 6EB852A6057476DD00E260EA, + 6EB852A9057476DD00E260EA, + 6E3309E80575C22E0093550E, + 6E3309E90575C22E0093550E, + 6E3309EA0575C22E0093550E, + 6E3309EB0575C22E0093550E, + 6E3309EC0575C22E0093550E, + 6E3309ED0575C22E0093550E, + 6E5EC36C05633214001E3A3E, + ); + prevStack = ( + 6E84B8FE0558B3480001B5EB, + 6E84B8FF0558B3480001B5EB, + 6E84B9000558B3480001B5EB, + 6E84B9010558B3480001B5EB, + 6E84B9020558B3480001B5EB, + 6E84B9030558B3480001B5EB, + 6E84B9040558B3480001B5EB, + 6E84B9050558B3480001B5EB, + 6E84B9060558B3480001B5EB, + 6E84B9070558B3480001B5EB, + 6E84B9080558B3480001B5EB, + 6E84B9090558B3480001B5EB, + 6E84B90A0558B3480001B5EB, + 6E84B90B0558B3480001B5EB, + 6E84B90C0558B3480001B5EB, + 6E84B90D0558B3480001B5EB, + 6E84B90E0558B3480001B5EB, + 6E84B90F0558B3480001B5EB, + 6E84B9100558B3480001B5EB, + 6E84B9110558B3480001B5EB, + 6E84B9120558B3480001B5EB, + 6E84B9130558B3480001B5EB, + 6E84B9140558B3480001B5EB, + 6E84B9160558B3480001B5EB, + 6E84B9180558B3480001B5EB, + 6E84B91A0558B3480001B5EB, + 6E84B91C0558B3480001B5EB, + 6E84B91D0558B3480001B5EB, + 6E84B91E0558B3480001B5EB, + 6E84B91F0558B3480001B5EB, + 6E84B9210558B3480001B5EB, + 6E84B9230558B3480001B5EB, + 6E84B9240558B3480001B5EB, + 6E81662F0559E79E00377CF7, + 6E8166300559E79E00377CF7, + 6E8166310559E79E00377CF7, + 6E8166320559E79E00377CF7, + 6E8166330559E79E00377CF7, + 6E8166340559E79E00377CF7, + 6E8166350559E79E00377CF7, + 6E8166370559E79E00377CF7, + 6E8166380559E79E00377CF7, + 6E8166390559E79E00377CF7, + 6E81663A0559E79E00377CF7, + 6E81663C0559E79E00377CF7, + 6E81663E0559E79E00377CF7, + 6E81663F0559E79E00377CF7, + 6E8166410559E79E00377CF7, + 6E8166430559E79E00377CF7, + 6E8166450559E79E00377CF7, + 6E8166460559E79E00377CF7, + 6E8166480559E79E00377CF7, + 6E8166890559F3BD00377CF7, + 6E81668B0559F3BD00377CF7, + 6E81668C0559F3BD00377CF7, + 6E81668E0559F3BD00377CF7, + 6E8166900559F3BD00377CF7, + 6E8166920559F3BD00377CF7, + 6E8166940559F3BD00377CF7, + 6E8166960559F3BD00377CF7, + 6E8166980559F3BD00377CF7, + 6E81669A0559F3BD00377CF7, + 6E81669C0559F3BD00377CF7, + 6E81669E0559F3BD00377CF7, + 6E8166A00559F3BD00377CF7, + 6E8166A20559F3BD00377CF7, + 6E8166A30559F3BD00377CF7, + 6E8166A50559F3BD00377CF7, + 6EF8EB660559F823008BBE46, + 6EF8EB680559F823008BBE46, + 6EF8EB6A0559F823008BBE46, + 6EF8EB6C0559F823008BBE46, + 6EF8EB6E0559F823008BBE46, + 6EF8EB700559F823008BBE46, + 6EF8EC2D055A1C39008BBE46, + 6EF8EC2F055A1C39008BBE46, + 6EF8EC31055A1C39008BBE46, + 6EF8EC33055A1C39008BBE46, + 6EF8EC35055A1C39008BBE46, + 6EF8EC37055A1C39008BBE46, + 6EF8EC39055A1C39008BBE46, + 6EF8EC3B055A1C39008BBE46, + 6EF8EC3D055A1C39008BBE46, + 6EF8EC3F055A1C39008BBE46, + 6EF8EC40055A1C39008BBE46, + 6EF8EC42055A1C39008BBE46, + 6EF8EC44055A1C39008BBE46, + 6EF8EC45055A1C39008BBE46, + 6EF8EC47055A1C39008BBE46, + 6EF8EC49055A1C39008BBE46, + 6EF8EC4B055A1C39008BBE46, + 6EF8EC4D055A1C39008BBE46, + 6EF8EC4F055A1C39008BBE46, + 6EF8EC51055A1C39008BBE46, + 6EF8EC53055A1C39008BBE46, + 6EF8EC55055A1C39008BBE46, + 6EF8EC56055A1C39008BBE46, + 6EF8EC58055A1C39008BBE46, + 6EF8EC59055A1C39008BBE46, + 6EF8EC5A055A1C39008BBE46, + 6EF8EC5B055A1C39008BBE46, + 6EF8EC5C055A1C39008BBE46, + 6EF8EC5D055A1C39008BBE46, + 6EF8EC5E055A1C39008BBE46, + 6EF8EC60055A1C39008BBE46, + 6EF8EC62055A1C39008BBE46, + 6EF8EC64055A1C39008BBE46, + 6EF8EC65055A1C39008BBE46, + 6EF8EC67055A1C39008BBE46, + 6EF8EC69055A1C39008BBE46, + 6EF8EC6A055A1C39008BBE46, + 6EF8EC6B055A1C39008BBE46, + 6EF8EC6D055A1C39008BBE46, + 6EF8EC6E055A1C39008BBE46, + 6EF8EC6F055A1C39008BBE46, + 6EF8EC70055A1C39008BBE46, + 6EF8EC72055A1C39008BBE46, + 6EF8EC73055A1C39008BBE46, + 6EF8EC74055A1C39008BBE46, + 6EF8EC75055A1C39008BBE46, + 6EF8EC76055A1C39008BBE46, + 6EF8EC77055A1C39008BBE46, + 6EF8EC78055A1C39008BBE46, + 6EE070E0055CA8E200598538, + 6EE070E2055CA8E200598538, + 6EE070E4055CA8E200598538, + 6EE070E6055CA8E200598538, + 6EE070E8055CA8E200598538, + 6EE070EA055CA8E200598538, + 6EE070EC055CA8E200598538, + 6EE004950560B42800F8A5B1, + 6EE004960560B42800F8A5B1, + 6EE004970560B42800F8A5B1, + 6EE004980560B42800F8A5B1, + 6EE004990560B42800F8A5B1, + 6EE0049A0560B42800F8A5B1, + 6EE0049B0560B42800F8A5B1, + 6EE0049C0560B42800F8A5B1, + 6EE0049D0560B42800F8A5B1, + 6EE0049E0560B42800F8A5B1, + 6EE0049F0560B42800F8A5B1, + 6EE004A00560B42800F8A5B1, + 6EE004A10560B42800F8A5B1, + 6EE004A20560B42800F8A5B1, + 6EE004A30560B42800F8A5B1, + 6EE004A40560B42800F8A5B1, + 6EE004A50560B42800F8A5B1, + 6EE004A60560B42800F8A5B1, + 6EE004A70560B42800F8A5B1, + 6EE004A80560B42800F8A5B1, + 6EE004A90560B42800F8A5B1, + 6EE004AA0560B42800F8A5B1, + 6EE004AB0560B42800F8A5B1, + 6EE004AC0560B42800F8A5B1, + 6EE004AD0560B42800F8A5B1, + 6EE004AE0560B42800F8A5B1, + 6EE004AF0560B42800F8A5B1, + 6EE004B00560B42800F8A5B1, + 6EE004B10560B42800F8A5B1, + 6EE004B20560B42800F8A5B1, + 6EE004B30560B42800F8A5B1, + 6EE004B40560B42800F8A5B1, + 6EE004B50560B42800F8A5B1, + 6EE004B60560B42800F8A5B1, + 6EE004B70560B42800F8A5B1, + 6EE004B80560B42800F8A5B1, + 6EE004B90560B42800F8A5B1, + 6EE004BA0560B42800F8A5B1, + 6EE004BB0560B42800F8A5B1, + 6EE004BC0560B42800F8A5B1, + 6EE004BD0560B42800F8A5B1, + 6EE004BE0560B42800F8A5B1, + 6EE004BF0560B42800F8A5B1, + 6EE004C00560B42800F8A5B1, + 6EE004C10560B42800F8A5B1, + 6EE004C20560B42800F8A5B1, + 6EE004C30560B42800F8A5B1, + 6EE004C40560B42800F8A5B1, + 6EE004C50560B42800F8A5B1, + 6EE004C60560B42800F8A5B1, + 6EE004C70560B42800F8A5B1, + 6EE004C80560B42800F8A5B1, + 6EE004C90560B42800F8A5B1, + 6EE004CA0560B42800F8A5B1, + 6EE004CB0560B42800F8A5B1, + 6EE004CC0560B42800F8A5B1, + 6EE004CD0560B42800F8A5B1, + 6EE004CE0560B42800F8A5B1, + 6EE004CF0560B42800F8A5B1, + 6EE004D00560B42800F8A5B1, + 6EE004D10560B42800F8A5B1, + 6EE004D20560B42800F8A5B1, + 6EE004D30560B42800F8A5B1, + 6EE004D40560B42800F8A5B1, + 6EE004D50560B42800F8A5B1, + 6EE004D60560B42800F8A5B1, + 6EE004D70560B42800F8A5B1, + 6EE004D80560B42800F8A5B1, + 6EE004D90560B42800F8A5B1, + 6EE004DA0560B42800F8A5B1, + 6EE004DB0560B42800F8A5B1, + 6E2E17AE056201170070BE48, + 6E2E17AF056201170070BE48, + 6E2E17B0056201170070BE48, + 6E2E17B1056201170070BE48, + 6E5EC37105633214001E3A3E, + 6E5EC37205633214001E3A3E, + 6E5EC37305633214001E3A3E, + 6E5EC37405633214001E3A3E, + 6E5EC37505633214001E3A3E, + 6E5EC37605633214001E3A3E, + 6E5EC37705633214001E3A3E, + 6E5EC37805633214001E3A3E, + 6E5EC37905633214001E3A3E, + 6E5EC37A05633214001E3A3E, + 6E5EC37B05633214001E3A3E, + 6E5EC37C05633214001E3A3E, + 6E5EC37D05633214001E3A3E, + 6E5EC37E05633214001E3A3E, + 6E5EC37F05633214001E3A3E, + 6E5EC38005633214001E3A3E, + 6E5EC38105633214001E3A3E, + 6E5EC38205633214001E3A3E, + 6E5EC38305633214001E3A3E, + 6E5EC38405633214001E3A3E, + 6E5EC38505633214001E3A3E, + 6E5EC38605633214001E3A3E, + 6E5EC38705633214001E3A3E, + 6E5EC38805633214001E3A3E, + 6E5EC38905633214001E3A3E, + 6E5EC38A05633214001E3A3E, + 6E5EC38B05633214001E3A3E, + 6E5EC38C05633214001E3A3E, + 6E5EC38D05633214001E3A3E, + 6E5EC38E05633214001E3A3E, + 6E5EC38F05633214001E3A3E, + 6E5EC39005633214001E3A3E, + 6E5EC39105633214001E3A3E, + 6E5EC39205633214001E3A3E, + 6E5EC39305633214001E3A3E, + 6E5EC39405633214001E3A3E, + 6E5EC39505633214001E3A3E, + 6E5EC39605633214001E3A3E, + 6E5EC39705633214001E3A3E, + 6E5EC39805633214001E3A3E, + 6E5EC39905633214001E3A3E, + 6E5EC39A05633214001E3A3E, + 6E5EC39B05633214001E3A3E, + 6E5EC39C05633214001E3A3E, + 6E5EC39D05633214001E3A3E, + 6E5EC39E05633214001E3A3E, + 6E5EC39F05633214001E3A3E, + 6E5EC3A005633214001E3A3E, + 6E5EC3A105633214001E3A3E, + 6E5EC3A205633214001E3A3E, + 6E5EC3A305633214001E3A3E, + 6E5EC3A405633214001E3A3E, + 6E5EC3A505633214001E3A3E, + 6E5EC3A605633214001E3A3E, + 6E5EC3A705633214001E3A3E, + 6E5EC3A805633214001E3A3E, + 6E5EC3A905633214001E3A3E, + 6E5EC3AA05633214001E3A3E, + 6E5EC3AB05633214001E3A3E, + 6E5EC3AC05633214001E3A3E, + 6E5EC3AD05633214001E3A3E, + 6E5EC3AE05633214001E3A3E, + 6E5EC3AF05633214001E3A3E, + 6E5EC3B005633214001E3A3E, + 6E5EC3B105633214001E3A3E, + 6E5EC3B205633214001E3A3E, + 6E5EC3B305633214001E3A3E, + 6E5EC3B405633214001E3A3E, + 6E5EC3B505633214001E3A3E, + 6E5EC3B605633214001E3A3E, + 6E5EC3B705633214001E3A3E, + 6E5EC3B805633214001E3A3E, + 6E5EC3B905633214001E3A3E, + 6E5EC3BA05633214001E3A3E, + 6E5EC3BB05633214001E3A3E, + 6E5EC3BC05633214001E3A3E, + 6E00EF2B0566EE06001AB46F, + 6E00EF2C0566EE06001AB46F, + 6E00EF2D0566EE06001AB46F, + 6E00EF2E0566EE06001AB46F, + 6E00EF2F0566EE06001AB46F, + 6E00EF300566EE06001AB46F, + 6E00EF310566EE06001AB46F, + 6E9F392A0569DB90007C1A1C, + 6E9F392B0569DB90007C1A1C, + 6E6126E7056B3091006177EC, + 6E6126E8056B3091006177EC, + 6E6126E9056B3091006177EC, + 6E6126EA056B3091006177EC, + 6E6126EB056B3091006177EC, + 6E6126EC056B3091006177EC, + 6E6126ED056B3091006177EC, + 6E6126EE056B3091006177EC, + 6E6126EF056B3091006177EC, + 6E6126F0056B3091006177EC, + 6E6126F1056B3091006177EC, + 6E6126F2056B3091006177EC, + 6E6126F3056B3091006177EC, + 6E6126F4056B3091006177EC, + 6E6126F5056B3091006177EC, + 6E6126F6056B3091006177EC, + 6E6126F7056B3091006177EC, + 6E6126F8056B3091006177EC, + 6E6126F9056B3091006177EC, + 6E6126FA056B3091006177EC, + 6E6126FB056B3091006177EC, + 6E6126FC056B3091006177EC, + 6E6126FD056B3091006177EC, + 6E6126FE056B3091006177EC, + 6E6126FF056B3091006177EC, + 6E612700056B3091006177EC, + 6E612701056B3091006177EC, + 6E612702056B3091006177EC, + 6E612703056B3091006177EC, + 6E612704056B3091006177EC, + 6E612705056B3091006177EC, + 6E612706056B3091006177EC, + 6E612707056B3091006177EC, + 6E612708056B3091006177EC, + 6E612709056B3091006177EC, + 6E61270A056B3091006177EC, + 6E61270B056B3091006177EC, + 6E61270C056B3091006177EC, + 6E61270D056B3091006177EC, + 6E61270E056B3091006177EC, + 6E61270F056B3091006177EC, + 6E612710056B3091006177EC, + 6E612711056B3091006177EC, + 6E612712056B3091006177EC, + 6E612713056B3091006177EC, + 6E612714056B3091006177EC, + 6E51A9120573258100506538, + 6E51A9130573258100506538, + 6E51A9140573258100506538, + 6E51A9150573258100506538, + 6E51A9160573258100506538, + 6E51A9170573258100506538, + 6E51A9180573258100506538, + 6E51A9190573258100506538, + 6E51A91A0573258100506538, + 6E51A91B0573258100506538, + 6E51A91C0573258100506538, + 6E51A91D0573258100506538, + 6E51A91E0573258100506538, + 6E51A91F0573258100506538, + 6E51A9200573258100506538, + 6E51A9210573258100506538, + 6E51A9220573258100506538, + 6E51A9230573258100506538, + 6E51A9240573258100506538, + 6E51A9250573258100506538, + 6E51A9260573258100506538, + 6E51A9270573258100506538, + 6E51A9280573258100506538, + 6E51A9290573258100506538, + 6E51A92A0573258100506538, + 6E51A92B0573258100506538, + 6E51A92C0573258100506538, + 6E51A92D0573258100506538, + 6E51A92E0573258100506538, + 6E51A92F0573258100506538, + 6E51A9300573258100506538, + 6E51A9310573258100506538, + 6E51A9320573258100506538, + 6E51A9330573258100506538, + 6E51A9340573258100506538, + 6E51A9350573258100506538, + 6E51A9360573258100506538, + 6E51A9370573258100506538, + 6E51A9380573258100506538, + 6E51A9390573258100506538, + 6E51A93A0573258100506538, + 6E51A93B0573258100506538, + 6E51A93C0573258100506538, + 6E51A93D0573258100506538, + 6E51A93E0573258100506538, + 6E51A93F0573258100506538, + 6E51A9400573258100506538, + 6E51A9410573258100506538, + 6E51A9420573258100506538, + 6E51A9430573258100506538, + 6E51A9440573258100506538, + 6E51A9450573258100506538, + 6E51A9460573258100506538, + 6E51A9470573258100506538, + 6E51A9480573258100506538, + 6E51A9490573258100506538, + 6E51A94A0573258100506538, + 6E51A94B0573258100506538, + 6E51A94C0573258100506538, + 6E51A94D0573258100506538, + 6E51A94E0573258100506538, + 6E51A94F0573258100506538, + 6E51A9500573258100506538, + 6E51A9510573258100506538, + 6E51A9520573258100506538, + 6E51A9530573258100506538, + 6E51A9540573258100506538, + 6E51A9550573258100506538, + 6E51A9560573258100506538, + 6E51A9570573258100506538, + 6E51A9580573258100506538, + 6E51A9590573258100506538, + 6E51A95A0573258100506538, + 6E51A95B0573258100506538, + 6E51A95C0573258100506538, + 6E51A95D0573258100506538, + 6E51A95E0573258100506538, + 6E51A95F0573258100506538, + 6E51A9600573258100506538, + 6E51A9610573258100506538, + 6E51A9620573258100506538, + 6E51A9630573258100506538, + 6E51A9640573258100506538, + 6E51A9650573258100506538, + 6E51A9660573258100506538, + 6E51A9670573258100506538, + 6E51A9B00573385700506538, + 6E51A9B10573385700506538, + 6E51A9B20573385700506538, + 6E51A9B30573385700506538, + 6E51A9B40573385700506538, + 6E51A9B50573385700506538, + 6E51A9B60573385700506538, + 6E51A9B70573385700506538, + 6E51A9B80573385700506538, + 6E51A9B90573385700506538, + 6E51A9BA0573385700506538, + 6E51A9BB0573385700506538, + 6E51A9BC0573385700506538, + 6E51A9BD0573385700506538, + 6E51A9BE0573385700506538, + 6E51A9BF0573385700506538, + 6E51A9C00573385700506538, + 6E51A9C10573385700506538, + 6E51A9C20573385700506538, + 6E51A9C30573385700506538, + 6E51A9C40573385700506538, + 6E51A9C50573385700506538, + 6E51A9C60573385700506538, + 6E51A9C70573385700506538, + 6E51A9C80573385700506538, + 6E51A9C90573385700506538, + 6E51A9CA0573385700506538, + 6E51A9CB0573385700506538, + 6E51A9CC0573385700506538, + 6E51A9CD0573385700506538, + 6E51A9CE0573385700506538, + 6E51A9CF0573385700506538, + 6E51A9D00573385700506538, + 6E51A9D10573385700506538, + 6E51A9D20573385700506538, + 6E51A9D30573385700506538, + 6E51A9D40573385700506538, + 6E51A9D50573385700506538, + 6E51A9D60573385700506538, + 6E51A9D70573385700506538, + 6E51A9D80573385700506538, + 6E51A9D90573385700506538, + 6E51A9DA0573385700506538, + 6E51A9DB0573385700506538, + 6E51A9DC0573385700506538, + 6E51A9DD0573385700506538, + 6E51A9DE0573385700506538, + 6E51A9DF0573385700506538, + 6E51A9E00573385700506538, + 6E51A9E10573385700506538, + 6E51A9E20573385700506538, + 6E51A9E30573385700506538, + 6E51A9E40573385700506538, + 6E51A9E50573385700506538, + 6E51A9E60573385700506538, + 6E51A9E70573385700506538, + 6E51A9E80573385700506538, + 6E51A9E90573385700506538, + 6E51A9EA0573385700506538, + 6EB852AC057476DD00E260EA, + 6EB852AD057476DD00E260EA, + 6EB852AE057476DD00E260EA, + 6EB852AF057476DD00E260EA, + 6EB852B0057476DD00E260EA, + 6EB852B1057476DD00E260EA, + 6EB852B2057476DD00E260EA, + 6EB852B3057476DD00E260EA, + 6EB852B4057476DD00E260EA, + 6EB852B5057476DD00E260EA, + 6EB852B6057476DD00E260EA, + 6EB852B7057476DD00E260EA, + 6EB852B8057476DD00E260EA, + 6EB852B9057476DD00E260EA, + 6EB852BA057476DD00E260EA, + 6EB852BB057476DD00E260EA, + 6EB852BC057476DD00E260EA, + 6EB852BD057476DD00E260EA, + 6EB852BE057476DD00E260EA, + 6EB852BF057476DD00E260EA, + 6EB852C0057476DD00E260EA, + 6EB852C1057476DD00E260EA, + 6EB852C2057476DD00E260EA, + 6EB852C3057476DD00E260EA, + 6EB852C4057476DD00E260EA, + 6EB852C5057476DD00E260EA, + 6EB852C6057476DD00E260EA, + 6EB852C7057476DD00E260EA, + 6EB852C8057476DD00E260EA, + 6EB852C9057476DD00E260EA, + 6EB852CA057476DD00E260EA, + 6EB852CB057476DD00E260EA, + 6EB852CC057476DD00E260EA, + 6EB852CD057476DD00E260EA, + 6EB852CE057476DD00E260EA, + 6EB852CF057476DD00E260EA, + 6EB852D0057476DD00E260EA, + 6EB852D1057476DD00E260EA, + 6EB852D2057476DD00E260EA, + 6EB852D3057476DD00E260EA, + 6EB852D4057476DD00E260EA, + 6EB852D5057476DD00E260EA, + 6EB852D6057476DD00E260EA, + 6EB852D7057476DD00E260EA, + 6EB852D8057476DD00E260EA, + 6EB852D9057476DD00E260EA, + 6EB852DA057476DD00E260EA, + 6EB852DB057476DD00E260EA, + 6EB852DC057476DD00E260EA, + 6EB852DD057476DD00E260EA, + 6EB852DE057476DD00E260EA, + 6EB852DF057476DD00E260EA, + 6EB852E0057476DD00E260EA, + 6EB852E1057476DD00E260EA, + 6EB852E2057476DD00E260EA, + 6EB852E3057476DD00E260EA, + 6EB852E4057476DD00E260EA, + 6EF08713057544F900B81D60, + 6E3309EE0575C22E0093550E, + 6E3309EF0575C22E0093550E, + 6E3309F00575C22E0093550E, + 6E3309F10575C22E0093550E, + 6E3309F20575C22E0093550E, + 6E3309F30575C22E0093550E, + 6E3309F40575C22E0093550E, + 6E3309F50575C22E0093550E, + 6E3309F60575C22E0093550E, + 6E3309F70575C22E0093550E, + 6E3309F80575C22E0093550E, + 6E3309F90575C22E0093550E, + 6E3309FA0575C22E0093550E, + 6E3309FB0575C22E0093550E, + 6E3309FC0575C22E0093550E, + 6E3309FD0575C22E0093550E, + 6E3309FE0575C22E0093550E, + 6E3309FF0575C22E0093550E, + 6E330A000575C22E0093550E, + 6E330A010575C22E0093550E, + 6E330A020575C22E0093550E, + 6E330A030575C22E0093550E, + 6E330A040575C22E0093550E, + 6E330A050575C22E0093550E, + 6E330A060575C22E0093550E, + 6E330A070575C22E0093550E, + 6E330A080575C22E0093550E, + 6E330A090575C22E0093550E, + 6E330A0A0575C22E0093550E, + 6E330A0B0575C22E0093550E, ); }; + SplitCount = 1; }; - PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {1280, 127}}"; - PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 127}, {1280, 746}}"; - PBXProjectWorkspaceModule_OldSuperviewFrame = "{{0, 0}, {1280, 873}}"; + PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {1073, 124}}"; + PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 124}, {1073, 742}}"; + PBXProjectWorkspaceModule_OldSuperviewFrame = "{{207, 0}, {1073, 866}}"; PBXProjectWorkspaceModule_SGTM = { PBXBottomSmartGroupGIDs = ( 1C37FBAC04509CD000000102, @@ -239,76 +788,545 @@ 1CC0EA4004350EF90041110B, 1C37FABC05509CD000000102, 1C37FABC05539CD112110102, - E2644B35053B69B200211256, 1C37FABC04509CD000100104, ); - PBXSmartGroupTreeModuleColumnData = { - PBXSmartGroupTreeModuleColumnWidthsKey = ( - 165, - ); - PBXSmartGroupTreeModuleColumnsKey_v4 = ( - MainColumn, - ); - }; - PBXSmartGroupTreeModuleOutlineStateKey_v7 = { - PBXSmartGroupTreeModuleOutlineStateExpansionKey = ( - 29B97314FDCFA39411CA2CEA, - 080E96DDFE201D6D7F000001, - 29B97315FDCFA39411CA2CEA, - ); - PBXSmartGroupTreeModuleOutlineStateSelectionKey = ( - ( - 3, - 1, - 0, - ), - ); - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey = "{{0, 0}, {165, 855}}"; - }; PBXTopSmartGroupGIDs = ( ); }; }; }, ); + "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXBatchFindModule" = { + }; "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXBuildResultsModule" = { }; "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXClassBrowserModule" = { - OptionsSetName = "Hierarchy, all classes"; + OptionsSetName = "Hierarchy, project classes"; + }; + "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugBreakpointsModule" = { }; "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugCLIModule" = { }; - "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXProjectFindModule" = { + "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugSessionModule" = { + }; + "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXNavigatorGroup" = { + Split0 = { + bookmark = 6EF0871005753FB000B81D60; + history = ( + 6EF0870D05753FB000B81D60, + 6EF0870E05753FB000B81D60, + ); + prevStack = ( + 6EF0870F05753FB000B81D60, + ); + }; + SplitCount = 1; }; "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXProjectWorkspaceModule" = { - PBXProjectWorkspaceModule_StateKey_Rev39 = { - PBXProjectWorkspaceModule_DataSourceSelectionKey_Rev6 = { - BoundsStr = "{{0, 0}, {1083, 856}}"; - Rows = ( - 0, - ); - VisibleRectStr = "{{0, 0}, {1083, 856}}"; - }; - PBXProjectWorkspaceModule_EditorOpen = false; + PBXProjectWorkspaceModule_StateKey_Rev36 = { + PBXProjectWorkspaceModule_EditorOpen = true; PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = { - PBXSplitModuleInNavigatorKey = { - SplitCount = 1; - }; - }; - PBXProjectWorkspaceModule_GeometryKey_Rev15 = { - PBXProjectWorkspaceModule_SGTM_Geometry = { - _collapsingFrameDimension = 0; - _indexOfCollapsedView = 0; - _percentageOfCollapsedView = 0; - sizes = ( - "{{0, 0}, {182, 873}}", - "{{182, 0}, {1098, 873}}", + Split0 = { + bookmark = 6E51A96D0573258900506538; + history = ( + 6E84B8F20558B3480001B5EB, + 6E84B8F30558B3480001B5EB, + 6E84B8F40558B3480001B5EB, + 6E84B8F80558B3480001B5EB, + 6EF8EC22055A1C39008BBE46, + 6EF8EC23055A1C39008BBE46, + 6EF8EC26055A1C39008BBE46, + 6EF8EC27055A1C39008BBE46, + 6EF8EC28055A1C39008BBE46, + 6EF8EC29055A1C39008BBE46, + 6EE004830560B42800F8A5B1, + 6EE0048A0560B42800F8A5B1, + 6EE0048C0560B42800F8A5B1, + 6EE0048D0560B42800F8A5B1, + 6EE004900560B42800F8A5B1, + 6E5EC36505633214001E3A3E, + 6E5EC36605633214001E3A3E, + 6E5EC36705633214001E3A3E, + 6E5EC36905633214001E3A3E, + 6E5EC36C05633214001E3A3E, + 6E5EC36D05633214001E3A3E, + 6E5EC36E05633214001E3A3E, + 6E5EC37005633214001E3A3E, + 6E00EF260566EE06001AB46F, + 6E00EF290566EE06001AB46F, + 6E6126C7056B3091006177EC, + 6E6126C8056B3091006177EC, + 6E6126C9056B3091006177EC, + 6E6126CB056B3091006177EC, + 6E6126CC056B3091006177EC, + 6E6126CD056B3091006177EC, + 6E6126CE056B3091006177EC, + 6E6126CF056B3091006177EC, + 6E6126D0056B3091006177EC, + 6E6126D1056B3091006177EC, + 6E6126D2056B3091006177EC, + 6E6126D3056B3091006177EC, + 6E6126D4056B3091006177EC, + 6E6126D5056B3091006177EC, + 6E6126D6056B3091006177EC, + 6E6126D7056B3091006177EC, + 6E6126D8056B3091006177EC, + 6E6126DA056B3091006177EC, + 6E6126DB056B3091006177EC, + 6E6126DC056B3091006177EC, + 6E6126DD056B3091006177EC, + 6E6126DE056B3091006177EC, + 6E6126DF056B3091006177EC, + 6E6126E0056B3091006177EC, + 6E6126E1056B3091006177EC, + 6E6126E2056B3091006177EC, + 6E6126E3056B3091006177EC, + 6E6126E4056B3091006177EC, + 6E51A9060573258100506538, + 6E51A9070573258100506538, + 6E51A9080573258100506538, + 6E51A9090573258100506538, + 6E51A90A0573258100506538, + 6E51A90B0573258100506538, + 6E51A90C0573258100506538, + 6E51A90D0573258100506538, + 6E51A90E0573258100506538, + 6E51A90F0573258100506538, + 6E51A9100573258100506538, + 6E51A9110573258100506538, + 6E8166290559E79E00377CF7, + ); + prevStack = ( + 6E84B8FE0558B3480001B5EB, + 6E84B8FF0558B3480001B5EB, + 6E84B9000558B3480001B5EB, + 6E84B9010558B3480001B5EB, + 6E84B9020558B3480001B5EB, + 6E84B9030558B3480001B5EB, + 6E84B9040558B3480001B5EB, + 6E84B9050558B3480001B5EB, + 6E84B9060558B3480001B5EB, + 6E84B9070558B3480001B5EB, + 6E84B9080558B3480001B5EB, + 6E84B9090558B3480001B5EB, + 6E84B90A0558B3480001B5EB, + 6E84B90B0558B3480001B5EB, + 6E84B90C0558B3480001B5EB, + 6E84B90D0558B3480001B5EB, + 6E84B90E0558B3480001B5EB, + 6E84B90F0558B3480001B5EB, + 6E84B9100558B3480001B5EB, + 6E84B9110558B3480001B5EB, + 6E84B9120558B3480001B5EB, + 6E84B9130558B3480001B5EB, + 6E84B9140558B3480001B5EB, + 6E84B9160558B3480001B5EB, + 6E84B9180558B3480001B5EB, + 6E84B91A0558B3480001B5EB, + 6E84B91C0558B3480001B5EB, + 6E84B91D0558B3480001B5EB, + 6E84B91E0558B3480001B5EB, + 6E84B91F0558B3480001B5EB, + 6E84B9210558B3480001B5EB, + 6E84B9230558B3480001B5EB, + 6E84B9240558B3480001B5EB, + 6E81662F0559E79E00377CF7, + 6E8166300559E79E00377CF7, + 6E8166310559E79E00377CF7, + 6E8166320559E79E00377CF7, + 6E8166330559E79E00377CF7, + 6E8166340559E79E00377CF7, + 6E8166350559E79E00377CF7, + 6E8166370559E79E00377CF7, + 6E8166380559E79E00377CF7, + 6E8166390559E79E00377CF7, + 6E81663A0559E79E00377CF7, + 6E81663C0559E79E00377CF7, + 6E81663E0559E79E00377CF7, + 6E81663F0559E79E00377CF7, + 6E8166410559E79E00377CF7, + 6E8166430559E79E00377CF7, + 6E8166450559E79E00377CF7, + 6E8166460559E79E00377CF7, + 6E8166480559E79E00377CF7, + 6E8166890559F3BD00377CF7, + 6E81668B0559F3BD00377CF7, + 6E81668C0559F3BD00377CF7, + 6E81668E0559F3BD00377CF7, + 6E8166900559F3BD00377CF7, + 6E8166920559F3BD00377CF7, + 6E8166940559F3BD00377CF7, + 6E8166960559F3BD00377CF7, + 6E8166980559F3BD00377CF7, + 6E81669A0559F3BD00377CF7, + 6E81669C0559F3BD00377CF7, + 6E81669E0559F3BD00377CF7, + 6E8166A00559F3BD00377CF7, + 6E8166A20559F3BD00377CF7, + 6E8166A30559F3BD00377CF7, + 6E8166A50559F3BD00377CF7, + 6EF8EB660559F823008BBE46, + 6EF8EB680559F823008BBE46, + 6EF8EB6A0559F823008BBE46, + 6EF8EB6C0559F823008BBE46, + 6EF8EB6E0559F823008BBE46, + 6EF8EB700559F823008BBE46, + 6EF8EC2D055A1C39008BBE46, + 6EF8EC2F055A1C39008BBE46, + 6EF8EC31055A1C39008BBE46, + 6EF8EC33055A1C39008BBE46, + 6EF8EC35055A1C39008BBE46, + 6EF8EC37055A1C39008BBE46, + 6EF8EC39055A1C39008BBE46, + 6EF8EC3B055A1C39008BBE46, + 6EF8EC3D055A1C39008BBE46, + 6EF8EC3F055A1C39008BBE46, + 6EF8EC40055A1C39008BBE46, + 6EF8EC42055A1C39008BBE46, + 6EF8EC44055A1C39008BBE46, + 6EF8EC45055A1C39008BBE46, + 6EF8EC47055A1C39008BBE46, + 6EF8EC49055A1C39008BBE46, + 6EF8EC4B055A1C39008BBE46, + 6EF8EC4D055A1C39008BBE46, + 6EF8EC4F055A1C39008BBE46, + 6EF8EC51055A1C39008BBE46, + 6EF8EC53055A1C39008BBE46, + 6EF8EC55055A1C39008BBE46, + 6EF8EC56055A1C39008BBE46, + 6EF8EC58055A1C39008BBE46, + 6EF8EC59055A1C39008BBE46, + 6EF8EC5A055A1C39008BBE46, + 6EF8EC5B055A1C39008BBE46, + 6EF8EC5C055A1C39008BBE46, + 6EF8EC5D055A1C39008BBE46, + 6EF8EC5E055A1C39008BBE46, + 6EF8EC60055A1C39008BBE46, + 6EF8EC62055A1C39008BBE46, + 6EF8EC64055A1C39008BBE46, + 6EF8EC65055A1C39008BBE46, + 6EF8EC67055A1C39008BBE46, + 6EF8EC69055A1C39008BBE46, + 6EF8EC6A055A1C39008BBE46, + 6EF8EC6B055A1C39008BBE46, + 6EF8EC6D055A1C39008BBE46, + 6EF8EC6E055A1C39008BBE46, + 6EF8EC6F055A1C39008BBE46, + 6EF8EC70055A1C39008BBE46, + 6EF8EC72055A1C39008BBE46, + 6EF8EC73055A1C39008BBE46, + 6EF8EC74055A1C39008BBE46, + 6EF8EC75055A1C39008BBE46, + 6EF8EC76055A1C39008BBE46, + 6EF8EC77055A1C39008BBE46, + 6EF8EC78055A1C39008BBE46, + 6EE070E0055CA8E200598538, + 6EE070E2055CA8E200598538, + 6EE070E4055CA8E200598538, + 6EE070E6055CA8E200598538, + 6EE070E8055CA8E200598538, + 6EE070EA055CA8E200598538, + 6EE070EC055CA8E200598538, + 6EE004950560B42800F8A5B1, + 6EE004960560B42800F8A5B1, + 6EE004970560B42800F8A5B1, + 6EE004980560B42800F8A5B1, + 6EE004990560B42800F8A5B1, + 6EE0049A0560B42800F8A5B1, + 6EE0049B0560B42800F8A5B1, + 6EE0049C0560B42800F8A5B1, + 6EE0049D0560B42800F8A5B1, + 6EE0049E0560B42800F8A5B1, + 6EE0049F0560B42800F8A5B1, + 6EE004A00560B42800F8A5B1, + 6EE004A10560B42800F8A5B1, + 6EE004A20560B42800F8A5B1, + 6EE004A30560B42800F8A5B1, + 6EE004A40560B42800F8A5B1, + 6EE004A50560B42800F8A5B1, + 6EE004A60560B42800F8A5B1, + 6EE004A70560B42800F8A5B1, + 6EE004A80560B42800F8A5B1, + 6EE004A90560B42800F8A5B1, + 6EE004AA0560B42800F8A5B1, + 6EE004AB0560B42800F8A5B1, + 6EE004AC0560B42800F8A5B1, + 6EE004AD0560B42800F8A5B1, + 6EE004AE0560B42800F8A5B1, + 6EE004AF0560B42800F8A5B1, + 6EE004B00560B42800F8A5B1, + 6EE004B10560B42800F8A5B1, + 6EE004B20560B42800F8A5B1, + 6EE004B30560B42800F8A5B1, + 6EE004B40560B42800F8A5B1, + 6EE004B50560B42800F8A5B1, + 6EE004B60560B42800F8A5B1, + 6EE004B70560B42800F8A5B1, + 6EE004B80560B42800F8A5B1, + 6EE004B90560B42800F8A5B1, + 6EE004BA0560B42800F8A5B1, + 6EE004BB0560B42800F8A5B1, + 6EE004BC0560B42800F8A5B1, + 6EE004BD0560B42800F8A5B1, + 6EE004BE0560B42800F8A5B1, + 6EE004BF0560B42800F8A5B1, + 6EE004C00560B42800F8A5B1, + 6EE004C10560B42800F8A5B1, + 6EE004C20560B42800F8A5B1, + 6EE004C30560B42800F8A5B1, + 6EE004C40560B42800F8A5B1, + 6EE004C50560B42800F8A5B1, + 6EE004C60560B42800F8A5B1, + 6EE004C70560B42800F8A5B1, + 6EE004C80560B42800F8A5B1, + 6EE004C90560B42800F8A5B1, + 6EE004CA0560B42800F8A5B1, + 6EE004CB0560B42800F8A5B1, + 6EE004CC0560B42800F8A5B1, + 6EE004CD0560B42800F8A5B1, + 6EE004CE0560B42800F8A5B1, + 6EE004CF0560B42800F8A5B1, + 6EE004D00560B42800F8A5B1, + 6EE004D10560B42800F8A5B1, + 6EE004D20560B42800F8A5B1, + 6EE004D30560B42800F8A5B1, + 6EE004D40560B42800F8A5B1, + 6EE004D50560B42800F8A5B1, + 6EE004D60560B42800F8A5B1, + 6EE004D70560B42800F8A5B1, + 6EE004D80560B42800F8A5B1, + 6EE004D90560B42800F8A5B1, + 6EE004DA0560B42800F8A5B1, + 6EE004DB0560B42800F8A5B1, + 6E2E17AE056201170070BE48, + 6E2E17AF056201170070BE48, + 6E2E17B0056201170070BE48, + 6E2E17B1056201170070BE48, + 6E5EC37105633214001E3A3E, + 6E5EC37205633214001E3A3E, + 6E5EC37305633214001E3A3E, + 6E5EC37405633214001E3A3E, + 6E5EC37505633214001E3A3E, + 6E5EC37605633214001E3A3E, + 6E5EC37705633214001E3A3E, + 6E5EC37805633214001E3A3E, + 6E5EC37905633214001E3A3E, + 6E5EC37A05633214001E3A3E, + 6E5EC37B05633214001E3A3E, + 6E5EC37C05633214001E3A3E, + 6E5EC37D05633214001E3A3E, + 6E5EC37E05633214001E3A3E, + 6E5EC37F05633214001E3A3E, + 6E5EC38005633214001E3A3E, + 6E5EC38105633214001E3A3E, + 6E5EC38205633214001E3A3E, + 6E5EC38305633214001E3A3E, + 6E5EC38405633214001E3A3E, + 6E5EC38505633214001E3A3E, + 6E5EC38605633214001E3A3E, + 6E5EC38705633214001E3A3E, + 6E5EC38805633214001E3A3E, + 6E5EC38905633214001E3A3E, + 6E5EC38A05633214001E3A3E, + 6E5EC38B05633214001E3A3E, + 6E5EC38C05633214001E3A3E, + 6E5EC38D05633214001E3A3E, + 6E5EC38E05633214001E3A3E, + 6E5EC38F05633214001E3A3E, + 6E5EC39005633214001E3A3E, + 6E5EC39105633214001E3A3E, + 6E5EC39205633214001E3A3E, + 6E5EC39305633214001E3A3E, + 6E5EC39405633214001E3A3E, + 6E5EC39505633214001E3A3E, + 6E5EC39605633214001E3A3E, + 6E5EC39705633214001E3A3E, + 6E5EC39805633214001E3A3E, + 6E5EC39905633214001E3A3E, + 6E5EC39A05633214001E3A3E, + 6E5EC39B05633214001E3A3E, + 6E5EC39C05633214001E3A3E, + 6E5EC39D05633214001E3A3E, + 6E5EC39E05633214001E3A3E, + 6E5EC39F05633214001E3A3E, + 6E5EC3A005633214001E3A3E, + 6E5EC3A105633214001E3A3E, + 6E5EC3A205633214001E3A3E, + 6E5EC3A305633214001E3A3E, + 6E5EC3A405633214001E3A3E, + 6E5EC3A505633214001E3A3E, + 6E5EC3A605633214001E3A3E, + 6E5EC3A705633214001E3A3E, + 6E5EC3A805633214001E3A3E, + 6E5EC3A905633214001E3A3E, + 6E5EC3AA05633214001E3A3E, + 6E5EC3AB05633214001E3A3E, + 6E5EC3AC05633214001E3A3E, + 6E5EC3AD05633214001E3A3E, + 6E5EC3AE05633214001E3A3E, + 6E5EC3AF05633214001E3A3E, + 6E5EC3B005633214001E3A3E, + 6E5EC3B105633214001E3A3E, + 6E5EC3B205633214001E3A3E, + 6E5EC3B305633214001E3A3E, + 6E5EC3B405633214001E3A3E, + 6E5EC3B505633214001E3A3E, + 6E5EC3B605633214001E3A3E, + 6E5EC3B705633214001E3A3E, + 6E5EC3B805633214001E3A3E, + 6E5EC3B905633214001E3A3E, + 6E5EC3BA05633214001E3A3E, + 6E5EC3BB05633214001E3A3E, + 6E5EC3BC05633214001E3A3E, + 6E00EF2B0566EE06001AB46F, + 6E00EF2C0566EE06001AB46F, + 6E00EF2D0566EE06001AB46F, + 6E00EF2E0566EE06001AB46F, + 6E00EF2F0566EE06001AB46F, + 6E00EF300566EE06001AB46F, + 6E00EF310566EE06001AB46F, + 6E9F392A0569DB90007C1A1C, + 6E9F392B0569DB90007C1A1C, + 6E6126E7056B3091006177EC, + 6E6126E8056B3091006177EC, + 6E6126E9056B3091006177EC, + 6E6126EA056B3091006177EC, + 6E6126EB056B3091006177EC, + 6E6126EC056B3091006177EC, + 6E6126ED056B3091006177EC, + 6E6126EE056B3091006177EC, + 6E6126EF056B3091006177EC, + 6E6126F0056B3091006177EC, + 6E6126F1056B3091006177EC, + 6E6126F2056B3091006177EC, + 6E6126F3056B3091006177EC, + 6E6126F4056B3091006177EC, + 6E6126F5056B3091006177EC, + 6E6126F6056B3091006177EC, + 6E6126F7056B3091006177EC, + 6E6126F8056B3091006177EC, + 6E6126F9056B3091006177EC, + 6E6126FA056B3091006177EC, + 6E6126FB056B3091006177EC, + 6E6126FC056B3091006177EC, + 6E6126FD056B3091006177EC, + 6E6126FE056B3091006177EC, + 6E6126FF056B3091006177EC, + 6E612700056B3091006177EC, + 6E612701056B3091006177EC, + 6E612702056B3091006177EC, + 6E612703056B3091006177EC, + 6E612704056B3091006177EC, + 6E612705056B3091006177EC, + 6E612706056B3091006177EC, + 6E612707056B3091006177EC, + 6E612708056B3091006177EC, + 6E612709056B3091006177EC, + 6E61270A056B3091006177EC, + 6E61270B056B3091006177EC, + 6E61270C056B3091006177EC, + 6E61270D056B3091006177EC, + 6E61270E056B3091006177EC, + 6E61270F056B3091006177EC, + 6E612710056B3091006177EC, + 6E612711056B3091006177EC, + 6E612712056B3091006177EC, + 6E612713056B3091006177EC, + 6E612714056B3091006177EC, + 6E51A9120573258100506538, + 6E51A9130573258100506538, + 6E51A9140573258100506538, + 6E51A9150573258100506538, + 6E51A9160573258100506538, + 6E51A9170573258100506538, + 6E51A9180573258100506538, + 6E51A9190573258100506538, + 6E51A91A0573258100506538, + 6E51A91B0573258100506538, + 6E51A91C0573258100506538, + 6E51A91D0573258100506538, + 6E51A91E0573258100506538, + 6E51A91F0573258100506538, + 6E51A9200573258100506538, + 6E51A9210573258100506538, + 6E51A9220573258100506538, + 6E51A9230573258100506538, + 6E51A9240573258100506538, + 6E51A9250573258100506538, + 6E51A9260573258100506538, + 6E51A9270573258100506538, + 6E51A9280573258100506538, + 6E51A9290573258100506538, + 6E51A92A0573258100506538, + 6E51A92B0573258100506538, + 6E51A92C0573258100506538, + 6E51A92D0573258100506538, + 6E51A92E0573258100506538, + 6E51A92F0573258100506538, + 6E51A9300573258100506538, + 6E51A9310573258100506538, + 6E51A9320573258100506538, + 6E51A9330573258100506538, + 6E51A9340573258100506538, + 6E51A9350573258100506538, + 6E51A9360573258100506538, + 6E51A9370573258100506538, + 6E51A9380573258100506538, + 6E51A9390573258100506538, + 6E51A93A0573258100506538, + 6E51A93B0573258100506538, + 6E51A93C0573258100506538, + 6E51A93D0573258100506538, + 6E51A93E0573258100506538, + 6E51A93F0573258100506538, + 6E51A9400573258100506538, + 6E51A9410573258100506538, + 6E51A9420573258100506538, + 6E51A9430573258100506538, + 6E51A9440573258100506538, + 6E51A9450573258100506538, + 6E51A9460573258100506538, + 6E51A9470573258100506538, + 6E51A9480573258100506538, + 6E51A9490573258100506538, + 6E51A94A0573258100506538, + 6E51A94B0573258100506538, + 6E51A94C0573258100506538, + 6E51A94D0573258100506538, + 6E51A94E0573258100506538, + 6E51A94F0573258100506538, + 6E51A9500573258100506538, + 6E51A9510573258100506538, + 6E51A9520573258100506538, + 6E51A9530573258100506538, + 6E51A9540573258100506538, + 6E51A9550573258100506538, + 6E51A9560573258100506538, + 6E51A9570573258100506538, + 6E51A9580573258100506538, + 6E51A9590573258100506538, + 6E51A95A0573258100506538, + 6E51A95B0573258100506538, + 6E51A95C0573258100506538, + 6E51A95D0573258100506538, + 6E51A95E0573258100506538, + 6E51A95F0573258100506538, + 6E51A9600573258100506538, + 6E51A9610573258100506538, + 6E51A9620573258100506538, + 6E51A9630573258100506538, + 6E51A9640573258100506538, + 6E51A9650573258100506538, + 6E51A9660573258100506538, + 6E51A9670573258100506538, ); }; + SplitCount = 1; }; - PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {1098, 873}}"; - PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 0}, {750, 480}}"; - PBXProjectWorkspaceModule_OldSuperviewFrame = "{{182, 0}, {1098, 873}}"; + PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {1073, 124}}"; + PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 124}, {1073, 742}}"; + PBXProjectWorkspaceModule_OldSuperviewFrame = "{{207, 0}, {1073, 866}}"; + PBXProjectWorkspaceModule_RunWindowVisible = true; PBXProjectWorkspaceModule_SGTM = { PBXBottomSmartGroupGIDs = ( 1C37FBAC04509CD000000102, @@ -318,55 +1336,50 @@ 1CC0EA4004350EF90041110B, 1C37FABC05509CD000000102, 1C37FABC05539CD112110102, - E2644B35053B69B200211256, 1C37FABC04509CD000100104, ); - PBXSmartGroupTreeModuleColumnData = { - PBXSmartGroupTreeModuleColumnWidthsKey = ( - 165, - ); - PBXSmartGroupTreeModuleColumnsKey_v4 = ( - MainColumn, - ); - }; - PBXSmartGroupTreeModuleOutlineStateKey_v7 = { - PBXSmartGroupTreeModuleOutlineStateExpansionKey = ( - ); - PBXSmartGroupTreeModuleOutlineStateSelectionKey = ( - ( - 0, - ), - ); - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey = "{{0, 0}, {165, 855}}"; - }; PBXTopSmartGroupGIDs = ( ); }; }; }; + "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXRunSessionModule" = { + }; PBXWorkspaceGeometries = ( { - Frame = "{{0, 0}, {1280, 873}}"; - PBXProjectWorkspaceModule_GeometryKey_Rev15 = { + Frame = "{{0, 0}, {1280, 886}}"; + PBXProjectWorkspaceModule_GeometryKey_Rev11 = { + PBXProjectWorkspaceModule_SGTM_Geometry = { + _collapsingFrameDimension = 0; + _indexOfCollapsedView = 0; + _percentageOfCollapsedView = 0; + sizes = ( + "{{0, 0}, {207, 866}}", + "{{207, 0}, {1073, 866}}", + ); + }; }; - RubberWindowFrame = "0 87 1280 915 0 0 1280 1002 "; + WindowFrame = "{{0, 54}, {1280, 948}}"; }, ); + "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXBatchFindModule" = { + Frame = "{{0, 0}, {543, 158}}"; + WindowFrame = "{{369, 822}, {543, 158}}"; + }; "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXBuildResultsModule" = { - Frame = "{{0, 0}, {480, 217}}"; - PBXModuleWindowStatusBarHidden = YES; - RubberWindowFrame = "400 592 480 238 0 0 1280 1002 "; + Frame = "{{0, 0}, {535, 476}}"; + WindowFrame = "{{400, 278}, {535, 554}}"; }; "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXClassBrowserModule" = { - ClassesFrame = "{{0, 0}, {408, 96}}"; + ClassesFrame = "{{0, 0}, {408, 92}}"; ClassesTreeTableConfiguration = ( PBXClassNameColumnIdentifier, 208, PBXClassBookColumnIdentifier, 22, ); - Frame = "{{0, 0}, {655, 476}}"; - MembersFrame = "{{0, 96}, {408, 404}}"; + Frame = "{{0, 0}, {655, 496}}"; + MembersFrame = "{{0, 92}, {408, 384}}"; MembersTreeTableConfiguration = ( PBXMemberTypeIconColumnIdentifier, 22, @@ -377,104 +1390,8042 @@ PBXMemberBookColumnIdentifier, 22, ); - RubberWindowFrame = "312 452 655 518 0 0 1280 1002 "; + WindowFrame = "{{312, 398}, {655, 574}}"; + }; + "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXDebugBreakpointsModule" = { + BreakpointsTreeTableConfiguration = ( + enabledColumn, + 16, + breakpointColumn, + 282.583, + ); + Frame = "{{0, 0}, {208, 494}}"; + WindowFrame = "{{390, 424}, {208, 516}}"; }; "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXDebugCLIModule" = { - Frame = "{{0, 0}, {400, 201}}"; - PBXModuleWindowStatusBarHidden = YES; - RubberWindowFrame = "50 974 400 222 0 0 1280 1002 "; + Frame = "{{0, 0}, {400, 200}}"; + WindowFrame = "{{50, 974}, {400, 222}}"; + }; + "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXDebugSessionModule" = { + DebugConsoleDrawerSize = "{100, 120}"; + DebugConsoleVisible = Drawer; + DebugConsoleWindowFrame = "{{200, 200}, {500, 300}}"; + DebugSTDIOWindowFrame = "{{200, 200}, {500, 300}}"; + Frame = "{{0, 0}, {861, 735}}"; + WindowFrame = "{{404, 189}, {861, 813}}"; }; - "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXProjectFindModule" = { - Frame = "{{0, 0}, {614, 100}}"; - RubberWindowFrame = "333 720 614 142 0 0 1280 1002 "; + "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXNavigatorGroup" = { + Frame = "{{0, 0}, {750, 480}}"; + WindowFrame = "{{38, 418}, {750, 558}}"; }; "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXProjectWorkspaceModule" = { - Frame = "{{0, 0}, {1280, 873}}"; - PBXProjectWorkspaceModule_GeometryKey_Rev15 = { + Frame = "{{0, 0}, {1280, 886}}"; + PBXProjectWorkspaceModule_GeometryKey_Rev11 = { + PBXProjectWorkspaceModule_SGTM_Geometry = { + _collapsingFrameDimension = 0; + _indexOfCollapsedView = 0; + _percentageOfCollapsedView = 0; + sizes = ( + "{{0, 0}, {207, 866}}", + "{{207, 0}, {1073, 866}}", + ); + }; }; - RubberWindowFrame = "0 87 1280 915 0 0 1280 1002 "; + WindowFrame = "{{0, 54}, {1280, 948}}"; }; - PBXWorkspaceStateSaveDate = 97569444; + "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXRunSessionModule" = { + Frame = "{{0, 0}, {745, 442}}"; + WindowFrame = "{{530, 61}, {745, 464}}"; + }; + PBXWorkspaceStateSaveDate = 91586952; }; perUserProjectItems = { - 6EAFEFFD05D0CB9B00C357EF = 6EAFEFFD05D0CB9B00C357EF; - 6EAFF00605D0D29D00C357EF = 6EAFF00605D0D29D00C357EF; + 6E00EF290566EE06001AB46F = 6E00EF290566EE06001AB46F; + 6E00EF2B0566EE06001AB46F = 6E00EF2B0566EE06001AB46F; + 6E00EF2C0566EE06001AB46F = 6E00EF2C0566EE06001AB46F; + 6E00EF2D0566EE06001AB46F = 6E00EF2D0566EE06001AB46F; + 6E00EF2E0566EE06001AB46F = 6E00EF2E0566EE06001AB46F; + 6E00EF2F0566EE06001AB46F = 6E00EF2F0566EE06001AB46F; + 6E00EF300566EE06001AB46F = 6E00EF300566EE06001AB46F; + 6E00EF310566EE06001AB46F = 6E00EF310566EE06001AB46F; + 6E2E17AE056201170070BE48 = 6E2E17AE056201170070BE48; + 6E2E17AF056201170070BE48 = 6E2E17AF056201170070BE48; + 6E2E17B0056201170070BE48 = 6E2E17B0056201170070BE48; + 6E2E17B1056201170070BE48 = 6E2E17B1056201170070BE48; + 6E3309E80575C22E0093550E = 6E3309E80575C22E0093550E; + 6E3309E90575C22E0093550E = 6E3309E90575C22E0093550E; + 6E3309EA0575C22E0093550E = 6E3309EA0575C22E0093550E; + 6E3309EB0575C22E0093550E = 6E3309EB0575C22E0093550E; + 6E3309EC0575C22E0093550E = 6E3309EC0575C22E0093550E; + 6E3309ED0575C22E0093550E = 6E3309ED0575C22E0093550E; + 6E3309EE0575C22E0093550E = 6E3309EE0575C22E0093550E; + 6E3309EF0575C22E0093550E = 6E3309EF0575C22E0093550E; + 6E3309F00575C22E0093550E = 6E3309F00575C22E0093550E; + 6E3309F10575C22E0093550E = 6E3309F10575C22E0093550E; + 6E3309F20575C22E0093550E = 6E3309F20575C22E0093550E; + 6E3309F30575C22E0093550E = 6E3309F30575C22E0093550E; + 6E3309F40575C22E0093550E = 6E3309F40575C22E0093550E; + 6E3309F50575C22E0093550E = 6E3309F50575C22E0093550E; + 6E3309F60575C22E0093550E = 6E3309F60575C22E0093550E; + 6E3309F70575C22E0093550E = 6E3309F70575C22E0093550E; + 6E3309F80575C22E0093550E = 6E3309F80575C22E0093550E; + 6E3309F90575C22E0093550E = 6E3309F90575C22E0093550E; + 6E3309FA0575C22E0093550E = 6E3309FA0575C22E0093550E; + 6E3309FB0575C22E0093550E = 6E3309FB0575C22E0093550E; + 6E3309FC0575C22E0093550E = 6E3309FC0575C22E0093550E; + 6E3309FD0575C22E0093550E = 6E3309FD0575C22E0093550E; + 6E3309FE0575C22E0093550E = 6E3309FE0575C22E0093550E; + 6E3309FF0575C22E0093550E = 6E3309FF0575C22E0093550E; + 6E330A000575C22E0093550E = 6E330A000575C22E0093550E; + 6E330A010575C22E0093550E = 6E330A010575C22E0093550E; + 6E330A020575C22E0093550E = 6E330A020575C22E0093550E; + 6E330A030575C22E0093550E = 6E330A030575C22E0093550E; + 6E330A040575C22E0093550E = 6E330A040575C22E0093550E; + 6E330A050575C22E0093550E = 6E330A050575C22E0093550E; + 6E330A060575C22E0093550E = 6E330A060575C22E0093550E; + 6E330A070575C22E0093550E = 6E330A070575C22E0093550E; + 6E330A080575C22E0093550E = 6E330A080575C22E0093550E; + 6E330A090575C22E0093550E = 6E330A090575C22E0093550E; + 6E330A0A0575C22E0093550E = 6E330A0A0575C22E0093550E; + 6E330A0B0575C22E0093550E = 6E330A0B0575C22E0093550E; + 6E330A0C0575C22E0093550E = 6E330A0C0575C22E0093550E; + 6E51A9060573258100506538 = 6E51A9060573258100506538; + 6E51A9070573258100506538 = 6E51A9070573258100506538; + 6E51A9080573258100506538 = 6E51A9080573258100506538; + 6E51A90C0573258100506538 = 6E51A90C0573258100506538; + 6E51A90D0573258100506538 = 6E51A90D0573258100506538; + 6E51A9120573258100506538 = 6E51A9120573258100506538; + 6E51A9130573258100506538 = 6E51A9130573258100506538; + 6E51A9140573258100506538 = 6E51A9140573258100506538; + 6E51A9150573258100506538 = 6E51A9150573258100506538; + 6E51A9160573258100506538 = 6E51A9160573258100506538; + 6E51A9170573258100506538 = 6E51A9170573258100506538; + 6E51A9180573258100506538 = 6E51A9180573258100506538; + 6E51A9190573258100506538 = 6E51A9190573258100506538; + 6E51A91A0573258100506538 = 6E51A91A0573258100506538; + 6E51A91B0573258100506538 = 6E51A91B0573258100506538; + 6E51A91C0573258100506538 = 6E51A91C0573258100506538; + 6E51A91D0573258100506538 = 6E51A91D0573258100506538; + 6E51A91E0573258100506538 = 6E51A91E0573258100506538; + 6E51A91F0573258100506538 = 6E51A91F0573258100506538; + 6E51A9200573258100506538 = 6E51A9200573258100506538; + 6E51A9210573258100506538 = 6E51A9210573258100506538; + 6E51A9220573258100506538 = 6E51A9220573258100506538; + 6E51A9230573258100506538 = 6E51A9230573258100506538; + 6E51A9240573258100506538 = 6E51A9240573258100506538; + 6E51A9250573258100506538 = 6E51A9250573258100506538; + 6E51A9260573258100506538 = 6E51A9260573258100506538; + 6E51A9270573258100506538 = 6E51A9270573258100506538; + 6E51A9280573258100506538 = 6E51A9280573258100506538; + 6E51A9290573258100506538 = 6E51A9290573258100506538; + 6E51A92A0573258100506538 = 6E51A92A0573258100506538; + 6E51A92B0573258100506538 = 6E51A92B0573258100506538; + 6E51A92C0573258100506538 = 6E51A92C0573258100506538; + 6E51A92D0573258100506538 = 6E51A92D0573258100506538; + 6E51A92E0573258100506538 = 6E51A92E0573258100506538; + 6E51A92F0573258100506538 = 6E51A92F0573258100506538; + 6E51A9300573258100506538 = 6E51A9300573258100506538; + 6E51A9310573258100506538 = 6E51A9310573258100506538; + 6E51A9320573258100506538 = 6E51A9320573258100506538; + 6E51A9330573258100506538 = 6E51A9330573258100506538; + 6E51A9340573258100506538 = 6E51A9340573258100506538; + 6E51A9350573258100506538 = 6E51A9350573258100506538; + 6E51A9360573258100506538 = 6E51A9360573258100506538; + 6E51A9370573258100506538 = 6E51A9370573258100506538; + 6E51A9380573258100506538 = 6E51A9380573258100506538; + 6E51A9390573258100506538 = 6E51A9390573258100506538; + 6E51A93A0573258100506538 = 6E51A93A0573258100506538; + 6E51A93B0573258100506538 = 6E51A93B0573258100506538; + 6E51A93C0573258100506538 = 6E51A93C0573258100506538; + 6E51A93D0573258100506538 = 6E51A93D0573258100506538; + 6E51A93E0573258100506538 = 6E51A93E0573258100506538; + 6E51A93F0573258100506538 = 6E51A93F0573258100506538; + 6E51A9400573258100506538 = 6E51A9400573258100506538; + 6E51A9410573258100506538 = 6E51A9410573258100506538; + 6E51A9420573258100506538 = 6E51A9420573258100506538; + 6E51A9430573258100506538 = 6E51A9430573258100506538; + 6E51A9440573258100506538 = 6E51A9440573258100506538; + 6E51A9450573258100506538 = 6E51A9450573258100506538; + 6E51A9460573258100506538 = 6E51A9460573258100506538; + 6E51A9470573258100506538 = 6E51A9470573258100506538; + 6E51A9480573258100506538 = 6E51A9480573258100506538; + 6E51A9490573258100506538 = 6E51A9490573258100506538; + 6E51A94A0573258100506538 = 6E51A94A0573258100506538; + 6E51A94B0573258100506538 = 6E51A94B0573258100506538; + 6E51A94C0573258100506538 = 6E51A94C0573258100506538; + 6E51A94D0573258100506538 = 6E51A94D0573258100506538; + 6E51A94E0573258100506538 = 6E51A94E0573258100506538; + 6E51A94F0573258100506538 = 6E51A94F0573258100506538; + 6E51A9500573258100506538 = 6E51A9500573258100506538; + 6E51A9510573258100506538 = 6E51A9510573258100506538; + 6E51A9520573258100506538 = 6E51A9520573258100506538; + 6E51A9530573258100506538 = 6E51A9530573258100506538; + 6E51A9540573258100506538 = 6E51A9540573258100506538; + 6E51A9550573258100506538 = 6E51A9550573258100506538; + 6E51A9560573258100506538 = 6E51A9560573258100506538; + 6E51A9570573258100506538 = 6E51A9570573258100506538; + 6E51A9580573258100506538 = 6E51A9580573258100506538; + 6E51A9590573258100506538 = 6E51A9590573258100506538; + 6E51A95A0573258100506538 = 6E51A95A0573258100506538; + 6E51A95B0573258100506538 = 6E51A95B0573258100506538; + 6E51A95C0573258100506538 = 6E51A95C0573258100506538; + 6E51A95D0573258100506538 = 6E51A95D0573258100506538; + 6E51A95E0573258100506538 = 6E51A95E0573258100506538; + 6E51A95F0573258100506538 = 6E51A95F0573258100506538; + 6E51A9600573258100506538 = 6E51A9600573258100506538; + 6E51A9610573258100506538 = 6E51A9610573258100506538; + 6E51A9620573258100506538 = 6E51A9620573258100506538; + 6E51A9630573258100506538 = 6E51A9630573258100506538; + 6E51A9640573258100506538 = 6E51A9640573258100506538; + 6E51A9650573258100506538 = 6E51A9650573258100506538; + 6E51A9660573258100506538 = 6E51A9660573258100506538; + 6E51A9670573258100506538 = 6E51A9670573258100506538; + 6E51A9A00573385700506538 = 6E51A9A00573385700506538; + 6E51A9A20573385700506538 = 6E51A9A20573385700506538; + 6E51A9A30573385700506538 = 6E51A9A30573385700506538; + 6E51A9A40573385700506538 = 6E51A9A40573385700506538; + 6E51A9A50573385700506538 = 6E51A9A50573385700506538; + 6E51A9A60573385700506538 = 6E51A9A60573385700506538; + 6E51A9A70573385700506538 = 6E51A9A70573385700506538; + 6E51A9A80573385700506538 = 6E51A9A80573385700506538; + 6E51A9AD0573385700506538 = 6E51A9AD0573385700506538; + 6E51A9AE0573385700506538 = 6E51A9AE0573385700506538; + 6E51A9B00573385700506538 = 6E51A9B00573385700506538; + 6E51A9B10573385700506538 = 6E51A9B10573385700506538; + 6E51A9B20573385700506538 = 6E51A9B20573385700506538; + 6E51A9B30573385700506538 = 6E51A9B30573385700506538; + 6E51A9B40573385700506538 = 6E51A9B40573385700506538; + 6E51A9B50573385700506538 = 6E51A9B50573385700506538; + 6E51A9B60573385700506538 = 6E51A9B60573385700506538; + 6E51A9B70573385700506538 = 6E51A9B70573385700506538; + 6E51A9B80573385700506538 = 6E51A9B80573385700506538; + 6E51A9B90573385700506538 = 6E51A9B90573385700506538; + 6E51A9BA0573385700506538 = 6E51A9BA0573385700506538; + 6E51A9BB0573385700506538 = 6E51A9BB0573385700506538; + 6E51A9BC0573385700506538 = 6E51A9BC0573385700506538; + 6E51A9BD0573385700506538 = 6E51A9BD0573385700506538; + 6E51A9BE0573385700506538 = 6E51A9BE0573385700506538; + 6E51A9BF0573385700506538 = 6E51A9BF0573385700506538; + 6E51A9C00573385700506538 = 6E51A9C00573385700506538; + 6E51A9C10573385700506538 = 6E51A9C10573385700506538; + 6E51A9C20573385700506538 = 6E51A9C20573385700506538; + 6E51A9C30573385700506538 = 6E51A9C30573385700506538; + 6E51A9C40573385700506538 = 6E51A9C40573385700506538; + 6E51A9C50573385700506538 = 6E51A9C50573385700506538; + 6E51A9C60573385700506538 = 6E51A9C60573385700506538; + 6E51A9C70573385700506538 = 6E51A9C70573385700506538; + 6E51A9C80573385700506538 = 6E51A9C80573385700506538; + 6E51A9C90573385700506538 = 6E51A9C90573385700506538; + 6E51A9CA0573385700506538 = 6E51A9CA0573385700506538; + 6E51A9CB0573385700506538 = 6E51A9CB0573385700506538; + 6E51A9CC0573385700506538 = 6E51A9CC0573385700506538; + 6E51A9CD0573385700506538 = 6E51A9CD0573385700506538; + 6E51A9CE0573385700506538 = 6E51A9CE0573385700506538; + 6E51A9CF0573385700506538 = 6E51A9CF0573385700506538; + 6E51A9D00573385700506538 = 6E51A9D00573385700506538; + 6E51A9D10573385700506538 = 6E51A9D10573385700506538; + 6E51A9D20573385700506538 = 6E51A9D20573385700506538; + 6E51A9D30573385700506538 = 6E51A9D30573385700506538; + 6E51A9D40573385700506538 = 6E51A9D40573385700506538; + 6E51A9D50573385700506538 = 6E51A9D50573385700506538; + 6E51A9D60573385700506538 = 6E51A9D60573385700506538; + 6E51A9D70573385700506538 = 6E51A9D70573385700506538; + 6E51A9D80573385700506538 = 6E51A9D80573385700506538; + 6E51A9D90573385700506538 = 6E51A9D90573385700506538; + 6E51A9DA0573385700506538 = 6E51A9DA0573385700506538; + 6E51A9DB0573385700506538 = 6E51A9DB0573385700506538; + 6E51A9DC0573385700506538 = 6E51A9DC0573385700506538; + 6E51A9DD0573385700506538 = 6E51A9DD0573385700506538; + 6E51A9DE0573385700506538 = 6E51A9DE0573385700506538; + 6E51A9DF0573385700506538 = 6E51A9DF0573385700506538; + 6E51A9E00573385700506538 = 6E51A9E00573385700506538; + 6E51A9E10573385700506538 = 6E51A9E10573385700506538; + 6E51A9E20573385700506538 = 6E51A9E20573385700506538; + 6E51A9E30573385700506538 = 6E51A9E30573385700506538; + 6E51A9E40573385700506538 = 6E51A9E40573385700506538; + 6E51A9E50573385700506538 = 6E51A9E50573385700506538; + 6E51A9E60573385700506538 = 6E51A9E60573385700506538; + 6E51A9E70573385700506538 = 6E51A9E70573385700506538; + 6E51A9E80573385700506538 = 6E51A9E80573385700506538; + 6E51A9E90573385700506538 = 6E51A9E90573385700506538; + 6E51A9EA0573385700506538 = 6E51A9EA0573385700506538; + 6E5EC36705633214001E3A3E = 6E5EC36705633214001E3A3E; + 6E5EC36905633214001E3A3E = 6E5EC36905633214001E3A3E; + 6E5EC36C05633214001E3A3E = 6E5EC36C05633214001E3A3E; + 6E5EC36D05633214001E3A3E = 6E5EC36D05633214001E3A3E; + 6E5EC37005633214001E3A3E = 6E5EC37005633214001E3A3E; + 6E5EC37105633214001E3A3E = 6E5EC37105633214001E3A3E; + 6E5EC37205633214001E3A3E = 6E5EC37205633214001E3A3E; + 6E5EC37305633214001E3A3E = 6E5EC37305633214001E3A3E; + 6E5EC37405633214001E3A3E = 6E5EC37405633214001E3A3E; + 6E5EC37505633214001E3A3E = 6E5EC37505633214001E3A3E; + 6E5EC37605633214001E3A3E = 6E5EC37605633214001E3A3E; + 6E5EC37705633214001E3A3E = 6E5EC37705633214001E3A3E; + 6E5EC37805633214001E3A3E = 6E5EC37805633214001E3A3E; + 6E5EC37905633214001E3A3E = 6E5EC37905633214001E3A3E; + 6E5EC37A05633214001E3A3E = 6E5EC37A05633214001E3A3E; + 6E5EC37B05633214001E3A3E = 6E5EC37B05633214001E3A3E; + 6E5EC37C05633214001E3A3E = 6E5EC37C05633214001E3A3E; + 6E5EC37D05633214001E3A3E = 6E5EC37D05633214001E3A3E; + 6E5EC37E05633214001E3A3E = 6E5EC37E05633214001E3A3E; + 6E5EC37F05633214001E3A3E = 6E5EC37F05633214001E3A3E; + 6E5EC38005633214001E3A3E = 6E5EC38005633214001E3A3E; + 6E5EC38105633214001E3A3E = 6E5EC38105633214001E3A3E; + 6E5EC38205633214001E3A3E = 6E5EC38205633214001E3A3E; + 6E5EC38305633214001E3A3E = 6E5EC38305633214001E3A3E; + 6E5EC38405633214001E3A3E = 6E5EC38405633214001E3A3E; + 6E5EC38505633214001E3A3E = 6E5EC38505633214001E3A3E; + 6E5EC38605633214001E3A3E = 6E5EC38605633214001E3A3E; + 6E5EC38705633214001E3A3E = 6E5EC38705633214001E3A3E; + 6E5EC38805633214001E3A3E = 6E5EC38805633214001E3A3E; + 6E5EC38905633214001E3A3E = 6E5EC38905633214001E3A3E; + 6E5EC38A05633214001E3A3E = 6E5EC38A05633214001E3A3E; + 6E5EC38B05633214001E3A3E = 6E5EC38B05633214001E3A3E; + 6E5EC38C05633214001E3A3E = 6E5EC38C05633214001E3A3E; + 6E5EC38D05633214001E3A3E = 6E5EC38D05633214001E3A3E; + 6E5EC38E05633214001E3A3E = 6E5EC38E05633214001E3A3E; + 6E5EC38F05633214001E3A3E = 6E5EC38F05633214001E3A3E; + 6E5EC39005633214001E3A3E = 6E5EC39005633214001E3A3E; + 6E5EC39105633214001E3A3E = 6E5EC39105633214001E3A3E; + 6E5EC39205633214001E3A3E = 6E5EC39205633214001E3A3E; + 6E5EC39305633214001E3A3E = 6E5EC39305633214001E3A3E; + 6E5EC39405633214001E3A3E = 6E5EC39405633214001E3A3E; + 6E5EC39505633214001E3A3E = 6E5EC39505633214001E3A3E; + 6E5EC39605633214001E3A3E = 6E5EC39605633214001E3A3E; + 6E5EC39705633214001E3A3E = 6E5EC39705633214001E3A3E; + 6E5EC39805633214001E3A3E = 6E5EC39805633214001E3A3E; + 6E5EC39905633214001E3A3E = 6E5EC39905633214001E3A3E; + 6E5EC39A05633214001E3A3E = 6E5EC39A05633214001E3A3E; + 6E5EC39B05633214001E3A3E = 6E5EC39B05633214001E3A3E; + 6E5EC39C05633214001E3A3E = 6E5EC39C05633214001E3A3E; + 6E5EC39D05633214001E3A3E = 6E5EC39D05633214001E3A3E; + 6E5EC39E05633214001E3A3E = 6E5EC39E05633214001E3A3E; + 6E5EC39F05633214001E3A3E = 6E5EC39F05633214001E3A3E; + 6E5EC3A005633214001E3A3E = 6E5EC3A005633214001E3A3E; + 6E5EC3A105633214001E3A3E = 6E5EC3A105633214001E3A3E; + 6E5EC3A205633214001E3A3E = 6E5EC3A205633214001E3A3E; + 6E5EC3A305633214001E3A3E = 6E5EC3A305633214001E3A3E; + 6E5EC3A405633214001E3A3E = 6E5EC3A405633214001E3A3E; + 6E5EC3A505633214001E3A3E = 6E5EC3A505633214001E3A3E; + 6E5EC3A605633214001E3A3E = 6E5EC3A605633214001E3A3E; + 6E5EC3A705633214001E3A3E = 6E5EC3A705633214001E3A3E; + 6E5EC3A805633214001E3A3E = 6E5EC3A805633214001E3A3E; + 6E5EC3A905633214001E3A3E = 6E5EC3A905633214001E3A3E; + 6E5EC3AA05633214001E3A3E = 6E5EC3AA05633214001E3A3E; + 6E5EC3AB05633214001E3A3E = 6E5EC3AB05633214001E3A3E; + 6E5EC3AC05633214001E3A3E = 6E5EC3AC05633214001E3A3E; + 6E5EC3AD05633214001E3A3E = 6E5EC3AD05633214001E3A3E; + 6E5EC3AE05633214001E3A3E = 6E5EC3AE05633214001E3A3E; + 6E5EC3AF05633214001E3A3E = 6E5EC3AF05633214001E3A3E; + 6E5EC3B005633214001E3A3E = 6E5EC3B005633214001E3A3E; + 6E5EC3B105633214001E3A3E = 6E5EC3B105633214001E3A3E; + 6E5EC3B205633214001E3A3E = 6E5EC3B205633214001E3A3E; + 6E5EC3B305633214001E3A3E = 6E5EC3B305633214001E3A3E; + 6E5EC3B405633214001E3A3E = 6E5EC3B405633214001E3A3E; + 6E5EC3B505633214001E3A3E = 6E5EC3B505633214001E3A3E; + 6E5EC3B605633214001E3A3E = 6E5EC3B605633214001E3A3E; + 6E5EC3B705633214001E3A3E = 6E5EC3B705633214001E3A3E; + 6E5EC3B805633214001E3A3E = 6E5EC3B805633214001E3A3E; + 6E5EC3B905633214001E3A3E = 6E5EC3B905633214001E3A3E; + 6E5EC3BA05633214001E3A3E = 6E5EC3BA05633214001E3A3E; + 6E5EC3BB05633214001E3A3E = 6E5EC3BB05633214001E3A3E; + 6E5EC3BC05633214001E3A3E = 6E5EC3BC05633214001E3A3E; + 6E6126C7056B3091006177EC = 6E6126C7056B3091006177EC; + 6E6126C8056B3091006177EC = 6E6126C8056B3091006177EC; + 6E6126C9056B3091006177EC = 6E6126C9056B3091006177EC; + 6E6126CB056B3091006177EC = 6E6126CB056B3091006177EC; + 6E6126CC056B3091006177EC = 6E6126CC056B3091006177EC; + 6E6126CD056B3091006177EC = 6E6126CD056B3091006177EC; + 6E6126CE056B3091006177EC = 6E6126CE056B3091006177EC; + 6E6126CF056B3091006177EC = 6E6126CF056B3091006177EC; + 6E6126D0056B3091006177EC = 6E6126D0056B3091006177EC; + 6E6126D1056B3091006177EC = 6E6126D1056B3091006177EC; + 6E6126D2056B3091006177EC = 6E6126D2056B3091006177EC; + 6E6126D3056B3091006177EC = 6E6126D3056B3091006177EC; + 6E6126D4056B3091006177EC = 6E6126D4056B3091006177EC; + 6E6126D5056B3091006177EC = 6E6126D5056B3091006177EC; + 6E6126D6056B3091006177EC = 6E6126D6056B3091006177EC; + 6E6126D7056B3091006177EC = 6E6126D7056B3091006177EC; + 6E6126D8056B3091006177EC = 6E6126D8056B3091006177EC; + 6E6126DA056B3091006177EC = 6E6126DA056B3091006177EC; + 6E6126DB056B3091006177EC = 6E6126DB056B3091006177EC; + 6E6126DC056B3091006177EC = 6E6126DC056B3091006177EC; + 6E6126DD056B3091006177EC = 6E6126DD056B3091006177EC; + 6E6126DE056B3091006177EC = 6E6126DE056B3091006177EC; + 6E6126DF056B3091006177EC = 6E6126DF056B3091006177EC; + 6E6126E0056B3091006177EC = 6E6126E0056B3091006177EC; + 6E6126E1056B3091006177EC = 6E6126E1056B3091006177EC; + 6E6126E2056B3091006177EC = 6E6126E2056B3091006177EC; + 6E6126E3056B3091006177EC = 6E6126E3056B3091006177EC; + 6E6126E4056B3091006177EC = 6E6126E4056B3091006177EC; + 6E6126E7056B3091006177EC = 6E6126E7056B3091006177EC; + 6E6126E8056B3091006177EC = 6E6126E8056B3091006177EC; + 6E6126E9056B3091006177EC = 6E6126E9056B3091006177EC; + 6E6126EA056B3091006177EC = 6E6126EA056B3091006177EC; + 6E6126EB056B3091006177EC = 6E6126EB056B3091006177EC; + 6E6126EC056B3091006177EC = 6E6126EC056B3091006177EC; + 6E6126ED056B3091006177EC = 6E6126ED056B3091006177EC; + 6E6126EE056B3091006177EC = 6E6126EE056B3091006177EC; + 6E6126EF056B3091006177EC = 6E6126EF056B3091006177EC; + 6E6126F0056B3091006177EC = 6E6126F0056B3091006177EC; + 6E6126F1056B3091006177EC = 6E6126F1056B3091006177EC; + 6E6126F2056B3091006177EC = 6E6126F2056B3091006177EC; + 6E6126F3056B3091006177EC = 6E6126F3056B3091006177EC; + 6E6126F4056B3091006177EC = 6E6126F4056B3091006177EC; + 6E6126F5056B3091006177EC = 6E6126F5056B3091006177EC; + 6E6126F6056B3091006177EC = 6E6126F6056B3091006177EC; + 6E6126F7056B3091006177EC = 6E6126F7056B3091006177EC; + 6E6126F8056B3091006177EC = 6E6126F8056B3091006177EC; + 6E6126F9056B3091006177EC = 6E6126F9056B3091006177EC; + 6E6126FA056B3091006177EC = 6E6126FA056B3091006177EC; + 6E6126FB056B3091006177EC = 6E6126FB056B3091006177EC; + 6E6126FC056B3091006177EC = 6E6126FC056B3091006177EC; + 6E6126FD056B3091006177EC = 6E6126FD056B3091006177EC; + 6E6126FE056B3091006177EC = 6E6126FE056B3091006177EC; + 6E6126FF056B3091006177EC = 6E6126FF056B3091006177EC; + 6E612700056B3091006177EC = 6E612700056B3091006177EC; + 6E612701056B3091006177EC = 6E612701056B3091006177EC; + 6E612702056B3091006177EC = 6E612702056B3091006177EC; + 6E612703056B3091006177EC = 6E612703056B3091006177EC; + 6E612704056B3091006177EC = 6E612704056B3091006177EC; + 6E612705056B3091006177EC = 6E612705056B3091006177EC; + 6E612706056B3091006177EC = 6E612706056B3091006177EC; + 6E612707056B3091006177EC = 6E612707056B3091006177EC; + 6E612708056B3091006177EC = 6E612708056B3091006177EC; + 6E612709056B3091006177EC = 6E612709056B3091006177EC; + 6E61270A056B3091006177EC = 6E61270A056B3091006177EC; + 6E61270B056B3091006177EC = 6E61270B056B3091006177EC; + 6E61270C056B3091006177EC = 6E61270C056B3091006177EC; + 6E61270D056B3091006177EC = 6E61270D056B3091006177EC; + 6E61270E056B3091006177EC = 6E61270E056B3091006177EC; + 6E61270F056B3091006177EC = 6E61270F056B3091006177EC; + 6E612710056B3091006177EC = 6E612710056B3091006177EC; + 6E612711056B3091006177EC = 6E612711056B3091006177EC; + 6E612712056B3091006177EC = 6E612712056B3091006177EC; + 6E612713056B3091006177EC = 6E612713056B3091006177EC; + 6E612714056B3091006177EC = 6E612714056B3091006177EC; + 6E81662F0559E79E00377CF7 = 6E81662F0559E79E00377CF7; + 6E8166300559E79E00377CF7 = 6E8166300559E79E00377CF7; + 6E8166310559E79E00377CF7 = 6E8166310559E79E00377CF7; + 6E8166320559E79E00377CF7 = 6E8166320559E79E00377CF7; + 6E8166330559E79E00377CF7 = 6E8166330559E79E00377CF7; + 6E8166340559E79E00377CF7 = 6E8166340559E79E00377CF7; + 6E8166350559E79E00377CF7 = 6E8166350559E79E00377CF7; + 6E8166370559E79E00377CF7 = 6E8166370559E79E00377CF7; + 6E8166380559E79E00377CF7 = 6E8166380559E79E00377CF7; + 6E8166390559E79E00377CF7 = 6E8166390559E79E00377CF7; + 6E81663A0559E79E00377CF7 = 6E81663A0559E79E00377CF7; + 6E81663C0559E79E00377CF7 = 6E81663C0559E79E00377CF7; + 6E81663E0559E79E00377CF7 = 6E81663E0559E79E00377CF7; + 6E81663F0559E79E00377CF7 = 6E81663F0559E79E00377CF7; + 6E8166410559E79E00377CF7 = 6E8166410559E79E00377CF7; + 6E8166430559E79E00377CF7 = 6E8166430559E79E00377CF7; + 6E8166450559E79E00377CF7 = 6E8166450559E79E00377CF7; + 6E8166460559E79E00377CF7 = 6E8166460559E79E00377CF7; + 6E8166480559E79E00377CF7 = 6E8166480559E79E00377CF7; + 6E8166890559F3BD00377CF7 = 6E8166890559F3BD00377CF7; + 6E81668B0559F3BD00377CF7 = 6E81668B0559F3BD00377CF7; + 6E81668C0559F3BD00377CF7 = 6E81668C0559F3BD00377CF7; + 6E81668E0559F3BD00377CF7 = 6E81668E0559F3BD00377CF7; + 6E8166900559F3BD00377CF7 = 6E8166900559F3BD00377CF7; + 6E8166920559F3BD00377CF7 = 6E8166920559F3BD00377CF7; + 6E8166940559F3BD00377CF7 = 6E8166940559F3BD00377CF7; + 6E8166960559F3BD00377CF7 = 6E8166960559F3BD00377CF7; + 6E8166980559F3BD00377CF7 = 6E8166980559F3BD00377CF7; + 6E81669A0559F3BD00377CF7 = 6E81669A0559F3BD00377CF7; + 6E81669C0559F3BD00377CF7 = 6E81669C0559F3BD00377CF7; + 6E81669E0559F3BD00377CF7 = 6E81669E0559F3BD00377CF7; + 6E8166A00559F3BD00377CF7 = 6E8166A00559F3BD00377CF7; + 6E8166A20559F3BD00377CF7 = 6E8166A20559F3BD00377CF7; + 6E8166A30559F3BD00377CF7 = 6E8166A30559F3BD00377CF7; + 6E8166A50559F3BD00377CF7 = 6E8166A50559F3BD00377CF7; + 6E84B8F20558B3480001B5EB = 6E84B8F20558B3480001B5EB; + 6E84B8F30558B3480001B5EB = 6E84B8F30558B3480001B5EB; + 6E84B8F40558B3480001B5EB = 6E84B8F40558B3480001B5EB; + 6E84B8F80558B3480001B5EB = 6E84B8F80558B3480001B5EB; + 6E84B8FE0558B3480001B5EB = 6E84B8FE0558B3480001B5EB; + 6E84B8FF0558B3480001B5EB = 6E84B8FF0558B3480001B5EB; + 6E84B9000558B3480001B5EB = 6E84B9000558B3480001B5EB; + 6E84B9010558B3480001B5EB = 6E84B9010558B3480001B5EB; + 6E84B9020558B3480001B5EB = 6E84B9020558B3480001B5EB; + 6E84B9030558B3480001B5EB = 6E84B9030558B3480001B5EB; + 6E84B9040558B3480001B5EB = 6E84B9040558B3480001B5EB; + 6E84B9050558B3480001B5EB = 6E84B9050558B3480001B5EB; + 6E84B9060558B3480001B5EB = 6E84B9060558B3480001B5EB; + 6E84B9070558B3480001B5EB = 6E84B9070558B3480001B5EB; + 6E84B9080558B3480001B5EB = 6E84B9080558B3480001B5EB; + 6E84B9090558B3480001B5EB = 6E84B9090558B3480001B5EB; + 6E84B90A0558B3480001B5EB = 6E84B90A0558B3480001B5EB; + 6E84B90B0558B3480001B5EB = 6E84B90B0558B3480001B5EB; + 6E84B90C0558B3480001B5EB = 6E84B90C0558B3480001B5EB; + 6E84B90D0558B3480001B5EB = 6E84B90D0558B3480001B5EB; + 6E84B90E0558B3480001B5EB = 6E84B90E0558B3480001B5EB; + 6E84B90F0558B3480001B5EB = 6E84B90F0558B3480001B5EB; + 6E84B9100558B3480001B5EB = 6E84B9100558B3480001B5EB; + 6E84B9110558B3480001B5EB = 6E84B9110558B3480001B5EB; + 6E84B9120558B3480001B5EB = 6E84B9120558B3480001B5EB; + 6E84B9130558B3480001B5EB = 6E84B9130558B3480001B5EB; + 6E84B9140558B3480001B5EB = 6E84B9140558B3480001B5EB; + 6E84B9160558B3480001B5EB = 6E84B9160558B3480001B5EB; + 6E84B9180558B3480001B5EB = 6E84B9180558B3480001B5EB; + 6E84B91A0558B3480001B5EB = 6E84B91A0558B3480001B5EB; + 6E84B91C0558B3480001B5EB = 6E84B91C0558B3480001B5EB; + 6E84B91D0558B3480001B5EB = 6E84B91D0558B3480001B5EB; + 6E84B91E0558B3480001B5EB = 6E84B91E0558B3480001B5EB; + 6E84B91F0558B3480001B5EB = 6E84B91F0558B3480001B5EB; + 6E84B9210558B3480001B5EB = 6E84B9210558B3480001B5EB; + 6E84B9230558B3480001B5EB = 6E84B9230558B3480001B5EB; + 6E84B9240558B3480001B5EB = 6E84B9240558B3480001B5EB; + 6E9F392A0569DB90007C1A1C = 6E9F392A0569DB90007C1A1C; + 6E9F392B0569DB90007C1A1C = 6E9F392B0569DB90007C1A1C; + 6EB8529F057476DD00E260EA = 6EB8529F057476DD00E260EA; + 6EB852A0057476DD00E260EA = 6EB852A0057476DD00E260EA; + 6EB852A1057476DD00E260EA = 6EB852A1057476DD00E260EA; + 6EB852A3057476DD00E260EA = 6EB852A3057476DD00E260EA; + 6EB852A4057476DD00E260EA = 6EB852A4057476DD00E260EA; + 6EB852A5057476DD00E260EA = 6EB852A5057476DD00E260EA; + 6EB852A6057476DD00E260EA = 6EB852A6057476DD00E260EA; + 6EB852A9057476DD00E260EA = 6EB852A9057476DD00E260EA; + 6EB852AC057476DD00E260EA = 6EB852AC057476DD00E260EA; + 6EB852AD057476DD00E260EA = 6EB852AD057476DD00E260EA; + 6EB852AE057476DD00E260EA = 6EB852AE057476DD00E260EA; + 6EB852AF057476DD00E260EA = 6EB852AF057476DD00E260EA; + 6EB852B0057476DD00E260EA = 6EB852B0057476DD00E260EA; + 6EB852B1057476DD00E260EA = 6EB852B1057476DD00E260EA; + 6EB852B2057476DD00E260EA = 6EB852B2057476DD00E260EA; + 6EB852B3057476DD00E260EA = 6EB852B3057476DD00E260EA; + 6EB852B4057476DD00E260EA = 6EB852B4057476DD00E260EA; + 6EB852B5057476DD00E260EA = 6EB852B5057476DD00E260EA; + 6EB852B6057476DD00E260EA = 6EB852B6057476DD00E260EA; + 6EB852B7057476DD00E260EA = 6EB852B7057476DD00E260EA; + 6EB852B8057476DD00E260EA = 6EB852B8057476DD00E260EA; + 6EB852B9057476DD00E260EA = 6EB852B9057476DD00E260EA; + 6EB852BA057476DD00E260EA = 6EB852BA057476DD00E260EA; + 6EB852BB057476DD00E260EA = 6EB852BB057476DD00E260EA; + 6EB852BC057476DD00E260EA = 6EB852BC057476DD00E260EA; + 6EB852BD057476DD00E260EA = 6EB852BD057476DD00E260EA; + 6EB852BE057476DD00E260EA = 6EB852BE057476DD00E260EA; + 6EB852BF057476DD00E260EA = 6EB852BF057476DD00E260EA; + 6EB852C0057476DD00E260EA = 6EB852C0057476DD00E260EA; + 6EB852C1057476DD00E260EA = 6EB852C1057476DD00E260EA; + 6EB852C2057476DD00E260EA = 6EB852C2057476DD00E260EA; + 6EB852C3057476DD00E260EA = 6EB852C3057476DD00E260EA; + 6EB852C4057476DD00E260EA = 6EB852C4057476DD00E260EA; + 6EB852C5057476DD00E260EA = 6EB852C5057476DD00E260EA; + 6EB852C6057476DD00E260EA = 6EB852C6057476DD00E260EA; + 6EB852C7057476DD00E260EA = 6EB852C7057476DD00E260EA; + 6EB852C8057476DD00E260EA = 6EB852C8057476DD00E260EA; + 6EB852C9057476DD00E260EA = 6EB852C9057476DD00E260EA; + 6EB852CA057476DD00E260EA = 6EB852CA057476DD00E260EA; + 6EB852CB057476DD00E260EA = 6EB852CB057476DD00E260EA; + 6EB852CC057476DD00E260EA = 6EB852CC057476DD00E260EA; + 6EB852CD057476DD00E260EA = 6EB852CD057476DD00E260EA; + 6EB852CE057476DD00E260EA = 6EB852CE057476DD00E260EA; + 6EB852CF057476DD00E260EA = 6EB852CF057476DD00E260EA; + 6EB852D0057476DD00E260EA = 6EB852D0057476DD00E260EA; + 6EB852D1057476DD00E260EA = 6EB852D1057476DD00E260EA; + 6EB852D2057476DD00E260EA = 6EB852D2057476DD00E260EA; + 6EB852D3057476DD00E260EA = 6EB852D3057476DD00E260EA; + 6EB852D4057476DD00E260EA = 6EB852D4057476DD00E260EA; + 6EB852D5057476DD00E260EA = 6EB852D5057476DD00E260EA; + 6EB852D6057476DD00E260EA = 6EB852D6057476DD00E260EA; + 6EB852D7057476DD00E260EA = 6EB852D7057476DD00E260EA; + 6EB852D8057476DD00E260EA = 6EB852D8057476DD00E260EA; + 6EB852D9057476DD00E260EA = 6EB852D9057476DD00E260EA; + 6EB852DA057476DD00E260EA = 6EB852DA057476DD00E260EA; + 6EB852DB057476DD00E260EA = 6EB852DB057476DD00E260EA; + 6EB852DC057476DD00E260EA = 6EB852DC057476DD00E260EA; + 6EB852DD057476DD00E260EA = 6EB852DD057476DD00E260EA; + 6EB852DE057476DD00E260EA = 6EB852DE057476DD00E260EA; + 6EB852DF057476DD00E260EA = 6EB852DF057476DD00E260EA; + 6EB852E0057476DD00E260EA = 6EB852E0057476DD00E260EA; + 6EB852E1057476DD00E260EA = 6EB852E1057476DD00E260EA; + 6EB852E2057476DD00E260EA = 6EB852E2057476DD00E260EA; + 6EB852E3057476DD00E260EA = 6EB852E3057476DD00E260EA; + 6EB852E4057476DD00E260EA = 6EB852E4057476DD00E260EA; + 6EE0048A0560B42800F8A5B1 = 6EE0048A0560B42800F8A5B1; + 6EE004950560B42800F8A5B1 = 6EE004950560B42800F8A5B1; + 6EE004960560B42800F8A5B1 = 6EE004960560B42800F8A5B1; + 6EE004970560B42800F8A5B1 = 6EE004970560B42800F8A5B1; + 6EE004980560B42800F8A5B1 = 6EE004980560B42800F8A5B1; + 6EE004990560B42800F8A5B1 = 6EE004990560B42800F8A5B1; + 6EE0049A0560B42800F8A5B1 = 6EE0049A0560B42800F8A5B1; + 6EE0049B0560B42800F8A5B1 = 6EE0049B0560B42800F8A5B1; + 6EE0049C0560B42800F8A5B1 = 6EE0049C0560B42800F8A5B1; + 6EE0049D0560B42800F8A5B1 = 6EE0049D0560B42800F8A5B1; + 6EE0049E0560B42800F8A5B1 = 6EE0049E0560B42800F8A5B1; + 6EE0049F0560B42800F8A5B1 = 6EE0049F0560B42800F8A5B1; + 6EE004A00560B42800F8A5B1 = 6EE004A00560B42800F8A5B1; + 6EE004A10560B42800F8A5B1 = 6EE004A10560B42800F8A5B1; + 6EE004A20560B42800F8A5B1 = 6EE004A20560B42800F8A5B1; + 6EE004A30560B42800F8A5B1 = 6EE004A30560B42800F8A5B1; + 6EE004A40560B42800F8A5B1 = 6EE004A40560B42800F8A5B1; + 6EE004A50560B42800F8A5B1 = 6EE004A50560B42800F8A5B1; + 6EE004A60560B42800F8A5B1 = 6EE004A60560B42800F8A5B1; + 6EE004A70560B42800F8A5B1 = 6EE004A70560B42800F8A5B1; + 6EE004A80560B42800F8A5B1 = 6EE004A80560B42800F8A5B1; + 6EE004A90560B42800F8A5B1 = 6EE004A90560B42800F8A5B1; + 6EE004AA0560B42800F8A5B1 = 6EE004AA0560B42800F8A5B1; + 6EE004AB0560B42800F8A5B1 = 6EE004AB0560B42800F8A5B1; + 6EE004AC0560B42800F8A5B1 = 6EE004AC0560B42800F8A5B1; + 6EE004AD0560B42800F8A5B1 = 6EE004AD0560B42800F8A5B1; + 6EE004AE0560B42800F8A5B1 = 6EE004AE0560B42800F8A5B1; + 6EE004AF0560B42800F8A5B1 = 6EE004AF0560B42800F8A5B1; + 6EE004B00560B42800F8A5B1 = 6EE004B00560B42800F8A5B1; + 6EE004B10560B42800F8A5B1 = 6EE004B10560B42800F8A5B1; + 6EE004B20560B42800F8A5B1 = 6EE004B20560B42800F8A5B1; + 6EE004B30560B42800F8A5B1 = 6EE004B30560B42800F8A5B1; + 6EE004B40560B42800F8A5B1 = 6EE004B40560B42800F8A5B1; + 6EE004B50560B42800F8A5B1 = 6EE004B50560B42800F8A5B1; + 6EE004B60560B42800F8A5B1 = 6EE004B60560B42800F8A5B1; + 6EE004B70560B42800F8A5B1 = 6EE004B70560B42800F8A5B1; + 6EE004B80560B42800F8A5B1 = 6EE004B80560B42800F8A5B1; + 6EE004B90560B42800F8A5B1 = 6EE004B90560B42800F8A5B1; + 6EE004BA0560B42800F8A5B1 = 6EE004BA0560B42800F8A5B1; + 6EE004BB0560B42800F8A5B1 = 6EE004BB0560B42800F8A5B1; + 6EE004BC0560B42800F8A5B1 = 6EE004BC0560B42800F8A5B1; + 6EE004BD0560B42800F8A5B1 = 6EE004BD0560B42800F8A5B1; + 6EE004BE0560B42800F8A5B1 = 6EE004BE0560B42800F8A5B1; + 6EE004BF0560B42800F8A5B1 = 6EE004BF0560B42800F8A5B1; + 6EE004C00560B42800F8A5B1 = 6EE004C00560B42800F8A5B1; + 6EE004C10560B42800F8A5B1 = 6EE004C10560B42800F8A5B1; + 6EE004C20560B42800F8A5B1 = 6EE004C20560B42800F8A5B1; + 6EE004C30560B42800F8A5B1 = 6EE004C30560B42800F8A5B1; + 6EE004C40560B42800F8A5B1 = 6EE004C40560B42800F8A5B1; + 6EE004C50560B42800F8A5B1 = 6EE004C50560B42800F8A5B1; + 6EE004C60560B42800F8A5B1 = 6EE004C60560B42800F8A5B1; + 6EE004C70560B42800F8A5B1 = 6EE004C70560B42800F8A5B1; + 6EE004C80560B42800F8A5B1 = 6EE004C80560B42800F8A5B1; + 6EE004C90560B42800F8A5B1 = 6EE004C90560B42800F8A5B1; + 6EE004CA0560B42800F8A5B1 = 6EE004CA0560B42800F8A5B1; + 6EE004CB0560B42800F8A5B1 = 6EE004CB0560B42800F8A5B1; + 6EE004CC0560B42800F8A5B1 = 6EE004CC0560B42800F8A5B1; + 6EE004CD0560B42800F8A5B1 = 6EE004CD0560B42800F8A5B1; + 6EE004CE0560B42800F8A5B1 = 6EE004CE0560B42800F8A5B1; + 6EE004CF0560B42800F8A5B1 = 6EE004CF0560B42800F8A5B1; + 6EE004D00560B42800F8A5B1 = 6EE004D00560B42800F8A5B1; + 6EE004D10560B42800F8A5B1 = 6EE004D10560B42800F8A5B1; + 6EE004D20560B42800F8A5B1 = 6EE004D20560B42800F8A5B1; + 6EE004D30560B42800F8A5B1 = 6EE004D30560B42800F8A5B1; + 6EE004D40560B42800F8A5B1 = 6EE004D40560B42800F8A5B1; + 6EE004D50560B42800F8A5B1 = 6EE004D50560B42800F8A5B1; + 6EE004D60560B42800F8A5B1 = 6EE004D60560B42800F8A5B1; + 6EE004D70560B42800F8A5B1 = 6EE004D70560B42800F8A5B1; + 6EE004D80560B42800F8A5B1 = 6EE004D80560B42800F8A5B1; + 6EE004D90560B42800F8A5B1 = 6EE004D90560B42800F8A5B1; + 6EE004DA0560B42800F8A5B1 = 6EE004DA0560B42800F8A5B1; + 6EE004DB0560B42800F8A5B1 = 6EE004DB0560B42800F8A5B1; + 6EE070E0055CA8E200598538 = 6EE070E0055CA8E200598538; + 6EE070E2055CA8E200598538 = 6EE070E2055CA8E200598538; + 6EE070E4055CA8E200598538 = 6EE070E4055CA8E200598538; + 6EE070E6055CA8E200598538 = 6EE070E6055CA8E200598538; + 6EE070E8055CA8E200598538 = 6EE070E8055CA8E200598538; + 6EE070EA055CA8E200598538 = 6EE070EA055CA8E200598538; + 6EE070EC055CA8E200598538 = 6EE070EC055CA8E200598538; + 6EF08713057544F900B81D60 = 6EF08713057544F900B81D60; + 6EF8EB660559F823008BBE46 = 6EF8EB660559F823008BBE46; + 6EF8EB680559F823008BBE46 = 6EF8EB680559F823008BBE46; + 6EF8EB6A0559F823008BBE46 = 6EF8EB6A0559F823008BBE46; + 6EF8EB6C0559F823008BBE46 = 6EF8EB6C0559F823008BBE46; + 6EF8EB6E0559F823008BBE46 = 6EF8EB6E0559F823008BBE46; + 6EF8EB700559F823008BBE46 = 6EF8EB700559F823008BBE46; + 6EF8EC23055A1C39008BBE46 = 6EF8EC23055A1C39008BBE46; + 6EF8EC26055A1C39008BBE46 = 6EF8EC26055A1C39008BBE46; + 6EF8EC27055A1C39008BBE46 = 6EF8EC27055A1C39008BBE46; + 6EF8EC28055A1C39008BBE46 = 6EF8EC28055A1C39008BBE46; + 6EF8EC29055A1C39008BBE46 = 6EF8EC29055A1C39008BBE46; + 6EF8EC2D055A1C39008BBE46 = 6EF8EC2D055A1C39008BBE46; + 6EF8EC2F055A1C39008BBE46 = 6EF8EC2F055A1C39008BBE46; + 6EF8EC31055A1C39008BBE46 = 6EF8EC31055A1C39008BBE46; + 6EF8EC33055A1C39008BBE46 = 6EF8EC33055A1C39008BBE46; + 6EF8EC35055A1C39008BBE46 = 6EF8EC35055A1C39008BBE46; + 6EF8EC37055A1C39008BBE46 = 6EF8EC37055A1C39008BBE46; + 6EF8EC39055A1C39008BBE46 = 6EF8EC39055A1C39008BBE46; + 6EF8EC3B055A1C39008BBE46 = 6EF8EC3B055A1C39008BBE46; + 6EF8EC3D055A1C39008BBE46 = 6EF8EC3D055A1C39008BBE46; + 6EF8EC3F055A1C39008BBE46 = 6EF8EC3F055A1C39008BBE46; + 6EF8EC40055A1C39008BBE46 = 6EF8EC40055A1C39008BBE46; + 6EF8EC42055A1C39008BBE46 = 6EF8EC42055A1C39008BBE46; + 6EF8EC44055A1C39008BBE46 = 6EF8EC44055A1C39008BBE46; + 6EF8EC45055A1C39008BBE46 = 6EF8EC45055A1C39008BBE46; + 6EF8EC47055A1C39008BBE46 = 6EF8EC47055A1C39008BBE46; + 6EF8EC49055A1C39008BBE46 = 6EF8EC49055A1C39008BBE46; + 6EF8EC4B055A1C39008BBE46 = 6EF8EC4B055A1C39008BBE46; + 6EF8EC4D055A1C39008BBE46 = 6EF8EC4D055A1C39008BBE46; + 6EF8EC4F055A1C39008BBE46 = 6EF8EC4F055A1C39008BBE46; + 6EF8EC51055A1C39008BBE46 = 6EF8EC51055A1C39008BBE46; + 6EF8EC53055A1C39008BBE46 = 6EF8EC53055A1C39008BBE46; + 6EF8EC55055A1C39008BBE46 = 6EF8EC55055A1C39008BBE46; + 6EF8EC56055A1C39008BBE46 = 6EF8EC56055A1C39008BBE46; + 6EF8EC58055A1C39008BBE46 = 6EF8EC58055A1C39008BBE46; + 6EF8EC59055A1C39008BBE46 = 6EF8EC59055A1C39008BBE46; + 6EF8EC5A055A1C39008BBE46 = 6EF8EC5A055A1C39008BBE46; + 6EF8EC5B055A1C39008BBE46 = 6EF8EC5B055A1C39008BBE46; + 6EF8EC5C055A1C39008BBE46 = 6EF8EC5C055A1C39008BBE46; + 6EF8EC5D055A1C39008BBE46 = 6EF8EC5D055A1C39008BBE46; + 6EF8EC5E055A1C39008BBE46 = 6EF8EC5E055A1C39008BBE46; + 6EF8EC60055A1C39008BBE46 = 6EF8EC60055A1C39008BBE46; + 6EF8EC62055A1C39008BBE46 = 6EF8EC62055A1C39008BBE46; + 6EF8EC64055A1C39008BBE46 = 6EF8EC64055A1C39008BBE46; + 6EF8EC65055A1C39008BBE46 = 6EF8EC65055A1C39008BBE46; + 6EF8EC67055A1C39008BBE46 = 6EF8EC67055A1C39008BBE46; + 6EF8EC69055A1C39008BBE46 = 6EF8EC69055A1C39008BBE46; + 6EF8EC6A055A1C39008BBE46 = 6EF8EC6A055A1C39008BBE46; + 6EF8EC6B055A1C39008BBE46 = 6EF8EC6B055A1C39008BBE46; + 6EF8EC6D055A1C39008BBE46 = 6EF8EC6D055A1C39008BBE46; + 6EF8EC6E055A1C39008BBE46 = 6EF8EC6E055A1C39008BBE46; + 6EF8EC6F055A1C39008BBE46 = 6EF8EC6F055A1C39008BBE46; + 6EF8EC70055A1C39008BBE46 = 6EF8EC70055A1C39008BBE46; + 6EF8EC72055A1C39008BBE46 = 6EF8EC72055A1C39008BBE46; + 6EF8EC73055A1C39008BBE46 = 6EF8EC73055A1C39008BBE46; + 6EF8EC74055A1C39008BBE46 = 6EF8EC74055A1C39008BBE46; + 6EF8EC75055A1C39008BBE46 = 6EF8EC75055A1C39008BBE46; + 6EF8EC76055A1C39008BBE46 = 6EF8EC76055A1C39008BBE46; + 6EF8EC77055A1C39008BBE46 = 6EF8EC77055A1C39008BBE46; + 6EF8EC78055A1C39008BBE46 = 6EF8EC78055A1C39008BBE46; }; - sourceControlManager = 6EAFEFEE05D0CAEA00C357EF; + sourceControlManager = 6EAD5EEA054C3932005761EE; userBuildSettings = { }; }; - 29B97326FDCFA39411CA2CEA = { + 2A37F4ACFDCFA73011CA2CEA = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1308, 27807}}"; + sepNavSelRange = "{5165, 0}"; + sepNavVisRect = "{{0, 2944}, {1034, 710}}"; + sepNavWindowFrame = "{{15, 439}, {750, 558}}"; + }; + }; + 2A37F4AEFDCFA73011CA2CEA = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 3168}}"; + sepNavSelRange = "{3150, 0}"; + sepNavVisRect = "{{0, 1291}, {1034, 710}}"; + }; + }; + 2A37F4B0FDCFA73011CA2CEA = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 2A37F4BAFDCFA73011CA2CEA = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1032, 725}}"; + sepNavSelRange = "{66, 0}"; + sepNavVisRect = "{{0, 0}, {1032, 725}}"; + sepNavWindowFrame = "{{305, 328}, {750, 558}}"; + }; + }; + 2A37F4C6FDCFA73011CA2CEA = { activeExec = 0; executables = ( - 6E31BC0D04EB164300A80003, + 6E4E0952050BAF7F00A80003, ); }; - 6E31BC0D04EB164300A80003 = { - activeArgIndex = 2147483647; - activeArgIndices = ( - ); - argumentStrings = ( - ); - configStateDict = { + 32DBCF750370BD2300C91783 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavSelRange = "{238, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; }; - debuggerPlugin = GDBDebugging; - dylibVariantSuffix = ""; - enableDebugStr = 1; - environmentEntries = ( - ); - isa = PBXExecutable; - name = "The Cheat"; - shlibInfoDictList = ( - ); - sourceDirectories = ( - ); }; - 6E31BC0F04EB1BEF00A80003 = { + 6E00EF290566EE06001AB46F = { + fRef = 6EE004DF0560B42800F8A5B1; + isa = PBXTextBookmark; + name = "vm_region.h: vm_region_extended_info"; + rLen = 23; + rLoc = 3163; + rType = 0; + vrLen = 1400; + vrLoc = 2513; + }; + 6E00EF2B0566EE06001AB46F = { + fRef = 6E0D40AD05223CCE00A80003; + isa = PBXTextBookmark; + name = "NetTrafficController.m: 14"; + rLen = 0; + rLoc = 375; + rType = 0; + vrLen = 902; + vrLoc = 146; + }; + 6E00EF2C0566EE06001AB46F = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 85"; + rLen = 0; + rLoc = 2728; + rType = 0; + vrLen = 962; + vrLoc = 1240; + }; + 6E00EF2D0566EE06001AB46F = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: firstSearchIntegerShort:"; + rLen = 0; + rLoc = 12922; + rType = 0; + vrLen = 1118; + vrLoc = 5291; + }; + 6E00EF2E0566EE06001AB46F = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 780"; + rLen = 0; + rLoc = 18950; + rType = 0; + vrLen = 924; + vrLoc = 16876; + }; + 6E00EF2F0566EE06001AB46F = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: savedStatusColor"; + rLen = 16; + rLoc = 1193; + rType = 0; + vrLen = 1219; + vrLoc = 598; + }; + 6E00EF300566EE06001AB46F = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 774"; + rLen = 0; + rLoc = 18782; + rType = 0; + vrLen = 935; + vrLoc = 16873; + }; + 6E00EF310566EE06001AB46F = { + fRef = 6EE004DF0560B42800F8A5B1; + isa = PBXTextBookmark; + name = "vm_region.h: vm_region_extended_info"; + rLen = 23; + rLoc = 3163; + rType = 0; + vrLen = 1400; + vrLoc = 2513; + }; + 6E0BDF7D0511568D00A80003 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1235, 14592}}"; - sepNavSelRange = "{18650, 0}"; - sepNavVisRect = "{{0, 12541}, {1235, 714}}"; + sepNavIntBoundsRect = "{{0, 0}, {1266, 710}}"; + sepNavSelRange = "{881, 9}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; }; }; - 6EAFEFEE05D0CAEA00C357EF = { - isa = PBXSourceControlManager; - scmConfiguration = { + 6E0D40AC05223CCE00A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 720}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; }; - scmType = scm.cvs; }; - 6EAFEFEF05D0CAEA00C357EF = { - indexTemplatePath = ""; - isa = PBXCodeSenseManager; - usesDefaults = 1; - wantsCodeCompletion = 1; - wantsCodeCompletionAutoPopup = 0; - wantsCodeCompletionAutoSuggestions = 0; - wantsCodeCompletionCaseSensitivity = 1; - wantsCodeCompletionOnlyMatchingItems = 1; - wantsCodeCompletionParametersIncluded = 1; - wantsCodeCompletionPlaceholdersInserted = 1; - wantsCodeCompletionTabCompletes = 1; - wantsIndex = 1; + 6E0D40AD05223CCE00A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 2672}}"; + sepNavSelRange = "{375, 0}"; + sepNavVisRect = "{{0, 40}, {1034, 710}}"; + }; }; - 6EAFEFFD05D0CB9B00C357EF = { - fRef = 6E31BC0F04EB1BEF00A80003; + 6E0D40B4052243D500A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavSelRange = "{440, 18}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 6E0D40B5052243D500A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 2032}}"; + sepNavSelRange = "{437, 44}"; + sepNavVisRect = "{{0, 49}, {1034, 710}}"; + }; + }; + 6E0D40B80522449500A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 6E0D40B90522449500A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1224, 2912}}"; + sepNavSelRange = "{2885, 0}"; + sepNavVisRect = "{{0, 1285}, {1034, 710}}"; + }; + }; + 6E0D40CE0522820D00A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 6E146B11051FA42C00A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 6E146B12051FA42C00A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 3680}}"; + sepNavSelRange = "{4293, 0}"; + sepNavVisRect = "{{0, 2573}, {1034, 710}}"; + }; + }; + 6E2E17AE056201170070BE48 = { + fRef = 6E4E098D050BB21400A80003; isa = PBXTextBookmark; - name = "AppController.m: 1"; + name = "AppController.m: 49"; rLen = 0; - rLoc = 0; + rLoc = 2232; rType = 0; - vrLen = 1022; - vrLoc = 0; + vrLen = 1404; + vrLoc = 454; + }; + 6E2E17AF056201170070BE48 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 730"; + rLen = 12; + rLoc = 19184; + rType = 0; + vrLen = 969; + vrLoc = 15923; + }; + 6E2E17B0056201170070BE48 = { + fRef = 6E0D40AD05223CCE00A80003; + isa = PBXTextBookmark; + name = "NetTrafficController.m: 123"; + rLen = 0; + rLoc = 2572; + rType = 0; + vrLen = 1345; + vrLoc = 2257; + }; + 6E2E17B1056201170070BE48 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: changeMenuRightNow:"; + rLen = 0; + rLoc = 4477; + rType = 0; + vrLen = 1368; + vrLoc = 2625; + }; + 6E3309E80575C22E0093550E = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: "; + rLen = 0; + rLoc = 2334; + rType = 0; + vrLen = 936; + vrLoc = 415; + }; + 6E3309E90575C22E0093550E = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 2006"; + rLen = 0; + rLoc = 44712; + rType = 0; + vrLen = 1193; + vrLoc = 43611; + }; + 6E3309EA0575C22E0093550E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: 121"; + rLen = 0; + rLoc = 3150; + rType = 0; + vrLen = 1279; + vrLoc = 2011; + }; + 6E3309EB0575C22E0093550E = { + fRef = 6E146B12051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.m: 194"; + rLen = 0; + rLoc = 4293; + rType = 0; + vrLen = 751; + vrLoc = 3746; + }; + 6E3309EC0575C22E0093550E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 208"; + rLen = 0; + rLoc = 5165; + rType = 0; + vrLen = 1161; + vrLoc = 4564; + }; + 6E3309ED0575C22E0093550E = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 148"; + rLen = 0; + rLoc = 3966; + rType = 0; + vrLen = 1074; + vrLoc = 3454; + }; + 6E3309EE0575C22E0093550E = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 511"; + rLen = 0; + rLoc = 11611; + rType = 0; + vrLen = 1233; + vrLoc = 10998; }; - 6EAFF00605D0D29D00C357EF = { - fRef = 6E31BC0F04EB1BEF00A80003; + 6E3309EF0575C22E0093550E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; isa = PBXTextBookmark; - name = "AppController.m: 804"; + name = "MyDocument.m: 1258"; rLen = 0; - rLoc = 18650; + rLoc = 29583; rType = 0; - vrLen = 1350; - vrLoc = 18122; + vrLen = 909; + vrLoc = 28238; + }; + 6E3309F00575C22E0093550E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: changeSheet:returned:context:"; + rLen = 85; + rLoc = 4174; + rType = 0; + vrLen = 1352; + vrLoc = 3265; + }; + 6E3309F10575C22E0093550E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: receivedAppQuit:"; + rLen = 0; + rLoc = 20648; + rType = 0; + vrLen = 1050; + vrLoc = 20081; + }; + 6E3309F20575C22E0093550E = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 2005"; + rLen = 0; + rLoc = 44719; + rType = 0; + vrLen = 1061; + vrLoc = 43611; + }; + 6E3309F30575C22E0093550E = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: "; + rLen = 0; + rLoc = 2334; + rType = 0; + vrLen = 936; + vrLoc = 415; + }; + 6E3309F40575C22E0093550E = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 2005"; + rLen = 0; + rLoc = 44719; + rType = 0; + vrLen = 1060; + vrLoc = 43611; + }; + 6E3309F50575C22E0093550E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 888"; + rLen = 0; + rLoc = 20650; + rType = 0; + vrLen = 999; + vrLoc = 20081; + }; + 6E3309F60575C22E0093550E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: 156"; + rLen = 0; + rLoc = 4299; + rType = 0; + vrLen = 1354; + vrLoc = 1243; + }; + 6E3309F70575C22E0093550E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 894"; + rLen = 0; + rLoc = 20951; + rType = 0; + vrLen = 1075; + vrLoc = 20081; + }; + 6E3309F80575C22E0093550E = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 2006"; + rLen = 0; + rLoc = 44712; + rType = 0; + vrLen = 1193; + vrLoc = 43611; + }; + 6E3309F90575C22E0093550E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 839"; + rLen = 0; + rLoc = 19626; + rType = 0; + vrLen = 912; + vrLoc = 18860; + }; + 6E3309FA0575C22E0093550E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: 190"; + rLen = 0; + rLoc = 5205; + rType = 0; + vrLen = 1002; + vrLoc = 4083; + }; + 6E3309FB0575C22E0093550E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 839"; + rLen = 0; + rLoc = 19626; + rType = 0; + vrLen = 912; + vrLoc = 18860; + }; + 6E3309FC0575C22E0093550E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: handleErrorMessage:fatal:"; + rLen = 60; + rLoc = 5144; + rType = 0; + vrLen = 1055; + vrLoc = 4083; + }; + 6E3309FD0575C22E0093550E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 890"; + rLen = 0; + rLoc = 20696; + rType = 0; + vrLen = 1028; + vrLoc = 20039; + }; + 6E3309FE0575C22E0093550E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: recurringChangeButton:"; + rLen = 44; + rLoc = 4845; + rType = 0; + vrLen = 1168; + vrLoc = 3878; + }; + 6E3309FF0575C22E0093550E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1401"; + rLen = 0; + rLoc = 31786; + rType = 0; + vrLen = 1047; + vrLoc = 30813; + }; + 6E330A000575C22E0093550E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: connectToServer:name:"; + rLen = 0; + rLoc = 3150; + rType = 0; + vrLen = 1287; + vrLoc = 2011; + }; + 6E330A010575C22E0093550E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1401"; + rLen = 0; + rLoc = 31786; + rType = 0; + vrLen = 1047; + vrLoc = 30813; + }; + 6E330A020575C22E0093550E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: connectToServer:name:"; + rLen = 0; + rLoc = 3150; + rType = 0; + vrLen = 1287; + vrLoc = 2011; + }; + 6E330A030575C22E0093550E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1401"; + rLen = 0; + rLoc = 31786; + rType = 0; + vrLen = 1047; + vrLoc = 30813; + }; + 6E330A040575C22E0093550E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: changeSecondsCombo"; + rLen = 18; + rLoc = 2370; + rType = 0; + vrLen = 1287; + vrLoc = 2011; + }; + 6E330A050575C22E0093550E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 123"; + rLen = 0; + rLoc = 3677; + rType = 0; + vrLen = 1570; + vrLoc = 2192; + }; + 6E330A060575C22E0093550E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: changeSecondsCombo"; + rLen = 18; + rLoc = 2370; + rType = 0; + vrLen = 1287; + vrLoc = 2011; + }; + 6E330A070575C22E0093550E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1406"; + rLen = 0; + rLoc = 31731; + rType = 0; + vrLen = 1111; + vrLoc = 30970; + }; + 6E330A080575C22E0093550E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: 121"; + rLen = 0; + rLoc = 3150; + rType = 0; + vrLen = 1279; + vrLoc = 2011; + }; + 6E330A090575C22E0093550E = { + fRef = 6E146B12051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.m: 194"; + rLen = 0; + rLoc = 4293; + rType = 0; + vrLen = 751; + vrLoc = 3746; + }; + 6E330A0A0575C22E0093550E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 208"; + rLen = 0; + rLoc = 5165; + rType = 0; + vrLen = 1161; + vrLoc = 4564; + }; + 6E330A0B0575C22E0093550E = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 148"; + rLen = 0; + rLoc = 3966; + rType = 0; + vrLen = 1074; + vrLoc = 3454; + }; + 6E330A0C0575C22E0093550E = { + fRef = 089C1660FE840EACC02AAC07; + isa = PBXTextBookmark; + name = "English: 5"; + rLen = 0; + rLoc = 139; + rType = 0; + vrLen = 201; + vrLoc = 0; + }; + 6E3F0D01050D4ACC00A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 799}}"; + sepNavSelRange = "{306, 41}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 6E3F0D02050D4ACC00A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1059, 1808}}"; + sepNavSelRange = "{1627, 0}"; + sepNavVisRect = "{{0, 952}, {1059, 536}}"; + }; + }; + 6E4E0952050BAF7F00A80003 = { + activeArgIndex = 2147483647; + activeArgIndices = ( + ); + argumentStrings = ( + ); + configStateDict = { + }; + debuggerPlugin = GDBDebugging; + dylibVariantSuffix = ""; + enableDebugStr = 1; + environmentEntries = ( + ); + isa = PBXExecutable; + name = "The Cheat"; + shlibInfoDictList = ( + ); + sourceDirectories = ( + ); + }; + 6E4E098C050BB21400A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 896}}"; + sepNavSelRange = "{1386, 0}"; + sepNavVisRect = "{{0, 186}, {1034, 710}}"; + }; + }; + 6E4E098D050BB21400A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1084, 6384}}"; + sepNavSelRange = "{3966, 0}"; + sepNavVisRect = "{{0, 2106}, {1034, 710}}"; + }; + }; + 6E4E098E050BB21400A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1161, 32560}}"; + sepNavSelRange = "{11611, 0}"; + sepNavVisRect = "{{0, 7808}, {822, 329}}"; + sepNavWindowFrame = "{{0, 51}, {1280, 951}}"; + }; + }; + 6E4E098F050BB21400A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 1679}}"; + sepNavSelRange = "{2334, 0}"; + sepNavVisRect = "{{0, 266}, {1034, 710}}"; + }; + }; + 6E51A9060573258100506538 = { + fRef = 6ED3E46405192E2B00A80003; + isa = PBXTextBookmark; + name = "MenuExtras.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 915; + vrLoc = 0; + }; + 6E51A9070573258100506538 = { + fRef = 6E0D40B80522449500A80003; + isa = PBXTextBookmark; + name = "CheatListener.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 804; + vrLoc = 0; + }; + 6E51A9080573258100506538 = { + fRef = 6E71F41C051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.m: TCDefaultListenPath"; + rLen = 0; + rLoc = 347; + rType = 0; + vrLen = 950; + vrLoc = 0; + }; + 6E51A90C0573258100506538 = { + fRef = 6E51A96B0573258500506538; + isa = PBXTextBookmark; + name = "(null): 354"; + rLen = 11; + rLoc = 12930; + rType = 0; + vrLen = 1499; + vrLoc = 12376; + }; + 6E51A90D0573258100506538 = { + fRef = 6ED3E46305192E2B00A80003; + isa = PBXTextBookmark; + name = "MenuExtras.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 579; + vrLoc = 0; + }; + 6E51A9120573258100506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 304"; + rLen = 0; + rLoc = 11441; + rType = 0; + vrLen = 1120; + vrLoc = 5466; + }; + 6E51A9130573258100506538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: savedStatusColor"; + rLen = 16; + rLoc = 1193; + rType = 0; + vrLen = 1219; + vrLoc = 598; + }; + 6E51A9140573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1522"; + rLen = 0; + rLoc = 39887; + rType = 0; + vrLen = 1315; + vrLoc = 33432; + }; + 6E51A9150573258100506538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: serverList"; + rLen = 10; + rLoc = 951; + rType = 0; + vrLen = 1093; + vrLoc = 429; + }; + 6E51A9160573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1378"; + rLen = 0; + rLoc = 34868; + rType = 0; + vrLen = 779; + vrLoc = 25602; + }; + 6E51A9170573258100506538 = { + fRef = 6E0BDF7D0511568D00A80003; + isa = PBXTextBookmark; + name = "cheat_types.h: 23"; + rLen = 0; + rLoc = 521; + rType = 0; + vrLen = 947; + vrLoc = 0; + }; + 6E51A9180573258100506538 = { + fRef = 6E71F41C051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.m: TCDefaultListenPath"; + rLen = 0; + rLoc = 347; + rType = 0; + vrLen = 950; + vrLoc = 0; + }; + 6E51A9190573258100506538 = { + fRef = 6E0BDF7D0511568D00A80003; + isa = PBXTextBookmark; + name = "cheat_types.h: 23"; + rLen = 0; + rLoc = 521; + rType = 0; + vrLen = 947; + vrLoc = 0; + }; + 6E51A91A0573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1378"; + rLen = 0; + rLoc = 34868; + rType = 0; + vrLen = 779; + vrLoc = 25602; + }; + 6E51A91B0573258100506538 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: 18"; + rLen = 0; + rLoc = 442; + rType = 0; + vrLen = 828; + vrLoc = 0; + }; + 6E51A91C0573258100506538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: serverList"; + rLen = 10; + rLoc = 951; + rType = 0; + vrLen = 1093; + vrLoc = 429; + }; + 6E51A91D0573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 196"; + rLen = 0; + rLoc = 5395; + rType = 0; + vrLen = 1198; + vrLoc = 3724; + }; + 6E51A91E0573258100506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 1225"; + rLen = 0; + rLoc = 43436; + rType = 0; + vrLen = 672; + vrLoc = 24308; + }; + 6E51A91F0573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 196"; + rLen = 0; + rLoc = 5395; + rType = 0; + vrLen = 1198; + vrLoc = 3724; + }; + 6E51A9200573258100506538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: decimalSizeMenu"; + rLen = 0; + rLoc = 2174; + rType = 0; + vrLen = 1329; + vrLoc = 835; + }; + 6E51A9210573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 196"; + rLen = 0; + rLoc = 5395; + rType = 0; + vrLen = 1198; + vrLoc = 3724; + }; + 6E51A9220573258100506538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: changeButton:"; + rLen = 0; + rLoc = 4477; + rType = 0; + vrLen = 1375; + vrLoc = 1046; + }; + 6E51A9230573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1310"; + rLen = 0; + rLoc = 31589; + rType = 0; + vrLen = 1019; + vrLoc = 25175; + }; + 6E51A9240573258100506538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: 93"; + rLen = 0; + rLoc = 2625; + rType = 0; + vrLen = 1289; + vrLoc = 2000; + }; + 6E51A9250573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1317"; + rLen = 0; + rLoc = 32280; + rType = 0; + vrLen = 836; + vrLoc = 27944; + }; + 6E51A9260573258100506538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: 26"; + rLen = 0; + rLoc = 575; + rType = 0; + vrLen = 1320; + vrLoc = 2389; + }; + 6E51A9270573258100506538 = { + fRef = 6ED3E46305192E2B00A80003; + isa = PBXTextBookmark; + name = "MenuExtras.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 579; + vrLoc = 0; + }; + 6E51A9280573258100506538 = { + fRef = 6ED3E46405192E2B00A80003; + isa = PBXTextBookmark; + name = "MenuExtras.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 915; + vrLoc = 0; + }; + 6E51A9290573258100506538 = { + fRef = 6ED3E46305192E2B00A80003; + isa = PBXTextBookmark; + name = "MenuExtras.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 579; + vrLoc = 0; + }; + 6E51A92A0573258100506538 = { + fRef = 6E0D40B80522449500A80003; + isa = PBXTextBookmark; + name = "CheatListener.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 804; + vrLoc = 0; + }; + 6E51A92B0573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: cancelButton:"; + rLen = 32; + rLoc = 31458; + rType = 0; + vrLen = 936; + vrLoc = 24990; + }; + 6E51A92C0573258100506538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: search"; + rLen = 31; + rLoc = 4141; + rType = 0; + vrLen = 1187; + vrLoc = 3492; + }; + 6E51A92D0573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1044"; + rLen = 0; + rLoc = 25367; + rType = 0; + vrLen = 880; + vrLoc = 23055; + }; + 6E51A92E0573258100506538 = { + fRef = 6EE004DD0560B42800F8A5B1; + isa = PBXTextBookmark; + name = "AppController.m: 463"; + rLen = 278; + rLoc = 11649; + rType = 0; + vrLen = 1315; + vrLoc = 10997; + }; + 6E51A92F0573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1039"; + rLen = 0; + rLoc = 24891; + rType = 0; + vrLen = 1119; + vrLoc = 23141; + }; + 6E51A9300573258100506538 = { + fRef = 6E71F41C051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.m: TCDefaultListenPath"; + rLen = 0; + rLoc = 347; + rType = 0; + vrLen = 950; + vrLoc = 0; + }; + 6E51A9310573258100506538 = { + fRef = 6E0BDF7D0511568D00A80003; + isa = PBXTextBookmark; + name = "cheat_types.h: 36"; + rLen = 13; + rLoc = 905; + rType = 0; + vrLen = 947; + vrLoc = 0; + }; + 6E51A9320573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1052"; + rLen = 0; + rLoc = 25198; + rType = 0; + vrLen = 1131; + vrLoc = 23534; + }; + 6E51A9330573258100506538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: search"; + rLen = 31; + rLoc = 4141; + rType = 0; + vrLen = 1383; + vrLoc = 1671; + }; + 6E51A9340573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1171"; + rLen = 0; + rLoc = 27758; + rType = 0; + vrLen = 1283; + vrLoc = 23292; + }; + 6E51A9350573258100506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 1225"; + rLen = 0; + rLoc = 43436; + rType = 0; + vrLen = 672; + vrLoc = 24308; + }; + 6E51A9360573258100506538 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: changeIntegerLong:"; + rLen = 0; + rLoc = 2059; + rType = 0; + vrLen = 1394; + vrLoc = 702; + }; + 6E51A9370573258100506538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: search"; + rLen = 31; + rLoc = 4141; + rType = 0; + vrLen = 1174; + vrLoc = 576; + }; + 6E51A9380573258100506538 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: changeIntegerLong:addresses:count:"; + rLen = 90; + rLoc = 1969; + rType = 0; + vrLen = 1433; + vrLoc = 702; + }; + 6E51A9390573258100506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: firstSearchDecimalDouble:"; + rLen = 0; + rLoc = 16503; + rType = 0; + vrLen = 683; + vrLoc = 9301; + }; + 6E51A93A0573258100506538 = { + fRef = 6EE004DD0560B42800F8A5B1; + isa = PBXTextBookmark; + name = "AppController.m: 449"; + rLen = 2332; + rLoc = 11036; + rType = 0; + vrLen = 1308; + vrLoc = 10775; + }; + 6E51A93B0573258100506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 457"; + rLen = 0; + rLoc = 16503; + rType = 0; + vrLen = 861; + vrLoc = 9617; + }; + 6E51A93C0573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1055"; + rLen = 78; + rLoc = 25264; + rType = 0; + vrLen = 1283; + vrLoc = 23292; + }; + 6E51A93D0573258100506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 457"; + rLen = 0; + rLoc = 16503; + rType = 0; + vrLen = 826; + vrLoc = 9617; + }; + 6E51A93E0573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1055"; + rLen = 78; + rLoc = 25264; + rType = 0; + vrLen = 1180; + vrLoc = 23175; + }; + 6E51A93F0573258100506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 460"; + rLen = 0; + rLoc = 16503; + rType = 0; + vrLen = 660; + vrLoc = 9572; + }; + 6E51A9400573258100506538 = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 140"; + rLen = 0; + rLoc = 4037; + rType = 0; + vrLen = 1015; + vrLoc = 3216; + }; + 6E51A9410573258100506538 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: 70"; + rLen = 0; + rLoc = 1968; + rType = 0; + vrLen = 865; + vrLoc = 106; + }; + 6E51A9420573258100506538 = { + fRef = 6E0BDF7D0511568D00A80003; + isa = PBXTextBookmark; + name = "cheat_types.h: 35"; + rLen = 9; + rLoc = 881; + rType = 0; + vrLen = 947; + vrLoc = 0; + }; + 6E51A9430573258100506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 460"; + rLen = 0; + rLoc = 16503; + rType = 0; + vrLen = 660; + vrLoc = 9572; + }; + 6E51A9440573258100506538 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: changeIntegerLong:addresses:count:"; + rLen = 0; + rLoc = 2030; + rType = 0; + vrLen = 1588; + vrLoc = 936; + }; + 6E51A9450573258100506538 = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 140"; + rLen = 0; + rLoc = 4037; + rType = 0; + vrLen = 1015; + vrLoc = 3216; + }; + 6E51A9460573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1055"; + rLen = 78; + rLoc = 25264; + rType = 0; + vrLen = 1180; + vrLoc = 23175; + }; + 6E51A9470573258100506538 = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 140"; + rLen = 0; + rLoc = 4037; + rType = 0; + vrLen = 1015; + vrLoc = 3216; + }; + 6E51A9480573258100506538 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: changeIntegerLong:addresses:count:"; + rLen = 92; + rLoc = 1969; + rType = 0; + vrLen = 1588; + vrLoc = 936; + }; + 6E51A9490573258100506538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: search"; + rLen = 31; + rLoc = 4141; + rType = 0; + vrLen = 995; + vrLoc = 0; + }; + 6E51A94A0573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1055"; + rLen = 78; + rLoc = 25264; + rType = 0; + vrLen = 1006; + vrLoc = 26131; + }; + 6E51A94B0573258100506538 = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 140"; + rLen = 0; + rLoc = 4037; + rType = 0; + vrLen = 1015; + vrLoc = 3216; + }; + 6E51A94C0573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1042"; + rLen = 0; + rLoc = 24868; + rType = 0; + vrLen = 1296; + vrLoc = 23277; + }; + 6E51A94D0573258100506538 = { + fRef = 6E0BDF7D0511568D00A80003; + isa = PBXTextBookmark; + name = "cheat_types.h: 35"; + rLen = 9; + rLoc = 881; + rType = 0; + vrLen = 947; + vrLoc = 0; + }; + 6E51A94E0573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1055"; + rLen = 0; + rLoc = 25325; + rType = 0; + vrLen = 1296; + vrLoc = 23277; + }; + 6E51A94F0573258100506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 1146"; + rLen = 0; + rLoc = 40095; + rType = 0; + vrLen = 818; + vrLoc = 22789; + }; + 6E51A9500573258100506538 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: changeString8bit:size:addresses:count:"; + rLen = 295; + rLoc = 1673; + rType = 0; + vrLen = 1633; + vrLoc = 663; + }; + 6E51A9510573258100506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 453"; + rLen = 0; + rLoc = 16503; + rType = 0; + vrLen = 858; + vrLoc = 9301; + }; + 6E51A9520573258100506538 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: changeDecimalFloat:addresses:count:"; + rLen = 183; + rLoc = 2061; + rType = 0; + vrLen = 1633; + vrLoc = 663; + }; + 6E51A9530573258100506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 1419"; + rLen = 0; + rLoc = 45146; + rType = 0; + vrLen = 1242; + vrLoc = 27480; + }; + 6E51A9540573258100506538 = { + fRef = 6E51A96C0573258500506538; + isa = PBXTextBookmark; + name = "(null): 248"; + rLen = 0; + rLoc = 10068; + rType = 0; + vrLen = 1108; + vrLoc = 9404; + }; + 6E51A9550573258100506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 1705"; + rLen = 0; + rLoc = 45285; + rType = 0; + vrLen = 1387; + vrLoc = 0; + }; + 6E51A9560573258100506538 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: changeDecimalFloat:addresses:count:"; + rLen = 183; + rLoc = 2061; + rType = 0; + vrLen = 828; + vrLoc = 0; + }; + 6E51A9570573258100506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 639"; + rLen = 0; + rLoc = 16082; + rType = 0; + vrLen = 1170; + vrLoc = 14216; + }; + 6E51A9580573258100506538 = { + fRef = 6E51A96A0573258500506538; + isa = PBXTextBookmark; + name = "(null): 354"; + rLen = 11; + rLoc = 12930; + rType = 0; + vrLen = 1499; + vrLoc = 12376; + }; + 6E51A9590573258100506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: handleClearSearch"; + rLen = 59; + rLoc = 36394; + rType = 0; + vrLen = 812; + vrLoc = 35718; + }; + 6E51A95A0573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1016"; + rLen = 0; + rLoc = 24205; + rType = 0; + vrLen = 945; + vrLoc = 22349; + }; + 6E51A95B0573258100506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 1600"; + rLen = 0; + rLoc = 38852; + rType = 0; + vrLen = 818; + vrLoc = 35718; + }; + 6E51A95C0573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 99"; + rLen = 0; + rLoc = 3513; + rType = 0; + vrLen = 1211; + vrLoc = 1590; + }; + 6E51A95D0573258100506538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: search"; + rLen = 31; + rLoc = 4141; + rType = 0; + vrLen = 1344; + vrLoc = 1099; + }; + 6E51A95E0573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 99"; + rLen = 0; + rLoc = 3513; + rType = 0; + vrLen = 1220; + vrLoc = 1590; + }; + 6E51A95F0573258100506538 = { + fRef = 6ED3E46305192E2B00A80003; + isa = PBXTextBookmark; + name = "MenuExtras.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 579; + vrLoc = 0; + }; + 6E51A9600573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 102"; + rLen = 0; + rLoc = 3131; + rType = 0; + vrLen = 1359; + vrLoc = 1590; + }; + 6E51A9610573258100506538 = { + fRef = 6E0BDF7D0511568D00A80003; + isa = PBXTextBookmark; + name = "cheat_types.h: 35"; + rLen = 9; + rLoc = 881; + rType = 0; + vrLen = 947; + vrLoc = 0; + }; + 6E51A9620573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 102"; + rLen = 0; + rLoc = 3513; + rType = 0; + vrLen = 1359; + vrLoc = 1590; + }; + 6E51A9630573258100506538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: search"; + rLen = 31; + rLoc = 4141; + rType = 0; + vrLen = 1344; + vrLoc = 1099; + }; + 6E51A9640573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 108"; + rLen = 0; + rLoc = 3459; + rType = 0; + vrLen = 1653; + vrLoc = 1590; + }; + 6E51A9650573258100506538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: search"; + rLen = 31; + rLoc = 4141; + rType = 0; + vrLen = 1344; + vrLoc = 1099; + }; + 6E51A9660573258100506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 108"; + rLen = 0; + rLoc = 3504; + rType = 0; + vrLen = 1655; + vrLoc = 1590; + }; + 6E51A9670573258100506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 1584"; + rLen = 0; + rLoc = 38695; + rType = 0; + vrLen = 768; + vrLoc = 35878; + }; + 6E51A96A0573258500506538 = { + isa = PBXFileReference; + name = math.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/architecture/ppc/math.h; + refType = 0; + sourceTree = ""; + }; + 6E51A96B0573258500506538 = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = math.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/architecture/ppc/math.h; + refType = 0; + sourceTree = ""; + }; + 6E51A96C0573258500506538 = { + isa = PBXFileReference; + name = math.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/architecture/ppc/math.h; + refType = 0; + sourceTree = ""; + }; + 6E51A97C0573304C00506538 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavSelRange = "{414, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 6E51A97D0573304C00506538 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavSelRange = "{424, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 6E51A986057330B900506538 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavSelRange = "{401, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 6E51A987057330B900506538 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavSelRange = "{605, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 6E51A9A00573385700506538 = { + fRef = 6E81664B0559E7C000377CF7; + isa = PBXTextBookmark; + name = "math.h: 397"; + rLen = 0; + rLoc = 13455; + rType = 0; + vrLen = 1519; + vrLoc = 12819; + }; + 6E51A9A20573385700506538 = { + fRef = 2A37F4B0FDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "main.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 477; + vrLoc = 0; + }; + 6E51A9A30573385700506538 = { + fRef = 6E51A987057330B900506538; + isa = PBXTextBookmark; + name = "cheat_shared.m: 21"; + rLen = 0; + rLoc = 605; + rType = 0; + vrLen = 607; + vrLoc = 0; + }; + 6E51A9A40573385700506538 = { + fRef = 6E3F0D01050D4ACC00A80003; + isa = PBXTextBookmark; + name = "cheat_net.h: 11"; + rLen = 41; + rLoc = 306; + rType = 0; + vrLen = 1063; + vrLoc = 0; + }; + 6E51A9A50573385700506538 = { + fRef = 6E51A986057330B900506538; + isa = PBXTextBookmark; + name = "cheat_shared.h: 17"; + rLen = 0; + rLoc = 401; + rType = 0; + vrLen = 409; + vrLoc = 0; + }; + 6E51A9A60573385700506538 = { + fRef = 6E0D40AC05223CCE00A80003; + isa = PBXTextBookmark; + name = "NetTrafficController.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1017; + vrLoc = 0; + }; + 6E51A9A70573385700506538 = { + fRef = 6E0D40AD05223CCE00A80003; + isa = PBXTextBookmark; + name = "NetTrafficController.m: 14"; + rLen = 0; + rLoc = 375; + rType = 0; + vrLen = 939; + vrLoc = 82; + }; + 6E51A9A80573385700506538 = { + fRef = 6E0D40B4052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.h: 18"; + rLen = 18; + rLoc = 440; + rType = 0; + vrLen = 994; + vrLoc = 0; + }; + 6E51A9AD0573385700506538 = { + fRef = 6E51A97C0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.h: aboutWindow"; + rLen = 0; + rLoc = 414; + rType = 0; + vrLen = 533; + vrLoc = 0; + }; + 6E51A9AE0573385700506538 = { + fRef = 6E0D40B5052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.m: 19"; + rLen = 44; + rLoc = 437; + rType = 0; + vrLen = 1060; + vrLoc = 106; + }; + 6E51A9B00573385700506538 = { + fRef = 6E81664B0559E7C000377CF7; + isa = PBXTextBookmark; + name = "math.h: 397"; + rLen = 0; + rLoc = 13455; + rType = 0; + vrLen = 1519; + vrLoc = 12819; + }; + 6E51A9B10573385700506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 1584"; + rLen = 0; + rLoc = 38695; + rType = 0; + vrLen = 768; + vrLoc = 35878; + }; + 6E51A9B20573385700506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1340"; + rLen = 0; + rLoc = 31589; + rType = 0; + vrLen = 998; + vrLoc = 29449; + }; + 6E51A9B30573385700506538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: changeString8bit:size:addresses:count:"; + rLen = 90; + rLoc = 25997; + rType = 0; + vrLen = 1159; + vrLoc = 22755; + }; + 6E51A9B40573385700506538 = { + fRef = 6E51A97C0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.h: 13"; + rLen = 0; + rLoc = 402; + rType = 0; + vrLen = 249; + vrLoc = 0; + }; + 6E51A9B50573385700506538 = { + fRef = 6E51A97D0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 235; + vrLoc = 0; + }; + 6E51A9B60573385700506538 = { + fRef = 6E0D40B4052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.h: 1"; + rLen = 315; + rLoc = 0; + rType = 0; + vrLen = 994; + vrLoc = 0; + }; + 6E51A9B70573385700506538 = { + fRef = 6E51A97C0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.h: 1"; + rLen = 313; + rLoc = 0; + rType = 0; + vrLen = 403; + vrLoc = 0; + }; + 6E51A9B80573385700506538 = { + fRef = 6E51A97D0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.m: 9"; + rLen = 0; + rLoc = 313; + rType = 0; + vrLen = 389; + vrLoc = 0; + }; + 6E51A9B90573385700506538 = { + fRef = 6E4E098C050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.h: stopListener"; + rLen = 0; + rLoc = 1102; + rType = 0; + vrLen = 1189; + vrLoc = 172; + }; + 6E51A9BA0573385700506538 = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: launchHelpFile:"; + rLen = 41; + rLoc = 3975; + rType = 0; + vrLen = 1015; + vrLoc = 3216; + }; + 6E51A9BB0573385700506538 = { + fRef = 6E51A986057330B900506538; + isa = PBXTextBookmark; + name = "cheat_shared.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 237; + vrLoc = 0; + }; + 6E51A9BC0573385700506538 = { + fRef = 2A37F4B0FDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "main.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 477; + vrLoc = 0; + }; + 6E51A9BD0573385700506538 = { + fRef = 6E51A986057330B900506538; + isa = PBXTextBookmark; + name = "cheat_shared.h: 5"; + rLen = 0; + rLoc = 135; + rType = 0; + vrLen = 391; + vrLoc = 0; + }; + 6E51A9BE0573385700506538 = { + fRef = 6E51A987057330B900506538; + isa = PBXTextBookmark; + name = "cheat_shared.m: 5"; + rLen = 0; + rLoc = 137; + rType = 0; + vrLen = 371; + vrLoc = 0; + }; + 6E51A9BF0573385700506538 = { + fRef = 6E51A97D0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.m: 5"; + rLen = 0; + rLoc = 143; + rType = 0; + vrLen = 389; + vrLoc = 0; + }; + 6E51A9C00573385700506538 = { + fRef = 6E51A986057330B900506538; + isa = PBXTextBookmark; + name = "cheat_shared.h: LaunchWebsite"; + rLen = 41; + rLoc = 359; + rType = 0; + vrLen = 394; + vrLoc = 0; + }; + 6E51A9C10573385700506538 = { + fRef = 6E51A987057330B900506538; + isa = PBXTextBookmark; + name = "cheat_shared.m: 18"; + rLen = 0; + rLoc = 457; + rType = 0; + vrLen = 388; + vrLoc = 0; + }; + 6E51A9C20573385700506538 = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 139"; + rLen = 16; + rLoc = 4019; + rType = 0; + vrLen = 1015; + vrLoc = 3216; + }; + 6E51A9C30573385700506538 = { + fRef = 6E51A987057330B900506538; + isa = PBXTextBookmark; + name = "cheat_shared.m: 16"; + rLen = 0; + rLoc = 454; + rType = 0; + vrLen = 482; + vrLoc = 0; + }; + 6E51A9C40573385700506538 = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 144"; + rLen = 0; + rLoc = 4037; + rType = 0; + vrLen = 1015; + vrLoc = 3216; + }; + 6E51A9C50573385700506538 = { + fRef = 6E51A987057330B900506538; + isa = PBXTextBookmark; + name = "cheat_shared.m: 21"; + rLen = 0; + rLoc = 605; + rType = 0; + vrLen = 607; + vrLoc = 0; + }; + 6E51A9C60573385700506538 = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 13"; + rLen = 0; + rLoc = 362; + rType = 0; + vrLen = 1631; + vrLoc = 0; + }; + 6E51A9C70573385700506538 = { + fRef = 6E3F0D01050D4ACC00A80003; + isa = PBXTextBookmark; + name = "cheat_net.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1063; + vrLoc = 0; + }; + 6E51A9C80573385700506538 = { + fRef = 6E51A986057330B900506538; + isa = PBXTextBookmark; + name = "cheat_shared.h: LaunchWebsite"; + rLen = 41; + rLoc = 359; + rType = 0; + vrLen = 394; + vrLoc = 0; + }; + 6E51A9C90573385700506538 = { + fRef = 6E3F0D01050D4ACC00A80003; + isa = PBXTextBookmark; + name = "cheat_net.h: 11"; + rLen = 41; + rLoc = 306; + rType = 0; + vrLen = 1063; + vrLoc = 0; + }; + 6E51A9CA0573385700506538 = { + fRef = 6E51A986057330B900506538; + isa = PBXTextBookmark; + name = "cheat_shared.h: 17"; + rLen = 0; + rLoc = 401; + rType = 0; + vrLen = 409; + vrLoc = 0; + }; + 6E51A9CB0573385700506538 = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 13"; + rLen = 25; + rLoc = 337; + rType = 0; + vrLen = 1655; + vrLoc = 0; + }; + 6E51A9CC0573385700506538 = { + fRef = 6E51A97D0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.m: 15"; + rLen = 0; + rLoc = 374; + rType = 0; + vrLen = 416; + vrLoc = 0; + }; + 6E51A9CD0573385700506538 = { + fRef = 6E4E098C050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.h: launchWebsiteMenu:"; + rLen = 41; + rLoc = 1345; + rType = 0; + vrLen = 1056; + vrLoc = 309; + }; + 6E51A9CE0573385700506538 = { + fRef = 6E51A97C0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.h: launchWebsiteButton:"; + rLen = 85; + rLoc = 441; + rType = 0; + vrLen = 490; + vrLoc = 0; + }; + 6E51A9CF0573385700506538 = { + fRef = 6E51A97D0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.m: 26"; + rLen = 0; + rLoc = 653; + rType = 0; + vrLen = 546; + vrLoc = 0; + }; + 6E51A9D00573385700506538 = { + fRef = 6E0D40AC05223CCE00A80003; + isa = PBXTextBookmark; + name = "NetTrafficController.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1017; + vrLoc = 0; + }; + 6E51A9D10573385700506538 = { + fRef = 6E0D40AD05223CCE00A80003; + isa = PBXTextBookmark; + name = "NetTrafficController.m: 14"; + rLen = 0; + rLoc = 375; + rType = 0; + vrLen = 939; + vrLoc = 82; + }; + 6E51A9D20573385700506538 = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: stopBroadcast"; + rLen = 44; + rLoc = 3251; + rType = 0; + vrLen = 819; + vrLoc = 2674; + }; + 6E51A9D30573385700506538 = { + fRef = 6E4E098C050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.h: aboutBoxController"; + rLen = 18; + rLoc = 916; + rType = 0; + vrLen = 1094; + vrLoc = 309; + }; + 6E51A9D40573385700506538 = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 117"; + rLen = 0; + rLoc = 3179; + rType = 0; + vrLen = 927; + vrLoc = 2677; + }; + 6E51A9D50573385700506538 = { + fRef = 6E51A97C0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.h: launchWebsiteButton:"; + rLen = 85; + rLoc = 441; + rType = 0; + vrLen = 490; + vrLoc = 0; + }; + 6E51A9D60573385700506538 = { + fRef = 6E0D40B4052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.h: 18"; + rLen = 18; + rLoc = 440; + rType = 0; + vrLen = 994; + vrLoc = 0; + }; + 6E51A9D70573385700506538 = { + fRef = 6E51A97C0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.h: 14"; + rLen = 0; + rLoc = 401; + rType = 0; + vrLen = 500; + vrLoc = 0; + }; + 6E51A9D80573385700506538 = { + fRef = 6E51A97D0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.m: 26"; + rLen = 0; + rLoc = 653; + rType = 0; + vrLen = 546; + vrLoc = 0; + }; + 6E51A9D90573385700506538 = { + fRef = 6E0D40B4052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.h: 18"; + rLen = 18; + rLoc = 440; + rType = 0; + vrLen = 994; + vrLoc = 0; + }; + 6E51A9DA0573385700506538 = { + fRef = 6E51A97D0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.m: 26"; + rLen = 0; + rLoc = 653; + rType = 0; + vrLen = 546; + vrLoc = 0; + }; + 6E51A9DB0573385700506538 = { + fRef = 6E0D40B4052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.h: 18"; + rLen = 18; + rLoc = 440; + rType = 0; + vrLen = 994; + vrLoc = 0; + }; + 6E51A9DC0573385700506538 = { + fRef = 6E0D40B5052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.m: 71"; + rLen = 0; + rLoc = 1666; + rType = 0; + vrLen = 1060; + vrLoc = 106; + }; + 6E51A9DD0573385700506538 = { + fRef = 6E0D40B4052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.h: 18"; + rLen = 18; + rLoc = 440; + rType = 0; + vrLen = 994; + vrLoc = 0; + }; + 6E51A9DE0573385700506538 = { + fRef = 6E51A97C0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.h: aboutWindow"; + rLen = 0; + rLoc = 437; + rType = 0; + vrLen = 524; + vrLoc = 0; + }; + 6E51A9DF0573385700506538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: search"; + rLen = 31; + rLoc = 4141; + rType = 0; + vrLen = 1344; + vrLoc = 1099; + }; + 6E51A9E00573385700506538 = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 117"; + rLen = 0; + rLoc = 3179; + rType = 0; + vrLen = 927; + vrLoc = 2677; + }; + 6E51A9E10573385700506538 = { + fRef = 6E51A97C0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.h: aboutWindow"; + rLen = 0; + rLoc = 414; + rType = 0; + vrLen = 533; + vrLoc = 0; + }; + 6E51A9E20573385700506538 = { + fRef = 6E51A97D0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.m: 23"; + rLen = 0; + rLoc = 475; + rType = 0; + vrLen = 637; + vrLoc = 0; + }; + 6E51A9E30573385700506538 = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 15"; + rLen = 0; + rLoc = 393; + rType = 0; + vrLen = 1586; + vrLoc = 0; + }; + 6E51A9E40573385700506538 = { + fRef = 6E4E098C050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.h: showAboutBoxWindow:"; + rLen = 0; + rLoc = 1214; + rType = 0; + vrLen = 1139; + vrLoc = 334; + }; + 6E51A9E50573385700506538 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1340"; + rLen = 0; + rLoc = 31589; + rType = 0; + vrLen = 998; + vrLoc = 29449; + }; + 6E51A9E60573385700506538 = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 118"; + rLen = 0; + rLoc = 3201; + rType = 0; + vrLen = 814; + vrLoc = 2436; + }; + 6E51A9E70573385700506538 = { + fRef = 6E0D40B5052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.m: 19"; + rLen = 44; + rLoc = 437; + rType = 0; + vrLen = 1060; + vrLoc = 106; + }; + 6E51A9E80573385700506538 = { + fRef = 6E51A97C0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.h: aboutWindow"; + rLen = 0; + rLoc = 414; + rType = 0; + vrLen = 533; + vrLoc = 0; + }; + 6E51A9E90573385700506538 = { + fRef = 6E51A97D0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.m: 21"; + rLen = 0; + rLoc = 475; + rType = 0; + vrLen = 614; + vrLoc = 0; + }; + 6E51A9EA0573385700506538 = { + fRef = 6E0D40B5052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.m: 19"; + rLen = 44; + rLoc = 437; + rType = 0; + vrLen = 1060; + vrLoc = 106; + }; + 6E5678E305350AF600A80003 = { + expectedFileType = text.html; + fileEncoding = 30; + isa = PBXFileReference; + name = "Read Me.html"; + path = "/Users/chaz/Projects/The Cheat/Read Me.html"; + refType = 0; + sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {3751, 710}}"; + sepNavSelRange = "{2060, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 6E5EC36705633214001E3A3E = { + fRef = 6E5EC3BF05633214001E3A3E; + isa = PBXTextBookmark; + name = "(null): 68"; + rLen = 44; + rLoc = 3031; + rType = 0; + vrLen = 1193; + vrLoc = 2522; + }; + 6E5EC36905633214001E3A3E = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: 19"; + rLen = 0; + rLoc = 610; + rType = 0; + vrLen = 1229; + vrLoc = 0; + }; + 6E5EC36C05633214001E3A3E = { + fRef = 089C1660FE840EACC02AAC07; + isa = PBXTextBookmark; + name = "English: 7"; + rLen = 0; + rLoc = 201; + rType = 0; + vrLen = 205; + vrLoc = 0; + }; + 6E5EC36D05633214001E3A3E = { + fRef = 2A37F4BAFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "English: 4"; + rLen = 0; + rLoc = 66; + rType = 0; + vrLen = 66; + vrLoc = 0; + }; + 6E5EC37005633214001E3A3E = { + fRef = 6E5678E305350AF600A80003; + isa = PBXTextBookmark; + name = "Read Me.html: 38"; + rLen = 0; + rLoc = 2060; + rType = 0; + vrLen = 2106; + vrLoc = 0; + }; + 6E5EC37105633214001E3A3E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1047"; + rLen = 0; + rLoc = 29718; + rType = 0; + vrLen = 866; + vrLoc = 22574; + }; + 6E5EC37205633214001E3A3E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: changeButton"; + rLen = 0; + rLoc = 1843; + rType = 0; + vrLen = 1205; + vrLoc = 866; + }; + 6E5EC37305633214001E3A3E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: updateSearchBoxes"; + rLen = 18; + rLoc = 4436; + rType = 0; + vrLen = 753; + vrLoc = 2534; + }; + 6E5EC37405633214001E3A3E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: updateChangeButton"; + rLen = 0; + rLoc = 2623; + rType = 0; + vrLen = 1293; + vrLoc = 1250; + }; + 6E5EC37505633214001E3A3E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 290"; + rLen = 0; + rLoc = 8890; + rType = 0; + vrLen = 1199; + vrLoc = 5908; + }; + 6E5EC37605633214001E3A3E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: updateStopButon"; + rLen = 0; + rLoc = 2624; + rType = 0; + vrLen = 1297; + vrLoc = 1250; + }; + 6E5EC37705633214001E3A3E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 151"; + rLen = 0; + rLoc = 4566; + rType = 0; + vrLen = 799; + vrLoc = 2586; + }; + 6E5EC37805633214001E3A3E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: updateChangeButton"; + rLen = 0; + rLoc = 2624; + rType = 0; + vrLen = 1335; + vrLoc = 1208; + }; + 6E5EC37905633214001E3A3E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 227"; + rLen = 0; + rLoc = 6784; + rType = 0; + vrLen = 1248; + vrLoc = 3881; + }; + 6E5EC37A05633214001E3A3E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: setStatusText:duration:color:"; + rLen = 94; + rLoc = 2988; + rType = 0; + vrLen = 1409; + vrLoc = 1208; + }; + 6E5EC37B05633214001E3A3E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 434"; + rLen = 0; + rLoc = 11905; + rType = 0; + vrLen = 974; + vrLoc = 9619; + }; + 6E5EC37C05633214001E3A3E = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: savedStatusColor"; + rLen = 16; + rLoc = 1193; + rType = 0; + vrLen = 1195; + vrLoc = 734; + }; + 6E5EC37D05633214001E3A3E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 220"; + rLen = 0; + rLoc = 6627; + rType = 0; + vrLen = 1436; + vrLoc = 3908; + }; + 6E5EC37E05633214001E3A3E = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 402"; + rLen = 0; + rLoc = 21947; + rType = 0; + vrLen = 1280; + vrLoc = 7697; + }; + 6E5EC37F05633214001E3A3E = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: unpause"; + rLen = 15; + rLoc = 3012; + rType = 0; + vrLen = 1466; + vrLoc = 989; + }; + 6E5EC38005633214001E3A3E = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 813"; + rLen = 0; + rLoc = 36225; + rType = 0; + vrLen = 785; + vrLoc = 16680; + }; + 6E5EC38105633214001E3A3E = { + fRef = 6E0D40B4052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.h: playSoundsButton"; + rLen = 0; + rLoc = 538; + rType = 0; + vrLen = 983; + vrLoc = 0; + }; + 6E5EC38205633214001E3A3E = { + fRef = 6E0D40B5052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.m: 38"; + rLen = 18; + rLoc = 740; + rType = 0; + vrLen = 1026; + vrLoc = 235; + }; + 6E5EC38305633214001E3A3E = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: 25"; + rLen = 0; + rLoc = 811; + rType = 0; + vrLen = 1070; + vrLoc = 0; + }; + 6E5EC38405633214001E3A3E = { + fRef = 6E71F41C051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.m: TCGlobalPlaySounds"; + rLen = 0; + rLoc = 550; + rType = 0; + vrLen = 839; + vrLoc = 0; + }; + 6E5EC38505633214001E3A3E = { + fRef = 6E4E098C050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1103; + vrLoc = 0; + }; + 6E5EC38605633214001E3A3E = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 28"; + rLen = 94; + rLoc = 1031; + rType = 0; + vrLen = 1425; + vrLoc = 309; + }; + 6E5EC38705633214001E3A3E = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: TCPlaySoundsPref"; + rLen = 16; + rLoc = 1048; + rType = 0; + vrLen = 1107; + vrLoc = 0; + }; + 6E5EC38805633214001E3A3E = { + fRef = 6E71F41C051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.m: TCWindowsOnTopPref"; + rLen = 0; + rLoc = 726; + rType = 0; + vrLen = 896; + vrLoc = 0; + }; + 6E5EC38905633214001E3A3E = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: TCPlaySoundsPref"; + rLen = 16; + rLoc = 1048; + rType = 0; + vrLen = 1107; + vrLoc = 0; + }; + 6E5EC38A05633214001E3A3E = { + fRef = 6E71F41C051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.m: TCPlaySoundsPref"; + rLen = 0; + rLoc = 724; + rType = 0; + vrLen = 892; + vrLoc = 0; + }; + 6E5EC38B05633214001E3A3E = { + fRef = 6E4E098C050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1103; + vrLoc = 0; + }; + 6E5EC38C05633214001E3A3E = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 36"; + rLen = 18; + rLoc = 1495; + rType = 0; + vrLen = 1607; + vrLoc = 309; + }; + 6E5EC38D05633214001E3A3E = { + fRef = 6E0D40B5052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.m: 71"; + rLen = 0; + rLoc = 1666; + rType = 0; + vrLen = 1010; + vrLoc = 1133; + }; + 6E5EC38E05633214001E3A3E = { + fRef = 6E0D40B4052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.h: playSoundsButton:"; + rLen = 0; + rLoc = 811; + rType = 0; + vrLen = 994; + vrLoc = 0; + }; + 6E5EC38F05633214001E3A3E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1540"; + rLen = 0; + rLoc = 40858; + rType = 0; + vrLen = 1098; + vrLoc = 33028; + }; + 6E5EC39005633214001E3A3E = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: TCGlobalPlaySounds"; + rLen = 18; + rLoc = 792; + rType = 0; + vrLen = 1107; + vrLoc = 0; + }; + 6E5EC39105633214001E3A3E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1543"; + rLen = 0; + rLoc = 40897; + rType = 0; + vrLen = 1005; + vrLoc = 33148; + }; + 6E5EC39205633214001E3A3E = { + fRef = 6E0D40B5052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.m: 71"; + rLen = 0; + rLoc = 1666; + rType = 0; + vrLen = 1176; + vrLoc = 709; + }; + 6E5EC39305633214001E3A3E = { + fRef = 6E71F41C051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.m: TCPlaySoundsPref"; + rLen = 0; + rLoc = 724; + rType = 0; + vrLen = 892; + vrLoc = 0; + }; + 6E5EC39405633214001E3A3E = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: 18"; + rLen = 0; + rLoc = 570; + rType = 0; + vrLen = 1162; + vrLoc = 0; + }; + 6E5EC39505633214001E3A3E = { + fRef = 6E0D40B90522449500A80003; + isa = PBXTextBookmark; + name = "CheatListener.m: 184"; + rLen = 19; + rLoc = 4291; + rType = 0; + vrLen = 339; + vrLoc = 3986; + }; + 6E5EC39605633214001E3A3E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 492"; + rLen = 19; + rLoc = 13390; + rType = 0; + vrLen = 941; + vrLoc = 11195; + }; + 6E5EC39705633214001E3A3E = { + fRef = 6E71F41C051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.m: TCPlaySoundsPref"; + rLen = 0; + rLoc = 724; + rType = 0; + vrLen = 892; + vrLoc = 0; + }; + 6E5EC39805633214001E3A3E = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: 17"; + rLen = 19; + rLoc = 439; + rType = 0; + vrLen = 1139; + vrLoc = 0; + }; + 6E5EC39905633214001E3A3E = { + fRef = 6E0D40B90522449500A80003; + isa = PBXTextBookmark; + name = "CheatListener.m: 103"; + rLen = 8; + rLoc = 2851; + rType = 0; + vrLen = 1662; + vrLoc = 2080; + }; + 6E5EC39A05633214001E3A3E = { + fRef = 6E5EC3BE05633214001E3A3E; + isa = PBXTextBookmark; + name = "(null): 68"; + rLen = 0; + rLoc = 3050; + rType = 0; + vrLen = 1393; + vrLoc = 2296; + }; + 6E5EC39B05633214001E3A3E = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: 18"; + rLen = 0; + rLoc = 611; + rType = 0; + vrLen = 1143; + vrLoc = 0; + }; + 6E5EC39C05633214001E3A3E = { + fRef = 6E0D40B90522449500A80003; + isa = PBXTextBookmark; + name = "CheatListener.m: 103"; + rLen = 8; + rLoc = 2851; + rType = 0; + vrLen = 1662; + vrLoc = 2080; + }; + 6E5EC39D05633214001E3A3E = { + fRef = 6E5EC3C005633214001E3A3E; + isa = PBXTextBookmark; + name = "(null): 68"; + rLen = 44; + rLoc = 3031; + rType = 0; + vrLen = 1193; + vrLoc = 2522; + }; + 6E5EC39E05633214001E3A3E = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: 18"; + rLen = 0; + rLoc = 570; + rType = 0; + vrLen = 1244; + vrLoc = 0; + }; + 6E5EC39F05633214001E3A3E = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 30"; + rLen = 0; + rLoc = 936; + rType = 0; + vrLen = 1693; + vrLoc = 309; + }; + 6E5EC3A005633214001E3A3E = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: TCDefaultListenPath"; + rLen = 19; + rLoc = 586; + rType = 0; + vrLen = 1244; + vrLoc = 0; + }; + 6E5EC3A105633214001E3A3E = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 34"; + rLen = 0; + rLoc = 936; + rType = 0; + vrLen = 1730; + vrLoc = 228; + }; + 6E5EC3A205633214001E3A3E = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: 19"; + rLen = 0; + rLoc = 610; + rType = 0; + vrLen = 1245; + vrLoc = 0; + }; + 6E5EC3A305633214001E3A3E = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 34"; + rLen = 0; + rLoc = 936; + rType = 0; + vrLen = 1730; + vrLoc = 228; + }; + 6E5EC3A405633214001E3A3E = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: TCDefaultListenPath"; + rLen = 0; + rLoc = 610; + rType = 0; + vrLen = 1245; + vrLoc = 0; + }; + 6E5EC3A505633214001E3A3E = { + fRef = 6E0D40B90522449500A80003; + isa = PBXTextBookmark; + name = "CheatListener.m: 103"; + rLen = 0; + rLoc = 2885; + rType = 0; + vrLen = 1668; + vrLoc = 2080; + }; + 6E5EC3A605633214001E3A3E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 492"; + rLen = 0; + rLoc = 13414; + rType = 0; + vrLen = 947; + vrLoc = 11195; + }; + 6E5EC3A705633214001E3A3E = { + fRef = 6E0D40B90522449500A80003; + isa = PBXTextBookmark; + name = "CheatListener.m: 184"; + rLen = 0; + rLoc = 4283; + rType = 0; + vrLen = 348; + vrLoc = 3977; + }; + 6E5EC3A805633214001E3A3E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 492"; + rLen = 0; + rLoc = 13414; + rType = 0; + vrLen = 947; + vrLoc = 11195; + }; + 6E5EC3A905633214001E3A3E = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: TCMaxSearchResults"; + rLen = 0; + rLoc = 648; + rType = 0; + vrLen = 1245; + vrLoc = 0; + }; + 6E5EC3AA05633214001E3A3E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 494"; + rLen = 0; + rLoc = 13464; + rType = 0; + vrLen = 947; + vrLoc = 11195; + }; + 6E5EC3AB05633214001E3A3E = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: TCDefaultListenPath"; + rLen = 40; + rLoc = 571; + rType = 0; + vrLen = 1251; + vrLoc = 0; + }; + 6E5EC3AC05633214001E3A3E = { + fRef = 6E71F41C051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.m: TCDefaultListenPath"; + rLen = 0; + rLoc = 347; + rType = 0; + vrLen = 950; + vrLoc = 0; + }; + 6E5EC3AD05633214001E3A3E = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: 19"; + rLen = 0; + rLoc = 610; + rType = 0; + vrLen = 1229; + vrLoc = 0; + }; + 6E5EC3AE05633214001E3A3E = { + fRef = 6E0D40B90522449500A80003; + isa = PBXTextBookmark; + name = "CheatListener.m: 184"; + rLen = 0; + rLoc = 4283; + rType = 0; + vrLen = 346; + vrLoc = 3979; + }; + 6E5EC3AF05633214001E3A3E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 494"; + rLen = 0; + rLoc = 13464; + rType = 0; + vrLen = 947; + vrLoc = 11195; + }; + 6E5EC3B005633214001E3A3E = { + fRef = 6E0D40B90522449500A80003; + isa = PBXTextBookmark; + name = "CheatListener.m: 162"; + rLen = 0; + rLoc = 4108; + rType = 0; + vrLen = 633; + vrLoc = 3692; + }; + 6E5EC3B105633214001E3A3E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 476"; + rLen = 0; + rLoc = 13018; + rType = 0; + vrLen = 947; + vrLoc = 11195; + }; + 6E5EC3B205633214001E3A3E = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 32"; + rLen = 0; + rLoc = 933; + rType = 0; + vrLen = 1827; + vrLoc = 228; + }; + 6E5EC3B305633214001E3A3E = { + fRef = 6E0D40B90522449500A80003; + isa = PBXTextBookmark; + name = "CheatListener.m: 103"; + rLen = 0; + rLoc = 2885; + rType = 0; + vrLen = 1473; + vrLoc = 2080; + }; + 6E5EC3B405633214001E3A3E = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 492"; + rLen = 0; + rLoc = 13414; + rType = 0; + vrLen = 947; + vrLoc = 11195; + }; + 6E5EC3B505633214001E3A3E = { + fRef = 2A37F4BAFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "English: 9"; + rLen = 0; + rLoc = 104; + rType = 0; + vrLen = 104; + vrLoc = 0; + }; + 6E5EC3B605633214001E3A3E = { + fRef = 089C1660FE840EACC02AAC07; + isa = PBXTextBookmark; + name = "English: 7"; + rLen = 0; + rLoc = 201; + rType = 0; + vrLen = 205; + vrLoc = 0; + }; + 6E5EC3B705633214001E3A3E = { + fRef = 2A37F4BAFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "English: 4"; + rLen = 0; + rLoc = 66; + rType = 0; + vrLen = 66; + vrLoc = 0; + }; + 6E5EC3B805633214001E3A3E = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: launchEmailMenu:"; + rLen = 43; + rLoc = 4039; + rType = 0; + vrLen = 1014; + vrLoc = 3218; + }; + 6E5EC3B905633214001E3A3E = { + fRef = 6E4E098C050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.h: stopListener"; + rLen = 0; + rLoc = 1102; + rType = 0; + vrLen = 1133; + vrLoc = 228; + }; + 6E5EC3BA05633214001E3A3E = { + fRef = 6E5678E305350AF600A80003; + isa = PBXTextBookmark; + name = "Read Me.html: 33"; + rLen = 0; + rLoc = 1765; + rType = 0; + vrLen = 1602; + vrLoc = 0; + }; + 6E5EC3BB05633214001E3A3E = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 149"; + rLen = 32; + rLoc = 4148; + rType = 0; + vrLen = 1016; + vrLoc = 3216; + }; + 6E5EC3BC05633214001E3A3E = { + fRef = 6E5678E305350AF600A80003; + isa = PBXTextBookmark; + name = "Read Me.html: 38"; + rLen = 0; + rLoc = 2060; + rType = 0; + vrLen = 2106; + vrLoc = 0; + }; + 6E5EC3BE05633214001E3A3E = { + isa = PBXFileReference; + name = un.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/sys/un.h; + refType = 0; + sourceTree = ""; + }; + 6E5EC3BF05633214001E3A3E = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = un.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/sys/un.h; + refType = 0; + sourceTree = ""; + }; + 6E5EC3C005633214001E3A3E = { + isa = PBXFileReference; + name = un.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/sys/un.h; + refType = 0; + sourceTree = ""; + }; + 6E6126C7056B3091006177EC = { + fRef = 6E0D40B90522449500A80003; + isa = PBXTextBookmark; + name = "CheatListener.m: 103"; + rLen = 0; + rLoc = 2885; + rType = 0; + vrLen = 1473; + vrLoc = 2080; + }; + 6E6126C8056B3091006177EC = { + fRef = 6EE0044305609C0600F8A5B1; + isa = PBXTextBookmark; + name = "stdlib.h: free"; + rLen = 26; + rLoc = 4005; + rType = 0; + vrLen = 1244; + vrLoc = 3504; + }; + 6E6126C9056B3091006177EC = { + fRef = 6EE0044405609C0C00F8A5B1; + isa = PBXTextBookmark; + name = "NSObjCRuntime.h: NSLog"; + rLen = 53; + rLoc = 1627; + rType = 0; + vrLen = 1191; + vrLoc = 899; + }; + 6E6126CB056B3091006177EC = { + fRef = 6E61273F056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1438; + vrLoc = 1751; + }; + 6E6126CC056B3091006177EC = { + fRef = 6E612721056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 16"; + rLen = 7; + rLoc = 759; + rType = 0; + vrLen = 1715; + vrLoc = 3059; + }; + 6E6126CD056B3091006177EC = { + fRef = 6E61271E056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 580"; + rLen = 45; + rLoc = 13814; + rType = 0; + vrLen = 1797; + vrLoc = 14643; + }; + 6E6126CE056B3091006177EC = { + fRef = 6E612735056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1551; + vrLoc = 0; + }; + 6E6126CF056B3091006177EC = { + fRef = 6E612716056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1441; + vrLoc = 956; + }; + 6E6126D0056B3091006177EC = { + fRef = 6E61273C056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1396; + vrLoc = 3676; + }; + 6E6126D1056B3091006177EC = { + fRef = 6E612737056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 2187; + vrLoc = 6860; + }; + 6E6126D2056B3091006177EC = { + fRef = 6E612718056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1581; + vrLoc = 941; + }; + 6E6126D3056B3091006177EC = { + fRef = 6E612731056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 843; + vrLoc = 1417; + }; + 6E6126D4056B3091006177EC = { + fRef = 6E612748056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 105"; + rLen = 17; + rLoc = 5073; + rType = 0; + vrLen = 2281; + vrLoc = 2925; + }; + 6E6126D5056B3091006177EC = { + fRef = 6E61272C056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1400; + vrLoc = 1142; + }; + 6E6126D6056B3091006177EC = { + fRef = 6E612726056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 873; + vrLoc = 907; + }; + 6E6126D7056B3091006177EC = { + fRef = 6E61273D056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1108; + vrLoc = 0; + }; + 6E6126D8056B3091006177EC = { + fRef = 6E612720056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1283; + vrLoc = 2121; + }; + 6E6126DA056B3091006177EC = { + fRef = 6E612719056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 80"; + rLen = 18; + rLoc = 1507; + rType = 0; + vrLen = 771; + vrLoc = 1114; + }; + 6E6126DB056B3091006177EC = { + fRef = 6E612732056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 146"; + rLen = 43; + rLoc = 4735; + rType = 0; + vrLen = 1561; + vrLoc = 5395; + }; + 6E6126DC056B3091006177EC = { + fRef = 6E61272D056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1108; + vrLoc = 2303; + }; + 6E6126DD056B3091006177EC = { + fRef = 6E612742056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1194; + vrLoc = 0; + }; + 6E6126DE056B3091006177EC = { + fRef = 6E612727056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 486"; + rLen = 5; + rLoc = 8588; + rType = 0; + vrLen = 768; + vrLoc = 8157; + }; + 6E6126DF056B3091006177EC = { + fRef = 6E61273E056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 77"; + rLen = 28; + rLoc = 2434; + rType = 0; + vrLen = 1564; + vrLoc = 0; + }; + 6E6126E0056B3091006177EC = { + fRef = 6E612747056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1165; + vrLoc = 0; + }; + 6E6126E1056B3091006177EC = { + fRef = 6E61272B056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1224; + vrLoc = 0; + }; + 6E6126E2056B3091006177EC = { + fRef = 6E612741056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 195"; + rLen = 20; + rLoc = 5232; + rType = 0; + vrLen = 1890; + vrLoc = 11125; + }; + 6E6126E3056B3091006177EC = { + fRef = 6E612724056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 98"; + rLen = 0; + rLoc = 3234; + rType = 0; + vrLen = 847; + vrLoc = 1058; + }; + 6E6126E4056B3091006177EC = { + fRef = 6E61271F056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 2538; + vrLoc = 1162; + }; + 6E6126E7056B3091006177EC = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 346"; + rLen = 0; + rLoc = 12921; + rType = 0; + vrLen = 1245; + vrLoc = 5715; + }; + 6E6126E8056B3091006177EC = { + fRef = 6E0D40B90522449500A80003; + isa = PBXTextBookmark; + name = "CheatListener.m: 103"; + rLen = 0; + rLoc = 2885; + rType = 0; + vrLen = 1473; + vrLoc = 2080; + }; + 6E6126E9056B3091006177EC = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: unpause"; + rLen = 15; + rLoc = 3012; + rType = 0; + vrLen = 1479; + vrLoc = 976; + }; + 6E6126EA056B3091006177EC = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 13"; + rLen = 0; + rLoc = 518; + rType = 0; + vrLen = 1340; + vrLoc = 0; + }; + 6E6126EB056B3091006177EC = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: 18"; + rLen = 0; + rLoc = 441; + rType = 0; + vrLen = 828; + vrLoc = 0; + }; + 6E6126EC056B3091006177EC = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 287"; + rLen = 12; + rLoc = 10999; + rType = 0; + vrLen = 1127; + vrLoc = 5242; + }; + 6E6126ED056B3091006177EC = { + fRef = 6E612736056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 36"; + rLen = 39; + rLoc = 1166; + rType = 0; + vrLen = 1564; + vrLoc = 0; + }; + 6E6126EE056B3091006177EC = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 289"; + rLen = 0; + rLoc = 11133; + rType = 0; + vrLen = 1136; + vrLoc = 5242; + }; + 6E6126EF056B3091006177EC = { + fRef = 6EE0044305609C0600F8A5B1; + isa = PBXTextBookmark; + name = "stdlib.h: free"; + rLen = 26; + rLoc = 4005; + rType = 0; + vrLen = 1244; + vrLoc = 3504; + }; + 6E6126F0056B3091006177EC = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 349"; + rLen = 51; + rLoc = 12869; + rType = 0; + vrLen = 1112; + vrLoc = 6926; + }; + 6E6126F1056B3091006177EC = { + fRef = 6EE0044405609C0C00F8A5B1; + isa = PBXTextBookmark; + name = "NSObjCRuntime.h: NSLog"; + rLen = 53; + rLoc = 1627; + rType = 0; + vrLen = 1191; + vrLoc = 899; + }; + 6E6126F2056B3091006177EC = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 289"; + rLen = 0; + rLoc = 11133; + rType = 0; + vrLen = 1121; + vrLoc = 5344; + }; + 6E6126F3056B3091006177EC = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: 18"; + rLen = 0; + rLoc = 442; + rType = 0; + vrLen = 828; + vrLoc = 0; + }; + 6E6126F4056B3091006177EC = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 290"; + rLen = 0; + rLoc = 11133; + rType = 0; + vrLen = 1149; + vrLoc = 5406; + }; + 6E6126F5056B3091006177EC = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 774"; + rLen = 0; + rLoc = 18782; + rType = 0; + vrLen = 924; + vrLoc = 16873; + }; + 6E6126F6056B3091006177EC = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 282"; + rLen = 0; + rLoc = 10904; + rType = 0; + vrLen = 1149; + vrLoc = 5406; + }; + 6E6126F7056B3091006177EC = { + fRef = 6E612738056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1438; + vrLoc = 1751; + }; + 6E6126F8056B3091006177EC = { + fRef = 6E61271B056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 16"; + rLen = 7; + rLoc = 759; + rType = 0; + vrLen = 1715; + vrLoc = 3059; + }; + 6E6126F9056B3091006177EC = { + fRef = 6E612733056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1551; + vrLoc = 0; + }; + 6E6126FA056B3091006177EC = { + fRef = 6E612749056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 580"; + rLen = 45; + rLoc = 13814; + rType = 0; + vrLen = 1797; + vrLoc = 14643; + }; + 6E6126FB056B3091006177EC = { + fRef = 6E61272E056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1551; + vrLoc = 0; + }; + 6E6126FC056B3091006177EC = { + fRef = 6E612743056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1441; + vrLoc = 956; + }; + 6E6126FD056B3091006177EC = { + fRef = 6E612728056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1396; + vrLoc = 3676; + }; + 6E6126FE056B3091006177EC = { + fRef = 6E612722056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 2187; + vrLoc = 6860; + }; + 6E6126FF056B3091006177EC = { + fRef = 6E612739056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1581; + vrLoc = 941; + }; + 6E612700056B3091006177EC = { + fRef = 6E612744056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 843; + vrLoc = 1417; + }; + 6E612701056B3091006177EC = { + fRef = 6E612729056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 105"; + rLen = 17; + rLoc = 5073; + rType = 0; + vrLen = 2281; + vrLoc = 2925; + }; + 6E612702056B3091006177EC = { + fRef = 6E612723056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1400; + vrLoc = 1142; + }; + 6E612703056B3091006177EC = { + fRef = 6E61273A056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 873; + vrLoc = 907; + }; + 6E612704056B3091006177EC = { + fRef = 6E61271C056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1108; + vrLoc = 0; + }; + 6E612705056B3091006177EC = { + fRef = 6E612734056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1283; + vrLoc = 2121; + }; + 6E612706056B3091006177EC = { + fRef = 6E61272F056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 80"; + rLen = 18; + rLoc = 1507; + rType = 0; + vrLen = 771; + vrLoc = 1114; + }; + 6E612707056B3091006177EC = { + fRef = 6E612745056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 146"; + rLen = 43; + rLoc = 4735; + rType = 0; + vrLen = 1561; + vrLoc = 5395; + }; + 6E612708056B3091006177EC = { + fRef = 6E61272A056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1108; + vrLoc = 2303; + }; + 6E612709056B3091006177EC = { + fRef = 6E612740056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1194; + vrLoc = 0; + }; + 6E61270A056B3091006177EC = { + fRef = 6E612725056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 486"; + rLen = 5; + rLoc = 8588; + rType = 0; + vrLen = 768; + vrLoc = 8157; + }; + 6E61270B056B3091006177EC = { + fRef = 6E61273B056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 77"; + rLen = 28; + rLoc = 2434; + rType = 0; + vrLen = 1564; + vrLoc = 0; + }; + 6E61270C056B3091006177EC = { + fRef = 6E61271D056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1165; + vrLoc = 0; + }; + 6E61270D056B3091006177EC = { + fRef = 6E612717056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1224; + vrLoc = 0; + }; + 6E61270E056B3091006177EC = { + fRef = 6E612730056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 195"; + rLen = 20; + rLoc = 5232; + rType = 0; + vrLen = 1890; + vrLoc = 11125; + }; + 6E61270F056B3091006177EC = { + fRef = 6E612746056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 98"; + rLen = 0; + rLoc = 3234; + rType = 0; + vrLen = 847; + vrLoc = 1058; + }; + 6E612710056B3091006177EC = { + fRef = 6E61271A056B3091006177EC; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 2538; + vrLoc = 1162; + }; + 6E612711056B3091006177EC = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 290"; + rLen = 0; + rLoc = 11212; + rType = 0; + vrLen = 1061; + vrLoc = 5406; + }; + 6E612712056B3091006177EC = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 499"; + rLen = 0; + rLoc = 13507; + rType = 0; + vrLen = 894; + vrLoc = 11326; + }; + 6E612713056B3091006177EC = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 296"; + rLen = 0; + rLoc = 11307; + rType = 0; + vrLen = 1097; + vrLoc = 5346; + }; + 6E612714056B3091006177EC = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 499"; + rLen = 0; + rLoc = 13507; + rType = 0; + vrLen = 894; + vrLoc = 11326; + }; + 6E612716056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = mach_debug_types.h; + path = /usr/include/mach_debug/mach_debug_types.h; + refType = 0; + sourceTree = ""; + }; + 6E612717056B3091006177EC = { + isa = PBXFileReference; + name = cpu.h; + path = /usr/include/ppc/cpu.h; + refType = 0; + sourceTree = ""; + }; + 6E612718056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = fat.h; + path = "/usr/include/mach-o/fat.h"; + refType = 0; + sourceTree = ""; + }; + 6E612719056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = task.h; + path = /usr/include/mach/ppc/task.h; + refType = 0; + sourceTree = ""; + }; + 6E61271A056B3091006177EC = { + isa = PBXFileReference; + name = malloc.h; + path = /usr/include/malloc/malloc.h; + refType = 0; + sourceTree = ""; + }; + 6E61271B056B3091006177EC = { + isa = PBXFileReference; + name = vm_info.h; + path = /usr/include/mach_debug/vm_info.h; + refType = 0; + sourceTree = ""; + }; + 6E61271C056B3091006177EC = { + isa = PBXFileReference; + name = bootstrap.h; + path = /usr/include/mach/bootstrap.h; + refType = 0; + sourceTree = ""; + }; + 6E61271D056B3091006177EC = { + isa = PBXFileReference; + name = cpu.h; + path = /usr/include/machine/cpu.h; + refType = 0; + sourceTree = ""; + }; + 6E61271E056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = mach_host.h; + path = /usr/include/mach/mach_host.h; + refType = 0; + sourceTree = ""; + }; + 6E61271F056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = malloc.h; + path = /usr/include/malloc/malloc.h; + refType = 0; + sourceTree = ""; + }; + 6E612720056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = clock_reply.h; + path = /usr/include/mach/clock_reply.h; + refType = 0; + sourceTree = ""; + }; + 6E612721056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = vm_info.h; + path = /usr/include/mach_debug/vm_info.h; + refType = 0; + sourceTree = ""; + }; + 6E612722056B3091006177EC = { + isa = PBXFileReference; + name = reloc.h; + path = "/usr/include/mach-o/reloc.h"; + refType = 0; + sourceTree = ""; + }; + 6E612723056B3091006177EC = { + isa = PBXFileReference; + name = asm_help.h; + path = /usr/include/architecture/ppc/asm_help.h; + refType = 0; + sourceTree = ""; + }; + 6E612724056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = "objc-runtime.h"; + path = "/usr/include/objc/objc-runtime.h"; + refType = 0; + sourceTree = ""; + }; + 6E612725056B3091006177EC = { + isa = PBXFileReference; + name = vm_map.h; + path = /usr/include/mach/vm_map.h; + refType = 0; + sourceTree = ""; + }; + 6E612726056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = libc.h; + path = /usr/include/libc.h; + refType = 0; + sourceTree = ""; + }; + 6E612727056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = vm_map.h; + path = /usr/include/mach/vm_map.h; + refType = 0; + sourceTree = ""; + }; + 6E612728056B3091006177EC = { + isa = PBXFileReference; + name = ipc_info.h; + path = /usr/include/mach_debug/ipc_info.h; + refType = 0; + sourceTree = ""; + }; + 6E612729056B3091006177EC = { + isa = PBXFileReference; + name = http_request.h; + path = /usr/include/httpd/http_request.h; + refType = 0; + sourceTree = ""; + }; + 6E61272A056B3091006177EC = { + isa = PBXFileReference; + name = time_value.h; + path = /usr/include/mach/time_value.h; + refType = 0; + sourceTree = ""; + }; + 6E61272B056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = cpu.h; + path = /usr/include/ppc/cpu.h; + refType = 0; + sourceTree = ""; + }; + 6E61272C056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = asm_help.h; + path = /usr/include/architecture/ppc/asm_help.h; + refType = 0; + sourceTree = ""; + }; + 6E61272D056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = time_value.h; + path = /usr/include/mach/time_value.h; + refType = 0; + sourceTree = ""; + }; + 6E61272E056B3091006177EC = { + isa = PBXFileReference; + name = mach_debug.h; + path = /usr/include/mach_debug/mach_debug.h; + refType = 0; + sourceTree = ""; + }; + 6E61272F056B3091006177EC = { + isa = PBXFileReference; + name = task.h; + path = /usr/include/mach/ppc/task.h; + refType = 0; + sourceTree = ""; + }; + 6E612730056B3091006177EC = { + isa = PBXFileReference; + name = pthread.h; + path = /usr/include/pthread.h; + refType = 0; + sourceTree = ""; + }; + 6E612731056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = OSTypes.h; + path = /usr/include/libkern/OSTypes.h; + refType = 0; + sourceTree = ""; + }; + 6E612732056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = mach_types.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/mach_types.h; + refType = 0; + sourceTree = ""; + }; + 6E612733056B3091006177EC = { + isa = PBXFileReference; + name = mach_debug.h; + path = /usr/include/mach_debug/mach_debug.h; + refType = 0; + sourceTree = ""; + }; + 6E612734056B3091006177EC = { + isa = PBXFileReference; + name = clock_reply.h; + path = /usr/include/mach/clock_reply.h; + refType = 0; + sourceTree = ""; + }; + 6E612735056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = mach_debug.h; + path = /usr/include/mach_debug/mach_debug.h; + refType = 0; + sourceTree = ""; + }; + 6E612736056B3091006177EC = { + isa = PBXFileReference; + name = vm_types.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_types.h; + refType = 0; + sourceTree = ""; + }; + 6E612737056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = reloc.h; + path = "/usr/include/mach-o/reloc.h"; + refType = 0; + sourceTree = ""; + }; + 6E612738056B3091006177EC = { + isa = PBXFileReference; + name = page_info.h; + path = /usr/include/mach_debug/page_info.h; + refType = 0; + sourceTree = ""; + }; + 6E612739056B3091006177EC = { + isa = PBXFileReference; + name = fat.h; + path = "/usr/include/mach-o/fat.h"; + refType = 0; + sourceTree = ""; + }; + 6E61273A056B3091006177EC = { + isa = PBXFileReference; + name = libc.h; + path = /usr/include/libc.h; + refType = 0; + sourceTree = ""; + }; + 6E61273B056B3091006177EC = { + isa = PBXFileReference; + name = vm_types.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_types.h; + refType = 0; + sourceTree = ""; + }; + 6E61273C056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = ipc_info.h; + path = /usr/include/mach_debug/ipc_info.h; + refType = 0; + sourceTree = ""; + }; + 6E61273D056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = bootstrap.h; + path = /usr/include/mach/bootstrap.h; + refType = 0; + sourceTree = ""; + }; + 6E61273E056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = vm_types.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_types.h; + refType = 0; + sourceTree = ""; + }; + 6E61273F056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = page_info.h; + path = /usr/include/mach_debug/page_info.h; + refType = 0; + sourceTree = ""; + }; + 6E612740056B3091006177EC = { + isa = PBXFileReference; + name = vm_task.h; + path = /usr/include/mach/vm_task.h; + refType = 0; + sourceTree = ""; + }; + 6E612741056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = pthread.h; + path = /usr/include/pthread.h; + refType = 0; + sourceTree = ""; + }; + 6E612742056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = vm_task.h; + path = /usr/include/mach/vm_task.h; + refType = 0; + sourceTree = ""; + }; + 6E612743056B3091006177EC = { + isa = PBXFileReference; + name = mach_debug_types.h; + path = /usr/include/mach_debug/mach_debug_types.h; + refType = 0; + sourceTree = ""; + }; + 6E612744056B3091006177EC = { + isa = PBXFileReference; + name = OSTypes.h; + path = /usr/include/libkern/OSTypes.h; + refType = 0; + sourceTree = ""; + }; + 6E612745056B3091006177EC = { + isa = PBXFileReference; + name = mach_types.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/mach_types.h; + refType = 0; + sourceTree = ""; + }; + 6E612746056B3091006177EC = { + isa = PBXFileReference; + name = "objc-runtime.h"; + path = "/usr/include/objc/objc-runtime.h"; + refType = 0; + sourceTree = ""; + }; + 6E612747056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = cpu.h; + path = /usr/include/machine/cpu.h; + refType = 0; + sourceTree = ""; + }; + 6E612748056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = http_request.h; + path = /usr/include/httpd/http_request.h; + refType = 0; + sourceTree = ""; + }; + 6E612749056B3091006177EC = { + isa = PBXFileReference; + name = mach_host.h; + path = /usr/include/mach/mach_host.h; + refType = 0; + sourceTree = ""; + }; + 6E71F41B051BCCC600A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavSelRange = "{610, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 6E71F41C051BCCC600A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavSelRange = "{347, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 6E81662F0559E79E00377CF7 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 422"; + rLen = 0; + rLoc = 28733; + rType = 0; + vrLen = 736; + vrLoc = 7802; + }; + 6E8166300559E79E00377CF7 = { + fRef = 089C1660FE840EACC02AAC07; + isa = PBXTextBookmark; + name = "English: 4"; + rLen = 0; + rLoc = 106; + rType = 0; + vrLen = 201; + vrLoc = 0; + }; + 6E8166310559E79E00377CF7 = { + fRef = 6E146B12051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.m: connectToServer:name:"; + rLen = 12; + rLoc = 2598; + rType = 0; + vrLen = 518; + vrLoc = 3725; + }; + 6E8166320559E79E00377CF7 = { + fRef = 089C1660FE840EACC02AAC07; + isa = PBXTextBookmark; + name = "English: 7"; + rLen = 0; + rLoc = 201; + rType = 0; + vrLen = 201; + vrLoc = 0; + }; + 6E8166330559E79E00377CF7 = { + fRef = 2A37F4BAFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "English: 9"; + rLen = 0; + rLoc = 104; + rType = 0; + vrLen = 104; + vrLoc = 0; + }; + 6E8166340559E79E00377CF7 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: 52"; + rLen = 0; + rLoc = 1402; + rType = 0; + vrLen = 924; + vrLoc = 859; + }; + 6E8166350559E79E00377CF7 = { + fRef = 6E0BDF7D0511568D00A80003; + isa = PBXTextBookmark; + name = "cheat_types.h: 23"; + rLen = 0; + rLoc = 521; + rType = 0; + vrLen = 940; + vrLoc = 0; + }; + 6E8166370559E79E00377CF7 = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 993; + vrLoc = 0; + }; + 6E8166380559E79E00377CF7 = { + fRef = 6E71F41C051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 804; + vrLoc = 0; + }; + 6E8166390559E79E00377CF7 = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: 19"; + rLen = 0; + rLoc = 652; + rType = 0; + vrLen = 944; + vrLoc = 82; + }; + 6E81663A0559E79E00377CF7 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: 52"; + rLen = 0; + rLoc = 1402; + rType = 0; + vrLen = 924; + vrLoc = 859; + }; + 6E81663C0559E79E00377CF7 = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: TCMaxSearchResults"; + rLen = 0; + rLoc = 651; + rType = 0; + vrLen = 1026; + vrLoc = 0; + }; + 6E81663E0559E79E00377CF7 = { + fRef = 6E81664C0559E7C000377CF7; + isa = PBXTextBookmark; + name = "(null): 328"; + rLen = 0; + rLoc = 11593; + rType = 0; + vrLen = 867; + vrLoc = 11952; + }; + 6E81663F0559E79E00377CF7 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: 52"; + rLen = 0; + rLoc = 1402; + rType = 0; + vrLen = 924; + vrLoc = 859; + }; + 6E8166410559E79E00377CF7 = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: TCMaxSearchResults"; + rLen = 0; + rLoc = 651; + rType = 0; + vrLen = 1026; + vrLoc = 0; + }; + 6E8166430559E79E00377CF7 = { + fRef = 6E0D40AD05223CCE00A80003; + isa = PBXTextBookmark; + name = "NetTrafficController.m: 25"; + rLen = 64; + rLoc = 539; + rType = 0; + vrLen = 527; + vrLoc = 350; + }; + 6E8166450559E79E00377CF7 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: 27"; + rLen = 0; + rLoc = 637; + rType = 0; + vrLen = 602; + vrLoc = 404; + }; + 6E8166460559E79E00377CF7 = { + fRef = 6E0BDF7D0511568D00A80003; + isa = PBXTextBookmark; + name = "cheat_types.h: TCaddress"; + rLen = 9; + rLoc = 881; + rType = 0; + vrLen = 838; + vrLoc = 109; + }; + 6E8166480559E79E00377CF7 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: searchResults"; + rLen = 0; + rLoc = 1005; + rType = 0; + vrLen = 714; + vrLoc = 479; + }; + 6E81664B0559E7C000377CF7 = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = math.h; + path = /usr/include/architecture/ppc/math.h; + refType = 0; + sourceTree = ""; + }; + 6E81664C0559E7C000377CF7 = { + isa = PBXFileReference; + name = math.h; + path = /usr/include/architecture/ppc/math.h; + refType = 0; + sourceTree = ""; + }; + 6E8166890559F3BD00377CF7 = { + fRef = 6E0BDF7D0511568D00A80003; + isa = PBXTextBookmark; + name = "cheat_types.h: TCaddress"; + rLen = 9; + rLoc = 881; + rType = 0; + vrLen = 841; + vrLoc = 106; + }; + 6E81668B0559F3BD00377CF7 = { + fRef = 6E0BDF7D0511568D00A80003; + isa = PBXTextBookmark; + name = "cheat_types.h: 28"; + rLen = 0; + rLoc = 564; + rType = 0; + vrLen = 780; + vrLoc = 167; + }; + 6E81668C0559F3BD00377CF7 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: searchResults"; + rLen = 0; + rLoc = 1005; + rType = 0; + vrLen = 714; + vrLoc = 479; + }; + 6E81668E0559F3BD00377CF7 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: setStatusDisconnected"; + rLen = 263; + rLoc = 2626; + rType = 0; + vrLen = 887; + vrLoc = 1230; + }; + 6E8166900559F3BD00377CF7 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: changePulldown"; + rLen = 0; + rLoc = 1843; + rType = 0; + vrLen = 1012; + vrLoc = 870; + }; + 6E8166920559F3BD00377CF7 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: changePulldown"; + rLen = 0; + rLoc = 1843; + rType = 0; + vrLen = 1012; + vrLoc = 870; + }; + 6E8166940559F3BD00377CF7 = { + fRef = 6E0BDF7D0511568D00A80003; + isa = PBXTextBookmark; + name = "cheat_types.h: 23"; + rLen = 0; + rLoc = 521; + rType = 0; + vrLen = 780; + vrLoc = 167; + }; + 6E8166960559F3BD00377CF7 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 890"; + rLen = 0; + rLoc = 38718; + rType = 0; + vrLen = 539; + vrLoc = 17083; + }; + 6E8166980559F3BD00377CF7 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: changePulldown"; + rLen = 0; + rLoc = 1843; + rType = 0; + vrLen = 1012; + vrLoc = 870; + }; + 6E81669A0559F3BD00377CF7 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: changePulldown"; + rLen = 0; + rLoc = 1843; + rType = 0; + vrLen = 1012; + vrLoc = 870; + }; + 6E81669C0559F3BD00377CF7 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: changePulldown"; + rLen = 0; + rLoc = 1843; + rType = 0; + vrLen = 1012; + vrLoc = 870; + }; + 6E81669E0559F3BD00377CF7 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: savedStatusText"; + rLen = 0; + rLoc = 1210; + rType = 0; + vrLen = 789; + vrLoc = 557; + }; + 6E8166A00559F3BD00377CF7 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: setStatusText:duraction:"; + rLen = 71; + rLoc = 2916; + rType = 0; + vrLen = 964; + vrLoc = 1346; + }; + 6E8166A20559F3BD00377CF7 = { + fRef = 6E0D40AD05223CCE00A80003; + isa = PBXTextBookmark; + name = "NetTrafficController.m: 25"; + rLen = 64; + rLoc = 539; + rType = 0; + vrLen = 527; + vrLoc = 350; + }; + 6E8166A30559F3BD00377CF7 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: setStatusText:duraction:"; + rLen = 71; + rLoc = 2916; + rType = 0; + vrLen = 920; + vrLoc = 749; + }; + 6E8166A50559F3BD00377CF7 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: statusTextTimer:"; + rLen = 40; + rLoc = 3083; + rType = 0; + vrLen = 902; + vrLoc = 1551; + }; + 6E84B8F20558B3480001B5EB = { + fRef = 6E3F0D02050D4ACC00A80003; + isa = PBXTextBookmark; + name = "cheat_net.m: 77"; + rLen = 0; + rLoc = 1627; + rType = 0; + vrLen = 443; + vrLoc = 1397; + }; + 6E84B8F30558B3480001B5EB = { + fRef = 6E84B92C0558B3480001B5EB; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 186; + vrLoc = 0; + }; + 6E84B8F40558B3480001B5EB = { + fRef = 6E84B9290558B3480001B5EB; + isa = PBXTextBookmark; + name = "(null): 5"; + rLen = 0; + rLoc = 186; + rType = 0; + vrLen = 292; + vrLoc = 0; + }; + 6E84B8F80558B3480001B5EB = { + fRef = 6E84B92B0558B3480001B5EB; + isa = PBXTextBookmark; + name = "(null): 33"; + rLen = 42; + rLoc = 751; + rType = 0; + vrLen = 795; + vrLoc = 0; + }; + 6E84B8FE0558B3480001B5EB = { + fRef = 6E3F0D02050D4ACC00A80003; + isa = PBXTextBookmark; + name = "cheat_net.m: 77"; + rLen = 0; + rLoc = 1627; + rType = 0; + vrLen = 444; + vrLoc = 1397; + }; + 6E84B8FF0558B3480001B5EB = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 941; + vrLoc = 0; + }; + 6E84B9000558B3480001B5EB = { + fRef = 6E3F0D02050D4ACC00A80003; + isa = PBXTextBookmark; + name = "cheat_net.m: 77"; + rLen = 0; + rLoc = 1627; + rType = 0; + vrLen = 443; + vrLoc = 1397; + }; + 6E84B9010558B3480001B5EB = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 135"; + rLen = 0; + rLoc = 3369; + rType = 0; + vrLen = 488; + vrLoc = 2956; + }; + 6E84B9020558B3480001B5EB = { + fRef = 6E146B12051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.m: 114"; + rLen = 0; + rLoc = 2694; + rType = 0; + vrLen = 656; + vrLoc = 2385; + }; + 6E84B9030558B3480001B5EB = { + fRef = 6E3F0D02050D4ACC00A80003; + isa = PBXTextBookmark; + name = "cheat_net.m: 77"; + rLen = 0; + rLoc = 1627; + rType = 0; + vrLen = 443; + vrLoc = 1397; + }; + 6E84B9040558B3480001B5EB = { + fRef = 6E146B12051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.m: 114"; + rLen = 0; + rLoc = 2694; + rType = 0; + vrLen = 656; + vrLoc = 2385; + }; + 6E84B9050558B3480001B5EB = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 135"; + rLen = 0; + rLoc = 3369; + rType = 0; + vrLen = 488; + vrLoc = 2956; + }; + 6E84B9060558B3480001B5EB = { + fRef = 6E3F0D02050D4ACC00A80003; + isa = PBXTextBookmark; + name = "cheat_net.m: 77"; + rLen = 0; + rLoc = 1627; + rType = 0; + vrLen = 443; + vrLoc = 1397; + }; + 6E84B9070558B3480001B5EB = { + fRef = 6E146B12051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.m: 114"; + rLen = 0; + rLoc = 2694; + rType = 0; + vrLen = 656; + vrLoc = 2385; + }; + 6E84B9080558B3480001B5EB = { + fRef = 6E3F0D02050D4ACC00A80003; + isa = PBXTextBookmark; + name = "cheat_net.m: 77"; + rLen = 0; + rLoc = 1627; + rType = 0; + vrLen = 443; + vrLoc = 1397; + }; + 6E84B9090558B3480001B5EB = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 129"; + rLen = 0; + rLoc = 3288; + rType = 0; + vrLen = 488; + vrLoc = 2956; + }; + 6E84B90A0558B3480001B5EB = { + fRef = 089C1660FE840EACC02AAC07; + isa = PBXTextBookmark; + name = "English: 6"; + rLen = 0; + rLoc = 200; + rType = 0; + vrLen = 201; + vrLoc = 0; + }; + 6E84B90B0558B3480001B5EB = { + fRef = 2A37F4BAFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "English: 10"; + rLen = 0; + rLoc = 97; + rType = 0; + vrLen = 97; + vrLoc = 0; + }; + 6E84B90C0558B3480001B5EB = { + fRef = 089C1660FE840EACC02AAC07; + isa = PBXTextBookmark; + name = "English: 6"; + rLen = 0; + rLoc = 200; + rType = 0; + vrLen = 201; + vrLoc = 0; + }; + 6E84B90D0558B3480001B5EB = { + fRef = 6E84B9280558B3480001B5EB; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 186; + vrLoc = 0; + }; + 6E84B90E0558B3480001B5EB = { + fRef = 089C1660FE840EACC02AAC07; + isa = PBXTextBookmark; + name = "English: 6"; + rLen = 0; + rLoc = 200; + rType = 0; + vrLen = 201; + vrLoc = 0; + }; + 6E84B90F0558B3480001B5EB = { + fRef = 6E84B92A0558B3480001B5EB; + isa = PBXTextBookmark; + name = "(null): 5"; + rLen = 0; + rLoc = 186; + rType = 0; + vrLen = 292; + vrLoc = 0; + }; + 6E84B9100558B3480001B5EB = { + fRef = 089C1660FE840EACC02AAC07; + isa = PBXTextBookmark; + name = "English: 5"; + rLen = 0; + rLoc = 139; + rType = 0; + vrLen = 201; + vrLoc = 0; + }; + 6E84B9110558B3480001B5EB = { + fRef = 2A37F4BAFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "English: 7"; + rLen = 0; + rLoc = 73; + rType = 0; + vrLen = 97; + vrLoc = 0; + }; + 6E84B9120558B3480001B5EB = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: clearSearchButton"; + rLen = 0; + rLoc = 1820; + rType = 0; + vrLen = 799; + vrLoc = 882; + }; + 6E84B9130558B3480001B5EB = { + fRef = 6ED3E46305192E2B00A80003; + isa = PBXTextBookmark; + name = "MenuExtras.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 579; + vrLoc = 0; + }; + 6E84B9140558B3480001B5EB = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: floatSizeMenu"; + rLen = 0; + rLoc = 2459; + rType = 0; + vrLen = 930; + vrLoc = 2064; + }; + 6E84B9160558B3480001B5EB = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: 119"; + rLen = 0; + rLoc = 4714; + rType = 0; + vrLen = 934; + vrLoc = 2064; + }; + 6E84B9180558B3480001B5EB = { + fRef = 6E84B9270558B3480001B5EB; + isa = PBXTextBookmark; + name = "(null): 33"; + rLen = 42; + rLoc = 751; + rType = 0; + vrLen = 795; + vrLoc = 0; + }; + 6E84B91A0558B3480001B5EB = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: pauseButton:"; + rLen = 0; + rLoc = 4679; + rType = 0; + vrLen = 928; + vrLoc = 2028; + }; + 6E84B91C0558B3480001B5EB = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: handleSocket:"; + rLen = 12; + rLoc = 3228; + rType = 0; + vrLen = 787; + vrLoc = 3956; + }; + 6E84B91D0558B3480001B5EB = { + fRef = 6E146B12051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.m: 114"; + rLen = 0; + rLoc = 2694; + rType = 0; + vrLen = 895; + vrLoc = 2226; + }; + 6E84B91E0558B3480001B5EB = { + fRef = 6E146B11051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 738; + vrLoc = 0; + }; + 6E84B91F0558B3480001B5EB = { + fRef = 6E146B12051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.m: connectToServer:name:"; + rLen = 12; + rLoc = 2598; + rType = 0; + vrLen = 756; + vrLoc = 3725; + }; + 6E84B9210558B3480001B5EB = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: handleSocket:"; + rLen = 12; + rLoc = 3228; + rType = 0; + vrLen = 786; + vrLoc = 3956; + }; + 6E84B9230558B3480001B5EB = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: connectToServer:name:"; + rLen = 0; + rLoc = 3236; + rType = 0; + vrLen = 908; + vrLoc = 1579; + }; + 6E84B9240558B3480001B5EB = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 621"; + rLen = 15; + rLoc = 33933; + rType = 0; + vrLen = 732; + vrLoc = 12070; + }; + 6E84B9270558B3480001B5EB = { + isa = PBXFileReference; + name = NSObject.h; + path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSObject.h; + refType = 0; + sourceTree = ""; + }; + 6E84B9280558B3480001B5EB = { + isa = PBXFileReference; + name = test_Niobium_Prefix.pch; + path = "/Users/chaz/Projects/Niobium/build/Niobium Test.app/Contents/Resources/test_Niobium_Prefix.pch"; + refType = 0; + sourceTree = ""; + }; + 6E84B9290558B3480001B5EB = { + expectedFileType = text.plist.strings; + isa = PBXFileReference; + name = test_InfoPlist.strings; + path = "/Users/chaz/Projects/Niobium/build/Niobium Test.app/Contents/Resources/English.lproj/test_InfoPlist.strings"; + refType = 0; + sourceTree = ""; + }; + 6E84B92A0558B3480001B5EB = { + isa = PBXFileReference; + name = test_InfoPlist.strings; + path = "/Users/chaz/Projects/Niobium/build/Niobium Test.app/Contents/Resources/English.lproj/test_InfoPlist.strings"; + refType = 0; + sourceTree = ""; + }; + 6E84B92B0558B3480001B5EB = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = NSObject.h; + path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSObject.h; + refType = 0; + sourceTree = ""; + }; + 6E84B92C0558B3480001B5EB = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = test_Niobium_Prefix.pch; + path = "/Users/chaz/Projects/Niobium/build/Niobium Test.app/Contents/Resources/test_Niobium_Prefix.pch"; + refType = 0; + sourceTree = ""; + }; + 6E9F392A0569DB90007C1A1C = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 774"; + rLen = 0; + rLoc = 18782; + rType = 0; + vrLen = 924; + vrLoc = 16873; + }; + 6E9F392B0569DB90007C1A1C = { + fRef = 6E0D40B90522449500A80003; + isa = PBXTextBookmark; + name = "CheatListener.m: 103"; + rLen = 0; + rLoc = 2885; + rType = 0; + vrLen = 1473; + vrLoc = 2080; + }; + 6EAD5EEA054C3932005761EE = { + isa = PBXSourceControlManager; + scmConfiguration = { + }; + scmType = scm.cvs; + }; + 6EAD5EEB054C3932005761EE = { + indexTemplatePath = ""; + isa = PBXCodeSenseManager; + usesDefaults = 1; + wantsCodeCompletion = 1; + wantsCodeCompletionAutoPopup = 0; + wantsCodeCompletionAutoSuggestions = 0; + wantsCodeCompletionCaseSensitivity = 1; + wantsCodeCompletionOnlyMatchingItems = 1; + wantsCodeCompletionParametersIncluded = 1; + wantsCodeCompletionPlaceholdersInserted = 1; + wantsCodeCompletionTabCompletes = 1; + wantsIndex = 1; + }; + 6EB8529F057476DD00E260EA = { + fRef = 6E51A97D0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.m: 20"; + rLen = 0; + rLoc = 424; + rType = 0; + vrLen = 663; + vrLoc = 0; + }; + 6EB852A0057476DD00E260EA = { + fRef = 6E4E098C050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.h: launchWebsiteMenu:"; + rLen = 0; + rLoc = 1386; + rType = 0; + vrLen = 1103; + vrLoc = 334; + }; + 6EB852A1057476DD00E260EA = { + fRef = 6EB852E7057476DD00E260EA; + isa = PBXTextBookmark; + name = "(null): 28"; + rLen = 74; + rLoc = 617; + rType = 0; + vrLen = 1390; + vrLoc = 18; + }; + 6EB852A3057476DD00E260EA = { + fRef = 6EE004DD0560B42800F8A5B1; + isa = PBXTextBookmark; + name = "AppController.m: 71"; + rLen = 32; + rLoc = 1601; + rType = 0; + vrLen = 1099; + vrLoc = 3399; + }; + 6EB852A4057476DD00E260EA = { + fRef = 6EFB422D052F601400A80003; + isa = PBXTextBookmark; + name = "SearchResults.h: data"; + rLen = 0; + rLoc = 726; + rType = 0; + vrLen = 755; + vrLoc = 0; + }; + 6EB852A5057476DD00E260EA = { + fRef = 6EFB422E052F601400A80003; + isa = PBXTextBookmark; + name = "SearchResults.m: size"; + rLen = 0; + rLoc = 896; + rType = 0; + vrLen = 468; + vrLoc = 574; + }; + 6EB852A6057476DD00E260EA = { + fRef = 6EE004DE0560B42800F8A5B1; + isa = PBXTextBookmark; + name = "vm_map.h: vm_write"; + rLen = 23; + rLoc = 2656; + rType = 0; + vrLen = 709; + vrLoc = 2324; + }; + 6EB852A9057476DD00E260EA = { + fRef = 6E0BDF7D0511568D00A80003; + isa = PBXTextBookmark; + name = "cheat_types.h: 35"; + rLen = 9; + rLoc = 881; + rType = 0; + vrLen = 947; + vrLoc = 0; + }; + 6EB852AC057476DD00E260EA = { + fRef = 6E51A97D0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.m: 20"; + rLen = 0; + rLoc = 424; + rType = 0; + vrLen = 663; + vrLoc = 0; + }; + 6EB852AD057476DD00E260EA = { + fRef = 6E4E098C050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.h: launchWebsiteMenu:"; + rLen = 0; + rLoc = 1386; + rType = 0; + vrLen = 1103; + vrLoc = 334; + }; + 6EB852AE057476DD00E260EA = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 147"; + rLen = 7; + rLoc = 3873; + rType = 0; + vrLen = 1062; + vrLoc = 3454; + }; + 6EB852AF057476DD00E260EA = { + fRef = 6EB852E6057476DD00E260EA; + isa = PBXTextBookmark; + name = "(null): 28"; + rLen = 74; + rLoc = 617; + rType = 0; + vrLen = 1390; + vrLoc = 18; + }; + 6EB852B0057476DD00E260EA = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 148"; + rLen = 0; + rLoc = 3842; + rType = 0; + vrLen = 1075; + vrLoc = 3454; + }; + 6EB852B1057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 315"; + rLen = 0; + rLoc = 6725; + rType = 0; + vrLen = 1097; + vrLoc = 6333; + }; + 6EB852B2057476DD00E260EA = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: firstSearchString8bit:size:"; + rLen = 0; + rLoc = 1158; + rType = 0; + vrLen = 1786; + vrLoc = 702; + }; + 6EB852B3057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 302"; + rLen = 0; + rLoc = 6461; + rType = 0; + vrLen = 1205; + vrLoc = 6067; + }; + 6EB852B4057476DD00E260EA = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: firstSearchString8bit:size:"; + rLen = 0; + rLoc = 1158; + rType = 0; + vrLen = 835; + vrLoc = 137; + }; + 6EB852B5057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 277"; + rLen = 0; + rLoc = 5686; + rType = 0; + vrLen = 1285; + vrLoc = 5735; + }; + 6EB852B6057476DD00E260EA = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 148"; + rLen = 0; + rLoc = 3842; + rType = 0; + vrLen = 1075; + vrLoc = 3454; + }; + 6EB852B7057476DD00E260EA = { + fRef = 6EE004DD0560B42800F8A5B1; + isa = PBXTextBookmark; + name = "AppController.m: 71"; + rLen = 32; + rLoc = 1601; + rType = 0; + vrLen = 1099; + vrLoc = 3399; + }; + 6EB852B8057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 304"; + rLen = 0; + rLoc = 6460; + rType = 0; + vrLen = 1141; + vrLoc = 5931; + }; + 6EB852B9057476DD00E260EA = { + fRef = 6EE004DD0560B42800F8A5B1; + isa = PBXTextBookmark; + name = "AppController.m: 71"; + rLen = 32; + rLoc = 1601; + rType = 0; + vrLen = 1099; + vrLoc = 3399; + }; + 6EB852BA057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 314"; + rLen = 0; + rLoc = 6665; + rType = 0; + vrLen = 1135; + vrLoc = 5931; + }; + 6EB852BB057476DD00E260EA = { + fRef = 6EE004DD0560B42800F8A5B1; + isa = PBXTextBookmark; + name = "AppController.m: 71"; + rLen = 32; + rLoc = 1601; + rType = 0; + vrLen = 1099; + vrLoc = 3399; + }; + 6EB852BC057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 313"; + rLen = 0; + rLoc = 6668; + rType = 0; + vrLen = 1208; + vrLoc = 5735; + }; + 6EB852BD057476DD00E260EA = { + fRef = 6EE004DD0560B42800F8A5B1; + isa = PBXTextBookmark; + name = "AppController.m: 71"; + rLen = 32; + rLoc = 1601; + rType = 0; + vrLen = 1099; + vrLoc = 3399; + }; + 6EB852BE057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 562"; + rLen = 0; + rLoc = 12621; + rType = 0; + vrLen = 1260; + vrLoc = 11861; + }; + 6EB852BF057476DD00E260EA = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: cancelButton:"; + rLen = 32; + rLoc = 31458; + rType = 0; + vrLen = 998; + vrLoc = 29449; + }; + 6EB852C0057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: searchIntegerShort:"; + rLen = 41; + rLoc = 20989; + rType = 0; + vrLen = 1289; + vrLoc = 22038; + }; + 6EB852C1057476DD00E260EA = { + fRef = 6EFB422D052F601400A80003; + isa = PBXTextBookmark; + name = "SearchResults.h: initWithType:size:data:amount:"; + rLen = 0; + rLoc = 647; + rType = 0; + vrLen = 736; + vrLoc = 0; + }; + 6EB852C2057476DD00E260EA = { + fRef = 6EFB422E052F601400A80003; + isa = PBXTextBookmark; + name = "SearchResults.m: size"; + rLen = 0; + rLoc = 896; + rType = 0; + vrLen = 766; + vrLoc = 139; + }; + 6EB852C3057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: searchIntegerShort:"; + rLen = 41; + rLoc = 20989; + rType = 0; + vrLen = 1262; + vrLoc = 22105; + }; + 6EB852C4057476DD00E260EA = { + fRef = 6EFB422E052F601400A80003; + isa = PBXTextBookmark; + name = "SearchResults.m: size"; + rLen = 0; + rLoc = 896; + rType = 0; + vrLen = 796; + vrLoc = 109; + }; + 6EB852C5057476DD00E260EA = { + fRef = 6EFB422D052F601400A80003; + isa = PBXTextBookmark; + name = "SearchResults.h: data"; + rLen = 0; + rLoc = 726; + rType = 0; + vrLen = 755; + vrLoc = 0; + }; + 6EB852C6057476DD00E260EA = { + fRef = 6EFB422E052F601400A80003; + isa = PBXTextBookmark; + name = "SearchResults.m: size"; + rLen = 0; + rLoc = 896; + rType = 0; + vrLen = 468; + vrLoc = 574; + }; + 6EB852C7057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 1920"; + rLen = 66; + rLoc = 42927; + rType = 0; + vrLen = 715; + vrLoc = 42398; + }; + 6EB852C8057476DD00E260EA = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: firstSearchString8bit:size:"; + rLen = 0; + rLoc = 1158; + rType = 0; + vrLen = 1815; + vrLoc = 753; + }; + 6EB852C9057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: sendSearchFinished"; + rLen = 0; + rLoc = 30172; + rType = 0; + vrLen = 1028; + vrLoc = 29686; + }; + 6EB852CA057476DD00E260EA = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: "; + rLen = 0; + rLoc = 2334; + rType = 0; + vrLen = 1820; + vrLoc = 753; + }; + 6EB852CB057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 741"; + rLen = 0; + rLoc = 17084; + rType = 0; + vrLen = 1208; + vrLoc = 17032; + }; + 6EB852CC057476DD00E260EA = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 401"; + rLen = 37; + rLoc = 10741; + rType = 0; + vrLen = 975; + vrLoc = 9731; + }; + 6EB852CD057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 305"; + rLen = 0; + rLoc = 6548; + rType = 0; + vrLen = 971; + vrLoc = 5004; + }; + 6EB852CE057476DD00E260EA = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 875"; + rLen = 0; + rLoc = 20603; + rType = 0; + vrLen = 1002; + vrLoc = 19722; + }; + 6EB852CF057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: changeString8bit:size:addresses:count:"; + rLen = 90; + rLoc = 25997; + rType = 0; + vrLen = 1025; + vrLoc = 24939; + }; + 6EB852D0057476DD00E260EA = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: "; + rLen = 0; + rLoc = 2334; + rType = 0; + vrLen = 1906; + vrLoc = 828; + }; + 6EB852D1057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 1056"; + rLen = 8; + rLoc = 25718; + rType = 0; + vrLen = 1174; + vrLoc = 25004; + }; + 6EB852D2057476DD00E260EA = { + fRef = 6EE004DE0560B42800F8A5B1; + isa = PBXTextBookmark; + name = "vm_map.h: vm_write"; + rLen = 23; + rLoc = 2656; + rType = 0; + vrLen = 709; + vrLoc = 2324; + }; + 6EB852D3057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 1151"; + rLen = 0; + rLoc = 28066; + rType = 0; + vrLen = 1102; + vrLoc = 27078; + }; + 6EB852D4057476DD00E260EA = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: "; + rLen = 0; + rLoc = 2334; + rType = 0; + vrLen = 1906; + vrLoc = 828; + }; + 6EB852D5057476DD00E260EA = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 1058"; + rLen = 0; + rLoc = 25787; + rType = 0; + vrLen = 1133; + vrLoc = 25053; + }; + 6EB852D6057476DD00E260EA = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: search"; + rLen = 31; + rLoc = 4141; + rType = 0; + vrLen = 1053; + vrLoc = 456; + }; + 6EB852D7057476DD00E260EA = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1341"; + rLen = 0; + rLoc = 31525; + rType = 0; + vrLen = 952; + vrLoc = 29575; + }; + 6EB852D8057476DD00E260EA = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: changeTimer"; + rLen = 0; + rLoc = 1401; + rType = 0; + vrLen = 1084; + vrLoc = 535; + }; + 6EB852D9057476DD00E260EA = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1341"; + rLen = 0; + rLoc = 31525; + rType = 0; + vrLen = 962; + vrLoc = 29571; + }; + 6EB852DA057476DD00E260EA = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: recurringChangeButton"; + rLen = 21; + rLoc = 2322; + rType = 0; + vrLen = 1364; + vrLoc = 1150; + }; + 6EB852DB057476DD00E260EA = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1348"; + rLen = 0; + rLoc = 31525; + rType = 0; + vrLen = 1092; + vrLoc = 29575; + }; + 6EB852DC057476DD00E260EA = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: recurringChangeButton"; + rLen = 21; + rLoc = 2322; + rType = 0; + vrLen = 1364; + vrLoc = 1150; + }; + 6EB852DD057476DD00E260EA = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1348"; + rLen = 0; + rLoc = 31525; + rType = 0; + vrLen = 1102; + vrLoc = 29575; + }; + 6EB852DE057476DD00E260EA = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: changeSecondsCombo"; + rLen = 18; + rLoc = 2370; + rType = 0; + vrLen = 1364; + vrLoc = 1150; + }; + 6EB852DF057476DD00E260EA = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1350"; + rLen = 0; + rLoc = 31525; + rType = 0; + vrLen = 1113; + vrLoc = 29575; + }; + 6EB852E0057476DD00E260EA = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: changeTimer:"; + rLen = 37; + rLoc = 4261; + rType = 0; + vrLen = 1235; + vrLoc = 3400; + }; + 6EB852E1057476DD00E260EA = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1353"; + rLen = 0; + rLoc = 31525; + rType = 0; + vrLen = 1144; + vrLoc = 29634; + }; + 6EB852E2057476DD00E260EA = { + fRef = 6E0BDF7D0511568D00A80003; + isa = PBXTextBookmark; + name = "cheat_types.h: 35"; + rLen = 9; + rLoc = 881; + rType = 0; + vrLen = 947; + vrLoc = 0; + }; + 6EB852E3057476DD00E260EA = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: search"; + rLen = 15; + rLoc = 24517; + rType = 0; + vrLen = 922; + vrLoc = 26812; + }; + 6EB852E4057476DD00E260EA = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: savedStatusColor"; + rLen = 16; + rLoc = 1193; + rType = 0; + vrLen = 1005; + vrLoc = 456; + }; + 6EB852E6057476DD00E260EA = { + isa = PBXFileReference; + name = NSWorkspace.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSWorkspace.h; + refType = 0; + sourceTree = ""; + }; + 6EB852E7057476DD00E260EA = { + isa = PBXFileReference; + name = NSWorkspace.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSWorkspace.h; + refType = 0; + sourceTree = ""; + }; + 6ED3E46305192E2B00A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 6ED3E46405192E2B00A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 1424}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 6EE0044305609C0600F8A5B1 = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = stdlib.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/stdlib.h; + refType = 0; + sourceTree = ""; + }; + 6EE0044405609C0C00F8A5B1 = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = NSObjCRuntime.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h; + refType = 0; + sourceTree = ""; + }; + 6EE0048A0560B42800F8A5B1 = { + fRef = 6E146B11051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 738; + vrLoc = 0; + }; + 6EE004950560B42800F8A5B1 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: sendProcessListRequest"; + rLen = 0; + rLoc = 3371; + rType = 0; + vrLen = 1359; + vrLoc = 2060; + }; + 6EE004960560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: clearSearch"; + rLen = 0; + rLoc = 14326; + rType = 0; + vrLen = 821; + vrLoc = 11288; + }; + 6EE004970560B42800F8A5B1 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: sendClearSearch"; + rLen = 23; + rLoc = 3347; + rType = 0; + vrLen = 1343; + vrLoc = 2267; + }; + 6EE004980560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 520"; + rLen = 0; + rLoc = 14912; + rType = 0; + vrLen = 912; + vrLoc = 11653; + }; + 6EE004990560B42800F8A5B1 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: sendClearSearch"; + rLen = 23; + rLoc = 3347; + rType = 0; + vrLen = 1369; + vrLoc = 2241; + }; + 6EE0049A0560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: handlePauseTarget"; + rLen = 19; + rLoc = 42264; + rType = 0; + vrLen = 840; + vrLoc = 19457; + }; + 6EE0049B0560B42800F8A5B1 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: handleClearSearch"; + rLen = 25; + rLoc = 2735; + rType = 0; + vrLen = 1370; + vrLoc = 1068; + }; + 6EE0049C0560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 192"; + rLen = 0; + rLoc = 4463; + rType = 0; + vrLen = 815; + vrLoc = 3879; + }; + 6EE0049D0560B42800F8A5B1 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: handleClearSearch"; + rLen = 25; + rLoc = 2735; + rType = 0; + vrLen = 1095; + vrLoc = 505; + }; + 6EE0049E0560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 791"; + rLen = 0; + rLoc = 36328; + rType = 0; + vrLen = 725; + vrLoc = 15367; + }; + 6EE0049F0560B42800F8A5B1 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: handleClearSearch"; + rLen = 25; + rLoc = 2735; + rType = 0; + vrLen = 1095; + vrLoc = 505; + }; + 6EE004A00560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 794"; + rLen = 0; + rLoc = 36390; + rType = 0; + vrLen = 818; + vrLoc = 15367; + }; + 6EE004A10560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1044"; + rLen = 0; + rLoc = 32398; + rType = 0; + vrLen = 554; + vrLoc = 22005; + }; + 6EE004A20560B42800F8A5B1 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: sendClearSearch"; + rLen = 23; + rLoc = 3347; + rType = 0; + vrLen = 1046; + vrLoc = 403; + }; + 6EE004A30560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: respondsToSelector:"; + rLen = 22; + rLoc = 32281; + rType = 0; + vrLen = 594; + vrLoc = 22001; + }; + 6EE004A40560B42800F8A5B1 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: sendClearSearch"; + rLen = 23; + rLoc = 3347; + rType = 0; + vrLen = 1379; + vrLoc = 2267; + }; + 6EE004A50560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: respondsToSelector:"; + rLen = 22; + rLoc = 32281; + rType = 0; + vrLen = 594; + vrLoc = 22001; + }; + 6EE004A60560B42800F8A5B1 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: destroyResults"; + rLen = 0; + rLoc = 4948; + rType = 0; + vrLen = 1296; + vrLoc = 2540; + }; + 6EE004A70560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 965"; + rLen = 0; + rLoc = 29171; + rType = 0; + vrLen = 846; + vrLoc = 20653; + }; + 6EE004A80560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 792"; + rLen = 0; + rLoc = 36390; + rType = 0; + vrLen = 791; + vrLoc = 15367; + }; + 6EE004A90560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: receivedVariableList:"; + rLen = 31; + rLoc = 19213; + rType = 0; + vrLen = 978; + vrLoc = 15523; + }; + 6EE004AA0560B42800F8A5B1 = { + fRef = 6E0D40AD05223CCE00A80003; + isa = PBXTextBookmark; + name = "NetTrafficController.m: 42"; + rLen = 0; + rLoc = 822; + rType = 0; + vrLen = 987; + vrLoc = 1; + }; + 6EE004AB0560B42800F8A5B1 = { + fRef = 6E0D40AC05223CCE00A80003; + isa = PBXTextBookmark; + name = "NetTrafficController.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1017; + vrLoc = 0; + }; + 6EE004AC0560B42800F8A5B1 = { + fRef = 6E0D40AD05223CCE00A80003; + isa = PBXTextBookmark; + name = "NetTrafficController.m: 42"; + rLen = 0; + rLoc = 822; + rType = 0; + vrLen = 758; + vrLoc = 607; + }; + 6EE004AD0560B42800F8A5B1 = { + fRef = 6EE004E10560B42800F8A5B1; + isa = PBXTextBookmark; + name = "(null): 463"; + rLen = 67; + rLoc = 11649; + rType = 0; + vrLen = 1297; + vrLoc = 10996; + }; + 6EE004AE0560B42800F8A5B1 = { + fRef = 6E0D40AD05223CCE00A80003; + isa = PBXTextBookmark; + name = "NetTrafficController.m: 123"; + rLen = 0; + rLoc = 2572; + rType = 0; + vrLen = 1205; + vrLoc = 1832; + }; + 6EE004AF0560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 726"; + rLen = 0; + rLoc = 19660; + rType = 0; + vrLen = 911; + vrLoc = 16139; + }; + 6EE004B00560B42800F8A5B1 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: destroyResults"; + rLen = 0; + rLoc = 4948; + rType = 0; + vrLen = 1255; + vrLoc = 805; + }; + 6EE004B10560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 1032"; + rLen = 0; + rLoc = 30896; + rType = 0; + vrLen = 661; + vrLoc = 21842; + }; + 6EE004B20560B42800F8A5B1 = { + fRef = 6E0D40B4052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 921; + vrLoc = 0; + }; + 6EE004B30560B42800F8A5B1 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: updateSearchButton"; + rLen = 26; + rLoc = 2515; + rType = 0; + vrLen = 1265; + vrLoc = 1575; + }; + 6EE004B40560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 99"; + rLen = 0; + rLoc = 3949; + rType = 0; + vrLen = 954; + vrLoc = 1505; + }; + 6EE004B50560B42800F8A5B1 = { + fRef = 6E0D40AD05223CCE00A80003; + isa = PBXTextBookmark; + name = "NetTrafficController.m: 123"; + rLen = 0; + rLoc = 2572; + rType = 0; + vrLen = 1345; + vrLoc = 2257; + }; + 6EE004B60560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 203"; + rLen = 0; + rLoc = 6769; + rType = 0; + vrLen = 1303; + vrLoc = 3702; + }; + 6EE004B70560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 792"; + rLen = 0; + rLoc = 36390; + rType = 0; + vrLen = 791; + vrLoc = 15367; + }; + 6EE004B80560B42800F8A5B1 = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: TCMaxSearchResults"; + rLen = 18; + rLoc = 625; + rType = 0; + vrLen = 1035; + vrLoc = 0; + }; + 6EE004B90560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 210"; + rLen = 0; + rLoc = 6866; + rType = 0; + vrLen = 1386; + vrLoc = 3702; + }; + 6EE004BA0560B42800F8A5B1 = { + fRef = 6E0BDF7D0511568D00A80003; + isa = PBXTextBookmark; + name = "cheat_types.h: 17"; + rLen = 0; + rLoc = 388; + rType = 0; + vrLen = 947; + vrLoc = 0; + }; + 6EE004BB0560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 852"; + rLen = 0; + rLoc = 37456; + rType = 0; + vrLen = 771; + vrLoc = 16554; + }; + 6EE004BC0560B42800F8A5B1 = { + fRef = 6E0BDF7D0511568D00A80003; + isa = PBXTextBookmark; + name = "cheat_types.h: 18"; + rLen = 0; + rLoc = 430; + rType = 0; + vrLen = 947; + vrLoc = 0; + }; + 6EE004BD0560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 189"; + rLen = 0; + rLoc = 5814; + rType = 0; + vrLen = 1386; + vrLoc = 3702; + }; + 6EE004BE0560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 941"; + rLen = 0; + rLoc = 38762; + rType = 0; + vrLen = 751; + vrLoc = 17856; + }; + 6EE004BF0560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 846"; + rLen = 0; + rLoc = 28976; + rType = 0; + vrLen = 739; + vrLoc = 18041; + }; + 6EE004C00560B42800F8A5B1 = { + fRef = 6E0D40B4052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 921; + vrLoc = 0; + }; + 6EE004C10560B42800F8A5B1 = { + fRef = 6E0D40B5052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1062; + vrLoc = 0; + }; + 6EE004C20560B42800F8A5B1 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: handleClearSearch"; + rLen = 25; + rLoc = 2735; + rType = 0; + vrLen = 1432; + vrLoc = 699; + }; + 6EE004C30560B42800F8A5B1 = { + fRef = 6E146B11051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 738; + vrLoc = 0; + }; + 6EE004C40560B42800F8A5B1 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: decimalSizeMenu"; + rLen = 15; + rLoc = 2177; + rType = 0; + vrLen = 1278; + vrLoc = 867; + }; + 6EE004C50560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 841"; + rLen = 0; + rLoc = 28906; + rType = 0; + vrLen = 869; + vrLoc = 17913; + }; + 6EE004C60560B42800F8A5B1 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: firstSearchString8bit:size:"; + rLen = 574; + rLoc = 1097; + rType = 0; + vrLen = 1433; + vrLoc = 653; + }; + 6EE004C70560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 370"; + rLen = 0; + rLoc = 21033; + rType = 0; + vrLen = 1234; + vrLoc = 7374; + }; + 6EE004C80560B42800F8A5B1 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: firstSearchString8bit:size:"; + rLen = 574; + rLoc = 1097; + rType = 0; + vrLen = 1034; + vrLoc = 439; + }; + 6EE004C90560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 379"; + rLen = 0; + rLoc = 21224; + rType = 0; + vrLen = 728; + vrLoc = 7246; + }; + 6EE004CA0560B42800F8A5B1 = { + fRef = 6EFB422D052F601400A80003; + isa = PBXTextBookmark; + name = "SearchResults.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 736; + vrLoc = 0; + }; + 6EE004CB0560B42800F8A5B1 = { + fRef = 6EFB422E052F601400A80003; + isa = PBXTextBookmark; + name = "SearchResults.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 869; + vrLoc = 0; + }; + 6EE004CC0560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 841"; + rLen = 0; + rLoc = 28906; + rType = 0; + vrLen = 868; + vrLoc = 17913; + }; + 6EE004CD0560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 381"; + rLen = 0; + rLoc = 21340; + rType = 0; + vrLen = 910; + vrLoc = 7375; + }; + 6EE004CE0560B42800F8A5B1 = { + fRef = 6EFB422D052F601400A80003; + isa = PBXTextBookmark; + name = "SearchResults.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 736; + vrLoc = 0; + }; + 6EE004CF0560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 408"; + rLen = 0; + rLoc = 22242; + rType = 0; + vrLen = 1251; + vrLoc = 7589; + }; + 6EE004D00560B42800F8A5B1 = { + fRef = 6EE0044305609C0600F8A5B1; + isa = PBXTextBookmark; + name = "stdlib.h: exit"; + rLen = 19; + rLoc = 3986; + rType = 0; + vrLen = 1220; + vrLoc = 3476; + }; + 6EE004D10560B42800F8A5B1 = { + fRef = 6EE0044405609C0C00F8A5B1; + isa = PBXTextBookmark; + name = "NSObjCRuntime.h: NSLog"; + rLen = 53; + rLoc = 1627; + rType = 0; + vrLen = 1191; + vrLoc = 899; + }; + 6EE004D20560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 415"; + rLen = 51; + rLoc = 22424; + rType = 0; + vrLen = 1251; + vrLoc = 7589; + }; + 6EE004D30560B42800F8A5B1 = { + fRef = 6EE0044305609C0600F8A5B1; + isa = PBXTextBookmark; + name = "stdlib.h: exit"; + rLen = 19; + rLoc = 3986; + rType = 0; + vrLen = 1220; + vrLoc = 3476; + }; + 6EE004D40560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 300"; + rLen = 0; + rLoc = 12922; + rType = 0; + vrLen = 1270; + vrLoc = 5296; + }; + 6EE004D50560B42800F8A5B1 = { + fRef = 6EE004E00560B42800F8A5B1; + isa = PBXTextBookmark; + name = "(null): 178"; + rLen = 32; + rLoc = 3105; + rType = 0; + vrLen = 677; + vrLoc = 2778; + }; + 6EE004D60560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 392"; + rLen = 0; + rLoc = 21739; + rType = 0; + vrLen = 647; + vrLoc = 6893; + }; + 6EE004D70560B42800F8A5B1 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: firstSearchString8bit:size:"; + rLen = 574; + rLoc = 1097; + rType = 0; + vrLen = 1034; + vrLoc = 439; + }; + 6EE004D80560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: firstSearchIntegerLong:"; + rLen = 0; + rLoc = 12968; + rType = 0; + vrLen = 668; + vrLoc = 6893; + }; + 6EE004D90560B42800F8A5B1 = { + fRef = 6EE004E20560B42800F8A5B1; + isa = PBXTextBookmark; + name = "(null): 112"; + rLen = 0; + rLoc = 3149; + rType = 0; + vrLen = 1845; + vrLoc = 6447; + }; + 6EE004DA0560B42800F8A5B1 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 402"; + rLen = 0; + rLoc = 21947; + rType = 0; + vrLen = 1230; + vrLoc = 7747; + }; + 6EE004DB0560B42800F8A5B1 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: tableView:objectValueForTableColumn:row:"; + rLen = 0; + rLoc = 38759; + rType = 0; + vrLen = 1376; + vrLoc = 27214; + }; + 6EE004DD0560B42800F8A5B1 = { + expectedFileType = sourcecode.c.objc; + isa = PBXFileReference; + name = AppController.m; + path = "/Users/chaz/Projects/The Cheat 1.0b1/AppController.m"; + refType = 0; + sourceTree = ""; + }; + 6EE004DE0560B42800F8A5B1 = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = vm_map.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_map.h; + refType = 0; + sourceTree = ""; + }; + 6EE004DF0560B42800F8A5B1 = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = vm_region.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_region.h; + refType = 0; + sourceTree = ""; + }; + 6EE004E00560B42800F8A5B1 = { + isa = PBXFileReference; + name = vm_map.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_map.h; + refType = 0; + sourceTree = ""; + }; + 6EE004E10560B42800F8A5B1 = { + isa = PBXFileReference; + name = AppController.m; + path = "/Users/chaz/Projects/The Cheat 1.0b1/AppController.m"; + refType = 0; + sourceTree = ""; + }; + 6EE004E20560B42800F8A5B1 = { + isa = PBXFileReference; + name = vm_region.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_region.h; + refType = 0; + sourceTree = ""; + }; + 6EE070E0055CA8E200598538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: addressSelected"; + rLen = 0; + rLoc = 1401; + rType = 0; + vrLen = 1191; + vrLoc = 537; + }; + 6EE070E2055CA8E200598538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: updateChangeButton"; + rLen = 26; + rLoc = 2597; + rType = 0; + vrLen = 1333; + vrLoc = 983; + }; + 6EE070E4055CA8E200598538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: updateChangePulldown"; + rLen = 0; + rLoc = 2623; + rType = 0; + vrLen = 1335; + vrLoc = 983; + }; + 6EE070E6055CA8E200598538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: updateChangePulldown"; + rLen = 0; + rLoc = 2623; + rType = 0; + vrLen = 1335; + vrLoc = 983; + }; + 6EE070E8055CA8E200598538 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: handlePauseTarget"; + rLen = 19; + rLoc = 42264; + rType = 0; + vrLen = 840; + vrLoc = 19457; + }; + 6EE070EA055CA8E200598538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: setStatusConnected"; + rLen = 18; + rLoc = 2665; + rType = 0; + vrLen = 1256; + vrLoc = 1614; + }; + 6EE070EC055CA8E200598538 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: clearSearch"; + rLen = 0; + rLoc = 3289; + rType = 0; + vrLen = 1359; + vrLoc = 2060; + }; + 6EF0870C0575382B00B81D60 = { + fileReference = 6E4E098E050BB21400A80003; + isa = PBXFileBreakpoint; + lineNumber = 348; + state = 1; + }; + 6EF08713057544F900B81D60 = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 57"; + rLen = 0; + rLoc = 1431; + rType = 0; + vrLen = 1087; + vrLoc = 1243; + }; + 6EF8EB660559F823008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: statusTextTimer:"; + rLen = 0; + rLoc = 3150; + rType = 0; + vrLen = 907; + vrLoc = 1551; + }; + 6EF8EB680559F823008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: updatePauseButton"; + rLen = 53; + rLoc = 2543; + rType = 0; + vrLen = 914; + vrLoc = 1467; + }; + 6EF8EB6A0559F823008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: updatePauseButton"; + rLen = 53; + rLoc = 2543; + rType = 0; + vrLen = 730; + vrLoc = 535; + }; + 6EF8EB6C0559F823008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: updatePauseButton"; + rLen = 53; + rLoc = 2543; + rType = 0; + vrLen = 642; + vrLoc = 429; + }; + 6EF8EB6E0559F823008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: updatePauseButton"; + rLen = 53; + rLoc = 2543; + rType = 0; + vrLen = 1161; + vrLoc = 306; + }; + 6EF8EB700559F823008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: updatePauseButton"; + rLen = 53; + rLoc = 2543; + rType = 0; + vrLen = 1161; + vrLoc = 306; + }; + 6EF8EBD9055A1730008BBE46 = { + activeExec = 0; + executables = ( + 6EF8EC0A055A1730008BBE46, + ); + }; + 6EF8EC08055A1730008BBE46 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 6EF8EC0A055A1730008BBE46 = { + activeArgIndex = 2147483647; + activeArgIndices = ( + ); + argumentStrings = ( + ); + configStateDict = { + }; + debuggerPlugin = GDBDebugging; + dylibVariantSuffix = ""; + enableDebugStr = 1; + environmentEntries = ( + ); + isa = PBXExecutable; + name = "The Cheat (Upgraded)"; + shlibInfoDictList = ( + ); + sourceDirectories = ( + ); + }; + 6EF8EC0B055A17A1008BBE46 = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = wctype.h; + path = /usr/include/wctype.h; + refType = 0; + sourceTree = ""; + }; + 6EF8EC23055A1C39008BBE46 = { + fRef = 6E0D40CE0522820D00A80003; + isa = PBXTextBookmark; + name = "ClientDelegate.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 530; + vrLoc = 0; + }; + 6EF8EC26055A1C39008BBE46 = { + fRef = 6EF8EC0B055A17A1008BBE46; + isa = PBXTextBookmark; + name = "wctype.h: 130"; + rLen = 27; + rLoc = 4078; + rType = 0; + vrLen = 1372; + vrLoc = 3581; + }; + 6EF8EC27055A1C39008BBE46 = { + fRef = 6EF8EC7C055A1C39008BBE46; + isa = PBXTextBookmark; + name = "(null): 9"; + rLen = 0; + rLoc = 186; + rType = 0; + vrLen = 186; + vrLoc = 0; + }; + 6EF8EC28055A1C39008BBE46 = { + fRef = 32DBCF750370BD2300C91783; + isa = PBXTextBookmark; + name = "The_Cheat_Prefix.pch: 14"; + rLen = 0; + rLoc = 238; + rType = 0; + vrLen = 238; + vrLoc = 0; + }; + 6EF8EC29055A1C39008BBE46 = { + fRef = 6EF8EC08055A1730008BBE46; + isa = PBXTextBookmark; + name = "Info-The_Cheat__Upgraded_.plist: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1223; + vrLoc = 0; + }; + 6EF8EC2D055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: updatePauseButton"; + rLen = 53; + rLoc = 2543; + rType = 0; + vrLen = 1161; + vrLoc = 306; + }; + 6EF8EC2F055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: status"; + rLen = 0; + rLoc = 596; + rType = 0; + vrLen = 1173; + vrLoc = 306; + }; + 6EF8EC31055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: status"; + rLen = 0; + rLoc = 596; + rType = 0; + vrLen = 1019; + vrLoc = 1400; + }; + 6EF8EC33055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: setStatusText:duration:"; + rLen = 0; + rLoc = 2958; + rType = 0; + vrLen = 1017; + vrLoc = 1400; + }; + 6EF8EC35055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: initialInterfaceSetup"; + rLen = 0; + rLoc = 2513; + rType = 0; + vrLen = 1037; + vrLoc = 1437; + }; + 6EF8EC37055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: initialInterfaceSetup"; + rLen = 0; + rLoc = 2513; + rType = 0; + vrLen = 1020; + vrLoc = 1860; + }; + 6EF8EC39055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: receivedPauseFinished:"; + rLen = 0; + rLoc = 4298; + rType = 0; + vrLen = 992; + vrLoc = 2614; + }; + 6EF8EC3B055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: setStatusToLast"; + rLen = 23; + rLoc = 2890; + rType = 0; + vrLen = 1006; + vrLoc = 1899; + }; + 6EF8EC3D055A1C39008BBE46 = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 37"; + rLen = 0; + rLoc = 1872; + rType = 0; + vrLen = 1279; + vrLoc = 455; + }; + 6EF8EC3F055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: setStatusToLast"; + rLen = 23; + rLoc = 2890; + rType = 0; + vrLen = 798; + vrLoc = 479; + }; + 6EF8EC40055A1C39008BBE46 = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 37"; + rLen = 0; + rLoc = 1872; + rType = 0; + vrLen = 1278; + vrLoc = 455; + }; + 6EF8EC42055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: setStatusToLast"; + rLen = 23; + rLoc = 2890; + rType = 0; + vrLen = 1072; + vrLoc = 914; + }; + 6EF8EC44055A1C39008BBE46 = { + fRef = 6ED3E46305192E2B00A80003; + isa = PBXTextBookmark; + name = "MenuExtras.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 579; + vrLoc = 0; + }; + 6EF8EC45055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: setStatusToLast"; + rLen = 23; + rLoc = 2890; + rType = 0; + vrLen = 1072; + vrLoc = 914; + }; + 6EF8EC47055A1C39008BBE46 = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: TCGlobalBroadcastName"; + rLen = 21; + rLoc = 931; + rType = 0; + vrLen = 1035; + vrLoc = 0; + }; + 6EF8EC49055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: serverMenuDisconnect:"; + rLen = 43; + rLoc = 4518; + rType = 0; + vrLen = 1095; + vrLoc = 2391; + }; + 6EF8EC4B055A1C39008BBE46 = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: TCGlobalBroadcastName"; + rLen = 21; + rLoc = 931; + rType = 0; + vrLen = 1035; + vrLoc = 0; + }; + 6EF8EC4D055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: redoMenu:"; + rLen = 0; + rLoc = 4714; + rType = 0; + vrLen = 1008; + vrLoc = 2664; + }; + 6EF8EC4F055A1C39008BBE46 = { + fRef = 6E146B12051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.m: 181"; + rLen = 0; + rLoc = 4063; + rType = 0; + vrLen = 609; + vrLoc = 3767; + }; + 6EF8EC51055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: redoMenu:"; + rLen = 0; + rLoc = 4714; + rType = 0; + vrLen = 1008; + vrLoc = 2664; + }; + 6EF8EC53055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: targetPaused"; + rLen = 0; + rLoc = 901; + rType = 0; + vrLen = 874; + vrLoc = 479; + }; + 6EF8EC55055A1C39008BBE46 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: sendUndoRedoStatus"; + rLen = 26; + rLoc = 2545; + rType = 0; + vrLen = 1369; + vrLoc = 1069; + }; + 6EF8EC56055A1C39008BBE46 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 607"; + rLen = 0; + rLoc = 33504; + rType = 0; + vrLen = 823; + vrLoc = 10572; + }; + 6EF8EC58055A1C39008BBE46 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 576"; + rLen = 0; + rLoc = 32077; + rType = 0; + vrLen = 907; + vrLoc = 11276; + }; + 6EF8EC59055A1C39008BBE46 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: sendUndoRedoStatus"; + rLen = 26; + rLoc = 2545; + rType = 0; + vrLen = 923; + vrLoc = 360; + }; + 6EF8EC5A055A1C39008BBE46 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 577"; + rLen = 0; + rLoc = 32077; + rType = 0; + vrLen = 984; + vrLoc = 11275; + }; + 6EF8EC5B055A1C39008BBE46 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: sendUndoRedoStatus"; + rLen = 26; + rLoc = 2545; + rType = 0; + vrLen = 923; + vrLoc = 360; + }; + 6EF8EC5C055A1C39008BBE46 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 638"; + rLen = 0; + rLoc = 33504; + rType = 0; + vrLen = 1031; + vrLoc = 11912; + }; + 6EF8EC5D055A1C39008BBE46 = { + fRef = 6E146B12051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.m: 181"; + rLen = 0; + rLoc = 4063; + rType = 0; + vrLen = 725; + vrLoc = 3706; + }; + 6EF8EC5E055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: receivedUndoRedoStatus:"; + rLen = 45; + rLoc = 3904; + rType = 0; + vrLen = 1322; + vrLoc = 1884; + }; + 6EF8EC60055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: undoCount"; + rLen = 0; + rLoc = 1401; + rType = 0; + vrLen = 840; + vrLoc = 306; + }; + 6EF8EC62055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: undoCount"; + rLen = 0; + rLoc = 1401; + rType = 0; + vrLen = 840; + vrLoc = 306; + }; + 6EF8EC64055A1C39008BBE46 = { + fRef = 6E146B12051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.m: 191"; + rLen = 0; + rLoc = 4379; + rType = 0; + vrLen = 730; + vrLoc = 3706; + }; + 6EF8EC65055A1C39008BBE46 = { + fRef = 6E146B11051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 738; + vrLoc = 0; + }; + 6EF8EC67055A1C39008BBE46 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 969"; + rLen = 0; + rLoc = 39337; + rType = 0; + vrLen = 866; + vrLoc = 18313; + }; + 6EF8EC69055A1C39008BBE46 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 1044"; + rLen = 0; + rLoc = 42679; + rType = 0; + vrLen = 820; + vrLoc = 19368; + }; + 6EF8EC6A055A1C39008BBE46 = { + fRef = 6E146B12051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.m: 191"; + rLen = 0; + rLoc = 4379; + rType = 0; + vrLen = 747; + vrLoc = 3746; + }; + 6EF8EC6B055A1C39008BBE46 = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: receivedUndoFinished"; + rLen = 59; + rLoc = 3844; + rType = 0; + vrLen = 1419; + vrLoc = 2087; + }; + 6EF8EC6D055A1C39008BBE46 = { + fRef = 6E146B12051FA42C00A80003; + isa = PBXTextBookmark; + name = "CheatClient.m: 194"; + rLen = 0; + rLoc = 4293; + rType = 0; + vrLen = 751; + vrLoc = 3746; + }; + 6EF8EC6E055A1C39008BBE46 = { + fRef = 6E0D40CE0522820D00A80003; + isa = PBXTextBookmark; + name = "ClientDelegate.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 530; + vrLoc = 0; + }; + 6EF8EC6F055A1C39008BBE46 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.h: sendUndoRedoStatus"; + rLen = 26; + rLoc = 2545; + rType = 0; + vrLen = 923; + vrLoc = 360; + }; + 6EF8EC70055A1C39008BBE46 = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 1067"; + rLen = 0; + rLoc = 43104; + rType = 0; + vrLen = 770; + vrLoc = 20315; + }; + 6EF8EC72055A1C39008BBE46 = { + fRef = 6EF8EC08055A1730008BBE46; + isa = PBXTextBookmark; + name = "Info-The_Cheat__Upgraded_.plist: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1223; + vrLoc = 0; + }; + 6EF8EC73055A1C39008BBE46 = { + fRef = 32DBCF750370BD2300C91783; + isa = PBXTextBookmark; + name = "The_Cheat_Prefix.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 150; + vrLoc = 0; + }; + 6EF8EC74055A1C39008BBE46 = { + fRef = 6EF8EC0B055A17A1008BBE46; + isa = PBXTextBookmark; + name = "wctype.h: 130"; + rLen = 27; + rLoc = 4078; + rType = 0; + vrLen = 1372; + vrLoc = 3581; + }; + 6EF8EC75055A1C39008BBE46 = { + fRef = 32DBCF750370BD2300C91783; + isa = PBXTextBookmark; + name = "The_Cheat_Prefix.pch: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 150; + vrLoc = 0; + }; + 6EF8EC76055A1C39008BBE46 = { + fRef = 6EF8EC7B055A1C39008BBE46; + isa = PBXTextBookmark; + name = "(null): 9"; + rLen = 0; + rLoc = 186; + rType = 0; + vrLen = 186; + vrLoc = 0; + }; + 6EF8EC77055A1C39008BBE46 = { + fRef = 32DBCF750370BD2300C91783; + isa = PBXTextBookmark; + name = "The_Cheat_Prefix.pch: 14"; + rLen = 0; + rLoc = 238; + rType = 0; + vrLen = 238; + vrLoc = 0; + }; + 6EF8EC78055A1C39008BBE46 = { + fRef = 6EF8EC08055A1730008BBE46; + isa = PBXTextBookmark; + name = "Info-The_Cheat__Upgraded_.plist: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1223; + vrLoc = 0; + }; + 6EF8EC7B055A1C39008BBE46 = { + isa = PBXFileReference; + name = Niobium_Prefix.pch; + path = /Users/chaz/Projects/Niobium/Niobium_Prefix.pch; + refType = 0; + sourceTree = ""; + }; + 6EF8EC7C055A1C39008BBE46 = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = Niobium_Prefix.pch; + path = /Users/chaz/Projects/Niobium/Niobium_Prefix.pch; + refType = 0; + sourceTree = ""; + }; + 6EFB422D052F601400A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavSelRange = "{726, 0}"; + sepNavVisRect = "{{0, 0}, {1034, 710}}"; + }; + }; + 6EFB422E052F601400A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 1088}}"; + sepNavSelRange = "{896, 0}"; + sepNavVisRect = "{{0, 330}, {1034, 710}}"; + }; }; } diff --git a/The Cheat.pbproj/project.pbxproj b/The Cheat.pbproj/project.pbxproj index bd26a92..a2ade71 100644 --- a/The Cheat.pbproj/project.pbxproj +++ b/The Cheat.pbproj/project.pbxproj @@ -5,42 +5,44 @@ }; objectVersion = 39; objects = { - 080E96DCFE201CFB7F000001 = { - fileRef = 29B97318FDCFA39411CA2CEA; + 080E96D9FE201CDB7F000001 = { + fileRef = 2A37F4B9FDCFA73011CA2CEA; isa = PBXBuildFile; settings = { }; }; - 080E96DDFE201D6D7F000001 = { - children = ( - 6E31BC0E04EB1BEF00A80003, - 6E31BC0F04EB1BEF00A80003, - ); - isa = PBXGroup; - name = Classes; - refType = 4; - sourceTree = ""; + 080E96DAFE201CDB7F000001 = { + fileRef = 2A37F4B6FDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + }; }; - 089C165CFE840E0CC02AAC07 = { + 080E96DBFE201CDB7F000001 = { + fileRef = 2A37F4B4FDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + }; + }; + 089C165FFE840EACC02AAC07 = { children = ( - 089C165DFE840E0CC02AAC07, + 089C1660FE840EACC02AAC07, ); isa = PBXVariantGroup; name = InfoPlist.strings; refType = 4; sourceTree = ""; }; - 089C165DFE840E0CC02AAC07 = { + 089C1660FE840EACC02AAC07 = { + expectedFileType = text.plist.strings; fileEncoding = 10; isa = PBXFileReference; - lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; refType = 4; sourceTree = ""; }; - 089C165EFE840E0CC02AAC07 = { - fileRef = 089C165CFE840E0CC02AAC07; + 089C1661FE840EACC02AAC07 = { + fileRef = 089C165FFE840EACC02AAC07; isa = PBXBuildFile; settings = { }; @@ -55,36 +57,36 @@ //102 //103 //104 - 1058C7A0FEA54F0111CA2CBB = { + 1058C7A6FEA54F5311CA2CBB = { children = ( - 1058C7A1FEA54F0111CA2CBB, + 1058C7A7FEA54F5311CA2CBB, ); isa = PBXGroup; name = "Linked Frameworks"; refType = 4; sourceTree = ""; }; - 1058C7A1FEA54F0111CA2CBB = { + 1058C7A7FEA54F5311CA2CBB = { + expectedFileType = wrapper.framework; fallbackIsa = PBXFileReference; isa = PBXFrameworkReference; - lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; refType = 0; sourceTree = ""; }; - 1058C7A2FEA54F0111CA2CBB = { + 1058C7A8FEA54F5311CA2CBB = { children = ( - 29B97325FDCFA39411CA2CEA, - 29B97324FDCFA39411CA2CEA, + 2A37F4C5FDCFA73011CA2CEA, + 2A37F4C4FDCFA73011CA2CEA, ); isa = PBXGroup; name = "Other Frameworks"; refType = 4; sourceTree = ""; }; - 1058C7A3FEA54F0111CA2CBB = { - fileRef = 1058C7A1FEA54F0111CA2CBB; + 1058C7A9FEA54F5311CA2CBB = { + fileRef = 1058C7A7FEA54F5311CA2CBB; isa = PBXBuildFile; settings = { }; @@ -99,8 +101,8 @@ //172 //173 //174 - 17587328FF379C6511CA2CBB = { - explicitFileType = wrapper.application; + 1758732AFF379DA111CA2CBB = { + expectedFileType = wrapper.application; fallbackIsa = PBXFileReference; isa = PBXApplicationReference; path = "The Cheat.app"; @@ -117,9 +119,10 @@ //192 //193 //194 - 19C28FACFE9D520D11CA2CBB = { + 19C28FB0FE9D524F11CA2CBB = { children = ( - 17587328FF379C6511CA2CBB, + 1758732AFF379DA111CA2CBB, + 6EF8EC09055A1730008BBE46, ); isa = PBXGroup; name = Products; @@ -131,33 +134,41 @@ //192 //193 //194 -//290 -//291 -//292 -//293 -//294 - 29B97313FDCFA39411CA2CEA = { +//2A0 +//2A1 +//2A2 +//2A3 +//2A4 + 2A37F4A9FDCFA73011CA2CEA = { buildSettings = { + MACOSX_DEPLOYMENT_TARGET = 10.2; + SDKROOT = /Developer/SDKs/MacOSX10.2.7.sdk; }; buildStyles = ( - 4A9504CCFFE6A4B311CA0CBA, - 4A9504CDFFE6A4B311CA0CBA, + 4A9504D0FFE6A4CB11CA0CBA, + 4A9504D1FFE6A4CB11CA0CBA, ); hasScannedForEncodings = 1; isa = PBXProject; - mainGroup = 29B97314FDCFA39411CA2CEA; + mainGroup = 2A37F4AAFDCFA73011CA2CEA; projectDirPath = ""; targets = ( - 29B97326FDCFA39411CA2CEA, + 2A37F4C6FDCFA73011CA2CEA, + 6EF8EBD9055A1730008BBE46, ); }; - 29B97314FDCFA39411CA2CEA = { + 2A37F4AAFDCFA73011CA2CEA = { children = ( - 080E96DDFE201D6D7F000001, - 29B97315FDCFA39411CA2CEA, - 29B97317FDCFA39411CA2CEA, - 29B97323FDCFA39411CA2CEA, - 19C28FACFE9D520D11CA2CBB, + 6E0D40B3052243B800A80003, + 2A37F4ABFDCFA73011CA2CEA, + 6EAF23070527D7DB00A80003, + 6E0D40BF05224F4B00A80003, + 6ED3E46705192F0C00A80003, + 2A37F4AFFDCFA73011CA2CEA, + 2A37F4B8FDCFA73011CA2CEA, + 2A37F4C3FDCFA73011CA2CEA, + 19C28FB0FE9D524F11CA2CBB, + 6EF8EC08055A1730008BBE46, ); isa = PBXGroup; name = "The Cheat"; @@ -165,10 +176,48 @@ refType = 4; sourceTree = ""; }; - 29B97315FDCFA39411CA2CEA = { + 2A37F4ABFDCFA73011CA2CEA = { + children = ( + 6E0D40B80522449500A80003, + 6E0D40B90522449500A80003, + 6E4E098F050BB21400A80003, + 6E4E098E050BB21400A80003, + 6E146B11051FA42C00A80003, + 6E146B12051FA42C00A80003, + ); + isa = PBXGroup; + name = "Network Classes"; + path = ""; + refType = 4; + sourceTree = ""; + }; + 2A37F4ACFDCFA73011CA2CEA = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 30; + isa = PBXFileReference; + path = MyDocument.m; + refType = 4; + sourceTree = ""; + }; + 2A37F4AEFDCFA73011CA2CEA = { + expectedFileType = sourcecode.c.h; + fileEncoding = 30; + isa = PBXFileReference; + path = MyDocument.h; + refType = 4; + sourceTree = ""; + }; + 2A37F4AFFDCFA73011CA2CEA = { children = ( - 32CA4F630368D1EE00C91783, - 29B97316FDCFA39411CA2CEA, + 32DBCF750370BD2300C91783, + 2A37F4B0FDCFA73011CA2CEA, + 6E51A986057330B900506538, + 6E51A987057330B900506538, + 6E3F0D01050D4ACC00A80003, + 6E3F0D02050D4ACC00A80003, + 6E71F41B051BCCC600A80003, + 6E71F41C051BCCC600A80003, + 6E0BDF7D0511568D00A80003, ); isa = PBXGroup; name = "Other Sources"; @@ -176,28 +225,35 @@ refType = 4; sourceTree = ""; }; - 29B97316FDCFA39411CA2CEA = { + 2A37F4B0FDCFA73011CA2CEA = { + expectedFileType = sourcecode.c.objc; fileEncoding = 30; isa = PBXFileReference; - lastKnownFileType = sourcecode.c.objc; path = main.m; refType = 4; sourceTree = ""; }; - 29B97317FDCFA39411CA2CEA = { + 2A37F4B4FDCFA73011CA2CEA = { children = ( - 29B97318FDCFA39411CA2CEA, - 089C165CFE840E0CC02AAC07, + 2A37F4B5FDCFA73011CA2CEA, ); - isa = PBXGroup; - name = Resources; + isa = PBXVariantGroup; + name = MyDocument.nib; path = ""; refType = 4; sourceTree = ""; }; - 29B97318FDCFA39411CA2CEA = { + 2A37F4B5FDCFA73011CA2CEA = { + expectedFileType = wrapper.nib; + isa = PBXFileReference; + name = English; + path = English.lproj/MyDocument.nib; + refType = 4; + sourceTree = ""; + }; + 2A37F4B6FDCFA73011CA2CEA = { children = ( - 29B97319FDCFA39411CA2CEA, + 2A37F4B7FDCFA73011CA2CEA, ); isa = PBXVariantGroup; name = MainMenu.nib; @@ -205,18 +261,54 @@ refType = 4; sourceTree = ""; }; - 29B97319FDCFA39411CA2CEA = { + 2A37F4B7FDCFA73011CA2CEA = { + expectedFileType = wrapper.nib; isa = PBXFileReference; - lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; refType = 4; sourceTree = ""; }; - 29B97323FDCFA39411CA2CEA = { + 2A37F4B8FDCFA73011CA2CEA = { + children = ( + 6ED02FE7055758FF007B5502, + 2A37F4B9FDCFA73011CA2CEA, + 2A37F4B6FDCFA73011CA2CEA, + 6E51A97605732B9000506538, + 6E0D40BC052245E700A80003, + 6E0D40B005223D4E00A80003, + 2A37F4B4FDCFA73011CA2CEA, + 089C165FFE840EACC02AAC07, + 6E3309E10575BA9D0093550E, + ); + isa = PBXGroup; + name = Resources; + path = ""; + refType = 4; + sourceTree = ""; + }; + 2A37F4B9FDCFA73011CA2CEA = { + children = ( + 2A37F4BAFDCFA73011CA2CEA, + ); + isa = PBXVariantGroup; + name = Credits.rtf; + path = ""; + refType = 4; + sourceTree = ""; + }; + 2A37F4BAFDCFA73011CA2CEA = { + expectedFileType = text.rtf; + isa = PBXFileReference; + name = English; + path = English.lproj/Credits.rtf; + refType = 4; + sourceTree = ""; + }; + 2A37F4C3FDCFA73011CA2CEA = { children = ( - 1058C7A0FEA54F0111CA2CBB, - 1058C7A2FEA54F0111CA2CBB, + 1058C7A6FEA54F5311CA2CBB, + 1058C7A8FEA54F5311CA2CBB, ); isa = PBXGroup; name = Frameworks; @@ -224,36 +316,39 @@ refType = 4; sourceTree = ""; }; - 29B97324FDCFA39411CA2CEA = { + 2A37F4C4FDCFA73011CA2CEA = { + expectedFileType = wrapper.framework; fallbackIsa = PBXFileReference; isa = PBXFrameworkReference; - lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; refType = 0; sourceTree = ""; }; - 29B97325FDCFA39411CA2CEA = { + 2A37F4C5FDCFA73011CA2CEA = { + expectedFileType = wrapper.framework; fallbackIsa = PBXFileReference; isa = PBXFrameworkReference; - lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; refType = 0; sourceTree = ""; }; - 29B97326FDCFA39411CA2CEA = { + 2A37F4C6FDCFA73011CA2CEA = { buildPhases = ( - 29B97327FDCFA39411CA2CEA, - 29B97328FDCFA39411CA2CEA, - 29B9732BFDCFA39411CA2CEA, - 29B9732DFDCFA39411CA2CEA, + 2A37F4C7FDCFA73011CA2CEA, + 2A37F4C9FDCFA73011CA2CEA, + 2A37F4CEFDCFA73011CA2CEA, + 2A37F4D1FDCFA73011CA2CEA, ); buildSettings = { + CC = "/usr/bin/gcc-3.3"; + CPLUSPLUS = "/usr/bin/g++-3.3"; FRAMEWORK_SEARCH_PATHS = ""; HEADER_SEARCH_PATHS = ""; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ""; + OPTIMIZATION_CFLAGS = "-O3"; OTHER_CFLAGS = "-std=c99"; OTHER_LDFLAGS = ""; PRECOMPILE_PREFIX_HEADER = YES; @@ -269,19 +364,30 @@ name = "The Cheat"; productInstallPath = "$(HOME)/Applications"; productName = "The Cheat"; - productReference = 17587328FF379C6511CA2CBB; + productReference = 1758732AFF379DA111CA2CBB; productSettingsXML = " CFBundleDevelopmentRegion English + CFBundleDocumentTypes + + + CFBundleTypeName + The Cheat + CFBundleTypeRole + Editor + NSDocumentClass + MyDocument + + CFBundleExecutable The Cheat CFBundleGetInfoString - The Cheat 1.0b1 + The Cheat 1.0 CFBundleIconFile - icon.icns + icon_b.icns CFBundleIdentifier com.brokenzipper.TheCheat CFBundleInfoDictionaryVersion @@ -291,11 +397,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0b1 + 1.0 CFBundleSignature ThCh CFBundleVersion - 1.0b1 + 1B02 NSMainNibFile MainMenu NSPrincipalClass @@ -304,69 +410,122 @@ "; }; - 29B97327FDCFA39411CA2CEA = { + 2A37F4C7FDCFA73011CA2CEA = { buildActionMask = 2147483647; files = ( - 32CA4F650368D2AA00C91783, - 6E31BC1004EB1BEF00A80003, + 32DBCF760370BD2300C91783, + 2A37F4C8FDCFA73011CA2CEA, + 6E4E0992050BB21400A80003, + 6E4E0995050BB21400A80003, + 6E3F0D03050D4ACC00A80003, + 6E0BDF7E0511568D00A80003, + 6ED3E46505192E2B00A80003, + 6E71F41D051BCCC600A80003, + 6E146B13051FA42C00A80003, + 6E0D40AE05223CCE00A80003, + 6E0D40B6052243D500A80003, + 6E0D40BA0522449500A80003, + 6E0D40C205224FD000A80003, + 6E0D40C605225DA100A80003, + 6E0D40CC0522815100A80003, + 6E0D40D00522820D00A80003, + 6EBCEEE80523E23700A80003, + 6EAF230A0527D7FE00A80003, + 6EFB422F052F601400A80003, + 6E51A97E0573304C00506538, + 6E51A988057330B900506538, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; - 29B97328FDCFA39411CA2CEA = { + 2A37F4C8FDCFA73011CA2CEA = { + fileRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + }; + }; + 2A37F4C9FDCFA73011CA2CEA = { buildActionMask = 2147483647; files = ( - 080E96DCFE201CFB7F000001, - 089C165EFE840E0CC02AAC07, + 080E96D9FE201CDB7F000001, + 080E96DAFE201CDB7F000001, + 080E96DBFE201CDB7F000001, + 089C1661FE840EACC02AAC07, + 6E0D40B205223D4E00A80003, + 6E0D40BE052245E700A80003, + 6ED02FE8055758FF007B5502, + 6E51A97805732B9000506538, + 6E3309E20575BA9D0093550E, ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; - 29B9732BFDCFA39411CA2CEA = { + 2A37F4CEFDCFA73011CA2CEA = { buildActionMask = 2147483647; files = ( - 29B9732CFDCFA39411CA2CEA, - 6E31BC1104EB1BEF00A80003, + 2A37F4CFFDCFA73011CA2CEA, + 2A37F4D0FDCFA73011CA2CEA, + 6E4E0993050BB21400A80003, + 6E4E0994050BB21400A80003, + 6E3F0D04050D4ACC00A80003, + 6ED3E46605192E2B00A80003, + 6E71F41E051BCCC600A80003, + 6E146B14051FA42C00A80003, + 6E0D40AF05223CCE00A80003, + 6E0D40B7052243D500A80003, + 6E0D40BB0522449500A80003, + 6EAF230B0527D7FE00A80003, + 6EFB4230052F601400A80003, + 6E51A97F0573304C00506538, + 6E51A989057330B900506538, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; - 29B9732CFDCFA39411CA2CEA = { - fileRef = 29B97316FDCFA39411CA2CEA; + 2A37F4CFFDCFA73011CA2CEA = { + fileRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + ATTRIBUTES = ( + ); + }; + }; + 2A37F4D0FDCFA73011CA2CEA = { + fileRef = 2A37F4B0FDCFA73011CA2CEA; isa = PBXBuildFile; settings = { ATTRIBUTES = ( ); }; }; - 29B9732DFDCFA39411CA2CEA = { + 2A37F4D1FDCFA73011CA2CEA = { buildActionMask = 2147483647; files = ( - 1058C7A3FEA54F0111CA2CBB, + 1058C7A9FEA54F5311CA2CBB, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; -//290 -//291 -//292 -//293 -//294 +//2A0 +//2A1 +//2A2 +//2A3 +//2A4 //320 //321 //322 //323 //324 - 32CA4F630368D1EE00C91783 = { + 32DBCF750370BD2300C91783 = { + expectedFileType = sourcecode.c.h; fileEncoding = 4; isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - path = The_Cheat_Prefix.h; + path = The_Cheat_Prefix.pch; refType = 4; sourceTree = ""; }; - 32CA4F650368D2AA00C91783 = { - fileRef = 32CA4F630368D1EE00C91783; + 32DBCF760370BD2300C91783 = { + fileRef = 32DBCF750370BD2300C91783; isa = PBXBuildFile; settings = { }; @@ -381,7 +540,7 @@ //4A2 //4A3 //4A4 - 4A9504CCFFE6A4B311CA0CBA = { + 4A9504D0FFE6A4CB11CA0CBA = { buildRules = ( ); buildSettings = { @@ -390,13 +549,14 @@ GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; OPTIMIZATION_CFLAGS = "-O0"; ZERO_LINK = YES; }; isa = PBXBuildStyle; name = Development; }; - 4A9504CDFFE6A4B311CA0CBA = { + 4A9504D1FFE6A4CB11CA0CBA = { buildRules = ( ); buildSettings = { @@ -417,34 +577,1016 @@ //6E2 //6E3 //6E4 - 6E31BC0E04EB1BEF00A80003 = { + 6E0BDF7D0511568D00A80003 = { + expectedFileType = sourcecode.c.h; fileEncoding = 4; isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - path = AppController.h; + path = cheat_types.h; + refType = 4; + sourceTree = ""; + }; + 6E0BDF7E0511568D00A80003 = { + fileRef = 6E0BDF7D0511568D00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40AC05223CCE00A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = NetTrafficController.h; refType = 4; sourceTree = ""; }; - 6E31BC0F04EB1BEF00A80003 = { + 6E0D40AD05223CCE00A80003 = { + expectedFileType = sourcecode.c.objc; fileEncoding = 4; isa = PBXFileReference; - lastKnownFileType = sourcecode.c.objc; - path = AppController.m; + path = NetTrafficController.m; + refType = 4; + sourceTree = ""; + }; + 6E0D40AE05223CCE00A80003 = { + fileRef = 6E0D40AC05223CCE00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40AF05223CCE00A80003 = { + fileRef = 6E0D40AD05223CCE00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40B005223D4E00A80003 = { + children = ( + 6E0D40B105223D4E00A80003, + ); + isa = PBXVariantGroup; + name = NetTraffic.nib; + path = ""; + refType = 4; + sourceTree = ""; + }; + 6E0D40B105223D4E00A80003 = { + expectedFileType = wrapper.nib; + isa = PBXFileReference; + name = English; + path = English.lproj/NetTraffic.nib; + refType = 4; + sourceTree = ""; + }; + 6E0D40B205223D4E00A80003 = { + fileRef = 6E0D40B005223D4E00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40B3052243B800A80003 = { + children = ( + 6E4E098C050BB21400A80003, + 6E4E098D050BB21400A80003, + 6E51A97C0573304C00506538, + 6E51A97D0573304C00506538, + 6E0D40B4052243D500A80003, + 6E0D40B5052243D500A80003, + 6E0D40AC05223CCE00A80003, + 6E0D40AD05223CCE00A80003, + 2A37F4AEFDCFA73011CA2CEA, + 2A37F4ACFDCFA73011CA2CEA, + ); + isa = PBXGroup; + name = Controllers; + refType = 4; + sourceTree = ""; + }; + 6E0D40B4052243D500A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = PreferenceController.h; + refType = 4; + sourceTree = ""; + }; + 6E0D40B5052243D500A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = PreferenceController.m; + refType = 4; + sourceTree = ""; + }; + 6E0D40B6052243D500A80003 = { + fileRef = 6E0D40B4052243D500A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40B7052243D500A80003 = { + fileRef = 6E0D40B5052243D500A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40B80522449500A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = CheatListener.h; + refType = 4; + sourceTree = ""; + }; + 6E0D40B90522449500A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = CheatListener.m; + refType = 4; + sourceTree = ""; + }; + 6E0D40BA0522449500A80003 = { + fileRef = 6E0D40B80522449500A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40BB0522449500A80003 = { + fileRef = 6E0D40B90522449500A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40BC052245E700A80003 = { + children = ( + 6E0D40BD052245E700A80003, + ); + isa = PBXVariantGroup; + name = Preferences.nib; + path = ""; + refType = 4; + sourceTree = ""; + }; + 6E0D40BD052245E700A80003 = { + expectedFileType = wrapper.nib; + isa = PBXFileReference; + name = English; + path = English.lproj/Preferences.nib; + refType = 4; + sourceTree = ""; + }; + 6E0D40BE052245E700A80003 = { + fileRef = 6E0D40BC052245E700A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40BF05224F4B00A80003 = { + children = ( + 6E0D40C405225DA100A80003, + 6E0D40C005224FD000A80003, + 6E0D40CA0522815100A80003, + 6EBCEEE60523E23700A80003, + 6E0D40CE0522820D00A80003, + ); + isa = PBXGroup; + name = Protocols; + refType = 4; + sourceTree = ""; + }; + 6E0D40C005224FD000A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = NetTrafficControlling.h; + refType = 4; + sourceTree = ""; + }; + 6E0D40C205224FD000A80003 = { + fileRef = 6E0D40C005224FD000A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40C405225DA100A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = PreferenceControlling.h; + refType = 4; + sourceTree = ""; + }; + 6E0D40C605225DA100A80003 = { + fileRef = 6E0D40C405225DA100A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40CA0522815100A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = ListenerDelegate.h; + refType = 4; + sourceTree = ""; + }; + 6E0D40CC0522815100A80003 = { + fileRef = 6E0D40CA0522815100A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40CE0522820D00A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = ClientDelegate.h; + refType = 4; + sourceTree = ""; + }; + 6E0D40D00522820D00A80003 = { + fileRef = 6E0D40CE0522820D00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E146B11051FA42C00A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = CheatClient.h; + refType = 4; + sourceTree = ""; + }; + 6E146B12051FA42C00A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = CheatClient.m; + refType = 4; + sourceTree = ""; + }; + 6E146B13051FA42C00A80003 = { + fileRef = 6E146B11051FA42C00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E146B14051FA42C00A80003 = { + fileRef = 6E146B12051FA42C00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E3309E10575BA9D0093550E = { + expectedFileType = image.pdf; + isa = PBXFileReference; + path = "Read Me.pdf"; + refType = 4; + sourceTree = ""; + }; + 6E3309E20575BA9D0093550E = { + fileRef = 6E3309E10575BA9D0093550E; + isa = PBXBuildFile; + settings = { + }; + }; + 6E3309E30575BA9D0093550E = { + fileRef = 6E3309E10575BA9D0093550E; + isa = PBXBuildFile; + settings = { + }; + }; + 6E3F0D01050D4ACC00A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = cheat_net.h; + refType = 4; + sourceTree = ""; + }; + 6E3F0D02050D4ACC00A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = cheat_net.m; + refType = 4; + sourceTree = ""; + }; + 6E3F0D03050D4ACC00A80003 = { + fileRef = 6E3F0D01050D4ACC00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E3F0D04050D4ACC00A80003 = { + fileRef = 6E3F0D02050D4ACC00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E4E098C050BB21400A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 30; + isa = PBXFileReference; + path = AppController.h; + refType = 4; + sourceTree = ""; + }; + 6E4E098D050BB21400A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 30; + isa = PBXFileReference; + path = AppController.m; + refType = 4; + sourceTree = ""; + }; + 6E4E098E050BB21400A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 30; + isa = PBXFileReference; + path = CheatServer.m; + refType = 4; + sourceTree = ""; + }; + 6E4E098F050BB21400A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 30; + isa = PBXFileReference; + path = CheatServer.h; + refType = 4; + sourceTree = ""; + }; + 6E4E0992050BB21400A80003 = { + fileRef = 6E4E098C050BB21400A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E4E0993050BB21400A80003 = { + fileRef = 6E4E098D050BB21400A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E4E0994050BB21400A80003 = { + fileRef = 6E4E098E050BB21400A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E4E0995050BB21400A80003 = { + fileRef = 6E4E098F050BB21400A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E51A97605732B9000506538 = { + children = ( + 6E51A97705732B9000506538, + ); + isa = PBXVariantGroup; + name = AboutBox.nib; + path = ""; + refType = 4; + sourceTree = ""; + }; + 6E51A97705732B9000506538 = { + expectedFileType = wrapper.nib; + isa = PBXFileReference; + name = English; + path = English.lproj/AboutBox.nib; + refType = 4; + sourceTree = ""; + }; + 6E51A97805732B9000506538 = { + fileRef = 6E51A97605732B9000506538; + isa = PBXBuildFile; + settings = { + }; + }; + 6E51A97905732B9000506538 = { + fileRef = 6E51A97605732B9000506538; + isa = PBXBuildFile; + settings = { + }; + }; + 6E51A97C0573304C00506538 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = AboutBoxController.h; + refType = 4; + sourceTree = ""; + }; + 6E51A97D0573304C00506538 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = AboutBoxController.m; + refType = 4; + sourceTree = ""; + }; + 6E51A97E0573304C00506538 = { + fileRef = 6E51A97C0573304C00506538; + isa = PBXBuildFile; + settings = { + }; + }; + 6E51A97F0573304C00506538 = { + fileRef = 6E51A97D0573304C00506538; + isa = PBXBuildFile; + settings = { + }; + }; + 6E51A9800573304C00506538 = { + fileRef = 6E51A97C0573304C00506538; + isa = PBXBuildFile; + settings = { + }; + }; + 6E51A9810573304C00506538 = { + fileRef = 6E51A97D0573304C00506538; + isa = PBXBuildFile; + settings = { + }; + }; + 6E51A986057330B900506538 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = cheat_shared.h; + refType = 4; + sourceTree = ""; + }; + 6E51A987057330B900506538 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = cheat_shared.m; + refType = 4; + sourceTree = ""; + }; + 6E51A988057330B900506538 = { + fileRef = 6E51A986057330B900506538; + isa = PBXBuildFile; + settings = { + }; + }; + 6E51A989057330B900506538 = { + fileRef = 6E51A987057330B900506538; + isa = PBXBuildFile; + settings = { + }; + }; + 6E51A98A057330B900506538 = { + fileRef = 6E51A986057330B900506538; + isa = PBXBuildFile; + settings = { + }; + }; + 6E51A98B057330B900506538 = { + fileRef = 6E51A987057330B900506538; + isa = PBXBuildFile; + settings = { + }; + }; + 6E71F41B051BCCC600A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = cheat_globals.h; + refType = 4; + sourceTree = ""; + }; + 6E71F41C051BCCC600A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = cheat_globals.m; + refType = 4; + sourceTree = ""; + }; + 6E71F41D051BCCC600A80003 = { + fileRef = 6E71F41B051BCCC600A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E71F41E051BCCC600A80003 = { + fileRef = 6E71F41C051BCCC600A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EAF23070527D7DB00A80003 = { + children = ( + 6EAF23080527D7FE00A80003, + 6EAF23090527D7FE00A80003, + 6EFB422D052F601400A80003, + 6EFB422E052F601400A80003, + ); + isa = PBXGroup; + name = "Miscellaneous Classes"; + refType = 4; + sourceTree = ""; + }; + 6EAF23080527D7FE00A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = ServerHolder.h; + refType = 4; + sourceTree = ""; + }; + 6EAF23090527D7FE00A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = ServerHolder.m; + refType = 4; + sourceTree = ""; + }; + 6EAF230A0527D7FE00A80003 = { + fileRef = 6EAF23080527D7FE00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EAF230B0527D7FE00A80003 = { + fileRef = 6EAF23090527D7FE00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EBCEEE60523E23700A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = ServerDelegate.h; + refType = 4; + sourceTree = ""; + }; + 6EBCEEE80523E23700A80003 = { + fileRef = 6EBCEEE60523E23700A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6ED02FE7055758FF007B5502 = { + expectedFileType = image.icns; + isa = PBXFileReference; + path = icon_b.icns; + refType = 4; + sourceTree = ""; + }; + 6ED02FE8055758FF007B5502 = { + fileRef = 6ED02FE7055758FF007B5502; + isa = PBXBuildFile; + settings = { + }; + }; + 6ED3E46305192E2B00A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = MenuExtras.h; + refType = 4; + sourceTree = ""; + }; + 6ED3E46405192E2B00A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = MenuExtras.m; + refType = 4; + sourceTree = ""; + }; + 6ED3E46505192E2B00A80003 = { + fileRef = 6ED3E46305192E2B00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6ED3E46605192E2B00A80003 = { + fileRef = 6ED3E46405192E2B00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6ED3E46705192F0C00A80003 = { + children = ( + 6ED3E46305192E2B00A80003, + 6ED3E46405192E2B00A80003, + ); + isa = PBXGroup; + name = Categories; + refType = 4; + sourceTree = ""; + }; + 6EF8EBD9055A1730008BBE46 = { + buildPhases = ( + 6EF8EBDA055A1730008BBE46, + 6EF8EBEE055A1730008BBE46, + 6EF8EBF7055A1730008BBE46, + 6EF8EC05055A1730008BBE46, + ); + buildRules = ( + ); + buildSettings = { + CC = "/usr/bin/gcc-3.3"; + CPLUSPLUS = "/usr/bin/g++-3.3"; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_C_LANGUAGE_STANDARD = "compiler-default"; + GCC_ENABLE_ASM_KEYWORD = YES; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = The_Cheat_Prefix.pch; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + HEADER_SEARCH_PATHS = ""; + INFOPLIST_FILE = "Info-The_Cheat__Upgraded_.plist"; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ""; + MACOSX_DEPLOYMENT_TARGET = 10.2; + OTHER_CFLAGS = "-fasm-blocks"; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "The Cheat"; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = "-Wmost"; + WRAPPER_EXTENSION = app; + }; + dependencies = ( + ); + isa = PBXNativeTarget; + name = "The Cheat (Upgraded)"; + productInstallPath = "$(HOME)/Applications"; + productName = "The Cheat"; + productReference = 6EF8EC09055A1730008BBE46; + productType = "com.apple.product-type.application"; + }; + 6EF8EBDA055A1730008BBE46 = { + buildActionMask = 2147483647; + files = ( + 6EF8EBDB055A1730008BBE46, + 6EF8EBDC055A1730008BBE46, + 6EF8EBDD055A1730008BBE46, + 6EF8EBDE055A1730008BBE46, + 6EF8EBDF055A1730008BBE46, + 6EF8EBE0055A1730008BBE46, + 6EF8EBE1055A1730008BBE46, + 6EF8EBE2055A1730008BBE46, + 6EF8EBE3055A1730008BBE46, + 6EF8EBE4055A1730008BBE46, + 6EF8EBE5055A1730008BBE46, + 6EF8EBE6055A1730008BBE46, + 6EF8EBE7055A1730008BBE46, + 6EF8EBE8055A1730008BBE46, + 6EF8EBE9055A1730008BBE46, + 6EF8EBEA055A1730008BBE46, + 6EF8EBEB055A1730008BBE46, + 6EF8EBEC055A1730008BBE46, + 6EF8EBED055A1730008BBE46, + 6E51A9800573304C00506538, + 6E51A98A057330B900506538, + ); + isa = PBXHeadersBuildPhase; + runOnlyForDeploymentPostprocessing = 0; + }; + 6EF8EBDB055A1730008BBE46 = { + fileRef = 32DBCF750370BD2300C91783; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBDC055A1730008BBE46 = { + fileRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBDD055A1730008BBE46 = { + fileRef = 6E4E098C050BB21400A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBDE055A1730008BBE46 = { + fileRef = 6E4E098F050BB21400A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBDF055A1730008BBE46 = { + fileRef = 6E3F0D01050D4ACC00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBE0055A1730008BBE46 = { + fileRef = 6E0BDF7D0511568D00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBE1055A1730008BBE46 = { + fileRef = 6ED3E46305192E2B00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBE2055A1730008BBE46 = { + fileRef = 6E71F41B051BCCC600A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBE3055A1730008BBE46 = { + fileRef = 6E146B11051FA42C00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBE4055A1730008BBE46 = { + fileRef = 6E0D40AC05223CCE00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBE5055A1730008BBE46 = { + fileRef = 6E0D40B4052243D500A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBE6055A1730008BBE46 = { + fileRef = 6E0D40B80522449500A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBE7055A1730008BBE46 = { + fileRef = 6E0D40C005224FD000A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBE8055A1730008BBE46 = { + fileRef = 6E0D40C405225DA100A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBE9055A1730008BBE46 = { + fileRef = 6E0D40CA0522815100A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBEA055A1730008BBE46 = { + fileRef = 6E0D40CE0522820D00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBEB055A1730008BBE46 = { + fileRef = 6EBCEEE60523E23700A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBEC055A1730008BBE46 = { + fileRef = 6EAF23080527D7FE00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBED055A1730008BBE46 = { + fileRef = 6EFB422D052F601400A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBEE055A1730008BBE46 = { + buildActionMask = 2147483647; + files = ( + 6EF8EBEF055A1730008BBE46, + 6EF8EBF0055A1730008BBE46, + 6EF8EBF1055A1730008BBE46, + 6EF8EBF2055A1730008BBE46, + 6EF8EBF3055A1730008BBE46, + 6EF8EBF4055A1730008BBE46, + 6EF8EBF6055A1730008BBE46, + 6E51A97905732B9000506538, + 6E3309E30575BA9D0093550E, + ); + isa = PBXResourcesBuildPhase; + runOnlyForDeploymentPostprocessing = 0; + }; + 6EF8EBEF055A1730008BBE46 = { + fileRef = 2A37F4B9FDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBF0055A1730008BBE46 = { + fileRef = 2A37F4B6FDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBF1055A1730008BBE46 = { + fileRef = 2A37F4B4FDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBF2055A1730008BBE46 = { + fileRef = 089C165FFE840EACC02AAC07; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBF3055A1730008BBE46 = { + fileRef = 6E0D40B005223D4E00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBF4055A1730008BBE46 = { + fileRef = 6E0D40BC052245E700A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBF6055A1730008BBE46 = { + fileRef = 6ED02FE7055758FF007B5502; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBF7055A1730008BBE46 = { + buildActionMask = 2147483647; + files = ( + 6EF8EBF8055A1730008BBE46, + 6EF8EBF9055A1730008BBE46, + 6EF8EBFA055A1730008BBE46, + 6EF8EBFB055A1730008BBE46, + 6EF8EBFC055A1730008BBE46, + 6EF8EBFD055A1730008BBE46, + 6EF8EBFE055A1730008BBE46, + 6EF8EBFF055A1730008BBE46, + 6EF8EC00055A1730008BBE46, + 6EF8EC01055A1730008BBE46, + 6EF8EC02055A1730008BBE46, + 6EF8EC03055A1730008BBE46, + 6EF8EC04055A1730008BBE46, + 6E51A9810573304C00506538, + 6E51A98B057330B900506538, + ); + isa = PBXSourcesBuildPhase; + runOnlyForDeploymentPostprocessing = 0; + }; + 6EF8EBF8055A1730008BBE46 = { + fileRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + ATTRIBUTES = ( + ); + }; + }; + 6EF8EBF9055A1730008BBE46 = { + fileRef = 2A37F4B0FDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + ATTRIBUTES = ( + ); + }; + }; + 6EF8EBFA055A1730008BBE46 = { + fileRef = 6E4E098D050BB21400A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBFB055A1730008BBE46 = { + fileRef = 6E4E098E050BB21400A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBFC055A1730008BBE46 = { + fileRef = 6E3F0D02050D4ACC00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBFD055A1730008BBE46 = { + fileRef = 6ED3E46405192E2B00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBFE055A1730008BBE46 = { + fileRef = 6E71F41C051BCCC600A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EBFF055A1730008BBE46 = { + fileRef = 6E146B12051FA42C00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EC00055A1730008BBE46 = { + fileRef = 6E0D40AD05223CCE00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EC01055A1730008BBE46 = { + fileRef = 6E0D40B5052243D500A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EC02055A1730008BBE46 = { + fileRef = 6E0D40B90522449500A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EC03055A1730008BBE46 = { + fileRef = 6EAF23090527D7FE00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EC04055A1730008BBE46 = { + fileRef = 6EFB422E052F601400A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EC05055A1730008BBE46 = { + buildActionMask = 2147483647; + files = ( + 6EF8EC06055A1730008BBE46, + ); + isa = PBXFrameworksBuildPhase; + runOnlyForDeploymentPostprocessing = 0; + }; + 6EF8EC06055A1730008BBE46 = { + fileRef = 1058C7A7FEA54F5311CA2CBB; + isa = PBXBuildFile; + settings = { + }; + }; + 6EF8EC08055A1730008BBE46 = { + expectedFileType = text.plist; + isa = PBXFileReference; + path = "Info-The_Cheat__Upgraded_.plist"; + refType = 4; + sourceTree = ""; + }; + 6EF8EC09055A1730008BBE46 = { + expectedFileType = wrapper.application; + includeInIndex = 0; + isa = PBXFileReference; + path = "The Cheat.app"; + refType = 3; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 6EFB422D052F601400A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = SearchResults.h; + refType = 4; + sourceTree = ""; + }; + 6EFB422E052F601400A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = SearchResults.m; refType = 4; sourceTree = ""; }; - 6E31BC1004EB1BEF00A80003 = { - fileRef = 6E31BC0E04EB1BEF00A80003; + 6EFB422F052F601400A80003 = { + fileRef = 6EFB422D052F601400A80003; isa = PBXBuildFile; settings = { }; }; - 6E31BC1104EB1BEF00A80003 = { - fileRef = 6E31BC0F04EB1BEF00A80003; + 6EFB4230052F601400A80003 = { + fileRef = 6EFB422E052F601400A80003; isa = PBXBuildFile; settings = { }; }; }; - rootObject = 29B97313FDCFA39411CA2CEA; + rootObject = 2A37F4A9FDCFA73011CA2CEA; } diff --git a/The_Cheat_Prefix.h b/The_Cheat_Prefix.pch similarity index 62% rename from The_Cheat_Prefix.h rename to The_Cheat_Prefix.pch index 0d0c539..92e9b97 100644 --- a/The_Cheat_Prefix.h +++ b/The_Cheat_Prefix.pch @@ -1,7 +1,13 @@ + // // Prefix header for all source files of the 'The Cheat' target in the 'The Cheat' project // - +/* #ifdef __OBJC__ #import #endif +*/ +#ifdef __OBJC__ +#import +#import +#endif diff --git a/cheat_globals.h b/cheat_globals.h new file mode 100644 index 0000000..03bad61 --- /dev/null +++ b/cheat_globals.h @@ -0,0 +1,40 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: cheat_globals.h +// Created: Fri Sep 19 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#ifndef _cheat_globals_H +#define _cheat_globals_H + +#import + +#define TCDefaultListenPort (5007) +//#define TCDefaultListenPath "/tmp/com.brokenzipper.TheCheat" +// this path alone would work, but it *should* go in the user's home directory +char extern TCDefaultListenPath[104]; + +#define TCMaxSearchResults (100000) + +int extern TCGlobalDocumentCount; +int extern TCGlobalAlternateBroadcastNameCount; +char extern TCGlobalListening; + +char extern TCGlobalPlaySounds; +char extern TCGlobalWindowsOnTop; +char extern TCGlobalAllowRemote; +int extern TCGlobalListenPort; +#define TCGlobalBroadcastName ([[NSUserDefaults standardUserDefaults] objectForKey:TCBroadcastNamePref]) + +NSString extern *TCPlaySoundsPref; +NSString extern *TCWindowsOnTopPref; +NSString extern *TCAllowRemotePref; +NSString extern *TCListenPortPref; +NSString extern *TCBroadcastNamePref; + +#endif + diff --git a/cheat_globals.m b/cheat_globals.m new file mode 100644 index 0000000..7c04b96 --- /dev/null +++ b/cheat_globals.m @@ -0,0 +1,28 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: cheat_globals.m +// Created: Fri Sep 19 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#include "cheat_globals.h" + +char TCDefaultListenPath[104] = "/.thecheat_socket"; + +int TCGlobalDocumentCount = 1; +int TCGlobalAlternateBroadcastNameCount = 2; +char TCGlobalListening = NO; + +char TCGlobalPlaySounds = YES; +char TCGlobalWindowsOnTop = NO; +char TCGlobalAllowRemote = NO; +int TCGlobalListenPort = TCDefaultListenPort; + +NSString *TCPlaySoundsPref = @"TCPlaySoundsPref"; +NSString *TCWindowsOnTopPref = @"TCWindowsOnTopPref"; +NSString *TCAllowRemotePref = @"TCAllowRemotePref"; +NSString *TCListenPortPref = @"TCListenPortPref"; +NSString *TCBroadcastNamePref = @"TCBroadcastNamePref"; \ No newline at end of file diff --git a/cheat_net.h b/cheat_net.h new file mode 100644 index 0000000..1f82d2e --- /dev/null +++ b/cheat_net.h @@ -0,0 +1,49 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: cheat_net.h +// Created: Mon Sep 08 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#ifndef _cheat_net_H +#define _cheat_net_H + +#include +#include +#include +#include +#include +#include +#include +#include + + +// macros + +#define COPY_TO_BUFFER( to, from, size ) memcpy( to, from, size ), to += size; +#define COPY_FROM_BUFFER( to, from, size ) memcpy( to, from, size ), from += size; + + +struct tagPacketHeader +{ + u_int32_t checksum; + u_int32_t function; + u_int32_t size; +}; + +typedef struct tagPacketHeader PacketHeader; + + +u_int32_t RandomChecksum(); +char VerifyChecksum( u_int32_t checksum ); +int CountBits( u_int8_t byte ); + +int SendBuffer( int socket, char const *buffer, int *length ); +int ReadBuffer( int socket, char *buffer, int length ); + + +#endif + diff --git a/cheat_net.m b/cheat_net.m new file mode 100644 index 0000000..be27b7c --- /dev/null +++ b/cheat_net.m @@ -0,0 +1,113 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: cheat_net.m +// Created: Mon Sep 08 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#include "cheat_net.h" + + +u_int32_t RandomChecksum() +{ + u_int8_t byte1, byte2, byte3, byte4; + char *ptr; + + u_int32_t checksum; + long randomValue = random(); + + byte1 = randomValue & 0xFF; + byte2 = (randomValue >> 8) & 0xFF; + byte3 = (randomValue >> 16) & 0xFF; + byte4 = CountBits( byte1 ) + CountBits( byte2 ) + CountBits( byte3 ); + + ptr = (char *)(&checksum); + + COPY_TO_BUFFER( ptr, &byte1, sizeof(byte1) ); + COPY_TO_BUFFER( ptr, &byte2, sizeof(byte2) ); + COPY_TO_BUFFER( ptr, &byte3, sizeof(byte3) ); + COPY_TO_BUFFER( ptr, &byte4, sizeof(byte4) ); + + return checksum; +} + +char VerifyChecksum( u_int32_t checksum ) +{ + u_int8_t byte1, byte2, byte3, byte4; + char *ptr = (char *)(&checksum); + + COPY_FROM_BUFFER( &byte1, ptr, sizeof(byte1) ); + COPY_FROM_BUFFER( &byte2, ptr, sizeof(byte2) ); + COPY_FROM_BUFFER( &byte3, ptr, sizeof(byte3) ); + COPY_FROM_BUFFER( &byte4, ptr, sizeof(byte4) ); + + if ( (CountBits( byte1 ) + CountBits( byte2 ) + CountBits( byte3 )) == byte4 ) + { + return 1; + } + + NSLog( @"checksum failed" ); + + return 0; +} + +int CountBits( u_int8_t byte ) +{ + int count = 0; + int i; + + for ( i = 0; i < 8; i++ ) + { + count += byte & 1; + + byte >>= 1; + } + + return count; +} + + +int SendBuffer( int sockfd, char const *buffer, int *length ) +{ + int bytesSent = 0; + int bytesLeft = *length; + int n = 0; + + while( bytesSent < *length ) + { + if ( (n = send( sockfd, buffer+bytesSent, bytesLeft, 0 )) == -1 ) + { + break; + } + + bytesSent += n; + bytesLeft -= n; + } + + *length = bytesSent; + + return (n == -1)? -1:0; +} + +int ReadBuffer( int sockfd, char *buffer, int length ) +{ + int bytesRead = 0; + int bytesLeft = length; + int n; + + while( bytesRead < length ) + { + if ( (n = recv( sockfd, buffer+bytesRead, bytesLeft, 0 )) == -1 || n == 0 ) + { + return (bytesRead > 0)? bytesRead:n; + } + + bytesRead += n; + bytesLeft -= n; + } + + return bytesRead; +} \ No newline at end of file diff --git a/cheat_shared.h b/cheat_shared.h new file mode 100644 index 0000000..43f9dd7 --- /dev/null +++ b/cheat_shared.h @@ -0,0 +1,19 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: cheat_shared.h +// Created: Mon Nov 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#ifndef _cheat_shared_H +#define _cheat_shared_H + + +void LaunchWebsite(); +void LaunchEmail(); + + +#endif \ No newline at end of file diff --git a/cheat_shared.m b/cheat_shared.m new file mode 100644 index 0000000..1a7b7a5 --- /dev/null +++ b/cheat_shared.m @@ -0,0 +1,22 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: cheat_shared.m +// Created: Mon Nov 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import "cheat_shared.h" + + +void LaunchWebsite() +{ + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://www.brokenzipper.com/"]]; +} + +void LaunchEmail() +{ + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"mailto:chaz@brokenzipper.com?subject=The%20Cheat%20Feedback"]]; +} \ No newline at end of file diff --git a/cheat_types.h b/cheat_types.h new file mode 100644 index 0000000..92a5622 --- /dev/null +++ b/cheat_types.h @@ -0,0 +1,40 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: cheat_types.h +// Created: Thu Sep 11 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#ifndef _cheat_types_H +#define _cheat_types_H + + +enum tagTCtype +{ + TYPE_INTEGER, TYPE_STRING, TYPE_DECIMAL, TYPE_UNKNOWN +}; +typedef int TCtype; + +enum tagTCsize +{ + SIZE_8_BIT, SIZE_16_BIT, SIZE_32_BIT, SIZE_64_BIT +}; +typedef int TCsize; + +enum tagTCstatus +{ + STATUS_DISCONNECTED, STATUS_CONNECTED, STATUS_CHEATING, STATUS_SEARCHING, STATUS_CHANGING, STATUS_CHANGING_LATER, STATUS_CHANGING_CONTINUOUSLY, STATUS_UNDOING, STATUS_REDOING +}; +typedef int TCstatus; +// NOTE: STATUS_CHANGING_LATER should not be used, as this future is not implemented. + + +typedef long unsigned TCaddress; +#define TCAddressSize sizeof(TCaddress) + + +#endif + diff --git a/icon_b.icns b/icon_b.icns new file mode 100644 index 0000000000000000000000000000000000000000..ad21b6621748e7e0ce2709a2374b9397bd561e99 GIT binary patch literal 50914 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 SB(fA)m +#include +#include + int main( int argc, const char *argv[] ) { - return NSApplicationMain(argc, argv); + srandom( time(0) ); + + return NSApplicationMain( argc, argv ); } \ No newline at end of file -- 2.45.2