From 91349b3f4f3c6f5e9e2522908dcfd273b3ccb963 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 5 May 2011 23:27:34 -0400 Subject: [PATCH 001/106] Let's redo the [Xcode4] branch! Hopefully we've learned our lesson from last time. --- .hgignore | 2 +- .../project.pbxproj | 8368 +++++++++++++++++ 2 files changed, 8369 insertions(+), 1 deletion(-) create mode 100644 Xcode/stepmania_xcode4.xcodeproj/project.pbxproj diff --git a/.hgignore b/.hgignore index 7bb444fb3c..137e87b0b2 100644 --- a/.hgignore +++ b/.hgignore @@ -47,7 +47,7 @@ Docs/doxygen PBProject/build Xcode/build *.xcodeproj/xcuserdata -*.xcodeproj/project.xcworkspace/xcuserdata +*.xcodeproj/project.xcworkspace src/build-* src/Release-* src/libtomcrypt/build-* diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..7f4bc6c9ad --- /dev/null +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -0,0 +1,8368 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 44; + objects = { + +/* Begin PBXAggregateTarget section */ + AA7A2BB30AE09D0F0054C5BA /* all lua */ = { + isa = PBXAggregateTarget; + buildConfigurationList = AA7A2BBD0AE09D4E0054C5BA /* Build configuration list for PBXAggregateTarget "all lua" */; + buildPhases = ( + ); + dependencies = ( + AA7A2BB50AE09D160054C5BA /* PBXTargetDependency */, + AA7A2BB70AE09D160054C5BA /* PBXTargetDependency */, + ); + name = "all lua"; + productName = "all lua"; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 1215D7A208C6559A00B87D8B /* ScreenGameplayNormal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1215D7A008C6559A00B87D8B /* ScreenGameplayNormal.cpp */; }; + 2B30D6821315EA7E00044B68 /* MouseDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */; }; + 2B30D6831315EA7E00044B68 /* MouseDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B30D6811315EA7E00044B68 /* MouseDevice.h */; }; + 2B76698B132FF71500586512 /* NotesLoaderSMA.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B766989132FF71500586512 /* NotesLoaderSMA.h */; }; + 2B76698C132FF71500586512 /* NotesLoaderSMA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B76698A132FF71500586512 /* NotesLoaderSMA.cpp */; }; + 2BA7925E1304F20D002BD8E1 /* NotesLoaderSSC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA7925A1304F20D002BD8E1 /* NotesLoaderSSC.cpp */; }; + 2BA7925F1304F20D002BD8E1 /* NotesLoaderSSC.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA7925B1304F20D002BD8E1 /* NotesLoaderSSC.h */; }; + 2BA792601304F20D002BD8E1 /* NotesWriterSSC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA7925C1304F20D002BD8E1 /* NotesWriterSSC.cpp */; }; + 2BA792611304F20D002BD8E1 /* NotesWriterSSC.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA7925D1304F20D002BD8E1 /* NotesWriterSSC.h */; }; + 2BD06FEE137242680018CB9F /* json_batchallocator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BD06FDD137240CF0018CB9F /* json_batchallocator.h */; }; + 2BD06FEF137242680018CB9F /* json_internalarray.inl in Resources */ = {isa = PBXBuildFile; fileRef = 2BD06FDE137240CF0018CB9F /* json_internalarray.inl */; }; + 2BD06FF0137242680018CB9F /* json_internalmap.inl in Resources */ = {isa = PBXBuildFile; fileRef = 2BD06FDF137240CF0018CB9F /* json_internalmap.inl */; }; + 2BD06FF1137242680018CB9F /* json_reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BD06FE0137240CF0018CB9F /* json_reader.cpp */; }; + 2BD06FF2137242680018CB9F /* json_value.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BD06FE1137240CF0018CB9F /* json_value.cpp */; }; + 2BD06FF3137242680018CB9F /* json_valueiterator.inl in Resources */ = {isa = PBXBuildFile; fileRef = 2BD06FE2137240CF0018CB9F /* json_valueiterator.inl */; }; + 2BD06FF4137242680018CB9F /* json_writer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BD06FE3137240CF0018CB9F /* json_writer.cpp */; }; + 2BDB88E9137201F700E6FD3A /* lapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88B2137201F700E6FD3A /* lapi.c */; }; + 2BDB88EA137201F700E6FD3A /* lapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88B3137201F700E6FD3A /* lapi.h */; }; + 2BDB88EB137201F700E6FD3A /* lauxlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88B4137201F700E6FD3A /* lauxlib.c */; }; + 2BDB88EC137201F700E6FD3A /* lauxlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88B5137201F700E6FD3A /* lauxlib.h */; }; + 2BDB88ED137201F700E6FD3A /* lbaselib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88B6137201F700E6FD3A /* lbaselib.c */; }; + 2BDB88EE137201F700E6FD3A /* lcode.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88B7137201F700E6FD3A /* lcode.c */; }; + 2BDB88EF137201F700E6FD3A /* lcode.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88B8137201F700E6FD3A /* lcode.h */; }; + 2BDB88F0137201F700E6FD3A /* ldblib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88B9137201F700E6FD3A /* ldblib.c */; }; + 2BDB88F1137201F700E6FD3A /* ldebug.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88BA137201F700E6FD3A /* ldebug.c */; }; + 2BDB88F2137201F700E6FD3A /* ldebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88BB137201F700E6FD3A /* ldebug.h */; }; + 2BDB88F3137201F700E6FD3A /* ldo.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88BC137201F700E6FD3A /* ldo.c */; }; + 2BDB88F4137201F700E6FD3A /* ldo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88BD137201F700E6FD3A /* ldo.h */; }; + 2BDB88F5137201F700E6FD3A /* ldump.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88BE137201F700E6FD3A /* ldump.c */; }; + 2BDB88F6137201F700E6FD3A /* lfunc.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88BF137201F700E6FD3A /* lfunc.c */; }; + 2BDB88F7137201F700E6FD3A /* lfunc.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88C0137201F700E6FD3A /* lfunc.h */; }; + 2BDB88F8137201F700E6FD3A /* lgc.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88C1137201F700E6FD3A /* lgc.c */; }; + 2BDB88F9137201F700E6FD3A /* lgc.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88C2137201F700E6FD3A /* lgc.h */; }; + 2BDB88FA137201F700E6FD3A /* linit.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88C3137201F700E6FD3A /* linit.c */; }; + 2BDB88FB137201F700E6FD3A /* liolib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88C4137201F700E6FD3A /* liolib.c */; }; + 2BDB88FC137201F700E6FD3A /* llex.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88C5137201F700E6FD3A /* llex.c */; }; + 2BDB88FD137201F700E6FD3A /* llex.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88C6137201F700E6FD3A /* llex.h */; }; + 2BDB88FE137201F700E6FD3A /* llimits.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88C7137201F700E6FD3A /* llimits.h */; }; + 2BDB88FF137201F700E6FD3A /* lmathlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88C8137201F700E6FD3A /* lmathlib.c */; }; + 2BDB8900137201F700E6FD3A /* lmem.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88C9137201F700E6FD3A /* lmem.c */; }; + 2BDB8901137201F700E6FD3A /* lmem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88CA137201F700E6FD3A /* lmem.h */; }; + 2BDB8902137201F700E6FD3A /* loadlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88CB137201F700E6FD3A /* loadlib.c */; }; + 2BDB8903137201F700E6FD3A /* lobject.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88CC137201F700E6FD3A /* lobject.c */; }; + 2BDB8904137201F700E6FD3A /* lobject.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88CD137201F700E6FD3A /* lobject.h */; }; + 2BDB8905137201F700E6FD3A /* lopcodes.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88CE137201F700E6FD3A /* lopcodes.c */; }; + 2BDB8906137201F700E6FD3A /* lopcodes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88CF137201F700E6FD3A /* lopcodes.h */; }; + 2BDB8907137201F700E6FD3A /* loslib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88D0137201F700E6FD3A /* loslib.c */; }; + 2BDB8908137201F700E6FD3A /* lparser.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88D1137201F700E6FD3A /* lparser.c */; }; + 2BDB8909137201F700E6FD3A /* lparser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88D2137201F700E6FD3A /* lparser.h */; }; + 2BDB890A137201F700E6FD3A /* lstate.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88D3137201F700E6FD3A /* lstate.c */; }; + 2BDB890B137201F700E6FD3A /* lstate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88D4137201F700E6FD3A /* lstate.h */; }; + 2BDB890C137201F700E6FD3A /* lstring.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88D5137201F700E6FD3A /* lstring.c */; }; + 2BDB890D137201F700E6FD3A /* lstring.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88D6137201F700E6FD3A /* lstring.h */; }; + 2BDB890E137201F700E6FD3A /* lstrlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88D7137201F700E6FD3A /* lstrlib.c */; }; + 2BDB890F137201F700E6FD3A /* ltable.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88D8137201F700E6FD3A /* ltable.c */; }; + 2BDB8910137201F700E6FD3A /* ltable.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88D9137201F700E6FD3A /* ltable.h */; }; + 2BDB8911137201F700E6FD3A /* ltablib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88DA137201F700E6FD3A /* ltablib.c */; }; + 2BDB8912137201F700E6FD3A /* ltm.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88DB137201F700E6FD3A /* ltm.c */; }; + 2BDB8913137201F700E6FD3A /* ltm.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88DC137201F700E6FD3A /* ltm.h */; }; + 2BDB8914137201F700E6FD3A /* lua.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88DD137201F700E6FD3A /* lua.c */; }; + 2BDB8915137201F700E6FD3A /* lua.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88DE137201F700E6FD3A /* lua.h */; }; + 2BDB8916137201F700E6FD3A /* luac.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88DF137201F700E6FD3A /* luac.c */; }; + 2BDB8917137201F700E6FD3A /* luaconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88E0137201F700E6FD3A /* luaconf.h */; }; + 2BDB8918137201F700E6FD3A /* lualib.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88E1137201F700E6FD3A /* lualib.h */; }; + 2BDB8919137201F700E6FD3A /* lundump.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88E2137201F700E6FD3A /* lundump.c */; }; + 2BDB891A137201F700E6FD3A /* lundump.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88E3137201F700E6FD3A /* lundump.h */; }; + 2BDB891B137201F700E6FD3A /* lvm.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88E4137201F700E6FD3A /* lvm.c */; }; + 2BDB891C137201F700E6FD3A /* lvm.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88E5137201F700E6FD3A /* lvm.h */; }; + 2BDB891D137201F700E6FD3A /* lzio.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88E6137201F700E6FD3A /* lzio.c */; }; + 2BDB891E137201F700E6FD3A /* lzio.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88E7137201F700E6FD3A /* lzio.h */; }; + 2BDB891F137201F700E6FD3A /* print.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88E8137201F700E6FD3A /* print.c */; }; + 3659B56F0F902143002B6B68 /* CommandLineActions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3659B56D0F902143002B6B68 /* CommandLineActions.cpp */; }; + 3659B5700F902143002B6B68 /* CommandLineActions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3659B56E0F902143002B6B68 /* CommandLineActions.h */; }; + 367D575B0EDE56F200B46814 /* ScreenHighScores.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 367D57590EDE56F200B46814 /* ScreenHighScores.cpp */; }; + 3688B8530BD42DAA004186AD /* NotesLoaderMidi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3688B8510BD42DAA004186AD /* NotesLoaderMidi.cpp */; }; + 36C6888311297FFE00453295 /* RageFileDriverReadAhead.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36C6887F11297FFE00453295 /* RageFileDriverReadAhead.cpp */; }; + 36C6888411297FFE00453295 /* RageFileDriverReadAhead.h in Headers */ = {isa = PBXBuildFile; fileRef = 36C6888011297FFE00453295 /* RageFileDriverReadAhead.h */; }; + 36C6888511297FFE00453295 /* RageFileManager_ReadAhead.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36C6888111297FFE00453295 /* RageFileManager_ReadAhead.cpp */; }; + 36C6888611297FFE00453295 /* RageFileManager_ReadAhead.h in Headers */ = {isa = PBXBuildFile; fileRef = 36C6888211297FFE00453295 /* RageFileManager_ReadAhead.h */; }; + 36CA531C0F91564A0063D59D /* ScreenOptionsCourseOverview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36CA531A0F91564A0063D59D /* ScreenOptionsCourseOverview.cpp */; }; + 36CA531D0F91564A0063D59D /* ScreenOptionsCourseOverview.h in Headers */ = {isa = PBXBuildFile; fileRef = 36CA531B0F91564A0063D59D /* ScreenOptionsCourseOverview.h */; }; + 36CA53200F9156860063D59D /* ScreenOptionsEditCourse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36CA531E0F9156860063D59D /* ScreenOptionsEditCourse.cpp */; }; + 36CA53210F9156860063D59D /* ScreenOptionsEditCourse.h in Headers */ = {isa = PBXBuildFile; fileRef = 36CA531F0F9156860063D59D /* ScreenOptionsEditCourse.h */; }; + AA059ABC0B8CCFB5006F8139 /* ActorMultiTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA059ABA0B8CCFB5006F8139 /* ActorMultiTexture.cpp */; }; + AA059ABD0B8CCFB5006F8139 /* ActorMultiTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = AA059ABB0B8CCFB5006F8139 /* ActorMultiTexture.h */; }; + AA059ABE0B8CCFB5006F8139 /* ActorMultiTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA059ABA0B8CCFB5006F8139 /* ActorMultiTexture.cpp */; }; + AA059E2B0B8F0C67006F8139 /* libz_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA059E2A0B8F0C66006F8139 /* libz_link.a */; }; + AA059E2C0B8F0C67006F8139 /* libz_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA059E2A0B8F0C66006F8139 /* libz_link.a */; }; + AA05A0B00BA2EFF3006F8139 /* OptionsList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA05A0AE0BA2EFF3006F8139 /* OptionsList.cpp */; }; + AA05A0B10BA2EFF3006F8139 /* OptionsList.h in Headers */ = {isa = PBXBuildFile; fileRef = AA05A0AF0BA2EFF3006F8139 /* OptionsList.h */; }; + AA05A0B20BA2EFF3006F8139 /* OptionsList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA05A0AE0BA2EFF3006F8139 /* OptionsList.cpp */; }; + AA07008A0B61F177003B85BB /* RageSoundReader_PostBuffering.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0700880B61F177003B85BB /* RageSoundReader_PostBuffering.cpp */; }; + AA07008C0B61F177003B85BB /* RageSoundReader_PostBuffering.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0700880B61F177003B85BB /* RageSoundReader_PostBuffering.cpp */; }; + AA07008D0B61F177003B85BB /* RageSoundReader_PostBuffering.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0700890B61F177003B85BB /* RageSoundReader_PostBuffering.h */; }; + AA0732900954381800F396C5 /* XmlFileUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07328C0954381800F396C5 /* XmlFileUtil.cpp */; }; + AA07A55F0843E72B00E33D21 /* ScreenDebugOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07A5550843E72B00E33D21 /* ScreenDebugOverlay.cpp */; }; + AA07A5630843E72B00E33D21 /* ScreenSaveSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07A5590843E72B00E33D21 /* ScreenSaveSync.cpp */; }; + AA07A5650843E72B00E33D21 /* ScreenSMOnlineLogin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07A55B0843E72B00E33D21 /* ScreenSMOnlineLogin.cpp */; }; + AA07A5670843E72B00E33D21 /* ScreenSyncOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07A55D0843E72B00E33D21 /* ScreenSyncOverlay.cpp */; }; + AA0A3DE8060513A00044E6B1 /* ScreenSetTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0A3DE6060513A00044E6B1 /* ScreenSetTime.cpp */; }; + AA0E04D4076C4CD500716D81 /* RageFileBasic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0E04CE076C4CD500716D81 /* RageFileBasic.cpp */; }; + AA0E04D6076C4CD500716D81 /* RageFileDriverDeflate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0E04D0076C4CD500716D81 /* RageFileDriverDeflate.cpp */; }; + AA0E04D8076C4CD500716D81 /* RageFileDriverSlice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0E04D2076C4CD500716D81 /* RageFileDriverSlice.cpp */; }; + AA1145DD075DFADF0050A3D1 /* ScreenPackages.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1145D9075DFADF0050A3D1 /* ScreenPackages.cpp */; }; + AA1145DF075DFADF0050A3D1 /* ScreenSystemLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1145DB075DFADF0050A3D1 /* ScreenSystemLayer.cpp */; }; + AA11A20F0DC5A1B0006BD8AC /* ModIcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA11A20B0DC5A1B0006BD8AC /* ModIcon.cpp */; }; + AA11A2110DC5A1B0006BD8AC /* ModIconRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA11A20D0DC5A1B0006BD8AC /* ModIconRow.cpp */; }; + AA11A2130DC5A1B0006BD8AC /* ModIcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA11A20B0DC5A1B0006BD8AC /* ModIcon.cpp */; }; + AA11A2140DC5A1B0006BD8AC /* ModIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = AA11A20C0DC5A1B0006BD8AC /* ModIcon.h */; }; + AA11A2150DC5A1B0006BD8AC /* ModIconRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA11A20D0DC5A1B0006BD8AC /* ModIconRow.cpp */; }; + AA11A2160DC5A1B0006BD8AC /* ModIconRow.h in Headers */ = {isa = PBXBuildFile; fileRef = AA11A20E0DC5A1B0006BD8AC /* ModIconRow.h */; }; + AA139C4706923EBE00C1F6ED /* Style.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA139C4606923EBE00C1F6ED /* Style.cpp */; }; + AA147F1B0A0F78D8006EADF6 /* VectorHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA147F190A0F78D8006EADF6 /* VectorHelper.cpp */; }; + AA147F1C0A0F78D8006EADF6 /* VectorHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = AA147F180A0F78D8006EADF6 /* VectorHelper.h */; }; + AA147F1D0A0F78D8006EADF6 /* VectorHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA147F190A0F78D8006EADF6 /* VectorHelper.cpp */; }; + AA1893600BD777C500AEC0BF /* ScreenProfileLoad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA18935C0BD777C400AEC0BF /* ScreenProfileLoad.cpp */; }; + AA1893610BD777C500AEC0BF /* ScreenProfileLoad.h in Headers */ = {isa = PBXBuildFile; fileRef = AA18935D0BD777C400AEC0BF /* ScreenProfileLoad.h */; }; + AA1893620BD777C500AEC0BF /* ScreenProfileSave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA18935E0BD777C400AEC0BF /* ScreenProfileSave.cpp */; }; + AA1893630BD777C500AEC0BF /* ScreenProfileSave.h in Headers */ = {isa = PBXBuildFile; fileRef = AA18935F0BD777C400AEC0BF /* ScreenProfileSave.h */; }; + AA1893640BD777C500AEC0BF /* ScreenProfileLoad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA18935C0BD777C400AEC0BF /* ScreenProfileLoad.cpp */; }; + AA1893660BD777C500AEC0BF /* ScreenProfileSave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA18935E0BD777C400AEC0BF /* ScreenProfileSave.cpp */; }; + AA18937D0BD77ECE00AEC0BF /* NotesLoaderMidi.h in Headers */ = {isa = PBXBuildFile; fileRef = 3688B8520BD42DAA004186AD /* NotesLoaderMidi.h */; }; + AA18937E0BD77ECF00AEC0BF /* NotesLoaderMidi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3688B8510BD42DAA004186AD /* NotesLoaderMidi.cpp */; }; + AA1B083C0762532800835464 /* Command.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1B08370762532800835464 /* Command.cpp */; }; + AA1B083E0762532800835464 /* GameCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1B08390762532800835464 /* GameCommand.cpp */; }; + AA1B08400762532800835464 /* Preference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1B083B0762532800835464 /* Preference.cpp */; }; + AA1CD943060AE571003702C4 /* RageSoundDriver_Generic_Software.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1CD941060AE571003702C4 /* RageSoundDriver_Generic_Software.cpp */; }; + AA1DE9570C5468CE00D59F20 /* Hardware.plist in Resources */ = {isa = PBXBuildFile; fileRef = AA1DE9560C5468CE00D59F20 /* Hardware.plist */; }; + AA1DE9580C5468CE00D59F20 /* Hardware.plist in Resources */ = {isa = PBXBuildFile; fileRef = AA1DE9560C5468CE00D59F20 /* Hardware.plist */; }; + AA1F9C4809AF1BF5002C15A8 /* PumpDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1F9C4609AF1BF5002C15A8 /* PumpDevice.cpp */; }; + AA1F9C4909AF1BF5002C15A8 /* PumpDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1F9C4509AF1BF5002C15A8 /* PumpDevice.h */; }; + AA1F9C4A09AF1BF5002C15A8 /* PumpDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1F9C4609AF1BF5002C15A8 /* PumpDevice.cpp */; }; + AA21D59D0712ADE4008B825F /* ScreenDimensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA21D59C0712ADE4008B825F /* ScreenDimensions.cpp */; }; + AA21E4790A9826CD00684CEA /* libjpeg_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4730A9826CD00684CEA /* libjpeg_link.a */; }; + AA21E47B0A9826CD00684CEA /* libogg_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4750A9826CD00684CEA /* libogg_link.a */; }; + AA21E47C0A9826CD00684CEA /* libpng_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4760A9826CD00684CEA /* libpng_link.a */; }; + AA21E47D0A9826CD00684CEA /* libtheora_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4770A9826CD00684CEA /* libtheora_link.a */; }; + AA21E47E0A9826CD00684CEA /* libvorbis_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4780A9826CD00684CEA /* libvorbis_link.a */; }; + AA21E47F0A9826CD00684CEA /* libjpeg_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4730A9826CD00684CEA /* libjpeg_link.a */; }; + AA21E4810A9826CD00684CEA /* libogg_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4750A9826CD00684CEA /* libogg_link.a */; }; + AA21E4820A9826CD00684CEA /* libpng_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4760A9826CD00684CEA /* libpng_link.a */; }; + AA21E4830A9826CD00684CEA /* libtheora_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4770A9826CD00684CEA /* libtheora_link.a */; }; + AA21E4840A9826CD00684CEA /* libvorbis_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4780A9826CD00684CEA /* libvorbis_link.a */; }; + AA22CBA506DE909C0083BA97 /* ScreenNetSelectMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA22CBA306DE909C0083BA97 /* ScreenNetSelectMusic.cpp */; }; + AA230EB006043704002672F3 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA230EAE06043704002672F3 /* AudioToolbox.framework */; }; + AA230EB106043704002672F3 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA230EAF06043704002672F3 /* AudioUnit.framework */; }; + AA251B7705841FCE00027ACB /* RageFileDriverZip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA251B7505841FCE00027ACB /* RageFileDriverZip.cpp */; }; + AA2828B3062FC0B8006F61EC /* SignalHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADB4E8B04D50FB900D02EE9 /* SignalHandler.cpp */; }; + AA28B47C058F2F5E0097C109 /* MemoryCardManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA28B47A058F2F5D0097C109 /* MemoryCardManager.cpp */; }; + AA29CD3E0558741A00961A51 /* smicon.icns in Resources */ = {isa = PBXBuildFile; fileRef = AAB895E504A9057100D02EE9 /* smicon.icns */; }; + AA29CD420558741A00961A51 /* RageBitmapTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD6D04770A7C005F316C /* RageBitmapTexture.cpp */; }; + AA29CD430558741A00961A51 /* RageDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD6F04770A7C005F316C /* RageDisplay.cpp */; }; + AA29CD440558741A00961A51 /* RageException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7204770A7C005F316C /* RageException.cpp */; }; + AA29CD450558741A00961A51 /* RageInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7404770A7C005F316C /* RageInput.cpp */; }; + AA29CD460558741A00961A51 /* RageInputDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7604770A7C005F316C /* RageInputDevice.cpp */; }; + AA29CD470558741A00961A51 /* RageLog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7804770A7C005F316C /* RageLog.cpp */; }; + AA29CD480558741A00961A51 /* RageMath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7A04770A7C005F316C /* RageMath.cpp */; }; + AA29CD490558741A00961A51 /* RageSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7C04770A7C005F316C /* RageSound.cpp */; }; + AA29CD4A0558741A00961A51 /* RageSoundManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7E04770A7C005F316C /* RageSoundManager.cpp */; }; + AA29CD4B0558741A00961A51 /* RageSoundReader_Preload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8004770A7C005F316C /* RageSoundReader_Preload.cpp */; }; + AA29CD4E0558741A00961A51 /* RageTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8904770A7C005F316C /* RageTexture.cpp */; }; + AA29CD4F0558741A00961A51 /* RageTextureManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8B04770A7C005F316C /* RageTextureManager.cpp */; }; + AA29CD500558741A00961A51 /* RageThreads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8D04770A7C005F316C /* RageThreads.cpp */; }; + AA29CD510558741A00961A51 /* RageTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8F04770A7C005F316C /* RageTimer.cpp */; }; + AA29CD520558741A00961A51 /* RageUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD9204770A7C005F316C /* RageUtil.cpp */; }; + AA29CD560558741A00961A51 /* Character.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDCB04770C79005F316C /* Character.cpp */; }; + AA29CD570558741A00961A51 /* CodeDetector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDCD04770C79005F316C /* CodeDetector.cpp */; }; + AA29CD580558741A00961A51 /* Course.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDCF04770C79005F316C /* Course.cpp */; }; + AA29CD590558741A00961A51 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD104770C79005F316C /* Font.cpp */; }; + AA29CD5A0558741A00961A51 /* FontCharAliases.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD304770C79005F316C /* FontCharAliases.cpp */; }; + AA29CD5B0558741A00961A51 /* FontCharmaps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD504770C79005F316C /* FontCharmaps.cpp */; }; + AA29CD5C0558741A00961A51 /* FontManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD704770C79005F316C /* FontManager.cpp */; }; + AA29CD5D0558741A00961A51 /* GameConstantsAndTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD904770C79005F316C /* GameConstantsAndTypes.cpp */; }; + AA29CD5F0558741A00961A51 /* GameInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDDD04770C79005F316C /* GameInput.cpp */; }; + AA29CD600558741A00961A51 /* Grade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDDF04770C79005F316C /* Grade.cpp */; }; + AA29CD610558741A00961A51 /* Inventory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDE104770C79005F316C /* Inventory.cpp */; }; + AA29CD620558741A00961A51 /* LyricsLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDE304770C79005F316C /* LyricsLoader.cpp */; }; + AA29CD630558741A00961A51 /* NoteData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDE504770C79005F316C /* NoteData.cpp */; }; + AA29CD640558741A00961A51 /* NoteDataWithScoring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDE704770C79005F316C /* NoteDataWithScoring.cpp */; }; + AA29CD660558741A00961A51 /* NotesLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDED04770C79005F316C /* NotesLoader.cpp */; }; + AA29CD670558741A00961A51 /* NotesLoaderBMS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDEF04770C79005F316C /* NotesLoaderBMS.cpp */; }; + AA29CD680558741A00961A51 /* NotesLoaderDWI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF104770C79005F316C /* NotesLoaderDWI.cpp */; }; + AA29CD690558741A00961A51 /* NotesLoaderKSF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF304770C79005F316C /* NotesLoaderKSF.cpp */; }; + AA29CD6A0558741A00961A51 /* NotesLoaderSM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF504770C79005F316C /* NotesLoaderSM.cpp */; }; + AA29CD6B0558741A00961A51 /* NotesWriterDWI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF704770C79005F316C /* NotesWriterDWI.cpp */; }; + AA29CD6C0558741A00961A51 /* NotesWriterSM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF904770C79005F316C /* NotesWriterSM.cpp */; }; + AA29CD6D0558741A00961A51 /* NoteTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDFB04770C79005F316C /* NoteTypes.cpp */; }; + AA29CD6E0558741A00961A51 /* Player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDFD04770C79005F316C /* Player.cpp */; }; + AA29CD6F0558741A00961A51 /* PlayerAI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDFF04770C79005F316C /* PlayerAI.cpp */; }; + AA29CD700558741A00961A51 /* PlayerNumber.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0104770C79005F316C /* PlayerNumber.cpp */; }; + AA29CD710558741A00961A51 /* PlayerOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0304770C79005F316C /* PlayerOptions.cpp */; }; + AA29CD720558741A00961A51 /* SongOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0704770C79005F316C /* SongOptions.cpp */; }; + AA29CD730558741A00961A51 /* StageStats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0904770C79005F316C /* StageStats.cpp */; }; + AA29CD750558741A00961A51 /* TitleSubstitution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0E04770C79005F316C /* TitleSubstitution.cpp */; }; + AA29CD760558741A00961A51 /* IniFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE5804770CAA005F316C /* IniFile.cpp */; }; + AA29CD770558741A00961A51 /* MsdFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE5A04770CAA005F316C /* MsdFile.cpp */; }; + AA29CD780558741A00961A51 /* StepMania.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE6304770CF7005F316C /* StepMania.cpp */; }; + AA29CD790558741A00961A51 /* Banner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE6E04770D61005F316C /* Banner.cpp */; }; + AA29CD7A0558741A00961A51 /* BPMDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE7604770E7C005F316C /* BPMDisplay.cpp */; }; + AA29CD7B0558741A00961A51 /* CourseContentsList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE7804770E7C005F316C /* CourseContentsList.cpp */; }; + AA29CD7D0558741A00961A51 /* DifficultyIcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE7E04770E7C005F316C /* DifficultyIcon.cpp */; }; + AA29CD800558741A00961A51 /* EditMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE8404770E7C005F316C /* EditMenu.cpp */; }; + AA29CD810558741A00961A51 /* FadingBanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE8A04770E7C005F316C /* FadingBanner.cpp */; }; + AA29CD820558741A00961A51 /* GradeDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE8C04770E7C005F316C /* GradeDisplay.cpp */; }; + AA29CD840558741A00961A51 /* GrooveRadar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE9004770E7C005F316C /* GrooveRadar.cpp */; }; + AA29CD860558741A00961A51 /* HelpDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE9404770E7C005F316C /* HelpDisplay.cpp */; }; + AA29CD890558741A00961A51 /* MenuTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE9A04770E7C005F316C /* MenuTimer.cpp */; }; + AA29CD8A0558741A00961A51 /* MeterDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE9C04770E7C005F316C /* MeterDisplay.cpp */; }; + AA29CD8E0558741A00961A51 /* MusicWheel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEA404770E7C005F316C /* MusicWheel.cpp */; }; + AA29CD8F0558741A00961A51 /* MusicWheelItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEA604770E7C005F316C /* MusicWheelItem.cpp */; }; + AA29CD920558741A00961A51 /* OptionsCursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEAC04770E7C005F316C /* OptionsCursor.cpp */; }; + AA29CD930558741A00961A51 /* ScrollBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEAE04770E7C005F316C /* ScrollBar.cpp */; }; + AA29CD950558741A00961A51 /* SnapDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEB204770E7C005F316C /* SnapDisplay.cpp */; }; + AA29CD960558741A00961A51 /* TextBanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEB404770E7C005F316C /* TextBanner.cpp */; }; + AA29CD970558741A00961A51 /* WheelNotifyIcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEB604770E7C005F316C /* WheelNotifyIcon.cpp */; }; + AA29CD980558741A00961A51 /* ArrowEffects.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEFD04770F63005F316C /* ArrowEffects.cpp */; }; + AA29CD990558741A00961A51 /* Background.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEFF04770F63005F316C /* Background.cpp */; }; + AA29CD9A0558741A00961A51 /* BGAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF0104770F63005F316C /* BGAnimation.cpp */; }; + AA29CD9B0558741A00961A51 /* BGAnimationLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF0304770F63005F316C /* BGAnimationLayer.cpp */; }; + AA29CD9D0558741A00961A51 /* DancingCharacters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF0704770F63005F316C /* DancingCharacters.cpp */; }; + AA29CD9F0558741A00961A51 /* GhostArrowRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF0D04770F63005F316C /* GhostArrowRow.cpp */; }; + AA29CDA30558741A00961A51 /* HoldJudgment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF1504770F63005F316C /* HoldJudgment.cpp */; }; + AA29CDA50558741A00961A51 /* LifeMeterBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF1B04770F63005F316C /* LifeMeterBar.cpp */; }; + AA29CDA60558741A00961A51 /* LifeMeterBattery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF1D04770F63005F316C /* LifeMeterBattery.cpp */; }; + AA29CDA70558741A00961A51 /* LyricDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF1F04770F63005F316C /* LyricDisplay.cpp */; }; + AA29CDA80558741A00961A51 /* NoteDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2104770F63005F316C /* NoteDisplay.cpp */; }; + AA29CDA90558741A00961A51 /* NoteField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2304770F63005F316C /* NoteField.cpp */; }; + AA29CDAA0558741A00961A51 /* ScoreDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2504770F63005F316C /* ScoreDisplay.cpp */; }; + AA29CDAB0558741A00961A51 /* ScoreDisplayBattle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2704770F63005F316C /* ScoreDisplayBattle.cpp */; }; + AA29CDAC0558741A00961A51 /* ScoreDisplayNormal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2904770F63005F316C /* ScoreDisplayNormal.cpp */; }; + AA29CDAD0558741A00961A51 /* ScoreDisplayOni.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2B04770F63005F316C /* ScoreDisplayOni.cpp */; }; + AA29CDAE0558741A00961A51 /* ScoreDisplayRave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2D04770F63005F316C /* ScoreDisplayRave.cpp */; }; + AA29CDB10558741A00961A51 /* Transition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF7004770F86005F316C /* Transition.cpp */; }; + AA29CDB20558741A00961A51 /* Actor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF7504770FFD005F316C /* Actor.cpp */; }; + AA29CDB30558741A00961A51 /* ActorFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF7704770FFD005F316C /* ActorFrame.cpp */; }; + AA29CDB40558741A00961A51 /* ActorScroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF7904770FFD005F316C /* ActorScroller.cpp */; }; + AA29CDB50558741A00961A51 /* BitmapText.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFFB904770FFD005F316C /* BitmapText.cpp */; }; + AA29CDB70558741A00961A51 /* Model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFFBD04770FFD005F316C /* Model.cpp */; }; + AA29CDB80558741A00961A51 /* ModelTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFFBF04770FFD005F316C /* ModelTypes.cpp */; }; + AA29CDB90558741A00961A51 /* Sprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFFC204770FFD005F316C /* Sprite.cpp */; }; + AA29CDBA0558741A00961A51 /* Screen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E000A047711F3005F316C /* Screen.cpp */; }; + AA29CDBB0558741A00961A51 /* ScreenAttract.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0010047711F3005F316C /* ScreenAttract.cpp */; }; + AA29CDBE0558741A00961A51 /* ScreenDemonstration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E001B047711F3005F316C /* ScreenDemonstration.cpp */; }; + AA29CDBF0558741A00961A51 /* ScreenEdit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E001D047711F3005F316C /* ScreenEdit.cpp */; settings = {COMPILER_FLAGS = "-finline-limit=300"; }; }; + AA29CDC00558741A00961A51 /* ScreenEditMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E001F047711F3005F316C /* ScreenEditMenu.cpp */; }; + AA29CDC10558741A00961A51 /* ScreenEvaluation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0021047711F3005F316C /* ScreenEvaluation.cpp */; }; + AA29CDC50558741A00961A51 /* ScreenGameplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0029047711F3005F316C /* ScreenGameplay.cpp */; }; + AA29CDC60558741A00961A51 /* ScreenJukebox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0037047711F3005F316C /* ScreenJukebox.cpp */; }; + AA29CDC90558741A00961A51 /* ScreenManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E003F047711F3005F316C /* ScreenManager.cpp */; }; + AA29CDCA0558741A00961A51 /* ScreenMapControllers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0041047711F3005F316C /* ScreenMapControllers.cpp */; }; + AA29CDCB0558741A00961A51 /* ScreenMiniMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0045047711F3005F316C /* ScreenMiniMenu.cpp */; }; + AA29CDCD0558741A00961A51 /* ScreenNameEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0049047711F3005F316C /* ScreenNameEntry.cpp */; }; + AA29CDCE0558741A00961A51 /* ScreenOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E004B047711F3005F316C /* ScreenOptions.cpp */; }; + AA29CDCF0558741A00961A51 /* ScreenPlayerOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E004F047711F3005F316C /* ScreenPlayerOptions.cpp */; }; + AA29CDD00558741A00961A51 /* ScreenPrompt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0051047711F3005F316C /* ScreenPrompt.cpp */; }; + AA29CDD10558741A00961A51 /* ScreenRanking.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0053047711F3005F316C /* ScreenRanking.cpp */; }; + AA29CDD30558741A00961A51 /* ScreenSandbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0057047711F3005F316C /* ScreenSandbox.cpp */; }; + AA29CDD40558741A00961A51 /* ScreenSelect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0059047711F3005F316C /* ScreenSelect.cpp */; }; + AA29CDD50558741A00961A51 /* ScreenSelectCharacter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E005B047711F3005F316C /* ScreenSelectCharacter.cpp */; }; + AA29CDDB0558741A00961A51 /* ScreenSelectMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0069047711F3005F316C /* ScreenSelectMusic.cpp */; }; + AA29CDDD0558741A00961A51 /* ScreenSongOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */; }; + AA29CDE10558741A00961A51 /* ScreenTestFonts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */; }; + AA29CDE20558741A00961A51 /* ScreenTestSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007B047711F3005F316C /* ScreenTestSound.cpp */; }; + AA29CDE30558741A00961A51 /* ScreenTextEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */; }; + AA29CDE40558741A00961A51 /* ScreenTitleMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007F047711F3005F316C /* ScreenTitleMenu.cpp */; }; + AA29CDE60558741A00961A51 /* AnnouncerManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E00FF0477128A005F316C /* AnnouncerManager.cpp */; }; + AA29CDE70558741A00961A51 /* GameManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01010477128A005F316C /* GameManager.cpp */; }; + AA29CDE80558741A00961A51 /* GameState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01030477128A005F316C /* GameState.cpp */; }; + AA29CDE90558741A00961A51 /* InputFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01050477128A005F316C /* InputFilter.cpp */; }; + AA29CDEA0558741A00961A51 /* InputMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01070477128A005F316C /* InputMapper.cpp */; }; + AA29CDEB0558741A00961A51 /* InputQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01090477128A005F316C /* InputQueue.cpp */; }; + AA29CDEC0558741A00961A51 /* NoteSkinManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E010B0477128A005F316C /* NoteSkinManager.cpp */; }; + AA29CDED0558741A00961A51 /* PrefsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E010D0477128A005F316C /* PrefsManager.cpp */; }; + AA29CDEE0558741A00961A51 /* SongManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E010F0477128A005F316C /* SongManager.cpp */; }; + AA29CDEF0558741A00961A51 /* ThemeManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01120477128A005F316C /* ThemeManager.cpp */; }; + AA29CDF10558741A00961A51 /* RageSoundDriver_Null.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E012E047712BE005F316C /* RageSoundDriver_Null.cpp */; }; + AA29CDF50558741A00961A51 /* MovieTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01DB04771F11005F316C /* MovieTexture.cpp */; }; + AA29CDF60558741A00961A51 /* SongCacheIndex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01DE04772005005F316C /* SongCacheIndex.cpp */; }; + AA29CDF70558741A00961A51 /* Song.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01E20477205A005F316C /* Song.cpp */; }; + AA29CDF80558741A00961A51 /* RandomSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01E6047720A3005F316C /* RandomSample.cpp */; }; + AA29CDFA0558741A00961A51 /* RageUtil_CharConversions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC23F7E0485E68D005F316C /* RageUtil_CharConversions.cpp */; }; + AA29CDFB0558741A00961A51 /* BannerCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE35EB04967E25005F316C /* BannerCache.cpp */; }; + AA29CDFE0558741A00961A51 /* ScreenSelectMaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1DC47404A4861700D02EE9 /* ScreenSelectMaster.cpp */; }; + AA29CE000558741A00961A51 /* CombinedLifeMeterTug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE443EB04B0F9F600D02EE9 /* CombinedLifeMeterTug.cpp */; }; + AA29CE010558741A00961A51 /* ScoreKeeperRave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE443F304B0FEB700D02EE9 /* ScoreKeeperRave.cpp */; }; + AA29CE030558741A00961A51 /* get.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7A04AFD87300D02EE9 /* get.c */; }; + AA29CE040558741A00961A51 /* maketables.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7C04AFD87300D02EE9 /* maketables.c */; }; + AA29CE050558741A00961A51 /* pcre.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7D04AFD87300D02EE9 /* pcre.c */; }; + AA29CE060558741A00961A51 /* study.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7F04AFD87300D02EE9 /* study.c */; }; + AA29CE070558741A00961A51 /* RageUtil_FileDB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF580A704B3E2DC00D02EE9 /* RageUtil_FileDB.cpp */; }; + AA29CE090558741A00961A51 /* ActorUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA983CA04B9060A00D02EE9 /* ActorUtil.cpp */; }; + AA29CE0B0558741A00961A51 /* ArchHooks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3F283B04BE6DDC00D02EE9 /* ArchHooks.cpp */; }; + AA29CE0C0558741A00961A51 /* InputHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB3B36B04C38B4600D02EE9 /* InputHandler.cpp */; }; + AA29CE0E0558741A00961A51 /* MovieTexture_Null.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB3B39004C5921800D02EE9 /* MovieTexture_Null.cpp */; }; + AA29CE100558741A00961A51 /* RageFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA272C3004CD757100D02EE9 /* RageFile.cpp */; }; + AA29CE140558741A00961A51 /* CrashHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA76D15404D9D2D200D02EE9 /* CrashHandler.cpp */; }; + AA29CE150558741A00961A51 /* CrashHandlerChild.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA76D15504D9D2D200D02EE9 /* CrashHandlerChild.cpp */; }; + AA29CE170558741A00961A51 /* ver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA52E9BD04DBBCF400D02EE9 /* ver.cpp */; }; + AA29CE180558741A00961A51 /* Steps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF430FD04DC98BC00D02EE9 /* Steps.cpp */; }; + AA29CE190558741A00961A51 /* NoteDataUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4F38C004E2D0B700D02EE9 /* NoteDataUtil.cpp */; }; + AA29CE1E0558741A00961A51 /* BeginnerHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC28BB904F758E500D02EE9 /* BeginnerHelper.cpp */; }; + AA29CE200558741A00961A51 /* MovieTexture_FFMpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA14ED0F0509F40000E3FAD7 /* MovieTexture_FFMpeg.cpp */; }; + AA29CE220558741A00961A51 /* ProfileManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1C6556050D234B0073A143 /* ProfileManager.cpp */; }; + AA29CE230558741A00961A51 /* RageSoundReader_WAV.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1C65A6050FD21F0073A143 /* RageSoundReader_WAV.cpp */; }; + AA29CE240558741A00961A51 /* RageSoundReader_FileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFC7FF00513A67700D02EE9 /* RageSoundReader_FileReader.cpp */; }; + AA29CE250558741A00961A51 /* RageSoundReader_MP3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFC7FF10513A67700D02EE9 /* RageSoundReader_MP3.cpp */; }; + AA29CE260558741A00961A51 /* RageSoundReader_Vorbisfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1C65A4050FD21F0073A143 /* RageSoundReader_Vorbisfile.cpp */; }; + AA29CE280558741A00961A51 /* RageSoundReader_Resample_Good.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAE28F4052254A900D02EE9 /* RageSoundReader_Resample_Good.cpp */; }; + AA29CE290558741A00961A51 /* ScreenExit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAECF8BF05265DB600D02EE9 /* ScreenExit.cpp */; }; + AA29CE2B0558741A00961A51 /* ScreenOptionsMaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA53D28405277DAF00D02EE9 /* ScreenOptionsMaster.cpp */; }; + AA29CE2C0558741A00961A51 /* ScreenOptionsMasterPrefs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA53D28605277DAF00D02EE9 /* ScreenOptionsMasterPrefs.cpp */; }; + AA29CE2D0558741A00961A51 /* ScreenReloadSongs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA53D28805277DAF00D02EE9 /* ScreenReloadSongs.cpp */; }; + AA29CE2F0558741A00961A51 /* ScreenInstructions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0033047711F3005F316C /* ScreenInstructions.cpp */; }; + AA29CE300558741A00961A51 /* ScreenHowToPlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E002F047711F3005F316C /* ScreenHowToPlay.cpp */; }; + AA29CE310558741A00961A51 /* PercentageDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD620A5052EC78B00D02EE9 /* PercentageDisplay.cpp */; }; + AA29CE320558741A00961A51 /* ScoreDisplayPercentage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6DAF0805300B3D00D02EE9 /* ScoreDisplayPercentage.cpp */; }; + AA29CE340558741A00961A51 /* ScreenTestInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC622FA05389A0500D02EE9 /* ScreenTestInput.cpp */; }; + AA29CE350558741A00961A51 /* ScreenBookkeeping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADBE360053D5F8A00D02EE9 /* ScreenBookkeeping.cpp */; }; + AA29CE360558741A00961A51 /* ScreenNameEntryTraditional.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADBE362053D5F8A00D02EE9 /* ScreenNameEntryTraditional.cpp */; }; + AA29CE370558741A00961A51 /* Bookkeeper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADBE368053DA38C00D02EE9 /* Bookkeeper.cpp */; }; + AA29CE380558741A00961A51 /* GraphDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF551D0549F39700D02EE9 /* GraphDisplay.cpp */; }; + AA29CE390558741A00961A51 /* ComboGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF55210549F43A00D02EE9 /* ComboGraph.cpp */; }; + AA29CE3A0558741A00961A51 /* Attack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF5541054E736D00D02EE9 /* Attack.cpp */; }; + AA29CE3C0558741A00961A51 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + AA29CE3D0558741A00961A51 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA0F7CE047AC7BF005F316C /* Carbon.framework */; }; + AA29CE3E0558741A00961A51 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA0F7D0047AC7EA005F316C /* IOKit.framework */; }; + AA29CE3F0558741A00961A51 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA0F7D2047ACBC9005F316C /* QuickTime.framework */; }; + AA29CE400558741A00961A51 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA8DD84904A2E51400D02EE9 /* OpenGL.framework */; }; + AA29CE420558741A00961A51 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAF33F2A04FF213100F93C24 /* CoreFoundation.framework */; }; + AA2C9CA10BAD6F54002441E9 /* CodeSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA2C9C9F0BAD6F54002441E9 /* CodeSet.cpp */; }; + AA2C9CA20BAD6F55002441E9 /* CodeSet.h in Headers */ = {isa = PBXBuildFile; fileRef = AA2C9CA00BAD6F54002441E9 /* CodeSet.h */; }; + AA2C9CA30BAD6F55002441E9 /* CodeSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA2C9C9F0BAD6F54002441E9 /* CodeSet.cpp */; }; + AA2CA89F0BB745BD002441E9 /* ScreenContinue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA2CA89D0BB745BD002441E9 /* ScreenContinue.cpp */; }; + AA2CA8A00BB745BD002441E9 /* ScreenContinue.h in Headers */ = {isa = PBXBuildFile; fileRef = AA2CA89E0BB745BD002441E9 /* ScreenContinue.h */; }; + AA2CA8A10BB745BD002441E9 /* ScreenContinue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA2CA89D0BB745BD002441E9 /* ScreenContinue.cpp */; }; + AA2EA0010A770208003A0C11 /* ScreenSelectLanguage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA2E9FFF0A770208003A0C11 /* ScreenSelectLanguage.cpp */; }; + AA2EA0030A770208003A0C11 /* ScreenSelectLanguage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA2E9FFF0A770208003A0C11 /* ScreenSelectLanguage.cpp */; }; + AA2EA0040A770208003A0C11 /* ScreenSelectLanguage.h in Headers */ = {isa = PBXBuildFile; fileRef = AA2EA0000A770208003A0C11 /* ScreenSelectLanguage.h */; }; + AA2FB639091212B0000FD574 /* LifeMeter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA2FB638091212AF000FD574 /* LifeMeter.cpp */; }; + AA31D5210B1EC6540016AB6B /* RageSoundReader_PitchChange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA31D51C0B1EC6540016AB6B /* RageSoundReader_PitchChange.cpp */; }; + AA31D5230B1EC6540016AB6B /* RageSoundReader_SpeedChange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA31D51E0B1EC6540016AB6B /* RageSoundReader_SpeedChange.cpp */; }; + AA31D5250B1EC6550016AB6B /* RageSoundReader_Filter.h in Headers */ = {isa = PBXBuildFile; fileRef = AA31D51B0B1EC6540016AB6B /* RageSoundReader_Filter.h */; }; + AA31D5260B1EC6550016AB6B /* RageSoundReader_PitchChange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA31D51C0B1EC6540016AB6B /* RageSoundReader_PitchChange.cpp */; }; + AA31D5270B1EC6550016AB6B /* RageSoundReader_PitchChange.h in Headers */ = {isa = PBXBuildFile; fileRef = AA31D51D0B1EC6540016AB6B /* RageSoundReader_PitchChange.h */; }; + AA31D5280B1EC6550016AB6B /* RageSoundReader_SpeedChange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA31D51E0B1EC6540016AB6B /* RageSoundReader_SpeedChange.cpp */; }; + AA31D5290B1EC6550016AB6B /* RageSoundReader_SpeedChange.h in Headers */ = {isa = PBXBuildFile; fileRef = AA31D51F0B1EC6540016AB6B /* RageSoundReader_SpeedChange.h */; }; + AA3396B80BDE195E00E1475F /* RageSoundReader_Merge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3396B60BDE195E00E1475F /* RageSoundReader_Merge.cpp */; }; + AA3396B90BDE195E00E1475F /* RageSoundReader_Merge.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3396B70BDE195E00E1475F /* RageSoundReader_Merge.h */; }; + AA3396BA0BDE195E00E1475F /* RageSoundReader_Merge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3396B60BDE195E00E1475F /* RageSoundReader_Merge.cpp */; }; + AA339A7E0BF0FA6400E1475F /* LoadingWindow_Null.h in Headers */ = {isa = PBXBuildFile; fileRef = AA339A7D0BF0FA6300E1475F /* LoadingWindow_Null.h */; }; + AA3A706206AA1645006F755E /* StyleUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3A706006AA1645006F755E /* StyleUtil.cpp */; }; + AA3D5E6008214C77002AA665 /* ScoreDisplayLifeTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D5E5C08214C77002AA665 /* ScoreDisplayLifeTime.cpp */; }; + AA3D5E91082152B6002AA665 /* StreamDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D5E8F082152B6002AA665 /* StreamDisplay.cpp */; }; + AA3D5E95082152E5002AA665 /* LifeMeterTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D5E5A08214C77002AA665 /* LifeMeterTime.cpp */; }; + AA3D790106A275E90064B980 /* RadarValues.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D78FF06A275E90064B980 /* RadarValues.cpp */; }; + AA3D793306A279530064B980 /* DateTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D793106A279530064B980 /* DateTime.cpp */; }; + AA3E3DF109D96A1400A259C7 /* CrashHandlerInternal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3E3DF009D96A1400A259C7 /* CrashHandlerInternal.cpp */; }; + AA3E3DF209D96A1400A259C7 /* CrashHandlerInternal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3E3DF009D96A1400A259C7 /* CrashHandlerInternal.cpp */; }; + AA40D1B909A08D650068C0D5 /* StepMania.pch in Headers */ = {isa = PBXBuildFile; fileRef = AAD64AA10603FE7300EF8CDE /* StepMania.pch */; }; + AA40D1BA09A08D650068C0D5 /* RageBitmapTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD6E04770A7C005F316C /* RageBitmapTexture.h */; }; + AA40D1BB09A08D650068C0D5 /* RageDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD7004770A7C005F316C /* RageDisplay.h */; }; + AA40D1BC09A08D650068C0D5 /* RageException.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD7304770A7C005F316C /* RageException.h */; }; + AA40D1BD09A08D650068C0D5 /* RageInput.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD7504770A7C005F316C /* RageInput.h */; }; + AA40D1BE09A08D650068C0D5 /* RageLog.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD7904770A7C005F316C /* RageLog.h */; }; + AA40D1BF09A08D650068C0D5 /* RageMath.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD7B04770A7C005F316C /* RageMath.h */; }; + AA40D1C009A08D650068C0D5 /* RageSound.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD7D04770A7C005F316C /* RageSound.h */; }; + AA40D1C109A08D650068C0D5 /* RageSoundManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD7F04770A7C005F316C /* RageSoundManager.h */; }; + AA40D1C209A08D650068C0D5 /* RageSoundReader_Preload.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD8104770A7C005F316C /* RageSoundReader_Preload.h */; }; + AA40D1C409A08D650068C0D5 /* RageSoundReader.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD8604770A7C005F316C /* RageSoundReader.h */; }; + AA40D1C509A08D650068C0D5 /* RageTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD8A04770A7C005F316C /* RageTexture.h */; }; + AA40D1C609A08D650068C0D5 /* RageTextureManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD8C04770A7C005F316C /* RageTextureManager.h */; }; + AA40D1C709A08D650068C0D5 /* RageThreads.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD8E04770A7C005F316C /* RageThreads.h */; }; + AA40D1C809A08D650068C0D5 /* RageTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD9004770A7C005F316C /* RageTimer.h */; }; + AA40D1C909A08D650068C0D5 /* RageTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD9104770A7C005F316C /* RageTypes.h */; }; + AA40D1CA09A08D650068C0D5 /* RageUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD9304770A7C005F316C /* RageUtil.h */; }; + AA40D1CB09A08D650068C0D5 /* Character.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDCC04770C79005F316C /* Character.h */; }; + AA40D1CC09A08D650068C0D5 /* CodeDetector.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDCE04770C79005F316C /* CodeDetector.h */; }; + AA40D1CD09A08D650068C0D5 /* Course.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDD004770C79005F316C /* Course.h */; }; + AA40D1CE09A08D650068C0D5 /* Font.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDD204770C79005F316C /* Font.h */; }; + AA40D1CF09A08D650068C0D5 /* FontCharAliases.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDD404770C79005F316C /* FontCharAliases.h */; }; + AA40D1D009A08D650068C0D5 /* FontCharmaps.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDD604770C79005F316C /* FontCharmaps.h */; }; + AA40D1D109A08D650068C0D5 /* FontManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDD804770C79005F316C /* FontManager.h */; }; + AA40D1D209A08D650068C0D5 /* GameConstantsAndTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDDA04770C79005F316C /* GameConstantsAndTypes.h */; }; + AA40D1D309A08D650068C0D5 /* GameInput.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDDE04770C79005F316C /* GameInput.h */; }; + AA40D1D409A08D650068C0D5 /* Grade.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDE004770C79005F316C /* Grade.h */; }; + AA40D1D509A08D650068C0D5 /* Inventory.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDE204770C79005F316C /* Inventory.h */; }; + AA40D1D609A08D650068C0D5 /* LyricsLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDE404770C79005F316C /* LyricsLoader.h */; }; + AA40D1D709A08D650068C0D5 /* NoteData.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDE604770C79005F316C /* NoteData.h */; }; + AA40D1D809A08D650068C0D5 /* NoteDataWithScoring.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDE804770C79005F316C /* NoteDataWithScoring.h */; }; + AA40D1DA09A08D650068C0D5 /* NotesLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDEE04770C79005F316C /* NotesLoader.h */; }; + AA40D1DB09A08D650068C0D5 /* NotesLoaderBMS.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDF004770C79005F316C /* NotesLoaderBMS.h */; }; + AA40D1DC09A08D650068C0D5 /* NotesLoaderDWI.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDF204770C79005F316C /* NotesLoaderDWI.h */; }; + AA40D1DD09A08D650068C0D5 /* NotesLoaderKSF.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDF404770C79005F316C /* NotesLoaderKSF.h */; }; + AA40D1DE09A08D650068C0D5 /* NotesLoaderSM.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDF604770C79005F316C /* NotesLoaderSM.h */; }; + AA40D1DF09A08D650068C0D5 /* NotesWriterDWI.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDF804770C79005F316C /* NotesWriterDWI.h */; }; + AA40D1E009A08D650068C0D5 /* NotesWriterSM.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDFA04770C79005F316C /* NotesWriterSM.h */; }; + AA40D1E109A08D650068C0D5 /* NoteTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDFC04770C79005F316C /* NoteTypes.h */; }; + AA40D1E209A08D650068C0D5 /* Player.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDFE04770C79005F316C /* Player.h */; }; + AA40D1E309A08D650068C0D5 /* PlayerAI.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE0004770C79005F316C /* PlayerAI.h */; }; + AA40D1E409A08D650068C0D5 /* PlayerNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE0204770C79005F316C /* PlayerNumber.h */; }; + AA40D1E509A08D650068C0D5 /* PlayerOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE0404770C79005F316C /* PlayerOptions.h */; }; + AA40D1E609A08D650068C0D5 /* SongOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE0804770C79005F316C /* SongOptions.h */; }; + AA40D1E709A08D650068C0D5 /* StageStats.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE0A04770C79005F316C /* StageStats.h */; }; + AA40D1E909A08D650068C0D5 /* TitleSubstitution.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE0F04770C79005F316C /* TitleSubstitution.h */; }; + AA40D1EA09A08D650068C0D5 /* IniFile.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE5904770CAA005F316C /* IniFile.h */; }; + AA40D1EB09A08D650068C0D5 /* MsdFile.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE5B04770CAA005F316C /* MsdFile.h */; }; + AA40D1EC09A08D650068C0D5 /* global.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE6004770CF7005F316C /* global.h */; }; + AA40D1ED09A08D650068C0D5 /* ScreenDimensions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE6104770CF7005F316C /* ScreenDimensions.h */; }; + AA40D1EE09A08D650068C0D5 /* StdString.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE6204770CF7005F316C /* StdString.h */; }; + AA40D1EF09A08D650068C0D5 /* StepMania.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE6404770CF7005F316C /* StepMania.h */; }; + AA40D1F009A08D650068C0D5 /* Banner.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE6F04770D61005F316C /* Banner.h */; }; + AA40D1F109A08D650068C0D5 /* BPMDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE7704770E7C005F316C /* BPMDisplay.h */; }; + AA40D1F209A08D650068C0D5 /* CourseContentsList.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE7904770E7C005F316C /* CourseContentsList.h */; }; + AA40D1F409A08D650068C0D5 /* DifficultyIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE7F04770E7C005F316C /* DifficultyIcon.h */; }; + AA40D1F709A08D650068C0D5 /* EditMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE8504770E7C005F316C /* EditMenu.h */; }; + AA40D1F809A08D650068C0D5 /* FadingBanner.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE8B04770E7C005F316C /* FadingBanner.h */; }; + AA40D1F909A08D650068C0D5 /* GradeDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE8D04770E7C005F316C /* GradeDisplay.h */; }; + AA40D1FA09A08D650068C0D5 /* GrooveRadar.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE9104770E7C005F316C /* GrooveRadar.h */; }; + AA40D1FC09A08D650068C0D5 /* HelpDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE9504770E7C005F316C /* HelpDisplay.h */; }; + AA40D1FD09A08D650068C0D5 /* MenuTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE9B04770E7C005F316C /* MenuTimer.h */; }; + AA40D1FE09A08D650068C0D5 /* MeterDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE9D04770E7C005F316C /* MeterDisplay.h */; }; + AA40D20209A08D650068C0D5 /* MusicWheel.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFEA504770E7C005F316C /* MusicWheel.h */; }; + AA40D20309A08D650068C0D5 /* MusicWheelItem.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFEA704770E7C005F316C /* MusicWheelItem.h */; }; + AA40D20609A08D650068C0D5 /* OptionsCursor.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFEAD04770E7C005F316C /* OptionsCursor.h */; }; + AA40D20709A08D650068C0D5 /* ScrollBar.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFEAF04770E7C005F316C /* ScrollBar.h */; }; + AA40D20909A08D650068C0D5 /* SnapDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFEB304770E7C005F316C /* SnapDisplay.h */; }; + AA40D20A09A08D650068C0D5 /* TextBanner.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFEB504770E7C005F316C /* TextBanner.h */; }; + AA40D20B09A08D650068C0D5 /* WheelNotifyIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFEB704770E7C005F316C /* WheelNotifyIcon.h */; }; + AA40D20C09A08D650068C0D5 /* ArrowEffects.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFEFE04770F63005F316C /* ArrowEffects.h */; }; + AA40D20D09A08D650068C0D5 /* Background.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF0004770F63005F316C /* Background.h */; }; + AA40D20E09A08D650068C0D5 /* BGAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF0204770F63005F316C /* BGAnimation.h */; }; + AA40D20F09A08D650068C0D5 /* BGAnimationLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF0404770F63005F316C /* BGAnimationLayer.h */; }; + AA40D21109A08D650068C0D5 /* DancingCharacters.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF0804770F63005F316C /* DancingCharacters.h */; }; + AA40D21209A08D650068C0D5 /* GhostArrowRow.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF0E04770F63005F316C /* GhostArrowRow.h */; }; + AA40D21309A08D650068C0D5 /* HoldJudgment.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF1604770F63005F316C /* HoldJudgment.h */; }; + AA40D21509A08D650068C0D5 /* LifeMeter.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF1A04770F63005F316C /* LifeMeter.h */; }; + AA40D21609A08D650068C0D5 /* LifeMeterBar.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF1C04770F63005F316C /* LifeMeterBar.h */; }; + AA40D21709A08D650068C0D5 /* LifeMeterBattery.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF1E04770F63005F316C /* LifeMeterBattery.h */; }; + AA40D21809A08D650068C0D5 /* LyricDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF2004770F63005F316C /* LyricDisplay.h */; }; + AA40D21909A08D650068C0D5 /* NoteDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF2204770F63005F316C /* NoteDisplay.h */; }; + AA40D21A09A08D650068C0D5 /* NoteField.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF2404770F63005F316C /* NoteField.h */; }; + AA40D21B09A08D650068C0D5 /* ScoreDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF2604770F63005F316C /* ScoreDisplay.h */; }; + AA40D21C09A08D650068C0D5 /* ScoreDisplayBattle.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF2804770F63005F316C /* ScoreDisplayBattle.h */; }; + AA40D21D09A08D650068C0D5 /* ScoreDisplayNormal.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF2A04770F63005F316C /* ScoreDisplayNormal.h */; }; + AA40D21E09A08D650068C0D5 /* ScoreDisplayOni.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF2C04770F63005F316C /* ScoreDisplayOni.h */; }; + AA40D21F09A08D650068C0D5 /* ScoreDisplayRave.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF2E04770F63005F316C /* ScoreDisplayRave.h */; }; + AA40D22009A08D650068C0D5 /* ScoreKeeper.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF3004770F63005F316C /* ScoreKeeper.h */; }; + AA40D22109A08D650068C0D5 /* Transition.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF7104770F86005F316C /* Transition.h */; }; + AA40D22209A08D650068C0D5 /* Actor.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF7604770FFD005F316C /* Actor.h */; }; + AA40D22309A08D650068C0D5 /* ActorFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF7804770FFD005F316C /* ActorFrame.h */; }; + AA40D22409A08D650068C0D5 /* ActorScroller.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF7A04770FFD005F316C /* ActorScroller.h */; }; + AA40D22509A08D650068C0D5 /* BitmapText.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFFBA04770FFD005F316C /* BitmapText.h */; }; + AA40D22609A08D650068C0D5 /* Model.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFFBE04770FFD005F316C /* Model.h */; }; + AA40D22709A08D650068C0D5 /* ModelTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFFC004770FFD005F316C /* ModelTypes.h */; }; + AA40D22809A08D650068C0D5 /* Quad.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFFC104770FFD005F316C /* Quad.h */; }; + AA40D22909A08D650068C0D5 /* Sprite.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFFC304770FFD005F316C /* Sprite.h */; }; + AA40D22A09A08D650068C0D5 /* Screen.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E000B047711F3005F316C /* Screen.h */; }; + AA40D22B09A08D650068C0D5 /* ScreenAttract.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0011047711F3005F316C /* ScreenAttract.h */; }; + AA40D22D09A08D650068C0D5 /* ScreenDemonstration.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E001C047711F3005F316C /* ScreenDemonstration.h */; }; + AA40D22E09A08D650068C0D5 /* ScreenEdit.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E001E047711F3005F316C /* ScreenEdit.h */; }; + AA40D22F09A08D650068C0D5 /* ScreenEditMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0020047711F3005F316C /* ScreenEditMenu.h */; }; + AA40D23009A08D650068C0D5 /* ScreenEvaluation.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0022047711F3005F316C /* ScreenEvaluation.h */; }; + AA40D23309A08D650068C0D5 /* ScreenGameplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E002A047711F3005F316C /* ScreenGameplay.h */; }; + AA40D23409A08D650068C0D5 /* ScreenInstructions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0034047711F3005F316C /* ScreenInstructions.h */; }; + AA40D23509A08D650068C0D5 /* ScreenJukebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0038047711F3005F316C /* ScreenJukebox.h */; }; + AA40D23609A08D650068C0D5 /* ScreenManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0040047711F3005F316C /* ScreenManager.h */; }; + AA40D23709A08D650068C0D5 /* ScreenMapControllers.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0042047711F3005F316C /* ScreenMapControllers.h */; }; + AA40D23809A08D650068C0D5 /* ScreenMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0044047711F3005F316C /* ScreenMessage.h */; }; + AA40D23909A08D650068C0D5 /* ScreenMiniMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0046047711F3005F316C /* ScreenMiniMenu.h */; }; + AA40D23B09A08D650068C0D5 /* ScreenNameEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E004A047711F3005F316C /* ScreenNameEntry.h */; }; + AA40D23C09A08D650068C0D5 /* ScreenOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E004C047711F3005F316C /* ScreenOptions.h */; }; + AA40D23D09A08D650068C0D5 /* ScreenPlayerOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0050047711F3005F316C /* ScreenPlayerOptions.h */; }; + AA40D23E09A08D650068C0D5 /* ScreenPrompt.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0052047711F3005F316C /* ScreenPrompt.h */; }; + AA40D23F09A08D650068C0D5 /* ScreenRanking.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0054047711F3005F316C /* ScreenRanking.h */; }; + AA40D24009A08D650068C0D5 /* ScreenSandbox.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0058047711F3005F316C /* ScreenSandbox.h */; }; + AA40D24109A08D650068C0D5 /* ScreenSelect.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E005A047711F3005F316C /* ScreenSelect.h */; }; + AA40D24209A08D650068C0D5 /* ScreenSelectCharacter.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E005C047711F3005F316C /* ScreenSelectCharacter.h */; }; + AA40D24609A08D650068C0D5 /* ScreenSelectMusic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E006A047711F3005F316C /* ScreenSelectMusic.h */; }; + AA40D24809A08D650068C0D5 /* ScreenSongOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0070047711F3005F316C /* ScreenSongOptions.h */; }; + AA40D24A09A08D650068C0D5 /* ScreenTestFonts.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E007A047711F3005F316C /* ScreenTestFonts.h */; }; + AA40D24B09A08D650068C0D5 /* ScreenTestSound.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E007C047711F3005F316C /* ScreenTestSound.h */; }; + AA40D24C09A08D650068C0D5 /* ScreenTextEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E007E047711F3005F316C /* ScreenTextEntry.h */; }; + AA40D24D09A08D650068C0D5 /* ScreenTitleMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0080047711F3005F316C /* ScreenTitleMenu.h */; }; + AA40D24E09A08D650068C0D5 /* AnnouncerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01000477128A005F316C /* AnnouncerManager.h */; }; + AA40D24F09A08D650068C0D5 /* GameManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01020477128A005F316C /* GameManager.h */; }; + AA40D25009A08D650068C0D5 /* GameState.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01040477128A005F316C /* GameState.h */; }; + AA40D25109A08D650068C0D5 /* InputFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01060477128A005F316C /* InputFilter.h */; }; + AA40D25209A08D650068C0D5 /* InputMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01080477128A005F316C /* InputMapper.h */; }; + AA40D25309A08D650068C0D5 /* InputQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E010A0477128A005F316C /* InputQueue.h */; }; + AA40D25409A08D650068C0D5 /* NoteSkinManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E010C0477128A005F316C /* NoteSkinManager.h */; }; + AA40D25509A08D650068C0D5 /* PrefsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E010E0477128A005F316C /* PrefsManager.h */; }; + AA40D25609A08D650068C0D5 /* SongManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01100477128A005F316C /* SongManager.h */; }; + AA40D25709A08D650068C0D5 /* ThemeManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01130477128A005F316C /* ThemeManager.h */; }; + AA40D25809A08D650068C0D5 /* RageSoundDriver_Null.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E012F047712BE005F316C /* RageSoundDriver_Null.h */; }; + AA40D25909A08D650068C0D5 /* LowLevelWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01630477136A005F316C /* LowLevelWindow.h */; }; + AA40D25A09A08D650068C0D5 /* SongCacheIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01DF04772005005F316C /* SongCacheIndex.h */; }; + AA40D25C09A08D650068C0D5 /* RandomSample.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01E7047720A3005F316C /* RandomSample.h */; }; + AA40D25E09A08D650068C0D5 /* RageUtil_CharConversions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC23F7F0485E68D005F316C /* RageUtil_CharConversions.h */; }; + AA40D25F09A08D650068C0D5 /* BannerCache.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE35EC04967E26005F316C /* BannerCache.h */; }; + AA40D26109A08D650068C0D5 /* arch_default.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE36F60497CE16005F316C /* arch_default.h */; }; + AA40D26309A08D650068C0D5 /* ArchHooks.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE36FC0497CE44005F316C /* ArchHooks.h */; }; + AA40D26409A08D650068C0D5 /* RageSoundDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE37030497CF85005F316C /* RageSoundDriver.h */; }; + AA40D26609A08D650068C0D5 /* ActorUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1DC47204A485E900D02EE9 /* ActorUtil.h */; }; + AA40D26709A08D650068C0D5 /* ScreenSelectMaster.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1DC47504A4861700D02EE9 /* ScreenSelectMaster.h */; }; + AA40D26B09A08D650068C0D5 /* CombinedLifeMeterTug.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE443EC04B0F9F600D02EE9 /* CombinedLifeMeterTug.h */; }; + AA40D26C09A08D650068C0D5 /* ScoreKeeperRave.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE443F404B0FEB700D02EE9 /* ScoreKeeperRave.h */; }; + AA40D26D09A08D650068C0D5 /* internal.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8B6C7B04AFD87300D02EE9 /* internal.h */; }; + AA40D26E09A08D650068C0D5 /* pcre.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8B6C7E04AFD87300D02EE9 /* pcre.h */; }; + AA40D26F09A08D650068C0D5 /* RageUtil_FileDB.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF580A804B3E2DC00D02EE9 /* RageUtil_FileDB.h */; }; + AA40D27109A08D650068C0D5 /* LoadingWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEF3D1004B53E2900D02EE9 /* LoadingWindow.h */; }; + AA40D27209A08D650068C0D5 /* InputHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB3B36C04C38B4600D02EE9 /* InputHandler.h */; }; + AA40D27309A08D650068C0D5 /* MovieTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB3B37704C38BF600D02EE9 /* MovieTexture.h */; }; + AA40D27509A08D650068C0D5 /* MovieTexture_Null.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB3B39104C5921800D02EE9 /* MovieTexture_Null.h */; }; + AA40D27609A08D650068C0D5 /* RageFile.h in Headers */ = {isa = PBXBuildFile; fileRef = AA272C3104CD757100D02EE9 /* RageFile.h */; }; + AA40D27709A08D650068C0D5 /* RageInputDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD7704770A7C005F316C /* RageInputDevice.h */; }; + AA40D27809A08D650068C0D5 /* RageSoundReader_FileReader.h in Headers */ = {isa = PBXBuildFile; fileRef = AADB4E7A04D4FE5D00D02EE9 /* RageSoundReader_FileReader.h */; }; + AA40D27909A08D650068C0D5 /* arch_setup.h in Headers */ = {isa = PBXBuildFile; fileRef = AADB4E8F04D5263200D02EE9 /* arch_setup.h */; }; + AA40D27A09A08D650068C0D5 /* CrashHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = AADB4E8804D50FB900D02EE9 /* CrashHandler.h */; }; + AA40D27B09A08D650068C0D5 /* CrashHandlerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = AADB4E8A04D50FB900D02EE9 /* CrashHandlerInternal.h */; }; + AA40D27C09A08D650068C0D5 /* Crash.h in Headers */ = {isa = PBXBuildFile; fileRef = AADB4F5904D9220700D02EE9 /* Crash.h */; }; + AA40D27D09A08D650068C0D5 /* Steps.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF430FE04DC98BC00D02EE9 /* Steps.h */; }; + AA40D27E09A08D650068C0D5 /* NoteDataUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA4F38C104E2D0B700D02EE9 /* NoteDataUtil.h */; }; + AA40D27F09A08D650068C0D5 /* ProductInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = AAADA4AE04E5F3DE00D02EE9 /* ProductInfo.h */; }; + AA40D28009A08D650068C0D5 /* BeginnerHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC28BBA04F758E500D02EE9 /* BeginnerHelper.h */; }; + AA40D28209A08D650068C0D5 /* MovieTexture_FFMpeg.h in Headers */ = {isa = PBXBuildFile; fileRef = AA14ED100509F40000E3FAD7 /* MovieTexture_FFMpeg.h */; }; + AA40D28309A08D650068C0D5 /* ProfileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1C6557050D234B0073A143 /* ProfileManager.h */; }; + AA40D28409A08D650068C0D5 /* RageSoundReader_WAV.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1C65A7050FD21F0073A143 /* RageSoundReader_WAV.h */; }; + AA40D28609A08D650068C0D5 /* RageSoundReader_Vorbisfile.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1C65A5050FD21F0073A143 /* RageSoundReader_Vorbisfile.h */; }; + AA40D28809A08D650068C0D5 /* RageSoundReader_Resample_Good.h in Headers */ = {isa = PBXBuildFile; fileRef = AAAE28F5052254A900D02EE9 /* RageSoundReader_Resample_Good.h */; }; + AA40D28909A08D650068C0D5 /* ScreenExit.h in Headers */ = {isa = PBXBuildFile; fileRef = AAECF8C005265DB600D02EE9 /* ScreenExit.h */; }; + AA40D28A09A08D650068C0D5 /* ScreenOptionsMaster.h in Headers */ = {isa = PBXBuildFile; fileRef = AA53D28505277DAF00D02EE9 /* ScreenOptionsMaster.h */; }; + AA40D28B09A08D650068C0D5 /* ScreenOptionsMasterPrefs.h in Headers */ = {isa = PBXBuildFile; fileRef = AA53D28705277DAF00D02EE9 /* ScreenOptionsMasterPrefs.h */; }; + AA40D28C09A08D650068C0D5 /* ScreenReloadSongs.h in Headers */ = {isa = PBXBuildFile; fileRef = AA53D28905277DAF00D02EE9 /* ScreenReloadSongs.h */; }; + AA40D28D09A08D650068C0D5 /* ScreenHowToPlay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0030047711F3005F316C /* ScreenHowToPlay.h */; }; + AA40D28E09A08D650068C0D5 /* PercentageDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AAD620A6052EC78B00D02EE9 /* PercentageDisplay.h */; }; + AA40D28F09A08D650068C0D5 /* ScoreDisplayPercentage.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6DAF0905300B3D00D02EE9 /* ScoreDisplayPercentage.h */; }; + AA40D29109A08D650068C0D5 /* ScreenTestInput.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC622FB05389A0500D02EE9 /* ScreenTestInput.h */; }; + AA40D29209A08D650068C0D5 /* ScreenBookkeeping.h in Headers */ = {isa = PBXBuildFile; fileRef = AADBE361053D5F8A00D02EE9 /* ScreenBookkeeping.h */; }; + AA40D29309A08D650068C0D5 /* ScreenNameEntryTraditional.h in Headers */ = {isa = PBXBuildFile; fileRef = AADBE363053D5F8A00D02EE9 /* ScreenNameEntryTraditional.h */; }; + AA40D29409A08D650068C0D5 /* Bookkeeper.h in Headers */ = {isa = PBXBuildFile; fileRef = AADBE369053DA38C00D02EE9 /* Bookkeeper.h */; }; + AA40D29509A08D650068C0D5 /* GraphDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF551E0549F39700D02EE9 /* GraphDisplay.h */; }; + AA40D29609A08D650068C0D5 /* ComboGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF55220549F43A00D02EE9 /* ComboGraph.h */; }; + AA40D29709A08D650068C0D5 /* Attack.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF5542054E736D00D02EE9 /* Attack.h */; }; + AA40D29809A08D650068C0D5 /* RageTextureID.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9EC2F1055F5126007E5098 /* RageTextureID.h */; }; + AA40D29909A08D650068C0D5 /* CombinedLifeMeter.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9D236C0561B6CE00FC7F14 /* CombinedLifeMeter.h */; }; + AA40D29A09A08D650068C0D5 /* LightsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC6DCE40567660A00B5D56F /* LightsManager.h */; }; + AA40D29B09A08D650068C0D5 /* LightsDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC6DCEE0567663800B5D56F /* LightsDriver.h */; }; + AA40D29D09A08D650068C0D5 /* PaneDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC6DDDF0569C71000B5D56F /* PaneDisplay.h */; }; + AA40D29E09A08D650068C0D5 /* DifficultyList.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC6DDE70569C80900B5D56F /* DifficultyList.h */; }; + AA40D29F09A08D650068C0D5 /* LightsDriver_SystemMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB691F305704FA50078BED4 /* LightsDriver_SystemMessage.h */; }; + AA40D2A009A08D650068C0D5 /* AttackDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB005F10579B8CB000BBA58 /* AttackDisplay.h */; }; + AA40D2A109A08D650068C0D5 /* RageFileDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0085C057F4F7A000BBA58 /* RageFileDriver.h */; }; + AA40D2A209A08D650068C0D5 /* RageFileDriverDirect.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0085E057F4F7A000BBA58 /* RageFileDriverDirect.h */; }; + AA40D2A309A08D650068C0D5 /* RageFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB00860057F4F7A000BBA58 /* RageFileManager.h */; }; + AA40D2A409A08D650068C0D5 /* RageFileDriverZip.h in Headers */ = {isa = PBXBuildFile; fileRef = AA251B7605841FCE00027ACB /* RageFileDriverZip.h */; }; + AA40D2A509A08D650068C0D5 /* Style.h in Headers */ = {isa = PBXBuildFile; fileRef = AA25200D0587225500027ACB /* Style.h */; }; + AA40D2A609A08D650068C0D5 /* MemoryCardManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA28B47B058F2F5D0097C109 /* MemoryCardManager.h */; }; + AA40D2A709A08D650068C0D5 /* MemoryCardDriver_Null.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE78760591287100E8BF50 /* MemoryCardDriver_Null.h */; }; + AA40D2A809A08D650068C0D5 /* DualScrollBar.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE788B05912B0600E8BF50 /* DualScrollBar.h */; }; + AA40D2A909A08D650068C0D5 /* TimingData.h in Headers */ = {isa = PBXBuildFile; fileRef = AA729C430599B50D00779F33 /* TimingData.h */; }; + AA40D2AA09A08D650068C0D5 /* MemoryCardDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA729C470599B54D00779F33 /* MemoryCardDisplay.h */; }; + AA40D2AB09A08D650068C0D5 /* ReceptorArrow.h in Headers */ = {isa = PBXBuildFile; fileRef = AA729C4F0599B58D00779F33 /* ReceptorArrow.h */; }; + AA40D2AC09A08D650068C0D5 /* ReceptorArrowRow.h in Headers */ = {isa = PBXBuildFile; fileRef = AA729C510599B58D00779F33 /* ReceptorArrowRow.h */; }; + AA40D2AD09A08D650068C0D5 /* ScreenEnding.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE321B05ACD8ED001A0E84 /* ScreenEnding.h */; }; + AA40D2AE09A08D650068C0D5 /* Foreground.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE321F05ACD931001A0E84 /* Foreground.h */; }; + AA40D2AF09A08D650068C0D5 /* RageFileDriverDirectHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE322305ACDA52001A0E84 /* RageFileDriverDirectHelpers.h */; }; + AA40D2B009A08D650068C0D5 /* RageUtil_CircularBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = AAD3D5AB05B5AB4E00014FAC /* RageUtil_CircularBuffer.h */; }; + AA40D2B109A08D650068C0D5 /* ModelManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF4206605D63FA700056441 /* ModelManager.h */; }; + AA40D2B209A08D650068C0D5 /* RageModelGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF4206A05D6400800056441 /* RageModelGeometry.h */; }; + AA40D2B309A08D650068C0D5 /* Profile.h in Headers */ = {isa = PBXBuildFile; fileRef = AA50201E05D6D7B200ACEFD0 /* Profile.h */; }; + AA40D2B409A08D650068C0D5 /* XmlFile.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC6889A05D7F3C800964E6D /* XmlFile.h */; }; + AA40D2B509A08D650068C0D5 /* HighScore.h in Headers */ = {isa = PBXBuildFile; fileRef = AABBD80705D8E9FC00B44FC2 /* HighScore.h */; }; + AA40D2B609A08D650068C0D5 /* CryptManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AABD0B3705DF3F22004F7929 /* CryptManager.h */; }; + AA40D2B809A08D650068C0D5 /* Backtrace.h in Headers */ = {isa = PBXBuildFile; fileRef = AAED6F290601C528002D2DEE /* Backtrace.h */; }; + AA40D2B909A08D650068C0D5 /* BacktraceNames.h in Headers */ = {isa = PBXBuildFile; fileRef = AAED6F2B0601C528002D2DEE /* BacktraceNames.h */; }; + AA40D2BA09A08D650068C0D5 /* ScreenSetTime.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0A3DE7060513A00044E6B1 /* ScreenSetTime.h */; }; + AA40D2BB09A08D650068C0D5 /* NetworkSyncManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE7804A060814AC0034E65F /* NetworkSyncManager.h */; }; + AA40D2BD09A08D650068C0D5 /* ActiveAttackList.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE7812C0608249E0034E65F /* ActiveAttackList.h */; }; + AA40D2BF09A08D650068C0D5 /* ScreenTestLights.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF7435A06110E8D00B19AD1 /* ScreenTestLights.h */; }; + AA40D2C009A08D650068C0D5 /* RageDisplay_Null.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF7458F061181F700B19AD1 /* RageDisplay_Null.h */; }; + AA40D2CB09A08D650068C0D5 /* EnumHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8F136F0624BAB200C6A467 /* EnumHelper.h */; }; + AA40D2CC09A08D650068C0D5 /* RageSoundPosMap.h in Headers */ = {isa = PBXBuildFile; fileRef = AAD36083062BB8AE00D0CED8 /* RageSoundPosMap.h */; }; + AA40D2CD09A08D650068C0D5 /* SignalHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = AADB4E8C04D50FB900D02EE9 /* SignalHandler.h */; }; + AA40D2CE09A08D650068C0D5 /* CourseUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA5C73F80637A5F000AFB891 /* CourseUtil.h */; }; + AA40D2CF09A08D650068C0D5 /* SongUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA5C73FA0637A5F000AFB891 /* SongUtil.h */; }; + AA40D2D009A08D650068C0D5 /* StepsUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA5C73FC0637A5F000AFB891 /* StepsUtil.h */; }; + AA40D2D109A08D650068C0D5 /* ScreenWithMenuElements.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA6BFEB0644AB3700AFBBC8 /* ScreenWithMenuElements.h */; }; + AA40D2F209A08D650068C0D5 /* RageSurface_Load_GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = AABBF66D0659E78D00738526 /* RageSurface_Load_GIF.h */; }; + AA40D2F309A08D650068C0D5 /* RageSurface_Load_JPEG.h in Headers */ = {isa = PBXBuildFile; fileRef = AABBF66F0659E78D00738526 /* RageSurface_Load_JPEG.h */; }; + AA40D2F409A08D650068C0D5 /* RageSurface_Load_PNG.h in Headers */ = {isa = PBXBuildFile; fileRef = AABBF6710659E78D00738526 /* RageSurface_Load_PNG.h */; }; + AA40D2F509A08D650068C0D5 /* RageSurface_Load_XPM.h in Headers */ = {isa = PBXBuildFile; fileRef = AABBF6730659E78D00738526 /* RageSurface_Load_XPM.h */; }; + AA40D2F609A08D650068C0D5 /* RageSurface_Load.h in Headers */ = {isa = PBXBuildFile; fileRef = AABBF6750659E78D00738526 /* RageSurface_Load.h */; }; + AA40D2F809A08D650068C0D5 /* Difficulty.h in Headers */ = {isa = PBXBuildFile; fileRef = AAD6A713065E0FDF0042165A /* Difficulty.h */; }; + AA40D2F909A08D650068C0D5 /* Foreach.h in Headers */ = {isa = PBXBuildFile; fileRef = AA70E3640663112800DAE1FD /* Foreach.h */; }; + AA40D2FA09A08D650068C0D5 /* Trail.h in Headers */ = {isa = PBXBuildFile; fileRef = AA70E3660663112800DAE1FD /* Trail.h */; }; + AA40D2FB09A08D650068C0D5 /* TrailUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA70E3680663112800DAE1FD /* TrailUtil.h */; }; + AA40D2FC09A08D650068C0D5 /* ScreenNetworkOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA42F5E7067068D30013509E /* ScreenNetworkOptions.h */; }; + AA40D2FD09A08D650068C0D5 /* Dialog.h in Headers */ = {isa = PBXBuildFile; fileRef = AAD675F006795175006002B0 /* Dialog.h */; }; + AA40D2FE09A08D650068C0D5 /* DialogDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = AAD675F106795175006002B0 /* DialogDriver.h */; }; + AA40D30009A08D650068C0D5 /* Threads.h in Headers */ = {isa = PBXBuildFile; fileRef = AA60E0BC067992D7008ADC41 /* Threads.h */; }; + AA40D30109A08D650068C0D5 /* Threads_Pthreads.h in Headers */ = {isa = PBXBuildFile; fileRef = AA60E0BE067992D7008ADC41 /* Threads_Pthreads.h */; }; + AA40D30209A08D650068C0D5 /* RageSurface.h in Headers */ = {isa = PBXBuildFile; fileRef = AA91587A067D2C2C00078E36 /* RageSurface.h */; }; + AA40D30309A08D650068C0D5 /* RageSurface_Load_BMP.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9091A0067ED43000C1FCFF /* RageSurface_Load_BMP.h */; }; + AA40D30409A08D650068C0D5 /* RageSurface_Save_BMP.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9091A4067ED46400C1FCFF /* RageSurface_Save_BMP.h */; }; + AA40D30509A08D650068C0D5 /* GameSoundManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC9F32F069E22BB00D53E2C /* GameSoundManager.h */; }; + AA40D30609A08D650068C0D5 /* MemoryCardDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC9F333069E22CF00D53E2C /* MemoryCardDriver.h */; }; + AA40D30709A08D650068C0D5 /* RadarValues.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3D790006A275E90064B980 /* RadarValues.h */; }; + AA40D30809A08D650068C0D5 /* DateTime.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3D793206A279530064B980 /* DateTime.h */; }; + AA40D30909A08D650068C0D5 /* CommonMetrics.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3A705E06AA144C006F755E /* CommonMetrics.h */; }; + AA40D30A09A08D650068C0D5 /* StyleUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3A706106AA1645006F755E /* StyleUtil.h */; }; + AA40D30B09A08D650068C0D5 /* Game.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9A78AA06B5C72200B03E97 /* Game.h */; }; + AA40D30C09A08D650068C0D5 /* ScreenNetSelectMusic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA22CBA406DE909C0083BA97 /* ScreenNetSelectMusic.h */; }; + AA40D30E09A08D650068C0D5 /* RageSurfaceUtils_Palettize.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB9C8AC06EAF64400AD97CD /* RageSurfaceUtils_Palettize.h */; }; + AA40D30F09A08D650068C0D5 /* RageSurfaceUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB9C8AE06EAF64400AD97CD /* RageSurfaceUtils.h */; }; + AA40D31009A08D650068C0D5 /* ScreenNetEvaluation.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB9C8B406EAF66C00AD97CD /* ScreenNetEvaluation.h */; }; + AA40D31109A08D650068C0D5 /* RageFileDriverMemory.h in Headers */ = {isa = PBXBuildFile; fileRef = AA64218706EC606F00C21584 /* RageFileDriverMemory.h */; }; + AA40D31209A08D650068C0D5 /* DarwinThreadHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8A3EC806EDDAE4002F25AB /* DarwinThreadHelpers.h */; }; + AA40D31309A08D650068C0D5 /* RageUtil_BackgroundLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8A405006EEFF72002F25AB /* RageUtil_BackgroundLoader.h */; }; + AA40D31409A08D650068C0D5 /* Preference.h in Headers */ = {isa = PBXBuildFile; fileRef = AA54709106F559DF008EB9B2 /* Preference.h */; }; + AA40D31509A08D650068C0D5 /* ThemeMetric.h in Headers */ = {isa = PBXBuildFile; fileRef = AA21D5A10712AE16008B825F /* ThemeMetric.h */; }; + AA40D31609A08D650068C0D5 /* InputHandler_MonkeyKeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFC6CF0072A30440053AAD3 /* InputHandler_MonkeyKeyboard.h */; }; + AA40D31709A08D650068C0D5 /* AutoKeysounds.h in Headers */ = {isa = PBXBuildFile; fileRef = AAAB2CDE072BD2EC00CD9FC9 /* AutoKeysounds.h */; }; + AA40D31809A08D650068C0D5 /* RageSoundMixBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = AAAB2CE2072BD2FA00CD9FC9 /* RageSoundMixBuffer.h */; }; + AA40D31909A08D650068C0D5 /* RageSoundReader_Chain.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7ADC24072CAB7F00C50A7F /* RageSoundReader_Chain.h */; }; + AA40D31A09A08D650068C0D5 /* RageSoundUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7ADC26072CAB7F00C50A7F /* RageSoundUtil.h */; }; + AA40D31B09A08D650068C0D5 /* ScreenNetRoom.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF793F2074FE69E00D74516 /* ScreenNetRoom.h */; }; + AA40D31C09A08D650068C0D5 /* ScreenNetSelectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF793F4074FE69E00D74516 /* ScreenNetSelectBase.h */; }; + AA40D31D09A08D650068C0D5 /* ScreenPackages.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1145DA075DFADF0050A3D1 /* ScreenPackages.h */; }; + AA40D31E09A08D650068C0D5 /* ScreenSystemLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1145DC075DFADF0050A3D1 /* ScreenSystemLayer.h */; }; + AA40D31F09A08D650068C0D5 /* Command.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1B08380762532800835464 /* Command.h */; }; + AA40D32009A08D650068C0D5 /* GameCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1B083A0762532800835464 /* GameCommand.h */; }; + AA40D32109A08D650068C0D5 /* RageFileBasic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0E04CF076C4CD500716D81 /* RageFileBasic.h */; }; + AA40D32209A08D650068C0D5 /* RageFileDriverDeflate.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0E04D1076C4CD500716D81 /* RageFileDriverDeflate.h */; }; + AA40D32309A08D650068C0D5 /* RageFileDriverSlice.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0E04D3076C4CD500716D81 /* RageFileDriverSlice.h */; }; + AA40D32409A08D650068C0D5 /* RageSurface_Save_JPEG.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEBC6C707A20AFE00793F0E /* RageSurface_Save_JPEG.h */; }; + AA40D32509A08D650068C0D5 /* RageSurfaceUtils_Dither.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEBC6C907A20AFE00793F0E /* RageSurfaceUtils_Dither.h */; }; + AA40D32609A08D650068C0D5 /* RageSurfaceUtils_Zoom.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEBC6CB07A20AFE00793F0E /* RageSurfaceUtils_Zoom.h */; }; + AA40D32709A08D650068C0D5 /* LuaBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEBC78C07A4FF5600793F0E /* LuaBinding.h */; }; + AA40D32809A08D650068C0D5 /* LuaManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEBC78E07A4FF5600793F0E /* LuaManager.h */; }; + AA40D32909A08D650068C0D5 /* PlayerState.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEBC78F07A4FF5600793F0E /* PlayerState.h */; }; + AA40D32C09A08D650068C0D5 /* RageFileDriverTimeout.h in Headers */ = {isa = PBXBuildFile; fileRef = AACA592B07B5E23400763545 /* RageFileDriverTimeout.h */; }; + AA40D32D09A08D650068C0D5 /* RageUtil_AutoPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = AACA592C07B5E23400763545 /* RageUtil_AutoPtr.h */; }; + AA40D32E09A08D650068C0D5 /* RageUtil_WorkerThread.h in Headers */ = {isa = PBXBuildFile; fileRef = AACA592E07B5E23400763545 /* RageUtil_WorkerThread.h */; }; + AA40D32F09A08D650068C0D5 /* LuaReference.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2A207C9391B00EA04E1 /* LuaReference.h */; }; + AA40D33009A08D650068C0D5 /* MessageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2A407C9391B00EA04E1 /* MessageManager.h */; }; + AA40D33109A08D650068C0D5 /* StatsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2A607C9391B00EA04E1 /* StatsManager.h */; }; + AA40D33209A08D650068C0D5 /* SubscriptionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2A707C9391B00EA04E1 /* SubscriptionManager.h */; }; + AA40D33309A08D650068C0D5 /* AutoActor.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2B007C9395400EA04E1 /* AutoActor.h */; }; + AA40D33409A08D650068C0D5 /* OptionRow.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2B507C939A200EA04E1 /* OptionRow.h */; }; + AA40D33509A08D650068C0D5 /* PlayerStageStats.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2B907C939F800EA04E1 /* PlayerStageStats.h */; }; + AA40D33609A08D650068C0D5 /* RollingNumbers.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2BC07C939F800EA04E1 /* RollingNumbers.h */; }; + AA40D33709A08D650068C0D5 /* ScoreDisplayCalories.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2BE07C939F800EA04E1 /* ScoreDisplayCalories.h */; }; + AA40D34009A08D650068C0D5 /* UnlockManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA80C75307F20D0D00C99272 /* UnlockManager.h */; }; + AA40D34109A08D650068C0D5 /* OptionRowHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = AA80C75807F20D6600C99272 /* OptionRowHandler.h */; }; + AA40D34209A08D650068C0D5 /* ScoreDisplayAliveTime.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7144B00809EEEC00545684 /* ScoreDisplayAliveTime.h */; }; + AA40D34309A08D650068C0D5 /* ScoreDisplayLifeTime.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3D5E5D08214C77002AA665 /* ScoreDisplayLifeTime.h */; }; + AA40D34409A08D650068C0D5 /* StreamDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3D5E90082152B6002AA665 /* StreamDisplay.h */; }; + AA40D34509A08D650068C0D5 /* LifeMeterTime.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3D5E5B08214C77002AA665 /* LifeMeterTime.h */; }; + AA40D34609A08D650068C0D5 /* WheelBase.h in Headers */ = {isa = PBXBuildFile; fileRef = AAAFE81D0835E7FF00FC43E0 /* WheelBase.h */; }; + AA40D34709A08D650068C0D5 /* WheelItemBase.h in Headers */ = {isa = PBXBuildFile; fileRef = AAAFE81F0835E7FF00FC43E0 /* WheelItemBase.h */; }; + AA40D34909A08D650068C0D5 /* ScreenDebugOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA07A5560843E72B00E33D21 /* ScreenDebugOverlay.h */; }; + AA40D34B09A08D650068C0D5 /* ScreenSaveSync.h in Headers */ = {isa = PBXBuildFile; fileRef = AA07A55A0843E72B00E33D21 /* ScreenSaveSync.h */; }; + AA40D34D09A08D650068C0D5 /* ScreenSyncOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA07A55E0843E72B00E33D21 /* ScreenSyncOverlay.h */; }; + AA40D34E09A08D650068C0D5 /* BackgroundUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7DA2F0085760E90057F1EA /* BackgroundUtil.h */; }; + AA40D34F09A08D650068C0D5 /* ScreenSplash.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB6B476085761B700CEE7BA /* ScreenSplash.h */; }; + AA40D35009A08D650068C0D5 /* RageTexturePreloader.h in Headers */ = {isa = PBXBuildFile; fileRef = AA91ACB00878BB2C00FB2F8F /* RageTexturePreloader.h */; }; + AA40D35109A08D650068C0D5 /* ScreenOptionsEditProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFAB5BC0889098600767BF7 /* ScreenOptionsEditProfile.h */; }; + AA40D35209A08D650068C0D5 /* GameLoop.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFAB5CC08890B5200767BF7 /* GameLoop.h */; }; + AA40D35309A08D650068C0D5 /* CharacterManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA77E74608B64B1400FA24CA /* CharacterManager.h */; }; + AA40D35409A08D650068C0D5 /* CourseLoaderCRS.h in Headers */ = {isa = PBXBuildFile; fileRef = AA77E74C08B64B5600FA24CA /* CourseLoaderCRS.h */; }; + AA40D35509A08D650068C0D5 /* CourseWriterCRS.h in Headers */ = {isa = PBXBuildFile; fileRef = AA77E74E08B64B5600FA24CA /* CourseWriterCRS.h */; }; + AA40D35909A08D650068C0D5 /* ScreenOptionsManageCourses.h in Headers */ = {isa = PBXBuildFile; fileRef = AA77E75C08B64B9A00FA24CA /* ScreenOptionsManageCourses.h */; }; + AA40D35A09A08D650068C0D5 /* ScreenOptionsManageProfiles.h in Headers */ = {isa = PBXBuildFile; fileRef = AA77E75E08B64B9A00FA24CA /* ScreenOptionsManageProfiles.h */; }; + AA40D35B09A08D650068C0D5 /* ScreenGameplayNormal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1215D7A108C6559A00B87D8B /* ScreenGameplayNormal.h */; }; + AA40D35C09A08D650068C0D5 /* ActorSound.h in Headers */ = {isa = PBXBuildFile; fileRef = AACFBE2708E7D793005087FC /* ActorSound.h */; }; + AA40D35D09A08D650068C0D5 /* InputEventPlus.h in Headers */ = {isa = PBXBuildFile; fileRef = AACFBE3908E7D832005087FC /* InputEventPlus.h */; }; + AA40D35F09A08D650068C0D5 /* ScreenGameplayLesson.h in Headers */ = {isa = PBXBuildFile; fileRef = AACFBE4A08E7D893005087FC /* ScreenGameplayLesson.h */; }; + AA40D36209A08D650068C0D5 /* LuaExpressionTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = AACFBE6208E7DBA8005087FC /* LuaExpressionTransform.h */; }; + AA40D36309A08D650068C0D5 /* DynamicActorScroller.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF3442A08F1C36A0006EDB7 /* DynamicActorScroller.h */; }; + AA40D36409A08D650068C0D5 /* ScoreKeeperNormal.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF34ADD0900AEBD0006EDB7 /* ScoreKeeperNormal.h */; }; + AA40D36509A08D650068C0D5 /* ScreenStatsOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF34AEC0900B00C0006EDB7 /* ScreenStatsOverlay.h */; }; + AA40D36709A08D650068C0D5 /* MovieTexture_Generic.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA372D10909934500141131 /* MovieTexture_Generic.h */; }; + AA40D36809A08D650068C0D5 /* MovieTexture_Theora.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA372D30909934500141131 /* MovieTexture_Theora.h */; }; + AA40D36B09A08D650068C0D5 /* SpecialFiles.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFBEED0094D7FCB000029DE /* SpecialFiles.h */; }; + AA40D36C09A08D650068C0D5 /* ScreenOptionsManageEditSteps.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFBEEE6094D807E000029DE /* ScreenOptionsManageEditSteps.h */; }; + AA40D36D09A08D650068C0D5 /* ScreenOptionsMemoryCard.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFBEEE8094D807E000029DE /* ScreenOptionsMemoryCard.h */; }; + AA40D36E09A08D650068C0D5 /* ScreenServiceAction.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFBEEEA094D807E000029DE /* ScreenServiceAction.h */; }; + AA40D36F09A08D650068C0D5 /* DisplayResolutions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA07328B0954381800F396C5 /* DisplayResolutions.h */; }; + AA40D37009A08D650068C0D5 /* XmlFileUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA07328D0954381800F396C5 /* XmlFileUtil.h */; }; + AA40D37109A08D650068C0D5 /* LocalizedString.h in Headers */ = {isa = PBXBuildFile; fileRef = AADD1CC3095C233F0088C9DF /* LocalizedString.h */; }; + AA40D37509A08D650068C0D5 /* HIDDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = AA44705209846B0800983E82 /* HIDDevice.h */; }; + AA40D37609A08D650068C0D5 /* JoystickDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = AA44708C0984720900983E82 /* JoystickDevice.h */; }; + AA40D37709A08D650068C0D5 /* KeyboardDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = AA4470BA098476F600983E82 /* KeyboardDevice.h */; }; + AA40D37809A08D650068C0D5 /* Tween.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC0C8C10984AE3B0075FC53 /* Tween.h */; }; + AA40D37909A08D650068C0D5 /* ScreenUnlockStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = AA65877A098C322800CE55CC /* ScreenUnlockStatus.h */; }; + AA40D37A09A08D650068C0D5 /* AdjustSync.h in Headers */ = {isa = PBXBuildFile; fileRef = AA84B7060996F8370085EECB /* AdjustSync.h */; }; + AA40D37C09A08D650068C0D5 /* smicon.icns in Resources */ = {isa = PBXBuildFile; fileRef = AAB895E504A9057100D02EE9 /* smicon.icns */; }; + AA40D38109A08D650068C0D5 /* RageUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD9204770A7C005F316C /* RageUtil.cpp */; }; + AA40D38209A08D650068C0D5 /* RageBitmapTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD6D04770A7C005F316C /* RageBitmapTexture.cpp */; }; + AA40D38309A08D650068C0D5 /* RageDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD6F04770A7C005F316C /* RageDisplay.cpp */; }; + AA40D38409A08D650068C0D5 /* RageException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7204770A7C005F316C /* RageException.cpp */; }; + AA40D38509A08D650068C0D5 /* RageInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7404770A7C005F316C /* RageInput.cpp */; }; + AA40D38609A08D650068C0D5 /* RageInputDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7604770A7C005F316C /* RageInputDevice.cpp */; }; + AA40D38709A08D650068C0D5 /* RageLog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7804770A7C005F316C /* RageLog.cpp */; }; + AA40D38809A08D650068C0D5 /* RageMath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7A04770A7C005F316C /* RageMath.cpp */; }; + AA40D38909A08D650068C0D5 /* RageSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7C04770A7C005F316C /* RageSound.cpp */; }; + AA40D38A09A08D650068C0D5 /* RageSoundManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7E04770A7C005F316C /* RageSoundManager.cpp */; }; + AA40D38B09A08D650068C0D5 /* RageSoundReader_Preload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8004770A7C005F316C /* RageSoundReader_Preload.cpp */; }; + AA40D38D09A08D650068C0D5 /* RageTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8904770A7C005F316C /* RageTexture.cpp */; }; + AA40D38E09A08D650068C0D5 /* RageTextureManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8B04770A7C005F316C /* RageTextureManager.cpp */; }; + AA40D38F09A08D650068C0D5 /* RageThreads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8D04770A7C005F316C /* RageThreads.cpp */; }; + AA40D39009A08D650068C0D5 /* RageTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8F04770A7C005F316C /* RageTimer.cpp */; }; + AA40D39109A08D650068C0D5 /* Character.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDCB04770C79005F316C /* Character.cpp */; }; + AA40D39209A08D650068C0D5 /* CodeDetector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDCD04770C79005F316C /* CodeDetector.cpp */; }; + AA40D39309A08D650068C0D5 /* Course.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDCF04770C79005F316C /* Course.cpp */; }; + AA40D39409A08D650068C0D5 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD104770C79005F316C /* Font.cpp */; }; + AA40D39509A08D650068C0D5 /* FontCharAliases.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD304770C79005F316C /* FontCharAliases.cpp */; }; + AA40D39609A08D650068C0D5 /* FontCharmaps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD504770C79005F316C /* FontCharmaps.cpp */; }; + AA40D39709A08D650068C0D5 /* FontManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD704770C79005F316C /* FontManager.cpp */; }; + AA40D39809A08D650068C0D5 /* GameConstantsAndTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD904770C79005F316C /* GameConstantsAndTypes.cpp */; }; + AA40D39909A08D650068C0D5 /* GameInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDDD04770C79005F316C /* GameInput.cpp */; }; + AA40D39A09A08D650068C0D5 /* Grade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDDF04770C79005F316C /* Grade.cpp */; }; + AA40D39B09A08D650068C0D5 /* Inventory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDE104770C79005F316C /* Inventory.cpp */; }; + AA40D39C09A08D650068C0D5 /* LyricsLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDE304770C79005F316C /* LyricsLoader.cpp */; }; + AA40D39D09A08D650068C0D5 /* NoteData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDE504770C79005F316C /* NoteData.cpp */; }; + AA40D39E09A08D650068C0D5 /* NoteDataWithScoring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDE704770C79005F316C /* NoteDataWithScoring.cpp */; }; + AA40D3A009A08D650068C0D5 /* NotesLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDED04770C79005F316C /* NotesLoader.cpp */; }; + AA40D3A109A08D650068C0D5 /* NotesLoaderBMS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDEF04770C79005F316C /* NotesLoaderBMS.cpp */; }; + AA40D3A209A08D650068C0D5 /* NotesLoaderDWI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF104770C79005F316C /* NotesLoaderDWI.cpp */; }; + AA40D3A309A08D650068C0D5 /* NotesLoaderKSF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF304770C79005F316C /* NotesLoaderKSF.cpp */; }; + AA40D3A409A08D650068C0D5 /* NotesLoaderSM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF504770C79005F316C /* NotesLoaderSM.cpp */; }; + AA40D3A509A08D650068C0D5 /* NotesWriterDWI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF704770C79005F316C /* NotesWriterDWI.cpp */; }; + AA40D3A609A08D650068C0D5 /* NotesWriterSM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF904770C79005F316C /* NotesWriterSM.cpp */; }; + AA40D3A709A08D650068C0D5 /* NoteTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDFB04770C79005F316C /* NoteTypes.cpp */; }; + AA40D3A809A08D650068C0D5 /* Player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDFD04770C79005F316C /* Player.cpp */; }; + AA40D3A909A08D650068C0D5 /* PlayerAI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDFF04770C79005F316C /* PlayerAI.cpp */; }; + AA40D3AA09A08D650068C0D5 /* PlayerNumber.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0104770C79005F316C /* PlayerNumber.cpp */; }; + AA40D3AB09A08D650068C0D5 /* PlayerOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0304770C79005F316C /* PlayerOptions.cpp */; }; + AA40D3AC09A08D650068C0D5 /* SongOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0704770C79005F316C /* SongOptions.cpp */; }; + AA40D3AD09A08D650068C0D5 /* StageStats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0904770C79005F316C /* StageStats.cpp */; }; + AA40D3AE09A08D650068C0D5 /* TitleSubstitution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0E04770C79005F316C /* TitleSubstitution.cpp */; }; + AA40D3AF09A08D650068C0D5 /* IniFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE5804770CAA005F316C /* IniFile.cpp */; }; + AA40D3B009A08D650068C0D5 /* MsdFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE5A04770CAA005F316C /* MsdFile.cpp */; }; + AA40D3B109A08D650068C0D5 /* StepMania.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE6304770CF7005F316C /* StepMania.cpp */; }; + AA40D3B209A08D650068C0D5 /* Banner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE6E04770D61005F316C /* Banner.cpp */; }; + AA40D3B309A08D650068C0D5 /* BPMDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE7604770E7C005F316C /* BPMDisplay.cpp */; }; + AA40D3B409A08D650068C0D5 /* CourseContentsList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE7804770E7C005F316C /* CourseContentsList.cpp */; }; + AA40D3B609A08D650068C0D5 /* DifficultyIcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE7E04770E7C005F316C /* DifficultyIcon.cpp */; }; + AA40D3B909A08D650068C0D5 /* EditMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE8404770E7C005F316C /* EditMenu.cpp */; }; + AA40D3BA09A08D650068C0D5 /* FadingBanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE8A04770E7C005F316C /* FadingBanner.cpp */; }; + AA40D3BB09A08D650068C0D5 /* GradeDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE8C04770E7C005F316C /* GradeDisplay.cpp */; }; + AA40D3BC09A08D650068C0D5 /* GrooveRadar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE9004770E7C005F316C /* GrooveRadar.cpp */; }; + AA40D3BE09A08D650068C0D5 /* HelpDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE9404770E7C005F316C /* HelpDisplay.cpp */; }; + AA40D3BF09A08D650068C0D5 /* MenuTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE9A04770E7C005F316C /* MenuTimer.cpp */; }; + AA40D3C009A08D650068C0D5 /* MeterDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE9C04770E7C005F316C /* MeterDisplay.cpp */; }; + AA40D3C409A08D650068C0D5 /* MusicWheel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEA404770E7C005F316C /* MusicWheel.cpp */; }; + AA40D3C509A08D650068C0D5 /* MusicWheelItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEA604770E7C005F316C /* MusicWheelItem.cpp */; }; + AA40D3C809A08D650068C0D5 /* OptionsCursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEAC04770E7C005F316C /* OptionsCursor.cpp */; }; + AA40D3C909A08D650068C0D5 /* ScrollBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEAE04770E7C005F316C /* ScrollBar.cpp */; }; + AA40D3CB09A08D650068C0D5 /* SnapDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEB204770E7C005F316C /* SnapDisplay.cpp */; }; + AA40D3CC09A08D650068C0D5 /* TextBanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEB404770E7C005F316C /* TextBanner.cpp */; }; + AA40D3CD09A08D650068C0D5 /* WheelNotifyIcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEB604770E7C005F316C /* WheelNotifyIcon.cpp */; }; + AA40D3CE09A08D650068C0D5 /* ArrowEffects.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEFD04770F63005F316C /* ArrowEffects.cpp */; }; + AA40D3CF09A08D650068C0D5 /* Background.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEFF04770F63005F316C /* Background.cpp */; }; + AA40D3D009A08D650068C0D5 /* BGAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF0104770F63005F316C /* BGAnimation.cpp */; }; + AA40D3D109A08D650068C0D5 /* BGAnimationLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF0304770F63005F316C /* BGAnimationLayer.cpp */; }; + AA40D3D309A08D650068C0D5 /* DancingCharacters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF0704770F63005F316C /* DancingCharacters.cpp */; }; + AA40D3D409A08D650068C0D5 /* GhostArrowRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF0D04770F63005F316C /* GhostArrowRow.cpp */; }; + AA40D3D509A08D650068C0D5 /* HoldJudgment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF1504770F63005F316C /* HoldJudgment.cpp */; }; + AA40D3D709A08D650068C0D5 /* LifeMeterBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF1B04770F63005F316C /* LifeMeterBar.cpp */; }; + AA40D3D809A08D650068C0D5 /* LifeMeterBattery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF1D04770F63005F316C /* LifeMeterBattery.cpp */; }; + AA40D3D909A08D650068C0D5 /* LyricDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF1F04770F63005F316C /* LyricDisplay.cpp */; }; + AA40D3DA09A08D650068C0D5 /* NoteDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2104770F63005F316C /* NoteDisplay.cpp */; }; + AA40D3DB09A08D650068C0D5 /* NoteField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2304770F63005F316C /* NoteField.cpp */; }; + AA40D3DC09A08D650068C0D5 /* ScoreDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2504770F63005F316C /* ScoreDisplay.cpp */; }; + AA40D3DD09A08D650068C0D5 /* ScoreDisplayBattle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2704770F63005F316C /* ScoreDisplayBattle.cpp */; }; + AA40D3DE09A08D650068C0D5 /* ScoreDisplayNormal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2904770F63005F316C /* ScoreDisplayNormal.cpp */; }; + AA40D3DF09A08D650068C0D5 /* ScoreDisplayOni.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2B04770F63005F316C /* ScoreDisplayOni.cpp */; }; + AA40D3E009A08D650068C0D5 /* ScoreDisplayRave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2D04770F63005F316C /* ScoreDisplayRave.cpp */; }; + AA40D3E109A08D650068C0D5 /* Transition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF7004770F86005F316C /* Transition.cpp */; }; + AA40D3E209A08D650068C0D5 /* Actor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF7504770FFD005F316C /* Actor.cpp */; }; + AA40D3E309A08D650068C0D5 /* ActorFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF7704770FFD005F316C /* ActorFrame.cpp */; }; + AA40D3E409A08D650068C0D5 /* ActorScroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF7904770FFD005F316C /* ActorScroller.cpp */; }; + AA40D3E509A08D650068C0D5 /* BitmapText.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFFB904770FFD005F316C /* BitmapText.cpp */; }; + AA40D3E609A08D650068C0D5 /* Model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFFBD04770FFD005F316C /* Model.cpp */; }; + AA40D3E709A08D650068C0D5 /* ModelTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFFBF04770FFD005F316C /* ModelTypes.cpp */; }; + AA40D3E809A08D650068C0D5 /* Sprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFFC204770FFD005F316C /* Sprite.cpp */; }; + AA40D3E909A08D650068C0D5 /* Screen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E000A047711F3005F316C /* Screen.cpp */; }; + AA40D3EA09A08D650068C0D5 /* ScreenAttract.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0010047711F3005F316C /* ScreenAttract.cpp */; }; + AA40D3EC09A08D650068C0D5 /* ScreenDemonstration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E001B047711F3005F316C /* ScreenDemonstration.cpp */; }; + AA40D3ED09A08D650068C0D5 /* ScreenEdit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E001D047711F3005F316C /* ScreenEdit.cpp */; settings = {COMPILER_FLAGS = "-finline-limit=300"; }; }; + AA40D3EE09A08D650068C0D5 /* ScreenEditMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E001F047711F3005F316C /* ScreenEditMenu.cpp */; }; + AA40D3EF09A08D650068C0D5 /* ScreenEvaluation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0021047711F3005F316C /* ScreenEvaluation.cpp */; }; + AA40D3F209A08D650068C0D5 /* ScreenGameplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0029047711F3005F316C /* ScreenGameplay.cpp */; }; + AA40D3F309A08D650068C0D5 /* ScreenJukebox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0037047711F3005F316C /* ScreenJukebox.cpp */; }; + AA40D3F409A08D650068C0D5 /* ScreenManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E003F047711F3005F316C /* ScreenManager.cpp */; }; + AA40D3F509A08D650068C0D5 /* ScreenMapControllers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0041047711F3005F316C /* ScreenMapControllers.cpp */; }; + AA40D3F609A08D650068C0D5 /* ScreenMiniMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0045047711F3005F316C /* ScreenMiniMenu.cpp */; }; + AA40D3F809A08D650068C0D5 /* ScreenNameEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0049047711F3005F316C /* ScreenNameEntry.cpp */; }; + AA40D3F909A08D650068C0D5 /* ScreenOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E004B047711F3005F316C /* ScreenOptions.cpp */; }; + AA40D3FA09A08D650068C0D5 /* ScreenPlayerOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E004F047711F3005F316C /* ScreenPlayerOptions.cpp */; }; + AA40D3FB09A08D650068C0D5 /* ScreenPrompt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0051047711F3005F316C /* ScreenPrompt.cpp */; }; + AA40D3FC09A08D650068C0D5 /* ScreenRanking.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0053047711F3005F316C /* ScreenRanking.cpp */; }; + AA40D3FD09A08D650068C0D5 /* ScreenSandbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0057047711F3005F316C /* ScreenSandbox.cpp */; }; + AA40D3FE09A08D650068C0D5 /* ScreenSelect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0059047711F3005F316C /* ScreenSelect.cpp */; }; + AA40D3FF09A08D650068C0D5 /* ScreenSelectCharacter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E005B047711F3005F316C /* ScreenSelectCharacter.cpp */; }; + AA40D40309A08D650068C0D5 /* ScreenSelectMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0069047711F3005F316C /* ScreenSelectMusic.cpp */; }; + AA40D40509A08D650068C0D5 /* ScreenSongOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */; }; + AA40D40709A08D650068C0D5 /* ScreenTestFonts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */; }; + AA40D40809A08D650068C0D5 /* ScreenTestSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007B047711F3005F316C /* ScreenTestSound.cpp */; }; + AA40D40909A08D650068C0D5 /* ScreenTextEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */; }; + AA40D40A09A08D650068C0D5 /* ScreenTitleMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007F047711F3005F316C /* ScreenTitleMenu.cpp */; }; + AA40D40B09A08D650068C0D5 /* AnnouncerManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E00FF0477128A005F316C /* AnnouncerManager.cpp */; }; + AA40D40C09A08D650068C0D5 /* GameManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01010477128A005F316C /* GameManager.cpp */; }; + AA40D40D09A08D650068C0D5 /* GameState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01030477128A005F316C /* GameState.cpp */; }; + AA40D40E09A08D650068C0D5 /* InputFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01050477128A005F316C /* InputFilter.cpp */; }; + AA40D40F09A08D650068C0D5 /* InputMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01070477128A005F316C /* InputMapper.cpp */; }; + AA40D41009A08D650068C0D5 /* InputQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01090477128A005F316C /* InputQueue.cpp */; }; + AA40D41109A08D650068C0D5 /* NoteSkinManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E010B0477128A005F316C /* NoteSkinManager.cpp */; }; + AA40D41209A08D650068C0D5 /* PrefsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E010D0477128A005F316C /* PrefsManager.cpp */; }; + AA40D41309A08D650068C0D5 /* SongManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E010F0477128A005F316C /* SongManager.cpp */; }; + AA40D41409A08D650068C0D5 /* ThemeManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01120477128A005F316C /* ThemeManager.cpp */; }; + AA40D41509A08D650068C0D5 /* RageSoundDriver_Null.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E012E047712BE005F316C /* RageSoundDriver_Null.cpp */; }; + AA40D41709A08D650068C0D5 /* MovieTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01DB04771F11005F316C /* MovieTexture.cpp */; }; + AA40D41809A08D650068C0D5 /* SongCacheIndex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01DE04772005005F316C /* SongCacheIndex.cpp */; }; + AA40D41909A08D650068C0D5 /* Song.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01E20477205A005F316C /* Song.cpp */; }; + AA40D41A09A08D650068C0D5 /* RandomSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01E6047720A3005F316C /* RandomSample.cpp */; }; + AA40D41C09A08D650068C0D5 /* RageUtil_CharConversions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC23F7E0485E68D005F316C /* RageUtil_CharConversions.cpp */; }; + AA40D41D09A08D650068C0D5 /* BannerCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE35EB04967E25005F316C /* BannerCache.cpp */; }; + AA40D42009A08D650068C0D5 /* ScreenSelectMaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1DC47404A4861700D02EE9 /* ScreenSelectMaster.cpp */; }; + AA40D42109A08D650068C0D5 /* CombinedLifeMeterTug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE443EB04B0F9F600D02EE9 /* CombinedLifeMeterTug.cpp */; }; + AA40D42209A08D650068C0D5 /* ScoreKeeperRave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE443F304B0FEB700D02EE9 /* ScoreKeeperRave.cpp */; }; + AA40D42309A08D650068C0D5 /* get.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7A04AFD87300D02EE9 /* get.c */; }; + AA40D42409A08D650068C0D5 /* maketables.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7C04AFD87300D02EE9 /* maketables.c */; }; + AA40D42509A08D650068C0D5 /* pcre.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7D04AFD87300D02EE9 /* pcre.c */; }; + AA40D42609A08D650068C0D5 /* study.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7F04AFD87300D02EE9 /* study.c */; }; + AA40D42709A08D650068C0D5 /* RageUtil_FileDB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF580A704B3E2DC00D02EE9 /* RageUtil_FileDB.cpp */; }; + AA40D42909A08D650068C0D5 /* ActorUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA983CA04B9060A00D02EE9 /* ActorUtil.cpp */; }; + AA40D42A09A08D650068C0D5 /* ArchHooks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3F283B04BE6DDC00D02EE9 /* ArchHooks.cpp */; }; + AA40D42B09A08D650068C0D5 /* InputHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB3B36B04C38B4600D02EE9 /* InputHandler.cpp */; }; + AA40D42D09A08D650068C0D5 /* MovieTexture_Null.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB3B39004C5921800D02EE9 /* MovieTexture_Null.cpp */; }; + AA40D42E09A08D650068C0D5 /* RageFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA272C3004CD757100D02EE9 /* RageFile.cpp */; }; + AA40D42F09A08D650068C0D5 /* CrashHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA76D15404D9D2D200D02EE9 /* CrashHandler.cpp */; }; + AA40D43009A08D650068C0D5 /* CrashHandlerChild.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA76D15504D9D2D200D02EE9 /* CrashHandlerChild.cpp */; }; + AA40D43109A08D650068C0D5 /* ver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA52E9BD04DBBCF400D02EE9 /* ver.cpp */; }; + AA40D43209A08D650068C0D5 /* Steps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF430FD04DC98BC00D02EE9 /* Steps.cpp */; }; + AA40D43309A08D650068C0D5 /* NoteDataUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4F38C004E2D0B700D02EE9 /* NoteDataUtil.cpp */; }; + AA40D43409A08D650068C0D5 /* BeginnerHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC28BB904F758E500D02EE9 /* BeginnerHelper.cpp */; }; + AA40D43609A08D650068C0D5 /* MovieTexture_FFMpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA14ED0F0509F40000E3FAD7 /* MovieTexture_FFMpeg.cpp */; }; + AA40D43709A08D650068C0D5 /* ProfileManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1C6556050D234B0073A143 /* ProfileManager.cpp */; }; + AA40D43809A08D650068C0D5 /* RageSoundReader_WAV.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1C65A6050FD21F0073A143 /* RageSoundReader_WAV.cpp */; }; + AA40D43909A08D650068C0D5 /* RageSoundReader_FileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFC7FF00513A67700D02EE9 /* RageSoundReader_FileReader.cpp */; }; + AA40D43B09A08D650068C0D5 /* RageSoundReader_Vorbisfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1C65A4050FD21F0073A143 /* RageSoundReader_Vorbisfile.cpp */; }; + AA40D43D09A08D650068C0D5 /* RageSoundReader_Resample_Good.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAE28F4052254A900D02EE9 /* RageSoundReader_Resample_Good.cpp */; }; + AA40D43E09A08D650068C0D5 /* ScreenExit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAECF8BF05265DB600D02EE9 /* ScreenExit.cpp */; }; + AA40D43F09A08D650068C0D5 /* ScreenOptionsMaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA53D28405277DAF00D02EE9 /* ScreenOptionsMaster.cpp */; }; + AA40D44009A08D650068C0D5 /* ScreenOptionsMasterPrefs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA53D28605277DAF00D02EE9 /* ScreenOptionsMasterPrefs.cpp */; }; + AA40D44109A08D650068C0D5 /* ScreenReloadSongs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA53D28805277DAF00D02EE9 /* ScreenReloadSongs.cpp */; }; + AA40D44209A08D650068C0D5 /* ScreenInstructions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0033047711F3005F316C /* ScreenInstructions.cpp */; }; + AA40D44309A08D650068C0D5 /* ScreenHowToPlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E002F047711F3005F316C /* ScreenHowToPlay.cpp */; }; + AA40D44409A08D650068C0D5 /* PercentageDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD620A5052EC78B00D02EE9 /* PercentageDisplay.cpp */; }; + AA40D44509A08D650068C0D5 /* ScoreDisplayPercentage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6DAF0805300B3D00D02EE9 /* ScoreDisplayPercentage.cpp */; }; + AA40D44709A08D650068C0D5 /* ScreenTestInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC622FA05389A0500D02EE9 /* ScreenTestInput.cpp */; }; + AA40D44809A08D650068C0D5 /* ScreenBookkeeping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADBE360053D5F8A00D02EE9 /* ScreenBookkeeping.cpp */; }; + AA40D44909A08D650068C0D5 /* ScreenNameEntryTraditional.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADBE362053D5F8A00D02EE9 /* ScreenNameEntryTraditional.cpp */; }; + AA40D44A09A08D650068C0D5 /* Bookkeeper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADBE368053DA38C00D02EE9 /* Bookkeeper.cpp */; }; + AA40D44B09A08D650068C0D5 /* GraphDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF551D0549F39700D02EE9 /* GraphDisplay.cpp */; }; + AA40D44C09A08D650068C0D5 /* ComboGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF55210549F43A00D02EE9 /* ComboGraph.cpp */; }; + AA40D44D09A08D650068C0D5 /* Attack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF5541054E736D00D02EE9 /* Attack.cpp */; }; + AA40D44E09A08D650068C0D5 /* RageTextureID.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA9EC2F0055F5126007E5098 /* RageTextureID.cpp */; }; + AA40D44F09A08D650068C0D5 /* LightsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6DCE30567660A00B5D56F /* LightsManager.cpp */; }; + AA40D45009A08D650068C0D5 /* PaneDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6DDDE0569C71000B5D56F /* PaneDisplay.cpp */; }; + AA40D45109A08D650068C0D5 /* DifficultyList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6DDE60569C80900B5D56F /* DifficultyList.cpp */; }; + AA40D45209A08D650068C0D5 /* LightsDriver_SystemMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB691F205704FA50078BED4 /* LightsDriver_SystemMessage.cpp */; }; + AA40D45309A08D650068C0D5 /* AttackDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB005F00579B8CB000BBA58 /* AttackDisplay.cpp */; }; + AA40D45409A08D650068C0D5 /* RageFileDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB0085B057F4F7A000BBA58 /* RageFileDriver.cpp */; }; + AA40D45509A08D650068C0D5 /* RageFileDriverDirect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB0085D057F4F7A000BBA58 /* RageFileDriverDirect.cpp */; }; + AA40D45609A08D650068C0D5 /* RageFileManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB0085F057F4F7A000BBA58 /* RageFileManager.cpp */; }; + AA40D45709A08D650068C0D5 /* RageFileDriverZip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA251B7505841FCE00027ACB /* RageFileDriverZip.cpp */; }; + AA40D45809A08D650068C0D5 /* MemoryCardManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA28B47A058F2F5D0097C109 /* MemoryCardManager.cpp */; }; + AA40D45909A08D650068C0D5 /* DualScrollBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE788C05912B0600E8BF50 /* DualScrollBar.cpp */; }; + AA40D45A09A08D650068C0D5 /* TimingData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA729C420599B50D00779F33 /* TimingData.cpp */; }; + AA40D45B09A08D650068C0D5 /* MemoryCardDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA729C460599B54D00779F33 /* MemoryCardDisplay.cpp */; }; + AA40D45C09A08D650068C0D5 /* ReceptorArrow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA729C4E0599B58D00779F33 /* ReceptorArrow.cpp */; }; + AA40D45D09A08D650068C0D5 /* ReceptorArrowRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA729C500599B58D00779F33 /* ReceptorArrowRow.cpp */; }; + AA40D45E09A08D650068C0D5 /* ScreenEnding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE321A05ACD8ED001A0E84 /* ScreenEnding.cpp */; }; + AA40D45F09A08D650068C0D5 /* Foreground.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE321E05ACD931001A0E84 /* Foreground.cpp */; }; + AA40D46009A08D650068C0D5 /* RageFileDriverDirectHelpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE322205ACDA52001A0E84 /* RageFileDriverDirectHelpers.cpp */; }; + AA40D46109A08D650068C0D5 /* ModelManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF4206505D63FA700056441 /* ModelManager.cpp */; }; + AA40D46209A08D650068C0D5 /* RageModelGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF4206905D6400800056441 /* RageModelGeometry.cpp */; }; + AA40D46309A08D650068C0D5 /* Profile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA50201D05D6D7B200ACEFD0 /* Profile.cpp */; }; + AA40D46409A08D650068C0D5 /* HighScore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBD80605D8E9FC00B44FC2 /* HighScore.cpp */; }; + AA40D46509A08D650068C0D5 /* CryptManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABD0B3605DF3F22004F7929 /* CryptManager.cpp */; settings = {COMPILER_FLAGS = "-O0 -Wno-uninitialized"; }; }; + AA40D46609A08D650068C0D5 /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA71EA005EE154E00D2E8FF /* global.cpp */; }; + AA40D46709A08D650068C0D5 /* Backtrace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAED6F280601C528002D2DEE /* Backtrace.cpp */; }; + AA40D46809A08D650068C0D5 /* BacktraceNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAED6F2A0601C528002D2DEE /* BacktraceNames.cpp */; }; + AA40D46909A08D650068C0D5 /* ScreenSetTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0A3DE6060513A00044E6B1 /* ScreenSetTime.cpp */; }; + AA40D46A09A08D650068C0D5 /* NetworkSyncManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE78049060814AC0034E65F /* NetworkSyncManager.cpp */; }; + AA40D46C09A08D650068C0D5 /* ActiveAttackList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE7812B0608249E0034E65F /* ActiveAttackList.cpp */; }; + AA40D46D09A08D650068C0D5 /* RageSoundDriver_Generic_Software.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1CD941060AE571003702C4 /* RageSoundDriver_Generic_Software.cpp */; }; + AA40D46E09A08D650068C0D5 /* ScreenTestLights.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF7435906110E8D00B19AD1 /* ScreenTestLights.cpp */; }; + AA40D46F09A08D650068C0D5 /* RageDisplay_Null.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF7458E061181F700B19AD1 /* RageDisplay_Null.cpp */; }; + AA40D47409A08D650068C0D5 /* RageSoundPosMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD36082062BB8AE00D0CED8 /* RageSoundPosMap.cpp */; }; + AA40D47509A08D650068C0D5 /* SignalHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADB4E8B04D50FB900D02EE9 /* SignalHandler.cpp */; }; + AA40D47609A08D650068C0D5 /* CourseUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5C73F70637A5F000AFB891 /* CourseUtil.cpp */; }; + AA40D47709A08D650068C0D5 /* SongUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5C73F90637A5F000AFB891 /* SongUtil.cpp */; }; + AA40D47809A08D650068C0D5 /* StepsUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5C73FB0637A5F000AFB891 /* StepsUtil.cpp */; }; + AA40D47909A08D650068C0D5 /* ScreenWithMenuElements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA6BFEA0644AB3700AFBBC8 /* ScreenWithMenuElements.cpp */; }; + AA40D49009A08D650068C0D5 /* RageSurface_Load_GIF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF66C0659E78D00738526 /* RageSurface_Load_GIF.cpp */; }; + AA40D49109A08D650068C0D5 /* RageSurface_Load_JPEG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF66E0659E78D00738526 /* RageSurface_Load_JPEG.cpp */; }; + AA40D49209A08D650068C0D5 /* RageSurface_Load_PNG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF6700659E78D00738526 /* RageSurface_Load_PNG.cpp */; }; + AA40D49309A08D650068C0D5 /* RageSurface_Load_XPM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF6720659E78D00738526 /* RageSurface_Load_XPM.cpp */; }; + AA40D49409A08D650068C0D5 /* RageSurface_Load.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF6740659E78D00738526 /* RageSurface_Load.cpp */; }; + AA40D49609A08D650068C0D5 /* Difficulty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD6A712065E0FDF0042165A /* Difficulty.cpp */; }; + AA40D49709A08D650068C0D5 /* Trail.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA70E3650663112800DAE1FD /* Trail.cpp */; }; + AA40D49809A08D650068C0D5 /* TrailUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA70E3670663112800DAE1FD /* TrailUtil.cpp */; }; + AA40D49909A08D650068C0D5 /* ScreenNetworkOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA42F5E6067068D30013509E /* ScreenNetworkOptions.cpp */; }; + AA40D49A09A08D650068C0D5 /* Dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD675EF06795175006002B0 /* Dialog.cpp */; }; + AA40D49C09A08D650068C0D5 /* Threads_Pthreads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA60E0BD067992D7008ADC41 /* Threads_Pthreads.cpp */; }; + AA40D49D09A08D650068C0D5 /* RageSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA915879067D2C2C00078E36 /* RageSurface.cpp */; }; + AA40D49E09A08D650068C0D5 /* RageSurface_Load_BMP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA90919F067ED43000C1FCFF /* RageSurface_Load_BMP.cpp */; }; + AA40D49F09A08D650068C0D5 /* RageSurface_Save_BMP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA9091A3067ED46400C1FCFF /* RageSurface_Save_BMP.cpp */; }; + AA40D4A009A08D650068C0D5 /* Style.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA139C4606923EBE00C1F6ED /* Style.cpp */; }; + AA40D4A109A08D650068C0D5 /* GameSoundManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC9F32E069E22BB00D53E2C /* GameSoundManager.cpp */; }; + AA40D4A209A08D650068C0D5 /* MemoryCardDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC9F332069E22CF00D53E2C /* MemoryCardDriver.cpp */; }; + AA40D4A309A08D650068C0D5 /* RadarValues.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D78FF06A275E90064B980 /* RadarValues.cpp */; }; + AA40D4A409A08D650068C0D5 /* DateTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D793106A279530064B980 /* DateTime.cpp */; }; + AA40D4A509A08D650068C0D5 /* StyleUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3A706006AA1645006F755E /* StyleUtil.cpp */; }; + AA40D4A609A08D650068C0D5 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA9A78A906B5C72200B03E97 /* Game.cpp */; }; + AA40D4A709A08D650068C0D5 /* ScreenNetSelectMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA22CBA306DE909C0083BA97 /* ScreenNetSelectMusic.cpp */; }; + AA40D4A909A08D650068C0D5 /* RageSurfaceUtils_Palettize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB9C8AB06EAF64400AD97CD /* RageSurfaceUtils_Palettize.cpp */; }; + AA40D4AA09A08D650068C0D5 /* RageSurfaceUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB9C8AD06EAF64400AD97CD /* RageSurfaceUtils.cpp */; }; + AA40D4AB09A08D650068C0D5 /* ScreenNetEvaluation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB9C8B306EAF66C00AD97CD /* ScreenNetEvaluation.cpp */; }; + AA40D4AC09A08D650068C0D5 /* RageFileDriverMemory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA64218606EC606F00C21584 /* RageFileDriverMemory.cpp */; }; + AA40D4AD09A08D650068C0D5 /* DarwinThreadHelpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8A3E6306EDCD11002F25AB /* DarwinThreadHelpers.cpp */; }; + AA40D4AE09A08D650068C0D5 /* RageUtil_BackgroundLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8A404F06EEFF72002F25AB /* RageUtil_BackgroundLoader.cpp */; }; + AA40D4AF09A08D650068C0D5 /* ScreenDimensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA21D59C0712ADE4008B825F /* ScreenDimensions.cpp */; }; + AA40D4B009A08D650068C0D5 /* InputHandler_MonkeyKeyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFC6CEF072A30440053AAD3 /* InputHandler_MonkeyKeyboard.cpp */; }; + AA40D4B109A08D650068C0D5 /* AutoKeysounds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAB2CDD072BD2EC00CD9FC9 /* AutoKeysounds.cpp */; }; + AA40D4B209A08D650068C0D5 /* RageSoundMixBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAB2CE1072BD2FA00CD9FC9 /* RageSoundMixBuffer.cpp */; }; + AA40D4B309A08D650068C0D5 /* RageSoundReader_Chain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7ADC23072CAB7F00C50A7F /* RageSoundReader_Chain.cpp */; }; + AA40D4B409A08D650068C0D5 /* RageSoundUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7ADC25072CAB7F00C50A7F /* RageSoundUtil.cpp */; }; + AA40D4B509A08D650068C0D5 /* ScreenNetRoom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF793F1074FE69E00D74516 /* ScreenNetRoom.cpp */; }; + AA40D4B609A08D650068C0D5 /* ScreenNetSelectBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF793F3074FE69E00D74516 /* ScreenNetSelectBase.cpp */; }; + AA40D4B709A08D650068C0D5 /* ScreenPackages.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1145D9075DFADF0050A3D1 /* ScreenPackages.cpp */; }; + AA40D4B809A08D650068C0D5 /* ScreenSystemLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1145DB075DFADF0050A3D1 /* ScreenSystemLayer.cpp */; }; + AA40D4B909A08D650068C0D5 /* Command.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1B08370762532800835464 /* Command.cpp */; }; + AA40D4BA09A08D650068C0D5 /* GameCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1B08390762532800835464 /* GameCommand.cpp */; }; + AA40D4BB09A08D650068C0D5 /* Preference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1B083B0762532800835464 /* Preference.cpp */; }; + AA40D4BC09A08D650068C0D5 /* RageFileBasic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0E04CE076C4CD500716D81 /* RageFileBasic.cpp */; }; + AA40D4BD09A08D650068C0D5 /* RageFileDriverDeflate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0E04D0076C4CD500716D81 /* RageFileDriverDeflate.cpp */; }; + AA40D4BE09A08D650068C0D5 /* RageFileDriverSlice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0E04D2076C4CD500716D81 /* RageFileDriverSlice.cpp */; }; + AA40D4BF09A08D650068C0D5 /* RageSurface_Save_JPEG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6C607A20AFE00793F0E /* RageSurface_Save_JPEG.cpp */; }; + AA40D4C009A08D650068C0D5 /* RageSurfaceUtils_Dither.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6C807A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp */; }; + AA40D4C109A08D650068C0D5 /* RageSurfaceUtils_Zoom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6CA07A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp */; }; + AA40D4C209A08D650068C0D5 /* LuaManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC78D07A4FF5600793F0E /* LuaManager.cpp */; }; + AA40D4C609A08D650068C0D5 /* RageFileDriverTimeout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACA592A07B5E23400763545 /* RageFileDriverTimeout.cpp */; }; + AA40D4C709A08D650068C0D5 /* RageUtil_WorkerThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACA592D07B5E23400763545 /* RageUtil_WorkerThread.cpp */; }; + AA40D4C809A08D650068C0D5 /* LuaReference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2A107C9391B00EA04E1 /* LuaReference.cpp */; }; + AA40D4C909A08D650068C0D5 /* MessageManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2A307C9391B00EA04E1 /* MessageManager.cpp */; }; + AA40D4CA09A08D650068C0D5 /* StatsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2A507C9391B00EA04E1 /* StatsManager.cpp */; }; + AA40D4CB09A08D650068C0D5 /* AutoActor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2AF07C9395400EA04E1 /* AutoActor.cpp */; }; + AA40D4CC09A08D650068C0D5 /* OptionRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2B407C939A200EA04E1 /* OptionRow.cpp */; }; + AA40D4CD09A08D650068C0D5 /* PlayerStageStats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2B807C939F800EA04E1 /* PlayerStageStats.cpp */; }; + AA40D4CE09A08D650068C0D5 /* PlayerState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2BA07C939F800EA04E1 /* PlayerState.cpp */; }; + AA40D4CF09A08D650068C0D5 /* RollingNumbers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2BB07C939F800EA04E1 /* RollingNumbers.cpp */; }; + AA40D4D009A08D650068C0D5 /* ScoreDisplayCalories.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2BD07C939F800EA04E1 /* ScoreDisplayCalories.cpp */; }; + AA40D4D109A08D650068C0D5 /* CommonMetrics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2C607C93A1E00EA04E1 /* CommonMetrics.cpp */; }; + AA40D4D209A08D650068C0D5 /* UnlockManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA80C75207F20D0D00C99272 /* UnlockManager.cpp */; }; + AA40D4D309A08D650068C0D5 /* OptionRowHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA80C75707F20D6600C99272 /* OptionRowHandler.cpp */; }; + AA40D4D409A08D650068C0D5 /* ScreenMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA80C75B07F20D7F00C99272 /* ScreenMessage.cpp */; }; + AA40D4D509A08D650068C0D5 /* Quad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E6E0907F518E800C3EBB4 /* Quad.cpp */; }; + AA40D4D609A08D650068C0D5 /* ScoreDisplayAliveTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7144AF0809EEEC00545684 /* ScoreDisplayAliveTime.cpp */; }; + AA40D4D709A08D650068C0D5 /* ScoreDisplayLifeTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D5E5C08214C77002AA665 /* ScoreDisplayLifeTime.cpp */; }; + AA40D4D809A08D650068C0D5 /* StreamDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D5E8F082152B6002AA665 /* StreamDisplay.cpp */; }; + AA40D4D909A08D650068C0D5 /* LifeMeterTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D5E5A08214C77002AA665 /* LifeMeterTime.cpp */; }; + AA40D4DA09A08D650068C0D5 /* WheelBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAFE81C0835E7FF00FC43E0 /* WheelBase.cpp */; }; + AA40D4DB09A08D650068C0D5 /* WheelItemBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAFE81E0835E7FF00FC43E0 /* WheelItemBase.cpp */; }; + AA40D4DD09A08D650068C0D5 /* ScreenDebugOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07A5550843E72B00E33D21 /* ScreenDebugOverlay.cpp */; }; + AA40D4DF09A08D650068C0D5 /* ScreenSaveSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07A5590843E72B00E33D21 /* ScreenSaveSync.cpp */; }; + AA40D4E109A08D650068C0D5 /* ScreenSyncOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07A55D0843E72B00E33D21 /* ScreenSyncOverlay.cpp */; }; + AA40D4E209A08D650068C0D5 /* BackgroundUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7DA2EF085760E90057F1EA /* BackgroundUtil.cpp */; }; + AA40D4E309A08D650068C0D5 /* ScreenSplash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB6B475085761B700CEE7BA /* ScreenSplash.cpp */; }; + AA40D4E409A08D650068C0D5 /* LuaBinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8EE0750866E266002C51A7 /* LuaBinding.cpp */; }; + AA40D4E509A08D650068C0D5 /* RageTexturePreloader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA91ACAF0878BB2C00FB2F8F /* RageTexturePreloader.cpp */; }; + AA40D4E609A08D650068C0D5 /* ScreenOptionsEditProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFAB5BB0889098600767BF7 /* ScreenOptionsEditProfile.cpp */; }; + AA40D4E709A08D650068C0D5 /* GameLoop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFAB5CB08890B5200767BF7 /* GameLoop.cpp */; }; + AA40D4E809A08D650068C0D5 /* CharacterManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E74508B64B1400FA24CA /* CharacterManager.cpp */; }; + AA40D4E909A08D650068C0D5 /* CourseLoaderCRS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E74B08B64B5600FA24CA /* CourseLoaderCRS.cpp */; }; + AA40D4EA09A08D650068C0D5 /* CourseWriterCRS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E74D08B64B5600FA24CA /* CourseWriterCRS.cpp */; }; + AA40D4EE09A08D650068C0D5 /* ScreenOptionsManageCourses.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E75B08B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp */; }; + AA40D4EF09A08D650068C0D5 /* ScreenOptionsManageProfiles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E75D08B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp */; }; + AA40D4F109A08D650068C0D5 /* ScreenGameplayNormal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1215D7A008C6559A00B87D8B /* ScreenGameplayNormal.cpp */; }; + AA40D4F209A08D650068C0D5 /* ActorSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACFBE2608E7D793005087FC /* ActorSound.cpp */; }; + AA40D4F409A08D650068C0D5 /* ScreenGameplayLesson.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACFBE4908E7D893005087FC /* ScreenGameplayLesson.cpp */; }; + AA40D4F709A08D650068C0D5 /* LuaExpressionTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACFBE6108E7DBA8005087FC /* LuaExpressionTransform.cpp */; }; + AA40D4F809A08D650068C0D5 /* DynamicActorScroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF3442908F1C36A0006EDB7 /* DynamicActorScroller.cpp */; }; + AA40D4F909A08D650068C0D5 /* ScoreKeeperNormal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF34ADC0900AEBD0006EDB7 /* ScoreKeeperNormal.cpp */; }; + AA40D4FA09A08D650068C0D5 /* ScreenStatsOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF34AEB0900B00C0006EDB7 /* ScreenStatsOverlay.cpp */; }; + AA40D4FC09A08D650068C0D5 /* MovieTexture_Generic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA372D00909934500141131 /* MovieTexture_Generic.cpp */; }; + AA40D4FD09A08D650068C0D5 /* MovieTexture_Theora.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA372D20909934500141131 /* MovieTexture_Theora.cpp */; }; + AA40D4FF09A08D650068C0D5 /* LifeMeter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA2FB638091212AF000FD574 /* LifeMeter.cpp */; }; + AA40D50109A08D650068C0D5 /* SpecialFiles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFBEECF094D7FCB000029DE /* SpecialFiles.cpp */; }; + AA40D50209A08D650068C0D5 /* ScreenOptionsManageEditSteps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFBEEE5094D807E000029DE /* ScreenOptionsManageEditSteps.cpp */; }; + AA40D50309A08D650068C0D5 /* ScreenOptionsMemoryCard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFBEEE7094D807E000029DE /* ScreenOptionsMemoryCard.cpp */; }; + AA40D50409A08D650068C0D5 /* ScreenServiceAction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFBEEE9094D807E000029DE /* ScreenServiceAction.cpp */; }; + AA40D50609A08D650068C0D5 /* XmlFileUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07328C0954381800F396C5 /* XmlFileUtil.cpp */; }; + AA40D50709A08D650068C0D5 /* XmlFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6889905D7F3C800964E6D /* XmlFile.cpp */; }; + AA40D50809A08D650068C0D5 /* LocalizedString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADD1CC2095C233E0088C9DF /* LocalizedString.cpp */; }; + AA40D50D09A08D650068C0D5 /* SMMain.mm in Sources */ = {isa = PBXBuildFile; fileRef = AABBFCD209838C3A00F077E2 /* SMMain.mm */; }; + AA40D50E09A08D650068C0D5 /* HIDDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA44705309846B0800983E82 /* HIDDevice.cpp */; }; + AA40D50F09A08D650068C0D5 /* JoystickDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA44708D0984720900983E82 /* JoystickDevice.cpp */; }; + AA40D51009A08D650068C0D5 /* KeyboardDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4470BB098476F600983E82 /* KeyboardDevice.cpp */; }; + AA40D51109A08D650068C0D5 /* Tween.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC0C8C00984AE3B0075FC53 /* Tween.cpp */; }; + AA40D51209A08D650068C0D5 /* ScreenUnlockStatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA658779098C322800CE55CC /* ScreenUnlockStatus.cpp */; }; + AA40D51309A08D650068C0D5 /* AdjustSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA84B7050996F8370085EECB /* AdjustSync.cpp */; }; + AA40D51509A08D650068C0D5 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + AA40D51609A08D650068C0D5 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA0F7CE047AC7BF005F316C /* Carbon.framework */; }; + AA40D51709A08D650068C0D5 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA0F7D0047AC7EA005F316C /* IOKit.framework */; }; + AA40D51809A08D650068C0D5 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA0F7D2047ACBC9005F316C /* QuickTime.framework */; }; + AA40D51909A08D650068C0D5 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA8DD84904A2E51400D02EE9 /* OpenGL.framework */; }; + AA40D51A09A08D650068C0D5 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAF33F2A04FF213100F93C24 /* CoreFoundation.framework */; }; + AA40D51C09A08D650068C0D5 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA230EAE06043704002672F3 /* AudioToolbox.framework */; }; + AA40D51D09A08D650068C0D5 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA230EAF06043704002672F3 /* AudioUnit.framework */; }; + AA40D51E09A08D650068C0D5 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA8E0020696984300FCE1F9 /* CoreAudio.framework */; }; + AA40D51F09A08D650068C0D5 /* vecLib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA77E8A108B6ABD500FA24CA /* vecLib.framework */; }; + AA42F5E8067068D30013509E /* ScreenNetworkOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA42F5E6067068D30013509E /* ScreenNetworkOptions.cpp */; }; + AA44705509846B0800983E82 /* HIDDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA44705309846B0800983E82 /* HIDDevice.cpp */; }; + AA44708F0984720900983E82 /* JoystickDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA44708D0984720900983E82 /* JoystickDevice.cpp */; }; + AA4470BD098476F600983E82 /* KeyboardDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4470BB098476F600983E82 /* KeyboardDevice.cpp */; }; + AA4F27B20B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4F27AE0B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.cpp */; }; + AA4F27B40B2C01B400ADEA79 /* RageSoundReader_Pan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4F27B00B2C01B400ADEA79 /* RageSoundReader_Pan.cpp */; }; + AA4F27B60B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4F27AE0B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.cpp */; }; + AA4F27B70B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.h in Headers */ = {isa = PBXBuildFile; fileRef = AA4F27AF0B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.h */; }; + AA4F27B80B2C01B400ADEA79 /* RageSoundReader_Pan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4F27B00B2C01B400ADEA79 /* RageSoundReader_Pan.cpp */; }; + AA4F27B90B2C01B400ADEA79 /* RageSoundReader_Pan.h in Headers */ = {isa = PBXBuildFile; fileRef = AA4F27B10B2C01B400ADEA79 /* RageSoundReader_Pan.h */; }; + AA50201F05D6D7B200ACEFD0 /* Profile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA50201D05D6D7B200ACEFD0 /* Profile.cpp */; }; + AA5A51F40A8441AA006DBB92 /* ModsGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = AA5A51F20A8441AA006DBB92 /* ModsGroup.h */; }; + AA5C73FD0637A5F100AFB891 /* CourseUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5C73F70637A5F000AFB891 /* CourseUtil.cpp */; }; + AA5C73FF0637A5F100AFB891 /* SongUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5C73F90637A5F000AFB891 /* SongUtil.cpp */; }; + AA5C74010637A5F100AFB891 /* StepsUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5C73FB0637A5F000AFB891 /* StepsUtil.cpp */; }; + AA5D16570A79805C00F17E86 /* RageTextureRenderTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5D16550A79805C00F17E86 /* RageTextureRenderTarget.cpp */; }; + AA5D16590A79805C00F17E86 /* RageTextureRenderTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5D16550A79805C00F17E86 /* RageTextureRenderTarget.cpp */; }; + AA5D165A0A79805C00F17E86 /* RageTextureRenderTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = AA5D16560A79805C00F17E86 /* RageTextureRenderTarget.h */; }; + AA5D166C0A798C0E00F17E86 /* ActorFrameTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5D166A0A798C0E00F17E86 /* ActorFrameTexture.cpp */; }; + AA5D166E0A798C0E00F17E86 /* ActorFrameTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5D166A0A798C0E00F17E86 /* ActorFrameTexture.cpp */; }; + AA5D166F0A798C0E00F17E86 /* ActorFrameTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = AA5D166B0A798C0E00F17E86 /* ActorFrameTexture.h */; }; + AA608EC00B0F85E400B39AC4 /* DialogDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA608EBF0B0F85E400B39AC4 /* DialogDriver.cpp */; }; + AA608EC10B0F85E400B39AC4 /* DialogDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA608EBF0B0F85E400B39AC4 /* DialogDriver.cpp */; }; + AA608FAD0B0F9A4E00B39AC4 /* RageSoundDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA608FAC0B0F9A4E00B39AC4 /* RageSoundDriver.cpp */; }; + AA608FAE0B0F9A4E00B39AC4 /* RageSoundDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA608FAC0B0F9A4E00B39AC4 /* RageSoundDriver.cpp */; }; + AA6090E60B141D1C00B39AC4 /* GamePreferences.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6090E40B141D1C00B39AC4 /* GamePreferences.cpp */; }; + AA6090E80B141D1C00B39AC4 /* GamePreferences.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6090E40B141D1C00B39AC4 /* GamePreferences.cpp */; }; + AA6090E90B141D1C00B39AC4 /* GamePreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6090E50B141D1C00B39AC4 /* GamePreferences.h */; }; + AA60E0C2067992D7008ADC41 /* Threads_Pthreads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA60E0BD067992D7008ADC41 /* Threads_Pthreads.cpp */; }; + AA64218806EC606F00C21584 /* RageFileDriverMemory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA64218606EC606F00C21584 /* RageFileDriverMemory.cpp */; }; + AA65877B098C322800CE55CC /* ScreenUnlockStatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA658779098C322800CE55CC /* ScreenUnlockStatus.cpp */; }; + AA6999610ACE1CBB000237F9 /* ControllerStateDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA69995F0ACE1CBB000237F9 /* ControllerStateDisplay.cpp */; }; + AA6999620ACE1CBB000237F9 /* ControllerStateDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6999600ACE1CBB000237F9 /* ControllerStateDisplay.h */; }; + AA6999630ACE1CBB000237F9 /* ControllerStateDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA69995F0ACE1CBB000237F9 /* ControllerStateDisplay.cpp */; }; + AA6C6AD80DC6B17B00E7A13E /* ArchHooks_MacOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6AD60DC6B17B00E7A13E /* ArchHooks_MacOSX.cpp */; }; + AA6C6ADA0DC6B17B00E7A13E /* ArchHooks_MacOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6AD60DC6B17B00E7A13E /* ArchHooks_MacOSX.cpp */; }; + AA6C6ADB0DC6B17B00E7A13E /* ArchHooks_MacOSX.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6C6AD70DC6B17B00E7A13E /* ArchHooks_MacOSX.h */; }; + AA6C6ADE0DC6B1DC00E7A13E /* DialogDriver_MacOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6ADC0DC6B1DC00E7A13E /* DialogDriver_MacOSX.cpp */; }; + AA6C6AE00DC6B1DC00E7A13E /* DialogDriver_MacOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6ADC0DC6B1DC00E7A13E /* DialogDriver_MacOSX.cpp */; }; + AA6C6AE10DC6B1DC00E7A13E /* DialogDriver_MacOSX.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6C6ADD0DC6B1DC00E7A13E /* DialogDriver_MacOSX.h */; }; + AA6C6AE50DC6B22800E7A13E /* LoadingWindow_MacOSX.mm in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6AE30DC6B22800E7A13E /* LoadingWindow_MacOSX.mm */; }; + AA6C6AE60DC6B22800E7A13E /* LoadingWindow_MacOSX.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6C6AE20DC6B22800E7A13E /* LoadingWindow_MacOSX.h */; }; + AA6C6AE70DC6B22800E7A13E /* LoadingWindow_MacOSX.mm in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6AE30DC6B22800E7A13E /* LoadingWindow_MacOSX.mm */; }; + AA6C6B030DC6B2B400E7A13E /* LowLevelWindow_MacOSX.mm in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6B010DC6B2B400E7A13E /* LowLevelWindow_MacOSX.mm */; }; + AA6C6B040DC6B2B400E7A13E /* LowLevelWindow_MacOSX.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6C6B000DC6B2B400E7A13E /* LowLevelWindow_MacOSX.h */; }; + AA6C6B050DC6B2B400E7A13E /* LowLevelWindow_MacOSX.mm in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6B010DC6B2B400E7A13E /* LowLevelWindow_MacOSX.mm */; }; + AA6C6B080DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6B060DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.cpp */; }; + AA6C6B0A0DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6B060DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.cpp */; }; + AA6C6B0B0DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6C6B070DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.h */; }; + AA6C6B0E0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6B0C0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.cpp */; }; + AA6C6B100DC6B48C00E7A13E /* InputHandler_MacOSX_HID.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6B0C0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.cpp */; }; + AA6C6B110DC6B48C00E7A13E /* InputHandler_MacOSX_HID.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6C6B0D0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.h */; }; + AA6E6E0A07F518E800C3EBB4 /* Quad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E6E0907F518E800C3EBB4 /* Quad.cpp */; }; + AA70E36A0663112800DAE1FD /* Trail.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA70E3650663112800DAE1FD /* Trail.cpp */; }; + AA70E36C0663112800DAE1FD /* TrailUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA70E3670663112800DAE1FD /* TrailUtil.cpp */; }; + AA7144B10809EEEC00545684 /* ScoreDisplayAliveTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7144AF0809EEEC00545684 /* ScoreDisplayAliveTime.cpp */; }; + AA729C440599B50D00779F33 /* TimingData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA729C420599B50D00779F33 /* TimingData.cpp */; }; + AA729C480599B54D00779F33 /* MemoryCardDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA729C460599B54D00779F33 /* MemoryCardDisplay.cpp */; }; + AA729C520599B58D00779F33 /* ReceptorArrow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA729C4E0599B58D00779F33 /* ReceptorArrow.cpp */; }; + AA729C540599B58D00779F33 /* ReceptorArrowRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA729C500599B58D00779F33 /* ReceptorArrowRow.cpp */; }; + AA77E74708B64B1400FA24CA /* CharacterManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E74508B64B1400FA24CA /* CharacterManager.cpp */; }; + AA77E74F08B64B5600FA24CA /* CourseLoaderCRS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E74B08B64B5600FA24CA /* CourseLoaderCRS.cpp */; }; + AA77E75108B64B5600FA24CA /* CourseWriterCRS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E74D08B64B5600FA24CA /* CourseWriterCRS.cpp */; }; + AA77E76508B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E75B08B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp */; }; + AA77E76708B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E75D08B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp */; }; + AA77E8B108B6ABD500FA24CA /* vecLib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA77E8A108B6ABD500FA24CA /* vecLib.framework */; }; + AA7A2BAF0AE09CEC0054C5BA /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; }; + AA7A2BB00AE09CF10054C5BA /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; }; + AA7ADC27072CAB7F00C50A7F /* RageSoundReader_Chain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7ADC23072CAB7F00C50A7F /* RageSoundReader_Chain.cpp */; }; + AA7ADC29072CAB7F00C50A7F /* RageSoundUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7ADC25072CAB7F00C50A7F /* RageSoundUtil.cpp */; }; + AA7C8AFC0B6744F700FD9940 /* bn_error.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A800B6744F600FD9940 /* bn_error.c */; }; + AA7C8AFD0B6744F700FD9940 /* bn_fast_mp_invmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A810B6744F600FD9940 /* bn_fast_mp_invmod.c */; }; + AA7C8AFE0B6744F700FD9940 /* bn_fast_mp_montgomery_reduce.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A820B6744F600FD9940 /* bn_fast_mp_montgomery_reduce.c */; }; + AA7C8AFF0B6744F700FD9940 /* bn_fast_s_mp_mul_digs.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A830B6744F600FD9940 /* bn_fast_s_mp_mul_digs.c */; }; + AA7C8B000B6744F700FD9940 /* bn_fast_s_mp_mul_high_digs.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A840B6744F600FD9940 /* bn_fast_s_mp_mul_high_digs.c */; }; + AA7C8B010B6744F700FD9940 /* bn_fast_s_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A850B6744F600FD9940 /* bn_fast_s_mp_sqr.c */; }; + AA7C8B020B6744F700FD9940 /* bn_mp_2expt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A860B6744F600FD9940 /* bn_mp_2expt.c */; }; + AA7C8B030B6744F700FD9940 /* bn_mp_abs.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A870B6744F600FD9940 /* bn_mp_abs.c */; }; + AA7C8B040B6744F700FD9940 /* bn_mp_add.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A880B6744F600FD9940 /* bn_mp_add.c */; }; + AA7C8B050B6744F700FD9940 /* bn_mp_add_d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A890B6744F600FD9940 /* bn_mp_add_d.c */; }; + AA7C8B060B6744F700FD9940 /* bn_mp_addmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A8A0B6744F600FD9940 /* bn_mp_addmod.c */; }; + AA7C8B070B6744F700FD9940 /* bn_mp_and.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A8B0B6744F600FD9940 /* bn_mp_and.c */; }; + AA7C8B080B6744F700FD9940 /* bn_mp_clamp.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A8C0B6744F600FD9940 /* bn_mp_clamp.c */; }; + AA7C8B090B6744F700FD9940 /* bn_mp_clear.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A8D0B6744F600FD9940 /* bn_mp_clear.c */; }; + AA7C8B0A0B6744F700FD9940 /* bn_mp_clear_multi.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A8E0B6744F600FD9940 /* bn_mp_clear_multi.c */; }; + AA7C8B0B0B6744F700FD9940 /* bn_mp_cmp.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A8F0B6744F600FD9940 /* bn_mp_cmp.c */; }; + AA7C8B0C0B6744F700FD9940 /* bn_mp_cmp_d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A900B6744F600FD9940 /* bn_mp_cmp_d.c */; }; + AA7C8B0D0B6744F700FD9940 /* bn_mp_cmp_mag.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A910B6744F600FD9940 /* bn_mp_cmp_mag.c */; }; + AA7C8B0E0B6744F700FD9940 /* bn_mp_cnt_lsb.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A920B6744F600FD9940 /* bn_mp_cnt_lsb.c */; }; + AA7C8B0F0B6744F700FD9940 /* bn_mp_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A930B6744F600FD9940 /* bn_mp_copy.c */; }; + AA7C8B100B6744F700FD9940 /* bn_mp_count_bits.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A940B6744F600FD9940 /* bn_mp_count_bits.c */; }; + AA7C8B110B6744F700FD9940 /* bn_mp_div.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A950B6744F600FD9940 /* bn_mp_div.c */; }; + AA7C8B120B6744F700FD9940 /* bn_mp_div_2.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A960B6744F600FD9940 /* bn_mp_div_2.c */; }; + AA7C8B130B6744F700FD9940 /* bn_mp_div_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A970B6744F600FD9940 /* bn_mp_div_2d.c */; }; + AA7C8B140B6744F700FD9940 /* bn_mp_div_3.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A980B6744F600FD9940 /* bn_mp_div_3.c */; }; + AA7C8B150B6744F700FD9940 /* bn_mp_div_d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A990B6744F600FD9940 /* bn_mp_div_d.c */; }; + AA7C8B160B6744F700FD9940 /* bn_mp_dr_is_modulus.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A9A0B6744F600FD9940 /* bn_mp_dr_is_modulus.c */; }; + AA7C8B170B6744F700FD9940 /* bn_mp_dr_reduce.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A9B0B6744F600FD9940 /* bn_mp_dr_reduce.c */; }; + AA7C8B180B6744F700FD9940 /* bn_mp_dr_setup.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A9C0B6744F600FD9940 /* bn_mp_dr_setup.c */; }; + AA7C8B190B6744F700FD9940 /* bn_mp_exch.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A9D0B6744F600FD9940 /* bn_mp_exch.c */; }; + AA7C8B1A0B6744F700FD9940 /* bn_mp_expt_d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A9E0B6744F600FD9940 /* bn_mp_expt_d.c */; }; + AA7C8B1B0B6744F700FD9940 /* bn_mp_exptmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A9F0B6744F600FD9940 /* bn_mp_exptmod.c */; }; + AA7C8B1C0B6744F700FD9940 /* bn_mp_exptmod_fast.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA00B6744F600FD9940 /* bn_mp_exptmod_fast.c */; }; + AA7C8B1D0B6744F700FD9940 /* bn_mp_exteuclid.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA10B6744F600FD9940 /* bn_mp_exteuclid.c */; }; + AA7C8B1E0B6744F700FD9940 /* bn_mp_fread.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA20B6744F600FD9940 /* bn_mp_fread.c */; }; + AA7C8B1F0B6744F700FD9940 /* bn_mp_fwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA30B6744F600FD9940 /* bn_mp_fwrite.c */; }; + AA7C8B200B6744F700FD9940 /* bn_mp_gcd.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA40B6744F600FD9940 /* bn_mp_gcd.c */; }; + AA7C8B210B6744F700FD9940 /* bn_mp_get_int.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA50B6744F600FD9940 /* bn_mp_get_int.c */; }; + AA7C8B220B6744F700FD9940 /* bn_mp_grow.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA60B6744F600FD9940 /* bn_mp_grow.c */; }; + AA7C8B230B6744F700FD9940 /* bn_mp_init.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA70B6744F600FD9940 /* bn_mp_init.c */; }; + AA7C8B240B6744F700FD9940 /* bn_mp_init_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA80B6744F600FD9940 /* bn_mp_init_copy.c */; }; + AA7C8B250B6744F700FD9940 /* bn_mp_init_multi.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA90B6744F600FD9940 /* bn_mp_init_multi.c */; }; + AA7C8B260B6744F700FD9940 /* bn_mp_init_set.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AAA0B6744F600FD9940 /* bn_mp_init_set.c */; }; + AA7C8B270B6744F700FD9940 /* bn_mp_init_set_int.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AAB0B6744F600FD9940 /* bn_mp_init_set_int.c */; }; + AA7C8B280B6744F700FD9940 /* bn_mp_init_size.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AAC0B6744F600FD9940 /* bn_mp_init_size.c */; }; + AA7C8B290B6744F700FD9940 /* bn_mp_invmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AAD0B6744F600FD9940 /* bn_mp_invmod.c */; }; + AA7C8B2A0B6744F700FD9940 /* bn_mp_invmod_slow.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AAE0B6744F600FD9940 /* bn_mp_invmod_slow.c */; }; + AA7C8B2B0B6744F700FD9940 /* bn_mp_is_square.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AAF0B6744F600FD9940 /* bn_mp_is_square.c */; }; + AA7C8B2C0B6744F700FD9940 /* bn_mp_jacobi.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB00B6744F600FD9940 /* bn_mp_jacobi.c */; }; + AA7C8B2D0B6744F700FD9940 /* bn_mp_karatsuba_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB10B6744F600FD9940 /* bn_mp_karatsuba_mul.c */; }; + AA7C8B2E0B6744F700FD9940 /* bn_mp_karatsuba_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB20B6744F600FD9940 /* bn_mp_karatsuba_sqr.c */; }; + AA7C8B2F0B6744F700FD9940 /* bn_mp_lcm.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB30B6744F600FD9940 /* bn_mp_lcm.c */; }; + AA7C8B300B6744F700FD9940 /* bn_mp_lshd.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB40B6744F700FD9940 /* bn_mp_lshd.c */; }; + AA7C8B310B6744F700FD9940 /* bn_mp_mod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB50B6744F700FD9940 /* bn_mp_mod.c */; }; + AA7C8B320B6744F700FD9940 /* bn_mp_mod_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB60B6744F700FD9940 /* bn_mp_mod_2d.c */; }; + AA7C8B330B6744F700FD9940 /* bn_mp_mod_d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB70B6744F700FD9940 /* bn_mp_mod_d.c */; }; + AA7C8B340B6744F700FD9940 /* bn_mp_montgomery_calc_normalization.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB80B6744F700FD9940 /* bn_mp_montgomery_calc_normalization.c */; }; + AA7C8B350B6744F700FD9940 /* bn_mp_montgomery_reduce.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB90B6744F700FD9940 /* bn_mp_montgomery_reduce.c */; }; + AA7C8B360B6744F700FD9940 /* bn_mp_montgomery_setup.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ABA0B6744F700FD9940 /* bn_mp_montgomery_setup.c */; }; + AA7C8B370B6744F700FD9940 /* bn_mp_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ABB0B6744F700FD9940 /* bn_mp_mul.c */; }; + AA7C8B380B6744F700FD9940 /* bn_mp_mul_2.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ABC0B6744F700FD9940 /* bn_mp_mul_2.c */; }; + AA7C8B390B6744F700FD9940 /* bn_mp_mul_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ABD0B6744F700FD9940 /* bn_mp_mul_2d.c */; }; + AA7C8B3A0B6744F700FD9940 /* bn_mp_mul_d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ABE0B6744F700FD9940 /* bn_mp_mul_d.c */; }; + AA7C8B3B0B6744F700FD9940 /* bn_mp_mulmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ABF0B6744F700FD9940 /* bn_mp_mulmod.c */; }; + AA7C8B3C0B6744F700FD9940 /* bn_mp_n_root.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC00B6744F700FD9940 /* bn_mp_n_root.c */; }; + AA7C8B3D0B6744F700FD9940 /* bn_mp_neg.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC10B6744F700FD9940 /* bn_mp_neg.c */; }; + AA7C8B3E0B6744F700FD9940 /* bn_mp_or.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC20B6744F700FD9940 /* bn_mp_or.c */; }; + AA7C8B3F0B6744F700FD9940 /* bn_mp_prime_fermat.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC30B6744F700FD9940 /* bn_mp_prime_fermat.c */; }; + AA7C8B400B6744F700FD9940 /* bn_mp_prime_is_divisible.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC40B6744F700FD9940 /* bn_mp_prime_is_divisible.c */; }; + AA7C8B410B6744F700FD9940 /* bn_mp_prime_is_prime.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC50B6744F700FD9940 /* bn_mp_prime_is_prime.c */; }; + AA7C8B420B6744F700FD9940 /* bn_mp_prime_miller_rabin.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC60B6744F700FD9940 /* bn_mp_prime_miller_rabin.c */; }; + AA7C8B430B6744F700FD9940 /* bn_mp_prime_next_prime.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC70B6744F700FD9940 /* bn_mp_prime_next_prime.c */; }; + AA7C8B440B6744F700FD9940 /* bn_mp_prime_rabin_miller_trials.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC80B6744F700FD9940 /* bn_mp_prime_rabin_miller_trials.c */; }; + AA7C8B450B6744F700FD9940 /* bn_mp_prime_random_ex.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC90B6744F700FD9940 /* bn_mp_prime_random_ex.c */; }; + AA7C8B460B6744F700FD9940 /* bn_mp_radix_size.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ACA0B6744F700FD9940 /* bn_mp_radix_size.c */; }; + AA7C8B470B6744F700FD9940 /* bn_mp_radix_smap.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ACB0B6744F700FD9940 /* bn_mp_radix_smap.c */; }; + AA7C8B480B6744F700FD9940 /* bn_mp_rand.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ACC0B6744F700FD9940 /* bn_mp_rand.c */; }; + AA7C8B490B6744F700FD9940 /* bn_mp_read_radix.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ACD0B6744F700FD9940 /* bn_mp_read_radix.c */; }; + AA7C8B4A0B6744F700FD9940 /* bn_mp_read_signed_bin.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ACE0B6744F700FD9940 /* bn_mp_read_signed_bin.c */; }; + AA7C8B4B0B6744F700FD9940 /* bn_mp_read_unsigned_bin.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ACF0B6744F700FD9940 /* bn_mp_read_unsigned_bin.c */; }; + AA7C8B4C0B6744F700FD9940 /* bn_mp_reduce.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD00B6744F700FD9940 /* bn_mp_reduce.c */; }; + AA7C8B4D0B6744F700FD9940 /* bn_mp_reduce_2k.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD10B6744F700FD9940 /* bn_mp_reduce_2k.c */; }; + AA7C8B4E0B6744F700FD9940 /* bn_mp_reduce_2k_l.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD20B6744F700FD9940 /* bn_mp_reduce_2k_l.c */; }; + AA7C8B4F0B6744F700FD9940 /* bn_mp_reduce_2k_setup.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD30B6744F700FD9940 /* bn_mp_reduce_2k_setup.c */; }; + AA7C8B500B6744F700FD9940 /* bn_mp_reduce_2k_setup_l.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD40B6744F700FD9940 /* bn_mp_reduce_2k_setup_l.c */; }; + AA7C8B510B6744F700FD9940 /* bn_mp_reduce_is_2k.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD50B6744F700FD9940 /* bn_mp_reduce_is_2k.c */; }; + AA7C8B520B6744F700FD9940 /* bn_mp_reduce_is_2k_l.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD60B6744F700FD9940 /* bn_mp_reduce_is_2k_l.c */; }; + AA7C8B530B6744F700FD9940 /* bn_mp_reduce_setup.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD70B6744F700FD9940 /* bn_mp_reduce_setup.c */; }; + AA7C8B540B6744F700FD9940 /* bn_mp_rshd.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD80B6744F700FD9940 /* bn_mp_rshd.c */; }; + AA7C8B550B6744F700FD9940 /* bn_mp_set.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD90B6744F700FD9940 /* bn_mp_set.c */; }; + AA7C8B560B6744F700FD9940 /* bn_mp_set_int.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ADA0B6744F700FD9940 /* bn_mp_set_int.c */; }; + AA7C8B570B6744F700FD9940 /* bn_mp_shrink.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ADB0B6744F700FD9940 /* bn_mp_shrink.c */; }; + AA7C8B580B6744F700FD9940 /* bn_mp_signed_bin_size.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ADC0B6744F700FD9940 /* bn_mp_signed_bin_size.c */; }; + AA7C8B590B6744F700FD9940 /* bn_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ADD0B6744F700FD9940 /* bn_mp_sqr.c */; }; + AA7C8B5A0B6744F700FD9940 /* bn_mp_sqrmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ADE0B6744F700FD9940 /* bn_mp_sqrmod.c */; }; + AA7C8B5B0B6744F700FD9940 /* bn_mp_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ADF0B6744F700FD9940 /* bn_mp_sqrt.c */; }; + AA7C8B5C0B6744F700FD9940 /* bn_mp_sub.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE00B6744F700FD9940 /* bn_mp_sub.c */; }; + AA7C8B5D0B6744F700FD9940 /* bn_mp_sub_d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE10B6744F700FD9940 /* bn_mp_sub_d.c */; }; + AA7C8B5E0B6744F700FD9940 /* bn_mp_submod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE20B6744F700FD9940 /* bn_mp_submod.c */; }; + AA7C8B5F0B6744F700FD9940 /* bn_mp_to_signed_bin.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE30B6744F700FD9940 /* bn_mp_to_signed_bin.c */; }; + AA7C8B600B6744F700FD9940 /* bn_mp_to_signed_bin_n.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE40B6744F700FD9940 /* bn_mp_to_signed_bin_n.c */; }; + AA7C8B610B6744F700FD9940 /* bn_mp_to_unsigned_bin.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE50B6744F700FD9940 /* bn_mp_to_unsigned_bin.c */; }; + AA7C8B620B6744F700FD9940 /* bn_mp_to_unsigned_bin_n.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE60B6744F700FD9940 /* bn_mp_to_unsigned_bin_n.c */; }; + AA7C8B630B6744F700FD9940 /* bn_mp_toom_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE70B6744F700FD9940 /* bn_mp_toom_mul.c */; }; + AA7C8B640B6744F700FD9940 /* bn_mp_toom_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE80B6744F700FD9940 /* bn_mp_toom_sqr.c */; }; + AA7C8B650B6744F700FD9940 /* bn_mp_toradix.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE90B6744F700FD9940 /* bn_mp_toradix.c */; }; + AA7C8B660B6744F700FD9940 /* bn_mp_toradix_n.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AEA0B6744F700FD9940 /* bn_mp_toradix_n.c */; }; + AA7C8B670B6744F700FD9940 /* bn_mp_unsigned_bin_size.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AEB0B6744F700FD9940 /* bn_mp_unsigned_bin_size.c */; }; + AA7C8B680B6744F700FD9940 /* bn_mp_xor.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AEC0B6744F700FD9940 /* bn_mp_xor.c */; }; + AA7C8B690B6744F700FD9940 /* bn_mp_zero.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AED0B6744F700FD9940 /* bn_mp_zero.c */; }; + AA7C8B6A0B6744F700FD9940 /* bn_prime_tab.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AEE0B6744F700FD9940 /* bn_prime_tab.c */; }; + AA7C8B6B0B6744F700FD9940 /* bn_reverse.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AEF0B6744F700FD9940 /* bn_reverse.c */; }; + AA7C8B6C0B6744F700FD9940 /* bn_s_mp_add.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AF00B6744F700FD9940 /* bn_s_mp_add.c */; }; + AA7C8B6D0B6744F700FD9940 /* bn_s_mp_exptmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AF10B6744F700FD9940 /* bn_s_mp_exptmod.c */; }; + AA7C8B6E0B6744F700FD9940 /* bn_s_mp_mul_digs.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AF20B6744F700FD9940 /* bn_s_mp_mul_digs.c */; }; + AA7C8B6F0B6744F700FD9940 /* bn_s_mp_mul_high_digs.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AF30B6744F700FD9940 /* bn_s_mp_mul_high_digs.c */; }; + AA7C8B700B6744F700FD9940 /* bn_s_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AF40B6744F700FD9940 /* bn_s_mp_sqr.c */; }; + AA7C8B710B6744F700FD9940 /* bn_s_mp_sub.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AF50B6744F700FD9940 /* bn_s_mp_sub.c */; }; + AA7C8B720B6744F700FD9940 /* bncore.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AF60B6744F700FD9940 /* bncore.c */; }; + AA7C8B730B6744F700FD9940 /* tommath.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8AF90B6744F700FD9940 /* tommath.h */; }; + AA7C8B740B6744F700FD9940 /* tommath_class.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8AFA0B6744F700FD9940 /* tommath_class.h */; }; + AA7C8B750B6744F700FD9940 /* tommath_superclass.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8AFB0B6744F700FD9940 /* tommath_superclass.h */; }; + AA7C8C560B67467D00FD9940 /* aes.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8B950B67467C00FD9940 /* aes.c */; }; + AA7C8C580B67467D00FD9940 /* hash_memory.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8B990B67467C00FD9940 /* hash_memory.c */; }; + AA7C8C590B67467D00FD9940 /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8B9A0B67467C00FD9940 /* md5.c */; }; + AA7C8C5A0B67467D00FD9940 /* sha1.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8B9B0B67467C00FD9940 /* sha1.c */; }; + AA7C8C5B0B67467D00FD9940 /* tomcrypt.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8B9D0B67467C00FD9940 /* tomcrypt.h */; }; + AA7C8C5C0B67467D00FD9940 /* tomcrypt_argchk.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8B9E0B67467C00FD9940 /* tomcrypt_argchk.h */; }; + AA7C8C5D0B67467D00FD9940 /* tomcrypt_cfg.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8B9F0B67467C00FD9940 /* tomcrypt_cfg.h */; }; + AA7C8C5E0B67467D00FD9940 /* tomcrypt_cipher.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA00B67467C00FD9940 /* tomcrypt_cipher.h */; }; + AA7C8C5F0B67467D00FD9940 /* tomcrypt_custom.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA10B67467C00FD9940 /* tomcrypt_custom.h */; }; + AA7C8C600B67467D00FD9940 /* tomcrypt_hash.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA20B67467C00FD9940 /* tomcrypt_hash.h */; }; + AA7C8C610B67467D00FD9940 /* tomcrypt_mac.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA30B67467C00FD9940 /* tomcrypt_mac.h */; }; + AA7C8C620B67467D00FD9940 /* tomcrypt_macros.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA40B67467C00FD9940 /* tomcrypt_macros.h */; }; + AA7C8C630B67467D00FD9940 /* tomcrypt_math.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA50B67467C00FD9940 /* tomcrypt_math.h */; }; + AA7C8C640B67467D00FD9940 /* tomcrypt_misc.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA60B67467C00FD9940 /* tomcrypt_misc.h */; }; + AA7C8C650B67467D00FD9940 /* tomcrypt_pk.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA70B67467C00FD9940 /* tomcrypt_pk.h */; }; + AA7C8C660B67467D00FD9940 /* tomcrypt_pkcs.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA80B67467C00FD9940 /* tomcrypt_pkcs.h */; }; + AA7C8C670B67467D00FD9940 /* tomcrypt_prng.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA90B67467C00FD9940 /* tomcrypt_prng.h */; }; + AA7C8C680B67467D00FD9940 /* ltc_ecc_fp_mulmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BAC0B67467C00FD9940 /* ltc_ecc_fp_mulmod.c */; }; + AA7C8C690B67467D00FD9940 /* ltm_desc.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BAD0B67467C00FD9940 /* ltm_desc.c */; }; + AA7C8C6A0B67467D00FD9940 /* multi.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BAE0B67467C00FD9940 /* multi.c */; }; + AA7C8C6B0B67467D00FD9940 /* rand_prime.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BAF0B67467C00FD9940 /* rand_prime.c */; }; + AA7C8C6C0B67467D00FD9940 /* base64_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BB20B67467C00FD9940 /* base64_decode.c */; }; + AA7C8C6D0B67467D00FD9940 /* base64_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BB30B67467C00FD9940 /* base64_encode.c */; }; + AA7C8C6E0B67467D00FD9940 /* burn_stack.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BB40B67467C00FD9940 /* burn_stack.c */; }; + AA7C8C6F0B67467D00FD9940 /* crypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BB60B67467C00FD9940 /* crypt.c */; }; + AA7C8C700B67467D00FD9940 /* crypt_argchk.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BB70B67467C00FD9940 /* crypt_argchk.c */; }; + AA7C8C710B67467D00FD9940 /* crypt_cipher_descriptor.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BB80B67467C00FD9940 /* crypt_cipher_descriptor.c */; }; + AA7C8C720B67467D00FD9940 /* crypt_cipher_is_valid.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BB90B67467C00FD9940 /* crypt_cipher_is_valid.c */; }; + AA7C8C730B67467D00FD9940 /* crypt_find_cipher.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BBA0B67467C00FD9940 /* crypt_find_cipher.c */; }; + AA7C8C740B67467D00FD9940 /* crypt_find_cipher_any.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BBB0B67467C00FD9940 /* crypt_find_cipher_any.c */; }; + AA7C8C750B67467D00FD9940 /* crypt_find_cipher_id.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BBC0B67467C00FD9940 /* crypt_find_cipher_id.c */; }; + AA7C8C760B67467D00FD9940 /* crypt_find_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BBD0B67467C00FD9940 /* crypt_find_hash.c */; }; + AA7C8C770B67467D00FD9940 /* crypt_find_hash_any.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BBE0B67467C00FD9940 /* crypt_find_hash_any.c */; }; + AA7C8C780B67467D00FD9940 /* crypt_find_hash_id.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BBF0B67467C00FD9940 /* crypt_find_hash_id.c */; }; + AA7C8C790B67467D00FD9940 /* crypt_find_hash_oid.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC00B67467C00FD9940 /* crypt_find_hash_oid.c */; }; + AA7C8C7A0B67467D00FD9940 /* crypt_find_prng.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC10B67467C00FD9940 /* crypt_find_prng.c */; }; + AA7C8C7B0B67467D00FD9940 /* crypt_fsa.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC20B67467C00FD9940 /* crypt_fsa.c */; }; + AA7C8C7C0B67467D00FD9940 /* crypt_hash_descriptor.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC30B67467C00FD9940 /* crypt_hash_descriptor.c */; }; + AA7C8C7D0B67467D00FD9940 /* crypt_hash_is_valid.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC40B67467C00FD9940 /* crypt_hash_is_valid.c */; }; + AA7C8C7E0B67467D00FD9940 /* crypt_ltc_mp_descriptor.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC50B67467C00FD9940 /* crypt_ltc_mp_descriptor.c */; }; + AA7C8C7F0B67467D00FD9940 /* crypt_prng_descriptor.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC60B67467C00FD9940 /* crypt_prng_descriptor.c */; }; + AA7C8C800B67467D00FD9940 /* crypt_prng_is_valid.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC70B67467C00FD9940 /* crypt_prng_is_valid.c */; }; + AA7C8C810B67467D00FD9940 /* crypt_register_cipher.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC80B67467C00FD9940 /* crypt_register_cipher.c */; }; + AA7C8C820B67467D00FD9940 /* crypt_register_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC90B67467C00FD9940 /* crypt_register_hash.c */; }; + AA7C8C830B67467D00FD9940 /* crypt_register_prng.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BCA0B67467C00FD9940 /* crypt_register_prng.c */; }; + AA7C8C840B67467D00FD9940 /* crypt_unregister_cipher.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BCB0B67467C00FD9940 /* crypt_unregister_cipher.c */; }; + AA7C8C850B67467D00FD9940 /* crypt_unregister_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BCC0B67467C00FD9940 /* crypt_unregister_hash.c */; }; + AA7C8C860B67467D00FD9940 /* crypt_unregister_prng.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BCD0B67467C00FD9940 /* crypt_unregister_prng.c */; }; + AA7C8C870B67467D00FD9940 /* error_to_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BCE0B67467C00FD9940 /* error_to_string.c */; }; + AA7C8C880B67467D00FD9940 /* pkcs_5_1.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BD00B67467C00FD9940 /* pkcs_5_1.c */; }; + AA7C8C890B67467D00FD9940 /* pkcs_5_2.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BD10B67467C00FD9940 /* pkcs_5_2.c */; }; + AA7C8C8A0B67467D00FD9940 /* zeromem.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BD20B67467C00FD9940 /* zeromem.c */; }; + AA7C8C8B0B67467D00FD9940 /* cbc_decrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BD50B67467C00FD9940 /* cbc_decrypt.c */; }; + AA7C8C8C0B67467D00FD9940 /* cbc_done.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BD60B67467C00FD9940 /* cbc_done.c */; }; + AA7C8C8D0B67467D00FD9940 /* cbc_encrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BD70B67467C00FD9940 /* cbc_encrypt.c */; }; + AA7C8C8E0B67467D00FD9940 /* cbc_getiv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BD80B67467C00FD9940 /* cbc_getiv.c */; }; + AA7C8C8F0B67467D00FD9940 /* cbc_setiv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BD90B67467C00FD9940 /* cbc_setiv.c */; }; + AA7C8C900B67467D00FD9940 /* cbc_start.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BDA0B67467C00FD9940 /* cbc_start.c */; }; + AA7C8C910B67467D00FD9940 /* cfb_decrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BDC0B67467C00FD9940 /* cfb_decrypt.c */; }; + AA7C8C920B67467D00FD9940 /* cfb_done.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BDD0B67467C00FD9940 /* cfb_done.c */; }; + AA7C8C930B67467D00FD9940 /* cfb_encrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BDE0B67467C00FD9940 /* cfb_encrypt.c */; }; + AA7C8C940B67467D00FD9940 /* cfb_getiv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BDF0B67467C00FD9940 /* cfb_getiv.c */; }; + AA7C8C950B67467D00FD9940 /* cfb_setiv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE00B67467C00FD9940 /* cfb_setiv.c */; }; + AA7C8C960B67467D00FD9940 /* cfb_start.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE10B67467C00FD9940 /* cfb_start.c */; }; + AA7C8C970B67467D00FD9940 /* ctr_decrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE30B67467C00FD9940 /* ctr_decrypt.c */; }; + AA7C8C980B67467D00FD9940 /* ctr_done.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE40B67467C00FD9940 /* ctr_done.c */; }; + AA7C8C990B67467D00FD9940 /* ctr_encrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE50B67467C00FD9940 /* ctr_encrypt.c */; }; + AA7C8C9A0B67467D00FD9940 /* ctr_getiv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE60B67467C00FD9940 /* ctr_getiv.c */; }; + AA7C8C9B0B67467D00FD9940 /* ctr_setiv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE70B67467C00FD9940 /* ctr_setiv.c */; }; + AA7C8C9C0B67467D00FD9940 /* ctr_start.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE80B67467C00FD9940 /* ctr_start.c */; }; + AA7C8C9D0B67467D00FD9940 /* ctr_test.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE90B67467C00FD9940 /* ctr_test.c */; }; + AA7C8C9E0B67467D00FD9940 /* ecb_decrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BEB0B67467C00FD9940 /* ecb_decrypt.c */; }; + AA7C8C9F0B67467D00FD9940 /* ecb_done.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BEC0B67467C00FD9940 /* ecb_done.c */; }; + AA7C8CA00B67467D00FD9940 /* ecb_encrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BED0B67467C00FD9940 /* ecb_encrypt.c */; }; + AA7C8CA10B67467D00FD9940 /* ecb_start.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BEE0B67467C00FD9940 /* ecb_start.c */; }; + AA7C8CA20B67467D00FD9940 /* ofb_decrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BF00B67467C00FD9940 /* ofb_decrypt.c */; }; + AA7C8CA30B67467D00FD9940 /* ofb_done.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BF10B67467C00FD9940 /* ofb_done.c */; }; + AA7C8CA40B67467D00FD9940 /* ofb_encrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BF20B67467C00FD9940 /* ofb_encrypt.c */; }; + AA7C8CA50B67467D00FD9940 /* ofb_getiv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BF30B67467C00FD9940 /* ofb_getiv.c */; }; + AA7C8CA60B67467D00FD9940 /* ofb_setiv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BF40B67467C00FD9940 /* ofb_setiv.c */; }; + AA7C8CA70B67467D00FD9940 /* ofb_start.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BF50B67467C00FD9940 /* ofb_start.c */; }; + AA7C8CA80B67467D00FD9940 /* der_decode_bit_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BFA0B67467C00FD9940 /* der_decode_bit_string.c */; }; + AA7C8CA90B67467D00FD9940 /* der_encode_bit_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BFB0B67467C00FD9940 /* der_encode_bit_string.c */; }; + AA7C8CAA0B67467D00FD9940 /* der_length_bit_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BFC0B67467C00FD9940 /* der_length_bit_string.c */; }; + AA7C8CAB0B67467D00FD9940 /* der_decode_boolean.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BFE0B67467C00FD9940 /* der_decode_boolean.c */; }; + AA7C8CAC0B67467D00FD9940 /* der_encode_boolean.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BFF0B67467C00FD9940 /* der_encode_boolean.c */; }; + AA7C8CAD0B67467D00FD9940 /* der_length_boolean.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C000B67467C00FD9940 /* der_length_boolean.c */; }; + AA7C8CAE0B67467D00FD9940 /* der_decode_choice.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C020B67467C00FD9940 /* der_decode_choice.c */; }; + AA7C8CAF0B67467D00FD9940 /* der_decode_ia5_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C040B67467C00FD9940 /* der_decode_ia5_string.c */; }; + AA7C8CB00B67467D00FD9940 /* der_encode_ia5_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C050B67467D00FD9940 /* der_encode_ia5_string.c */; }; + AA7C8CB10B67467D00FD9940 /* der_length_ia5_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C060B67467D00FD9940 /* der_length_ia5_string.c */; }; + AA7C8CB20B67467D00FD9940 /* der_decode_integer.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C080B67467D00FD9940 /* der_decode_integer.c */; }; + AA7C8CB30B67467D00FD9940 /* der_encode_integer.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C090B67467D00FD9940 /* der_encode_integer.c */; }; + AA7C8CB40B67467D00FD9940 /* der_length_integer.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C0A0B67467D00FD9940 /* der_length_integer.c */; }; + AA7C8CB50B67467D00FD9940 /* der_decode_object_identifier.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C0C0B67467D00FD9940 /* der_decode_object_identifier.c */; }; + AA7C8CB60B67467D00FD9940 /* der_encode_object_identifier.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C0D0B67467D00FD9940 /* der_encode_object_identifier.c */; }; + AA7C8CB70B67467D00FD9940 /* der_length_object_identifier.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C0E0B67467D00FD9940 /* der_length_object_identifier.c */; }; + AA7C8CB80B67467D00FD9940 /* der_decode_octet_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C100B67467D00FD9940 /* der_decode_octet_string.c */; }; + AA7C8CB90B67467D00FD9940 /* der_encode_octet_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C110B67467D00FD9940 /* der_encode_octet_string.c */; }; + AA7C8CBA0B67467D00FD9940 /* der_length_octet_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C120B67467D00FD9940 /* der_length_octet_string.c */; }; + AA7C8CBB0B67467D00FD9940 /* der_decode_printable_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C140B67467D00FD9940 /* der_decode_printable_string.c */; }; + AA7C8CBC0B67467D00FD9940 /* der_encode_printable_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C150B67467D00FD9940 /* der_encode_printable_string.c */; }; + AA7C8CBD0B67467D00FD9940 /* der_length_printable_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C160B67467D00FD9940 /* der_length_printable_string.c */; }; + AA7C8CBE0B67467D00FD9940 /* der_decode_sequence_ex.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C180B67467D00FD9940 /* der_decode_sequence_ex.c */; }; + AA7C8CBF0B67467D00FD9940 /* der_decode_sequence_flexi.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C190B67467D00FD9940 /* der_decode_sequence_flexi.c */; }; + AA7C8CC00B67467D00FD9940 /* der_decode_sequence_multi.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C1A0B67467D00FD9940 /* der_decode_sequence_multi.c */; }; + AA7C8CC10B67467D00FD9940 /* der_encode_sequence_ex.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C1B0B67467D00FD9940 /* der_encode_sequence_ex.c */; }; + AA7C8CC20B67467D00FD9940 /* der_encode_sequence_multi.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C1C0B67467D00FD9940 /* der_encode_sequence_multi.c */; }; + AA7C8CC30B67467D00FD9940 /* der_length_sequence.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C1D0B67467D00FD9940 /* der_length_sequence.c */; }; + AA7C8CC40B67467D00FD9940 /* der_sequence_free.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C1E0B67467D00FD9940 /* der_sequence_free.c */; }; + AA7C8CC50B67467D00FD9940 /* der_encode_set.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C200B67467D00FD9940 /* der_encode_set.c */; }; + AA7C8CC60B67467D00FD9940 /* der_encode_setof.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C210B67467D00FD9940 /* der_encode_setof.c */; }; + AA7C8CC70B67467D00FD9940 /* der_decode_short_integer.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C230B67467D00FD9940 /* der_decode_short_integer.c */; }; + AA7C8CC80B67467D00FD9940 /* der_encode_short_integer.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C240B67467D00FD9940 /* der_encode_short_integer.c */; }; + AA7C8CC90B67467D00FD9940 /* der_length_short_integer.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C250B67467D00FD9940 /* der_length_short_integer.c */; }; + AA7C8CCA0B67467D00FD9940 /* der_decode_utctime.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C270B67467D00FD9940 /* der_decode_utctime.c */; }; + AA7C8CCB0B67467D00FD9940 /* der_encode_utctime.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C280B67467D00FD9940 /* der_encode_utctime.c */; }; + AA7C8CCC0B67467D00FD9940 /* der_length_utctime.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C290B67467D00FD9940 /* der_length_utctime.c */; }; + AA7C8CCD0B67467D00FD9940 /* der_decode_utf8_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C2B0B67467D00FD9940 /* der_decode_utf8_string.c */; }; + AA7C8CCE0B67467D00FD9940 /* der_encode_utf8_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C2C0B67467D00FD9940 /* der_encode_utf8_string.c */; }; + AA7C8CCF0B67467D00FD9940 /* der_length_utf8_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C2D0B67467D00FD9940 /* der_length_utf8_string.c */; }; + AA7C8CD00B67467D00FD9940 /* dsa_decrypt_key.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C2F0B67467D00FD9940 /* dsa_decrypt_key.c */; }; + AA7C8CD10B67467D00FD9940 /* dsa_encrypt_key.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C300B67467D00FD9940 /* dsa_encrypt_key.c */; }; + AA7C8CD20B67467D00FD9940 /* dsa_export.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C310B67467D00FD9940 /* dsa_export.c */; }; + AA7C8CD30B67467D00FD9940 /* dsa_free.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C320B67467D00FD9940 /* dsa_free.c */; }; + AA7C8CD40B67467D00FD9940 /* dsa_import.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C330B67467D00FD9940 /* dsa_import.c */; }; + AA7C8CD50B67467D00FD9940 /* dsa_make_key.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C340B67467D00FD9940 /* dsa_make_key.c */; }; + AA7C8CD60B67467D00FD9940 /* dsa_shared_secret.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C350B67467D00FD9940 /* dsa_shared_secret.c */; }; + AA7C8CD70B67467D00FD9940 /* dsa_sign_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C360B67467D00FD9940 /* dsa_sign_hash.c */; }; + AA7C8CD80B67467D00FD9940 /* dsa_verify_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C370B67467D00FD9940 /* dsa_verify_hash.c */; }; + AA7C8CD90B67467D00FD9940 /* dsa_verify_key.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C380B67467D00FD9940 /* dsa_verify_key.c */; }; + AA7C8CDA0B67467D00FD9940 /* pkcs_1_i2osp.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C3A0B67467D00FD9940 /* pkcs_1_i2osp.c */; }; + AA7C8CDB0B67467D00FD9940 /* pkcs_1_mgf1.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C3B0B67467D00FD9940 /* pkcs_1_mgf1.c */; }; + AA7C8CDC0B67467D00FD9940 /* pkcs_1_oaep_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C3C0B67467D00FD9940 /* pkcs_1_oaep_decode.c */; }; + AA7C8CDD0B67467D00FD9940 /* pkcs_1_oaep_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C3D0B67467D00FD9940 /* pkcs_1_oaep_encode.c */; }; + AA7C8CDE0B67467D00FD9940 /* pkcs_1_os2ip.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C3E0B67467D00FD9940 /* pkcs_1_os2ip.c */; }; + AA7C8CDF0B67467D00FD9940 /* pkcs_1_pss_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C3F0B67467D00FD9940 /* pkcs_1_pss_decode.c */; }; + AA7C8CE00B67467D00FD9940 /* pkcs_1_pss_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C400B67467D00FD9940 /* pkcs_1_pss_encode.c */; }; + AA7C8CE10B67467D00FD9940 /* pkcs_1_v1_5_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C410B67467D00FD9940 /* pkcs_1_v1_5_decode.c */; }; + AA7C8CE20B67467D00FD9940 /* pkcs_1_v1_5_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C420B67467D00FD9940 /* pkcs_1_v1_5_encode.c */; }; + AA7C8CE30B67467D00FD9940 /* rsa_decrypt_key.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C440B67467D00FD9940 /* rsa_decrypt_key.c */; }; + AA7C8CE40B67467D00FD9940 /* rsa_encrypt_key.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C450B67467D00FD9940 /* rsa_encrypt_key.c */; }; + AA7C8CE50B67467D00FD9940 /* rsa_export.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C460B67467D00FD9940 /* rsa_export.c */; }; + AA7C8CE60B67467D00FD9940 /* rsa_exptmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C470B67467D00FD9940 /* rsa_exptmod.c */; }; + AA7C8CE70B67467D00FD9940 /* rsa_free.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C480B67467D00FD9940 /* rsa_free.c */; }; + AA7C8CE80B67467D00FD9940 /* rsa_import.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C490B67467D00FD9940 /* rsa_import.c */; }; + AA7C8CE90B67467D00FD9940 /* rsa_make_key.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C4A0B67467D00FD9940 /* rsa_make_key.c */; }; + AA7C8CEA0B67467D00FD9940 /* rsa_sign_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C4B0B67467D00FD9940 /* rsa_sign_hash.c */; }; + AA7C8CEB0B67467D00FD9940 /* rsa_verify_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C4C0B67467D00FD9940 /* rsa_verify_hash.c */; }; + AA7C8CEC0B67467D00FD9940 /* fortuna.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C4E0B67467D00FD9940 /* fortuna.c */; }; + AA7C8CED0B67467D00FD9940 /* rc4.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C4F0B67467D00FD9940 /* rc4.c */; }; + AA7C8CEE0B67467D00FD9940 /* rng_get_bytes.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C500B67467D00FD9940 /* rng_get_bytes.c */; }; + AA7C8CEF0B67467D00FD9940 /* rng_make_prng.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C510B67467D00FD9940 /* rng_make_prng.c */; }; + AA7C8CF00B67467D00FD9940 /* sober128.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C520B67467D00FD9940 /* sober128.c */; }; + AA7C8CF20B67467D00FD9940 /* sprng.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C540B67467D00FD9940 /* sprng.c */; }; + AA7C8CF30B67467D00FD9940 /* yarrow.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C550B67467D00FD9940 /* yarrow.c */; }; + AA7C8D1F0B6748E300FD9940 /* libtommath.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C895F0B67444700FD9940 /* libtommath.a */; }; + AA7C8D200B6748E400FD9940 /* libtomcrypt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */; }; + AA7C8D430B674F4E00FD9940 /* libtommath.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C895F0B67444700FD9940 /* libtommath.a */; }; + AA7C8D440B674F4F00FD9940 /* libtomcrypt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */; }; + AA7C8DAE0B68CB2200FD9940 /* GameplayAssist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8DAC0B68CB2200FD9940 /* GameplayAssist.cpp */; }; + AA7C8DAF0B68CB2200FD9940 /* GameplayAssist.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8DAD0B68CB2200FD9940 /* GameplayAssist.h */; }; + AA7C8DB00B68CB2200FD9940 /* GameplayAssist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8DAC0B68CB2200FD9940 /* GameplayAssist.cpp */; }; + AA7CDD950D8395F90001DAFC /* Song.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7CDD930D8395F90001DAFC /* Song.h */; }; + AA7DA2F1085760E90057F1EA /* BackgroundUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7DA2EF085760E90057F1EA /* BackgroundUtil.cpp */; }; + AA80C75407F20D0D00C99272 /* UnlockManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA80C75207F20D0D00C99272 /* UnlockManager.cpp */; }; + AA80C75907F20D6600C99272 /* OptionRowHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA80C75707F20D6600C99272 /* OptionRowHandler.cpp */; }; + AA80C75C07F20D8000C99272 /* ScreenMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA80C75B07F20D7F00C99272 /* ScreenMessage.cpp */; }; + AA84B7070996F8370085EECB /* AdjustSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA84B7050996F8370085EECB /* AdjustSync.cpp */; }; + AA8A3E6406EDCD11002F25AB /* DarwinThreadHelpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8A3E6306EDCD11002F25AB /* DarwinThreadHelpers.cpp */; }; + AA8A405106EEFF72002F25AB /* RageUtil_BackgroundLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8A404F06EEFF72002F25AB /* RageUtil_BackgroundLoader.cpp */; }; + AA8BD2A807C9391B00EA04E1 /* LuaReference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2A107C9391B00EA04E1 /* LuaReference.cpp */; }; + AA8BD2AA07C9391B00EA04E1 /* MessageManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2A307C9391B00EA04E1 /* MessageManager.cpp */; }; + AA8BD2AC07C9391B00EA04E1 /* StatsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2A507C9391B00EA04E1 /* StatsManager.cpp */; }; + AA8BD2B107C9395400EA04E1 /* AutoActor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2AF07C9395400EA04E1 /* AutoActor.cpp */; }; + AA8BD2B607C939A200EA04E1 /* OptionRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2B407C939A200EA04E1 /* OptionRow.cpp */; }; + AA8BD2BF07C939F800EA04E1 /* PlayerStageStats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2B807C939F800EA04E1 /* PlayerStageStats.cpp */; }; + AA8BD2C107C939F800EA04E1 /* PlayerState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2BA07C939F800EA04E1 /* PlayerState.cpp */; }; + AA8BD2C207C939F800EA04E1 /* RollingNumbers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2BB07C939F800EA04E1 /* RollingNumbers.cpp */; }; + AA8BD2C407C939F800EA04E1 /* ScoreDisplayCalories.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2BD07C939F800EA04E1 /* ScoreDisplayCalories.cpp */; }; + AA8BD2C707C93A1E00EA04E1 /* CommonMetrics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2C607C93A1E00EA04E1 /* CommonMetrics.cpp */; }; + AA8CF5180A4518BE0005F1B4 /* RageSoundDriver_AU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8CF5160A4518BE0005F1B4 /* RageSoundDriver_AU.cpp */; }; + AA8CF5190A4518BE0005F1B4 /* RageSoundDriver_AU.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8CF5150A4518BE0005F1B4 /* RageSoundDriver_AU.h */; }; + AA8CF51A0A4518BE0005F1B4 /* RageSoundDriver_AU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8CF5160A4518BE0005F1B4 /* RageSoundDriver_AU.cpp */; }; + AA8EE0760866E266002C51A7 /* LuaBinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8EE0750866E266002C51A7 /* LuaBinding.cpp */; }; + AA9091A1067ED43000C1FCFF /* RageSurface_Load_BMP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA90919F067ED43000C1FCFF /* RageSurface_Load_BMP.cpp */; }; + AA9091A5067ED46400C1FCFF /* RageSurface_Save_BMP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA9091A3067ED46400C1FCFF /* RageSurface_Save_BMP.cpp */; }; + AA909E1F0B45B676002852D3 /* RageDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E1D0B45B676002852D3 /* RageDriver.cpp */; }; + AA909E210B45B676002852D3 /* RageDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E1D0B45B676002852D3 /* RageDriver.cpp */; }; + AA909E220B45B676002852D3 /* RageDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = AA909E1E0B45B676002852D3 /* RageDriver.h */; }; + AA909E240B45B696002852D3 /* LowLevelWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E230B45B696002852D3 /* LowLevelWindow.cpp */; }; + AA909E250B45B696002852D3 /* LowLevelWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E230B45B696002852D3 /* LowLevelWindow.cpp */; }; + AA909E270B45B6AC002852D3 /* LoadingWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E260B45B6AB002852D3 /* LoadingWindow.cpp */; }; + AA909E280B45B6AC002852D3 /* LoadingWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E260B45B6AB002852D3 /* LoadingWindow.cpp */; }; + AA909E3D0B45B8FB002852D3 /* RageSoundReader_Extend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E390B45B8FA002852D3 /* RageSoundReader_Extend.cpp */; }; + AA909E3F0B45B8FB002852D3 /* RageSoundReader_ThreadedBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E3B0B45B8FA002852D3 /* RageSoundReader_ThreadedBuffer.cpp */; }; + AA909E410B45B8FB002852D3 /* RageSoundReader_Extend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E390B45B8FA002852D3 /* RageSoundReader_Extend.cpp */; }; + AA909E420B45B8FB002852D3 /* RageSoundReader_Extend.h in Headers */ = {isa = PBXBuildFile; fileRef = AA909E3A0B45B8FA002852D3 /* RageSoundReader_Extend.h */; }; + AA909E430B45B8FB002852D3 /* RageSoundReader_ThreadedBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E3B0B45B8FA002852D3 /* RageSoundReader_ThreadedBuffer.cpp */; }; + AA909E440B45B8FB002852D3 /* RageSoundReader_ThreadedBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA909E3C0B45B8FA002852D3 /* RageSoundReader_ThreadedBuffer.h */; }; + AA909E490B45B93E002852D3 /* LightsDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E480B45B93E002852D3 /* LightsDriver.cpp */; }; + AA909E4A0B45B93E002852D3 /* LightsDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E480B45B93E002852D3 /* LightsDriver.cpp */; }; + AA91587D067D2C2C00078E36 /* RageSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA915879067D2C2C00078E36 /* RageSurface.cpp */; }; + AA91ACB10878BB2C00FB2F8F /* RageTexturePreloader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA91ACAF0878BB2C00FB2F8F /* RageTexturePreloader.cpp */; }; + AA9A78AB06B5C72200B03E97 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA9A78A906B5C72200B03E97 /* Game.cpp */; }; + AA9EC2F2055F5126007E5098 /* RageTextureID.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA9EC2F0055F5126007E5098 /* RageTextureID.cpp */; }; + AAA0704E0CE5082E005A3060 /* libffmpeg_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA0704D0CE5082D005A3060 /* libffmpeg_link.a */; }; + AAA0704F0CE5082E005A3060 /* libffmpeg_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA0704D0CE5082D005A3060 /* libffmpeg_link.a */; }; + AAA0713D0CE7B3BB005A3060 /* bit.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070B40CE7B3AD005A3060 /* bit.c */; }; + AAA0713E0CE7B3BB005A3060 /* bit.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070B50CE7B3AD005A3060 /* bit.h */; }; + AAA071490CE7B3BB005A3060 /* decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070C00CE7B3AD005A3060 /* decoder.c */; }; + AAA0714A0CE7B3BB005A3060 /* decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C10CE7B3AD005A3060 /* decoder.h */; }; + AAA0714C0CE7B3BB005A3060 /* fixed.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070C30CE7B3AD005A3060 /* fixed.c */; }; + AAA0714D0CE7B3BB005A3060 /* fixed.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C40CE7B3AD005A3060 /* fixed.h */; }; + AAA0714E0CE7B3BB005A3060 /* frame.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070C50CE7B3AD005A3060 /* frame.c */; }; + AAA0714F0CE7B3BB005A3060 /* frame.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C60CE7B3AD005A3060 /* frame.h */; }; + AAA071500CE7B3BB005A3060 /* global.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C70CE7B3AD005A3060 /* global.h */; }; + AAA071510CE7B3BB005A3060 /* huffman.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070C80CE7B3AD005A3060 /* huffman.c */; }; + AAA071520CE7B3BB005A3060 /* huffman.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C90CE7B3AD005A3060 /* huffman.h */; }; + AAA071570CE7B3BB005A3060 /* layer12.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070CE0CE7B3AD005A3060 /* layer12.c */; }; + AAA071580CE7B3BB005A3060 /* layer12.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070CF0CE7B3AD005A3060 /* layer12.h */; }; + AAA071590CE7B3BB005A3060 /* layer3.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070D00CE7B3AD005A3060 /* layer3.c */; }; + AAA0715A0CE7B3BB005A3060 /* layer3.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070D10CE7B3AD005A3060 /* layer3.h */; }; + AAA0715D0CE7B3BB005A3060 /* mad.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070D40CE7B3AD005A3060 /* mad.h */; }; + AAA0716F0CE7B3BB005A3060 /* stream.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070E80CE7B3AD005A3060 /* stream.c */; }; + AAA071700CE7B3BB005A3060 /* stream.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070E90CE7B3AD005A3060 /* stream.h */; }; + AAA071710CE7B3BB005A3060 /* synth.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070EA0CE7B3AD005A3060 /* synth.c */; }; + AAA071720CE7B3BB005A3060 /* synth.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070EB0CE7B3AD005A3060 /* synth.h */; }; + AAA071730CE7B3BB005A3060 /* timer.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070EC0CE7B3AD005A3060 /* timer.c */; }; + AAA071740CE7B3BB005A3060 /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070ED0CE7B3AD005A3060 /* timer.h */; }; + AAA071770CE7B3BB005A3060 /* version.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070F00CE7B3AE005A3060 /* version.c */; }; + AAA071780CE7B3BB005A3060 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070F10CE7B3AE005A3060 /* version.h */; }; + AAA0717F0CE7B4FB005A3060 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070F10CE7B3AE005A3060 /* version.h */; }; + AAA071800CE7B4FB005A3060 /* version.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070F00CE7B3AE005A3060 /* version.c */; }; + AAA071810CE7B4FC005A3060 /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070ED0CE7B3AD005A3060 /* timer.h */; }; + AAA071820CE7B4FD005A3060 /* timer.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070EC0CE7B3AD005A3060 /* timer.c */; }; + AAA071830CE7B4FE005A3060 /* synth.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070EB0CE7B3AD005A3060 /* synth.h */; }; + AAA071840CE7B4FE005A3060 /* synth.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070EA0CE7B3AD005A3060 /* synth.c */; }; + AAA071850CE7B4FF005A3060 /* stream.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070E90CE7B3AD005A3060 /* stream.h */; }; + AAA071860CE7B501005A3060 /* stream.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070E80CE7B3AD005A3060 /* stream.c */; }; + AAA071870CE7B502005A3060 /* mad.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070D40CE7B3AD005A3060 /* mad.h */; }; + AAA071880CE7B502005A3060 /* layer3.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070D10CE7B3AD005A3060 /* layer3.h */; }; + AAA071890CE7B503005A3060 /* layer3.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070D00CE7B3AD005A3060 /* layer3.c */; }; + AAA0718A0CE7B503005A3060 /* layer12.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070CF0CE7B3AD005A3060 /* layer12.h */; }; + AAA0718B0CE7B505005A3060 /* layer12.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070CE0CE7B3AD005A3060 /* layer12.c */; }; + AAA0718C0CE7B505005A3060 /* huffman.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C90CE7B3AD005A3060 /* huffman.h */; }; + AAA0718D0CE7B506005A3060 /* huffman.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070C80CE7B3AD005A3060 /* huffman.c */; }; + AAA0718E0CE7B508005A3060 /* global.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C70CE7B3AD005A3060 /* global.h */; }; + AAA0718F0CE7B508005A3060 /* frame.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C60CE7B3AD005A3060 /* frame.h */; }; + AAA071900CE7B509005A3060 /* frame.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070C50CE7B3AD005A3060 /* frame.c */; }; + AAA071910CE7B509005A3060 /* fixed.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C40CE7B3AD005A3060 /* fixed.h */; }; + AAA071920CE7B50A005A3060 /* fixed.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070C30CE7B3AD005A3060 /* fixed.c */; }; + AAA071930CE7B50B005A3060 /* decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C10CE7B3AD005A3060 /* decoder.h */; }; + AAA071940CE7B50B005A3060 /* decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070C00CE7B3AD005A3060 /* decoder.c */; }; + AAA071950CE7B50C005A3060 /* bit.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070B50CE7B3AD005A3060 /* bit.h */; }; + AAA071960CE7B50D005A3060 /* bit.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070B40CE7B3AD005A3060 /* bit.c */; }; + AAA071B40CE7C9C9005A3060 /* libmad.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA070A90CE7B0DF005A3060 /* libmad.a */; }; + AAA372D40909934500141131 /* MovieTexture_Generic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA372D00909934500141131 /* MovieTexture_Generic.cpp */; }; + AAA372D60909934500141131 /* MovieTexture_Theora.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA372D20909934500141131 /* MovieTexture_Theora.cpp */; }; + AAA6BFEC0644AB3700AFBBC8 /* ScreenWithMenuElements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA6BFEA0644AB3700AFBBC8 /* ScreenWithMenuElements.cpp */; }; + AAA71EA105EE154E00D2E8FF /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA71EA005EE154E00D2E8FF /* global.cpp */; }; + AAA7D4C90C7E872600FB8F78 /* ScreenOptionsToggleSongs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA7D4C70C7E872500FB8F78 /* ScreenOptionsToggleSongs.cpp */; }; + AAA7D4CB0C7E872600FB8F78 /* ScreenOptionsToggleSongs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA7D4C70C7E872500FB8F78 /* ScreenOptionsToggleSongs.cpp */; }; + AAA7D4CC0C7E872600FB8F78 /* ScreenOptionsToggleSongs.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA7D4C80C7E872500FB8F78 /* ScreenOptionsToggleSongs.h */; }; + AAA8E0030696984300FCE1F9 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA8E0020696984300FCE1F9 /* CoreAudio.framework */; }; + AAAA11C70A662F9D00B2BD88 /* ScoreKeeperShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAA11C50A662F9C00B2BD88 /* ScoreKeeperShared.cpp */; }; + AAAA11C80A662F9D00B2BD88 /* ScoreKeeperShared.h in Headers */ = {isa = PBXBuildFile; fileRef = AAAA11C40A662F9C00B2BD88 /* ScoreKeeperShared.h */; }; + AAAA11C90A662F9D00B2BD88 /* ScoreKeeperShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAA11C50A662F9C00B2BD88 /* ScoreKeeperShared.cpp */; }; + AAAB2CDF072BD2EC00CD9FC9 /* AutoKeysounds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAB2CDD072BD2EC00CD9FC9 /* AutoKeysounds.cpp */; }; + AAAB2CE3072BD2FA00CD9FC9 /* RageSoundMixBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAB2CE1072BD2FA00CD9FC9 /* RageSoundMixBuffer.cpp */; }; + AAAFE8200835E7FF00FC43E0 /* WheelBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAFE81C0835E7FF00FC43E0 /* WheelBase.cpp */; }; + AAAFE8220835E7FF00FC43E0 /* WheelItemBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAFE81E0835E7FF00FC43E0 /* WheelItemBase.cpp */; }; + AAAFE8300835E8B100FC43E0 /* RoomWheel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAFE82E0835E8B100FC43E0 /* RoomWheel.cpp */; }; + AAB005F20579B8CB000BBA58 /* AttackDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB005F00579B8CB000BBA58 /* AttackDisplay.cpp */; }; + AAB00861057F4F7A000BBA58 /* RageFileDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB0085B057F4F7A000BBA58 /* RageFileDriver.cpp */; }; + AAB00863057F4F7A000BBA58 /* RageFileDriverDirect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB0085D057F4F7A000BBA58 /* RageFileDriverDirect.cpp */; }; + AAB00865057F4F7A000BBA58 /* RageFileManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB0085F057F4F7A000BBA58 /* RageFileManager.cpp */; }; + AAB3B7DC0C6C582E001BF487 /* ScreenSelectProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB3B7DA0C6C582D001BF487 /* ScreenSelectProfile.cpp */; }; + AAB3B7DE0C6C582E001BF487 /* ScreenSelectProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB3B7DA0C6C582D001BF487 /* ScreenSelectProfile.cpp */; }; + AAB3B7DF0C6C582E001BF487 /* ScreenSelectProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB3B7DB0C6C582D001BF487 /* ScreenSelectProfile.h */; }; + AAB3BB590C718F2D001BF487 /* RageUtil_CachedObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB3BB570C718F2C001BF487 /* RageUtil_CachedObject.cpp */; }; + AAB3BB5B0C718F2D001BF487 /* RageUtil_CachedObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB3BB570C718F2C001BF487 /* RageUtil_CachedObject.cpp */; }; + AAB3BB5C0C718F2D001BF487 /* RageUtil_CachedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB3BB580C718F2C001BF487 /* RageUtil_CachedObject.h */; }; + AAB55EBB09A7E3D3008FDC69 /* ScreenGameplaySyncMachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB55EB509A7E3D3008FDC69 /* ScreenGameplaySyncMachine.cpp */; }; + AAB55EBD09A7E3D3008FDC69 /* ScreenUnlockBrowse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB55EB709A7E3D3008FDC69 /* ScreenUnlockBrowse.cpp */; }; + AAB55EBF09A7E3D3008FDC69 /* ScreenUnlockCelebrate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB55EB909A7E3D3008FDC69 /* ScreenUnlockCelebrate.cpp */; }; + AAB55FFF09A84E62008FDC69 /* ScreenUnlockCelebrate.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB55EBA09A7E3D3008FDC69 /* ScreenUnlockCelebrate.h */; }; + AAB5600009A84E63008FDC69 /* ScreenUnlockCelebrate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB55EB909A7E3D3008FDC69 /* ScreenUnlockCelebrate.cpp */; }; + AAB5600109A84E64008FDC69 /* ScreenUnlockBrowse.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB55EB809A7E3D3008FDC69 /* ScreenUnlockBrowse.h */; }; + AAB5600209A84E65008FDC69 /* ScreenUnlockBrowse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB55EB709A7E3D3008FDC69 /* ScreenUnlockBrowse.cpp */; }; + AAB691F405704FA50078BED4 /* LightsDriver_SystemMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB691F205704FA50078BED4 /* LightsDriver_SystemMessage.cpp */; }; + AAB6B477085761B700CEE7BA /* ScreenSplash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB6B475085761B700CEE7BA /* ScreenSplash.cpp */; }; + AAB779FB0B0D9CB200B74314 /* ScoreKeeperGuitar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB779F90B0D9CB200B74314 /* ScoreKeeperGuitar.cpp */; }; + AAB779FD0B0D9CB200B74314 /* ScoreKeeperGuitar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB779F90B0D9CB200B74314 /* ScoreKeeperGuitar.cpp */; }; + AAB779FE0B0D9CB200B74314 /* ScoreKeeperGuitar.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB779FA0B0D9CB200B74314 /* ScoreKeeperGuitar.h */; }; + AAB9C8AF06EAF64400AD97CD /* RageSurfaceUtils_Palettize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB9C8AB06EAF64400AD97CD /* RageSurfaceUtils_Palettize.cpp */; }; + AAB9C8B106EAF64400AD97CD /* RageSurfaceUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB9C8AD06EAF64400AD97CD /* RageSurfaceUtils.cpp */; }; + AAB9C8B506EAF66C00AD97CD /* ScreenNetEvaluation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB9C8B306EAF66C00AD97CD /* ScreenNetEvaluation.cpp */; }; + AABBD80805D8E9FC00B44FC2 /* HighScore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBD80605D8E9FC00B44FC2 /* HighScore.cpp */; }; + AABBF6760659E78D00738526 /* RageSurface_Load_GIF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF66C0659E78D00738526 /* RageSurface_Load_GIF.cpp */; }; + AABBF6780659E78D00738526 /* RageSurface_Load_JPEG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF66E0659E78D00738526 /* RageSurface_Load_JPEG.cpp */; }; + AABBF67A0659E78D00738526 /* RageSurface_Load_PNG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF6700659E78D00738526 /* RageSurface_Load_PNG.cpp */; }; + AABBF67C0659E78D00738526 /* RageSurface_Load_XPM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF6720659E78D00738526 /* RageSurface_Load_XPM.cpp */; }; + AABBF67E0659E78D00738526 /* RageSurface_Load.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF6740659E78D00738526 /* RageSurface_Load.cpp */; }; + AABBFCD309838C3A00F077E2 /* SMMain.mm in Sources */ = {isa = PBXBuildFile; fileRef = AABBFCD209838C3A00F077E2 /* SMMain.mm */; }; + AABD0B3A05DF3F22004F7929 /* CryptManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABD0B3605DF3F22004F7929 /* CryptManager.cpp */; settings = {COMPILER_FLAGS = "-O0 -Wno-uninitialized"; }; }; + AABE321C05ACD8ED001A0E84 /* ScreenEnding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE321A05ACD8ED001A0E84 /* ScreenEnding.cpp */; }; + AABE322005ACD931001A0E84 /* Foreground.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE321E05ACD931001A0E84 /* Foreground.cpp */; }; + AABE322405ACDA52001A0E84 /* RageFileDriverDirectHelpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE322205ACDA52001A0E84 /* RageFileDriverDirectHelpers.cpp */; }; + AABE788E05912B0600E8BF50 /* DualScrollBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE788C05912B0600E8BF50 /* DualScrollBar.cpp */; }; + AABE830E0A9524D400001678 /* ModsGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE830D0A9524D400001678 /* ModsGroup.cpp */; }; + AABE830F0A9524D400001678 /* ModsGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE830D0A9524D400001678 /* ModsGroup.cpp */; }; + AAC0BFE10E2951EC00F56EEB /* CryptHelpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC0BFDF0E2951EC00F56EEB /* CryptHelpers.cpp */; }; + AAC0BFE30E2951EC00F56EEB /* CryptHelpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC0BFDF0E2951EC00F56EEB /* CryptHelpers.cpp */; }; + AAC0BFE40E2951EC00F56EEB /* CryptHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC0BFE00E2951EC00F56EEB /* CryptHelpers.h */; }; + AAC0C8C20984AE3B0075FC53 /* Tween.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC0C8C00984AE3B0075FC53 /* Tween.cpp */; }; + AAC6DCE50567660A00B5D56F /* LightsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6DCE30567660A00B5D56F /* LightsManager.cpp */; }; + AAC6DDE00569C71000B5D56F /* PaneDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6DDDE0569C71000B5D56F /* PaneDisplay.cpp */; }; + AAC6DDE80569C80900B5D56F /* DifficultyList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6DDE60569C80900B5D56F /* DifficultyList.cpp */; }; + AAC9F330069E22BB00D53E2C /* GameSoundManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC9F32E069E22BB00D53E2C /* GameSoundManager.cpp */; }; + AAC9F334069E22CF00D53E2C /* MemoryCardDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC9F332069E22CF00D53E2C /* MemoryCardDriver.cpp */; }; + AACA593107B5E23400763545 /* RageFileDriverTimeout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACA592A07B5E23400763545 /* RageFileDriverTimeout.cpp */; }; + AACA593407B5E23400763545 /* RageUtil_WorkerThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACA592D07B5E23400763545 /* RageUtil_WorkerThread.cpp */; }; + AACFBE2808E7D793005087FC /* ActorSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACFBE2608E7D793005087FC /* ActorSound.cpp */; }; + AACFBE4F08E7D893005087FC /* ScreenGameplayLesson.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACFBE4908E7D893005087FC /* ScreenGameplayLesson.cpp */; }; + AACFBE6308E7DBA8005087FC /* LuaExpressionTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACFBE6108E7DBA8005087FC /* LuaExpressionTransform.cpp */; }; + AAD36084062BB8AE00D0CED8 /* RageSoundPosMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD36082062BB8AE00D0CED8 /* RageSoundPosMap.cpp */; }; + AAD5219C095513DA00073D86 /* XmlFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6889905D7F3C800964E6D /* XmlFile.cpp */; }; + AAD675F606795175006002B0 /* Dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD675EF06795175006002B0 /* Dialog.cpp */; }; + AAD6A714065E0FDF0042165A /* Difficulty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD6A712065E0FDF0042165A /* Difficulty.cpp */; }; + AAD8F9340A4B97DF000311CF /* ScreenGameplayShared.h in Headers */ = {isa = PBXBuildFile; fileRef = AAD8F9320A4B97DF000311CF /* ScreenGameplayShared.h */; }; + AAD8F9350A4B97DF000311CF /* ScreenGameplayShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD8F9330A4B97DF000311CF /* ScreenGameplayShared.cpp */; }; + AAD8F9370A4B97DF000311CF /* ScreenGameplayShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD8F9330A4B97DF000311CF /* ScreenGameplayShared.cpp */; }; + AADD1CC5095C233F0088C9DF /* LocalizedString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADD1CC2095C233E0088C9DF /* LocalizedString.cpp */; }; + AAE2D6D40A67481E00071546 /* ScoreKeeper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE2D6D30A67481E00071546 /* ScoreKeeper.cpp */; }; + AAE2D6D50A67481E00071546 /* ScoreKeeper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE2D6D30A67481E00071546 /* ScoreKeeper.cpp */; }; + AAE77F580AC3B52500AEFC64 /* RageTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE77F570AC3B52500AEFC64 /* RageTypes.cpp */; }; + AAE77F590AC3B52500AEFC64 /* RageTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE77F570AC3B52500AEFC64 /* RageTypes.cpp */; }; + AAE780400AC76A1200AEFC64 /* WorkoutGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE7803C0AC76A1200AEFC64 /* WorkoutGraph.cpp */; }; + AAE780440AC76A1200AEFC64 /* WorkoutGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE7803C0AC76A1200AEFC64 /* WorkoutGraph.cpp */; }; + AAE780450AC76A1200AEFC64 /* WorkoutGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE7803D0AC76A1200AEFC64 /* WorkoutGraph.h */; }; + AAE7804B060814AC0034E65F /* NetworkSyncManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE78049060814AC0034E65F /* NetworkSyncManager.cpp */; }; + AAE7808706081A000034E65F /* ezsockets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE7808506081A000034E65F /* ezsockets.cpp */; }; + AAE7812D0608249E0034E65F /* ActiveAttackList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE7812B0608249E0034E65F /* ActiveAttackList.cpp */; }; + AAE782030AC7E64D00AEFC64 /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; }; + AAE782040AC7E65200AEFC64 /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; }; + AAEBC6CC07A20AFE00793F0E /* RageSurface_Save_JPEG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6C607A20AFE00793F0E /* RageSurface_Save_JPEG.cpp */; }; + AAEBC6CE07A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6C807A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp */; }; + AAEBC6D007A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6CA07A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp */; }; + AAEBC79107A4FF5600793F0E /* LuaManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC78D07A4FF5600793F0E /* LuaManager.cpp */; }; + AAEBF5600B5C517E005F3C7C /* SampleHistory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBF55E0B5C517E005F3C7C /* SampleHistory.cpp */; }; + AAEBF5620B5C517E005F3C7C /* SampleHistory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBF55E0B5C517E005F3C7C /* SampleHistory.cpp */; }; + AAEBF5630B5C517E005F3C7C /* SampleHistory.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEBF55F0B5C517E005F3C7C /* SampleHistory.h */; }; + AAEBF57E0B5C83F4005F3C7C /* SoundEffectControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBF57C0B5C83F4005F3C7C /* SoundEffectControl.cpp */; }; + AAEBF5800B5C83F4005F3C7C /* SoundEffectControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBF57C0B5C83F4005F3C7C /* SoundEffectControl.cpp */; }; + AAEBF5810B5C83F4005F3C7C /* SoundEffectControl.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEBF57D0B5C83F4005F3C7C /* SoundEffectControl.h */; }; + AAED6F2C0601C528002D2DEE /* Backtrace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAED6F280601C528002D2DEE /* Backtrace.cpp */; }; + AAED6F2E0601C528002D2DEE /* BacktraceNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAED6F2A0601C528002D2DEE /* BacktraceNames.cpp */; }; + AAEDFD690A03762B00590617 /* Crash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEDFD680A03762B00590617 /* Crash.cpp */; }; + AAEDFD6A0A03762B00590617 /* Crash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEDFD680A03762B00590617 /* Crash.cpp */; }; + AAF3442B08F1C36A0006EDB7 /* DynamicActorScroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF3442908F1C36A0006EDB7 /* DynamicActorScroller.cpp */; }; + AAF34ADE0900AEBD0006EDB7 /* ScoreKeeperNormal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF34ADC0900AEBD0006EDB7 /* ScoreKeeperNormal.cpp */; }; + AAF34AED0900B00C0006EDB7 /* ScreenStatsOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF34AEB0900B00C0006EDB7 /* ScreenStatsOverlay.cpp */; }; + AAF4206705D63FA700056441 /* ModelManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF4206505D63FA700056441 /* ModelManager.cpp */; }; + AAF4206B05D6400800056441 /* RageModelGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF4206905D6400800056441 /* RageModelGeometry.cpp */; }; + AAF6A2F909B695BA00D5C614 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = AAF6A2F709B695BA00D5C614 /* Localizable.strings */; }; + AAF6A2FA09B695BA00D5C614 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = AAF6A2F709B695BA00D5C614 /* Localizable.strings */; }; + AAF7435B06110E8D00B19AD1 /* ScreenTestLights.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF7435906110E8D00B19AD1 /* ScreenTestLights.cpp */; }; + AAF74590061181F700B19AD1 /* RageDisplay_Null.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF7458E061181F700B19AD1 /* RageDisplay_Null.cpp */; }; + AAF793F5074FE69E00D74516 /* ScreenNetRoom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF793F1074FE69E00D74516 /* ScreenNetRoom.cpp */; }; + AAF793F7074FE69E00D74516 /* ScreenNetSelectBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF793F3074FE69E00D74516 /* ScreenNetSelectBase.cpp */; }; + AAFAB5C10889098600767BF7 /* ScreenOptionsEditProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFAB5BB0889098600767BF7 /* ScreenOptionsEditProfile.cpp */; }; + AAFAB5CD08890B5200767BF7 /* GameLoop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFAB5CB08890B5200767BF7 /* GameLoop.cpp */; }; + AAFAFC8F0AC8DB9F00427A6E /* EnumHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFAFC8E0AC8DB9F00427A6E /* EnumHelper.cpp */; }; + AAFAFC900AC8DB9F00427A6E /* EnumHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFAFC8E0AC8DB9F00427A6E /* EnumHelper.cpp */; }; + AAFB549E0B1BC32700FC3A81 /* RageSoundReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFB549D0B1BC32700FC3A81 /* RageSoundReader.cpp */; }; + AAFB549F0B1BC32700FC3A81 /* RageSoundReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFB549D0B1BC32700FC3A81 /* RageSoundReader.cpp */; }; + AAFBEED1094D7FCB000029DE /* SpecialFiles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFBEECF094D7FCB000029DE /* SpecialFiles.cpp */; }; + AAFBEEEB094D807E000029DE /* ScreenOptionsManageEditSteps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFBEEE5094D807E000029DE /* ScreenOptionsManageEditSteps.cpp */; }; + AAFBEEED094D807E000029DE /* ScreenOptionsMemoryCard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFBEEE7094D807E000029DE /* ScreenOptionsMemoryCard.cpp */; }; + AAFBEEEF094D807E000029DE /* ScreenServiceAction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFBEEE9094D807E000029DE /* ScreenServiceAction.cpp */; }; + AAFC6CF1072A30440053AAD3 /* InputHandler_MonkeyKeyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFC6CEF072A30440053AAD3 /* InputHandler_MonkeyKeyboard.cpp */; }; + AAFE710B0A91ADE6005F2290 /* ActorProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFE71090A91ADE6005F2290 /* ActorProxy.cpp */; }; + AAFE710D0A91ADE6005F2290 /* ActorProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFE71090A91ADE6005F2290 /* ActorProxy.cpp */; }; + AAFE710E0A91ADE6005F2290 /* ActorProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFE710A0A91ADE6005F2290 /* ActorProxy.h */; }; + AAFE711F0A91B551005F2290 /* RageSurface_Save_PNG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFE711C0A91B551005F2290 /* RageSurface_Save_PNG.cpp */; }; + AAFE71200A91B551005F2290 /* RoomInfoDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFE711D0A91B551005F2290 /* RoomInfoDisplay.cpp */; }; + AAFE71220A91B551005F2290 /* RageSurface_Save_PNG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFE711C0A91B551005F2290 /* RageSurface_Save_PNG.cpp */; }; + AAFE712A0A91B58F005F2290 /* RageSurface_Save_PNG.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFE71280A91B58F005F2290 /* RageSurface_Save_PNG.h */; }; + AAFF41A30F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF41A10F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp */; }; + AAFF41A40F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */; }; + AAFF41A50F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF41A10F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp */; }; + AAFF41A60F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */; }; + EE2153A910A75BEE0074B01B /* NotesLoaderPMS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE2153A710A75BEE0074B01B /* NotesLoaderPMS.cpp */; }; + EE2153AA10A75BEE0074B01B /* NotesLoaderPMS.h in Headers */ = {isa = PBXBuildFile; fileRef = EE2153A810A75BEE0074B01B /* NotesLoaderPMS.h */; }; + EE879B60132DEE720078FDDC /* RageDisplay_Legacy_Helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE879B5C132DEE720078FDDC /* RageDisplay_Legacy_Helpers.cpp */; }; + EE879B61132DEE720078FDDC /* RageDisplay_Legacy_Helpers.h in Headers */ = {isa = PBXBuildFile; fileRef = EE879B5D132DEE720078FDDC /* RageDisplay_Legacy_Helpers.h */; }; + EE879B62132DEE720078FDDC /* RageDisplay_Legacy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE879B5E132DEE720078FDDC /* RageDisplay_Legacy.cpp */; }; + EE879B63132DEE720078FDDC /* RageDisplay_Legacy.h in Headers */ = {isa = PBXBuildFile; fileRef = EE879B5F132DEE720078FDDC /* RageDisplay_Legacy.h */; }; + EE879BC3132E06C50078FDDC /* glew.c in Sources */ = {isa = PBXBuildFile; fileRef = EE879BAA132E06C50078FDDC /* glew.c */; }; + EE906F6612BF3A1B00146C96 /* ScreenInstallOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE906F6412BF3A1B00146C96 /* ScreenInstallOverlay.cpp */; }; + EE906F6712BF3A1B00146C96 /* ScreenInstallOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = EE906F6512BF3A1B00146C96 /* ScreenInstallOverlay.h */; }; + EE906F8212BF3AF800146C96 /* JsonUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE906F8012BF3AF800146C96 /* JsonUtil.cpp */; }; + EE906F8312BF3AF800146C96 /* JsonUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = EE906F8112BF3AF800146C96 /* JsonUtil.h */; }; + EE906F8A12BF3C7C00146C96 /* FileDownload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE906F8812BF3C7C00146C96 /* FileDownload.cpp */; }; + EE906F8B12BF3C7C00146C96 /* FileDownload.h in Headers */ = {isa = PBXBuildFile; fileRef = EE906F8912BF3C7C00146C96 /* FileDownload.h */; }; + EEA7C84310A805A300082E7B /* ScreenPackagesSSC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEA7C84110A805A300082E7B /* ScreenPackagesSSC.cpp */; }; + EEA7C84410A805A300082E7B /* ScreenPackagesSSC.h in Headers */ = {isa = PBXBuildFile; fileRef = EEA7C84210A805A300082E7B /* ScreenPackagesSSC.h */; }; + EEC7863F0E58208B00F559BC /* StepsDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEC7863D0E58208B00F559BC /* StepsDisplay.cpp */; }; + F4BC045409E6B578003F770B /* ScreenGameplaySyncMachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB55EB509A7E3D3008FDC69 /* ScreenGameplaySyncMachine.cpp */; }; + F4BC045509E6B582003F770B /* ScreenGameplaySyncMachine.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB55EB609A7E3D3008FDC69 /* ScreenGameplaySyncMachine.h */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AA30C61907F5E2EF0066F398 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA30C60F07F5E24A0066F398; + remoteInfo = version; + }; + AA40D1B609A08D650068C0D5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA30C60F07F5E24A0066F398; + remoteInfo = version; + }; + AA7A2BA50AE09C9B0054C5BA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AAE7817D0AC7E37B00AEFC64; + remoteInfo = "lua-5.1"; + }; + AA7A2BAD0AE09CDB0054C5BA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AAE7817D0AC7E37B00AEFC64; + remoteInfo = "lua-5.1"; + }; + AA7A2BB40AE09D160054C5BA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA7A2B930AE09B520054C5BA; + remoteInfo = lua; + }; + AA7A2BB60AE09D160054C5BA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA7A2BAA0AE09CD50054C5BA; + remoteInfo = luac; + }; + AA7C8D150B6748B800FD9940 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA7C895E0B67444700FD9940; + remoteInfo = tommath; + }; + AA7C8D170B6748B800FD9940 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA7C8B8A0B67460600FD9940; + remoteInfo = tomcrypt; + }; + AA7C8D1B0B6748CD00FD9940 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA7C895E0B67444700FD9940; + remoteInfo = tommath; + }; + AA7C8D1D0B6748CD00FD9940 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA7C8B8A0B67460600FD9940; + remoteInfo = tomcrypt; + }; + AAA071A90CE7B879005A3060 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AAA070A80CE7B0DF005A3060; + remoteInfo = mad; + }; + AAE781FD0AC7E61900AEFC64 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AAE7817D0AC7E37B00AEFC64; + remoteInfo = "lua-5.1"; + }; + AAE782010AC7E63100AEFC64 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AAE7817D0AC7E37B00AEFC64; + remoteInfo = "lua-5.1"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + AA40D37D09A08D650068C0D5 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA4B428C05733DF2005FB5DB /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 1215D7A008C6559A00B87D8B /* ScreenGameplayNormal.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenGameplayNormal.cpp; path = ../src/ScreenGameplayNormal.cpp; sourceTree = ""; }; + 1215D7A108C6559A00B87D8B /* ScreenGameplayNormal.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenGameplayNormal.h; path = ../src/ScreenGameplayNormal.h; sourceTree = ""; }; + 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MouseDevice.cpp; sourceTree = ""; }; + 2B30D6811315EA7E00044B68 /* MouseDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MouseDevice.h; sourceTree = ""; }; + 2B766989132FF71500586512 /* NotesLoaderSMA.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NotesLoaderSMA.h; path = ../src/NotesLoaderSMA.h; sourceTree = SOURCE_ROOT; }; + 2B76698A132FF71500586512 /* NotesLoaderSMA.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderSMA.cpp; path = ../src/NotesLoaderSMA.cpp; sourceTree = SOURCE_ROOT; }; + 2BA7925A1304F20D002BD8E1 /* NotesLoaderSSC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderSSC.cpp; path = ../src/NotesLoaderSSC.cpp; sourceTree = SOURCE_ROOT; }; + 2BA7925B1304F20D002BD8E1 /* NotesLoaderSSC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NotesLoaderSSC.h; path = ../src/NotesLoaderSSC.h; sourceTree = SOURCE_ROOT; }; + 2BA7925C1304F20D002BD8E1 /* NotesWriterSSC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesWriterSSC.cpp; path = ../src/NotesWriterSSC.cpp; sourceTree = SOURCE_ROOT; }; + 2BA7925D1304F20D002BD8E1 /* NotesWriterSSC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NotesWriterSSC.h; path = ../src/NotesWriterSSC.h; sourceTree = SOURCE_ROOT; }; + 2BD06FDD137240CF0018CB9F /* json_batchallocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = json_batchallocator.h; path = ../extern/jsoncpp/src/lib_json/json_batchallocator.h; sourceTree = SOURCE_ROOT; }; + 2BD06FDE137240CF0018CB9F /* json_internalarray.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = json_internalarray.inl; path = ../extern/jsoncpp/src/lib_json/json_internalarray.inl; sourceTree = SOURCE_ROOT; }; + 2BD06FDF137240CF0018CB9F /* json_internalmap.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = json_internalmap.inl; path = ../extern/jsoncpp/src/lib_json/json_internalmap.inl; sourceTree = SOURCE_ROOT; }; + 2BD06FE0137240CF0018CB9F /* json_reader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = json_reader.cpp; path = ../extern/jsoncpp/src/lib_json/json_reader.cpp; sourceTree = SOURCE_ROOT; }; + 2BD06FE1137240CF0018CB9F /* json_value.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = json_value.cpp; path = ../extern/jsoncpp/src/lib_json/json_value.cpp; sourceTree = SOURCE_ROOT; }; + 2BD06FE2137240CF0018CB9F /* json_valueiterator.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = json_valueiterator.inl; path = ../extern/jsoncpp/src/lib_json/json_valueiterator.inl; sourceTree = SOURCE_ROOT; }; + 2BD06FE3137240CF0018CB9F /* json_writer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = json_writer.cpp; path = ../extern/jsoncpp/src/lib_json/json_writer.cpp; sourceTree = SOURCE_ROOT; }; + 2BDB88B2137201F700E6FD3A /* lapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lapi.c; path = "../extern/lua-5.1/src/lapi.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88B3137201F700E6FD3A /* lapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lapi.h; path = "../extern/lua-5.1/src/lapi.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88B4137201F700E6FD3A /* lauxlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lauxlib.c; path = "../extern/lua-5.1/src/lauxlib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88B5137201F700E6FD3A /* lauxlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lauxlib.h; path = "../extern/lua-5.1/src/lauxlib.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88B6137201F700E6FD3A /* lbaselib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lbaselib.c; path = "../extern/lua-5.1/src/lbaselib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88B7137201F700E6FD3A /* lcode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lcode.c; path = "../extern/lua-5.1/src/lcode.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88B8137201F700E6FD3A /* lcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lcode.h; path = "../extern/lua-5.1/src/lcode.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88B9137201F700E6FD3A /* ldblib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ldblib.c; path = "../extern/lua-5.1/src/ldblib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88BA137201F700E6FD3A /* ldebug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ldebug.c; path = "../extern/lua-5.1/src/ldebug.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88BB137201F700E6FD3A /* ldebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ldebug.h; path = "../extern/lua-5.1/src/ldebug.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88BC137201F700E6FD3A /* ldo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ldo.c; path = "../extern/lua-5.1/src/ldo.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88BD137201F700E6FD3A /* ldo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ldo.h; path = "../extern/lua-5.1/src/ldo.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88BE137201F700E6FD3A /* ldump.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ldump.c; path = "../extern/lua-5.1/src/ldump.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88BF137201F700E6FD3A /* lfunc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lfunc.c; path = "../extern/lua-5.1/src/lfunc.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88C0137201F700E6FD3A /* lfunc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lfunc.h; path = "../extern/lua-5.1/src/lfunc.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88C1137201F700E6FD3A /* lgc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lgc.c; path = "../extern/lua-5.1/src/lgc.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88C2137201F700E6FD3A /* lgc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lgc.h; path = "../extern/lua-5.1/src/lgc.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88C3137201F700E6FD3A /* linit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = linit.c; path = "../extern/lua-5.1/src/linit.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88C4137201F700E6FD3A /* liolib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = liolib.c; path = "../extern/lua-5.1/src/liolib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88C5137201F700E6FD3A /* llex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = llex.c; path = "../extern/lua-5.1/src/llex.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88C6137201F700E6FD3A /* llex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = llex.h; path = "../extern/lua-5.1/src/llex.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88C7137201F700E6FD3A /* llimits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = llimits.h; path = "../extern/lua-5.1/src/llimits.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88C8137201F700E6FD3A /* lmathlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lmathlib.c; path = "../extern/lua-5.1/src/lmathlib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88C9137201F700E6FD3A /* lmem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lmem.c; path = "../extern/lua-5.1/src/lmem.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88CA137201F700E6FD3A /* lmem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lmem.h; path = "../extern/lua-5.1/src/lmem.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88CB137201F700E6FD3A /* loadlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = loadlib.c; path = "../extern/lua-5.1/src/loadlib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88CC137201F700E6FD3A /* lobject.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lobject.c; path = "../extern/lua-5.1/src/lobject.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88CD137201F700E6FD3A /* lobject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lobject.h; path = "../extern/lua-5.1/src/lobject.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88CE137201F700E6FD3A /* lopcodes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lopcodes.c; path = "../extern/lua-5.1/src/lopcodes.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88CF137201F700E6FD3A /* lopcodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lopcodes.h; path = "../extern/lua-5.1/src/lopcodes.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88D0137201F700E6FD3A /* loslib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = loslib.c; path = "../extern/lua-5.1/src/loslib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88D1137201F700E6FD3A /* lparser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lparser.c; path = "../extern/lua-5.1/src/lparser.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88D2137201F700E6FD3A /* lparser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lparser.h; path = "../extern/lua-5.1/src/lparser.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88D3137201F700E6FD3A /* lstate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lstate.c; path = "../extern/lua-5.1/src/lstate.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88D4137201F700E6FD3A /* lstate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lstate.h; path = "../extern/lua-5.1/src/lstate.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88D5137201F700E6FD3A /* lstring.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lstring.c; path = "../extern/lua-5.1/src/lstring.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88D6137201F700E6FD3A /* lstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lstring.h; path = "../extern/lua-5.1/src/lstring.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88D7137201F700E6FD3A /* lstrlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lstrlib.c; path = "../extern/lua-5.1/src/lstrlib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88D8137201F700E6FD3A /* ltable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ltable.c; path = "../extern/lua-5.1/src/ltable.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88D9137201F700E6FD3A /* ltable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ltable.h; path = "../extern/lua-5.1/src/ltable.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88DA137201F700E6FD3A /* ltablib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ltablib.c; path = "../extern/lua-5.1/src/ltablib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88DB137201F700E6FD3A /* ltm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ltm.c; path = "../extern/lua-5.1/src/ltm.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88DC137201F700E6FD3A /* ltm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ltm.h; path = "../extern/lua-5.1/src/ltm.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88DD137201F700E6FD3A /* lua.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua.c; path = "../extern/lua-5.1/src/lua.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88DE137201F700E6FD3A /* lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lua.h; path = "../extern/lua-5.1/src/lua.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88DF137201F700E6FD3A /* luac.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = luac.c; path = "../extern/lua-5.1/src/luac.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88E0137201F700E6FD3A /* luaconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = luaconf.h; path = "../extern/lua-5.1/src/luaconf.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88E1137201F700E6FD3A /* lualib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lualib.h; path = "../extern/lua-5.1/src/lualib.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88E2137201F700E6FD3A /* lundump.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lundump.c; path = "../extern/lua-5.1/src/lundump.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88E3137201F700E6FD3A /* lundump.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lundump.h; path = "../extern/lua-5.1/src/lundump.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88E4137201F700E6FD3A /* lvm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lvm.c; path = "../extern/lua-5.1/src/lvm.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88E5137201F700E6FD3A /* lvm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lvm.h; path = "../extern/lua-5.1/src/lvm.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88E6137201F700E6FD3A /* lzio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lzio.c; path = "../extern/lua-5.1/src/lzio.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88E7137201F700E6FD3A /* lzio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lzio.h; path = "../extern/lua-5.1/src/lzio.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88E8137201F700E6FD3A /* print.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = print.c; path = "../extern/lua-5.1/src/print.c"; sourceTree = SOURCE_ROOT; }; + 3659B56D0F902143002B6B68 /* CommandLineActions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CommandLineActions.cpp; sourceTree = ""; }; + 3659B56E0F902143002B6B68 /* CommandLineActions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommandLineActions.h; sourceTree = ""; }; + 367D57590EDE56F200B46814 /* ScreenHighScores.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenHighScores.cpp; path = ../src/ScreenHighScores.cpp; sourceTree = SOURCE_ROOT; }; + 367D575A0EDE56F200B46814 /* ScreenHighScores.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenHighScores.h; path = ../src/ScreenHighScores.h; sourceTree = SOURCE_ROOT; }; + 3688B8510BD42DAA004186AD /* NotesLoaderMidi.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderMidi.cpp; path = ../src/NotesLoaderMidi.cpp; sourceTree = ""; }; + 3688B8520BD42DAA004186AD /* NotesLoaderMidi.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = NotesLoaderMidi.h; path = ../src/NotesLoaderMidi.h; sourceTree = ""; }; + 36C6887F11297FFE00453295 /* RageFileDriverReadAhead.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RageFileDriverReadAhead.cpp; path = ../src/RageFileDriverReadAhead.cpp; sourceTree = SOURCE_ROOT; }; + 36C6888011297FFE00453295 /* RageFileDriverReadAhead.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RageFileDriverReadAhead.h; path = ../src/RageFileDriverReadAhead.h; sourceTree = SOURCE_ROOT; }; + 36C6888111297FFE00453295 /* RageFileManager_ReadAhead.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RageFileManager_ReadAhead.cpp; path = ../src/RageFileManager_ReadAhead.cpp; sourceTree = SOURCE_ROOT; }; + 36C6888211297FFE00453295 /* RageFileManager_ReadAhead.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RageFileManager_ReadAhead.h; path = ../src/RageFileManager_ReadAhead.h; sourceTree = SOURCE_ROOT; }; + 36CA531A0F91564A0063D59D /* ScreenOptionsCourseOverview.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenOptionsCourseOverview.cpp; path = ../src/ScreenOptionsCourseOverview.cpp; sourceTree = SOURCE_ROOT; }; + 36CA531B0F91564A0063D59D /* ScreenOptionsCourseOverview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenOptionsCourseOverview.h; path = ../src/ScreenOptionsCourseOverview.h; sourceTree = SOURCE_ROOT; }; + 36CA531E0F9156860063D59D /* ScreenOptionsEditCourse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenOptionsEditCourse.cpp; path = ../src/ScreenOptionsEditCourse.cpp; sourceTree = SOURCE_ROOT; }; + 36CA531F0F9156860063D59D /* ScreenOptionsEditCourse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenOptionsEditCourse.h; path = ../src/ScreenOptionsEditCourse.h; sourceTree = SOURCE_ROOT; }; + AA059ABA0B8CCFB5006F8139 /* ActorMultiTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ActorMultiTexture.cpp; path = ../src/ActorMultiTexture.cpp; sourceTree = ""; }; + AA059ABB0B8CCFB5006F8139 /* ActorMultiTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ActorMultiTexture.h; path = ../src/ActorMultiTexture.h; sourceTree = ""; }; + AA059E2A0B8F0C66006F8139 /* libz_link.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libz_link.a; sourceTree = ""; }; + AA05A0AE0BA2EFF3006F8139 /* OptionsList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OptionsList.cpp; path = ../src/OptionsList.cpp; sourceTree = ""; }; + AA05A0AF0BA2EFF3006F8139 /* OptionsList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OptionsList.h; path = ../src/OptionsList.h; sourceTree = ""; }; + AA0700880B61F177003B85BB /* RageSoundReader_PostBuffering.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader_PostBuffering.cpp; path = ../src/RageSoundReader_PostBuffering.cpp; sourceTree = ""; }; + AA0700890B61F177003B85BB /* RageSoundReader_PostBuffering.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_PostBuffering.h; path = ../src/RageSoundReader_PostBuffering.h; sourceTree = ""; }; + AA07328B0954381800F396C5 /* DisplayResolutions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = DisplayResolutions.h; path = ../src/DisplayResolutions.h; sourceTree = ""; }; + AA07328C0954381800F396C5 /* XmlFileUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = XmlFileUtil.cpp; path = ../src/XmlFileUtil.cpp; sourceTree = ""; }; + AA07328D0954381800F396C5 /* XmlFileUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = XmlFileUtil.h; path = ../src/XmlFileUtil.h; sourceTree = ""; }; + AA07A5550843E72B00E33D21 /* ScreenDebugOverlay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenDebugOverlay.cpp; path = ../src/ScreenDebugOverlay.cpp; sourceTree = ""; }; + AA07A5560843E72B00E33D21 /* ScreenDebugOverlay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenDebugOverlay.h; path = ../src/ScreenDebugOverlay.h; sourceTree = ""; }; + AA07A5590843E72B00E33D21 /* ScreenSaveSync.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSaveSync.cpp; path = ../src/ScreenSaveSync.cpp; sourceTree = ""; }; + AA07A55A0843E72B00E33D21 /* ScreenSaveSync.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSaveSync.h; path = ../src/ScreenSaveSync.h; sourceTree = ""; }; + AA07A55B0843E72B00E33D21 /* ScreenSMOnlineLogin.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSMOnlineLogin.cpp; path = ../src/ScreenSMOnlineLogin.cpp; sourceTree = ""; }; + AA07A55C0843E72B00E33D21 /* ScreenSMOnlineLogin.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSMOnlineLogin.h; path = ../src/ScreenSMOnlineLogin.h; sourceTree = ""; }; + AA07A55D0843E72B00E33D21 /* ScreenSyncOverlay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSyncOverlay.cpp; path = ../src/ScreenSyncOverlay.cpp; sourceTree = ""; }; + AA07A55E0843E72B00E33D21 /* ScreenSyncOverlay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSyncOverlay.h; path = ../src/ScreenSyncOverlay.h; sourceTree = ""; }; + AA0A3DE6060513A00044E6B1 /* ScreenSetTime.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSetTime.cpp; path = ../src/ScreenSetTime.cpp; sourceTree = ""; }; + AA0A3DE7060513A00044E6B1 /* ScreenSetTime.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSetTime.h; path = ../src/ScreenSetTime.h; sourceTree = ""; }; + AA0E04CE076C4CD500716D81 /* RageFileBasic.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileBasic.cpp; path = ../src/RageFileBasic.cpp; sourceTree = ""; }; + AA0E04CF076C4CD500716D81 /* RageFileBasic.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileBasic.h; path = ../src/RageFileBasic.h; sourceTree = ""; }; + AA0E04D0076C4CD500716D81 /* RageFileDriverDeflate.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileDriverDeflate.cpp; path = ../src/RageFileDriverDeflate.cpp; sourceTree = ""; }; + AA0E04D1076C4CD500716D81 /* RageFileDriverDeflate.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileDriverDeflate.h; path = ../src/RageFileDriverDeflate.h; sourceTree = ""; }; + AA0E04D2076C4CD500716D81 /* RageFileDriverSlice.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileDriverSlice.cpp; path = ../src/RageFileDriverSlice.cpp; sourceTree = ""; }; + AA0E04D3076C4CD500716D81 /* RageFileDriverSlice.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileDriverSlice.h; path = ../src/RageFileDriverSlice.h; sourceTree = ""; }; + AA1145D9075DFADF0050A3D1 /* ScreenPackages.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenPackages.cpp; path = ../src/ScreenPackages.cpp; sourceTree = ""; }; + AA1145DA075DFADF0050A3D1 /* ScreenPackages.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenPackages.h; path = ../src/ScreenPackages.h; sourceTree = ""; }; + AA1145DB075DFADF0050A3D1 /* ScreenSystemLayer.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSystemLayer.cpp; path = ../src/ScreenSystemLayer.cpp; sourceTree = ""; }; + AA1145DC075DFADF0050A3D1 /* ScreenSystemLayer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSystemLayer.h; path = ../src/ScreenSystemLayer.h; sourceTree = ""; }; + AA11A20B0DC5A1B0006BD8AC /* ModIcon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ModIcon.cpp; path = ../src/ModIcon.cpp; sourceTree = SOURCE_ROOT; }; + AA11A20C0DC5A1B0006BD8AC /* ModIcon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ModIcon.h; path = ../src/ModIcon.h; sourceTree = SOURCE_ROOT; }; + AA11A20D0DC5A1B0006BD8AC /* ModIconRow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ModIconRow.cpp; path = ../src/ModIconRow.cpp; sourceTree = SOURCE_ROOT; }; + AA11A20E0DC5A1B0006BD8AC /* ModIconRow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ModIconRow.h; path = ../src/ModIconRow.h; sourceTree = SOURCE_ROOT; }; + AA139C4606923EBE00C1F6ED /* Style.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Style.cpp; path = ../src/Style.cpp; sourceTree = ""; }; + AA147F180A0F78D8006EADF6 /* VectorHelper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = VectorHelper.h; sourceTree = ""; }; + AA147F190A0F78D8006EADF6 /* VectorHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VectorHelper.cpp; sourceTree = ""; }; + AA14ED0F0509F40000E3FAD7 /* MovieTexture_FFMpeg.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MovieTexture_FFMpeg.cpp; path = MovieTexture/MovieTexture_FFMpeg.cpp; sourceTree = ""; }; + AA14ED100509F40000E3FAD7 /* MovieTexture_FFMpeg.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MovieTexture_FFMpeg.h; path = MovieTexture/MovieTexture_FFMpeg.h; sourceTree = ""; }; + AA18935C0BD777C400AEC0BF /* ScreenProfileLoad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenProfileLoad.cpp; path = ../src/ScreenProfileLoad.cpp; sourceTree = ""; }; + AA18935D0BD777C400AEC0BF /* ScreenProfileLoad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenProfileLoad.h; path = ../src/ScreenProfileLoad.h; sourceTree = ""; }; + AA18935E0BD777C400AEC0BF /* ScreenProfileSave.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenProfileSave.cpp; path = ../src/ScreenProfileSave.cpp; sourceTree = ""; }; + AA18935F0BD777C400AEC0BF /* ScreenProfileSave.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenProfileSave.h; path = ../src/ScreenProfileSave.h; sourceTree = ""; }; + AA1B08370762532800835464 /* Command.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Command.cpp; path = ../src/Command.cpp; sourceTree = ""; }; + AA1B08380762532800835464 /* Command.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Command.h; path = ../src/Command.h; sourceTree = ""; }; + AA1B08390762532800835464 /* GameCommand.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GameCommand.cpp; path = ../src/GameCommand.cpp; sourceTree = ""; }; + AA1B083A0762532800835464 /* GameCommand.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GameCommand.h; path = ../src/GameCommand.h; sourceTree = ""; }; + AA1B083B0762532800835464 /* Preference.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Preference.cpp; path = ../src/Preference.cpp; sourceTree = ""; }; + AA1C6556050D234B0073A143 /* ProfileManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ProfileManager.cpp; path = ../src/ProfileManager.cpp; sourceTree = ""; }; + AA1C6557050D234B0073A143 /* ProfileManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ProfileManager.h; path = ../src/ProfileManager.h; sourceTree = ""; }; + AA1C65A4050FD21F0073A143 /* RageSoundReader_Vorbisfile.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundReader_Vorbisfile.cpp; path = ../src/RageSoundReader_Vorbisfile.cpp; sourceTree = ""; }; + AA1C65A5050FD21F0073A143 /* RageSoundReader_Vorbisfile.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_Vorbisfile.h; path = ../src/RageSoundReader_Vorbisfile.h; sourceTree = ""; }; + AA1C65A6050FD21F0073A143 /* RageSoundReader_WAV.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundReader_WAV.cpp; path = ../src/RageSoundReader_WAV.cpp; sourceTree = ""; }; + AA1C65A7050FD21F0073A143 /* RageSoundReader_WAV.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_WAV.h; path = ../src/RageSoundReader_WAV.h; sourceTree = ""; }; + AA1CD941060AE571003702C4 /* RageSoundDriver_Generic_Software.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = RageSoundDriver_Generic_Software.cpp; sourceTree = ""; }; + AA1DC47204A485E900D02EE9 /* ActorUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ActorUtil.h; path = ../src/ActorUtil.h; sourceTree = ""; }; + AA1DC47404A4861700D02EE9 /* ScreenSelectMaster.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSelectMaster.cpp; path = ../src/ScreenSelectMaster.cpp; sourceTree = ""; }; + AA1DC47504A4861700D02EE9 /* ScreenSelectMaster.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSelectMaster.h; path = ../src/ScreenSelectMaster.h; sourceTree = ""; }; + AA1DE9560C5468CE00D59F20 /* Hardware.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Hardware.plist; sourceTree = ""; }; + AA1DE9590C5468FE00D59F20 /* Hardware.in.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Hardware.in.plist; sourceTree = ""; }; + AA1F9C4509AF1BF5002C15A8 /* PumpDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PumpDevice.h; sourceTree = ""; }; + AA1F9C4609AF1BF5002C15A8 /* PumpDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PumpDevice.cpp; sourceTree = ""; }; + AA21D59C0712ADE4008B825F /* ScreenDimensions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenDimensions.cpp; path = ../src/ScreenDimensions.cpp; sourceTree = ""; }; + AA21D5A10712AE16008B825F /* ThemeMetric.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ThemeMetric.h; path = ../src/ThemeMetric.h; sourceTree = ""; }; + AA21E4730A9826CD00684CEA /* libjpeg_link.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libjpeg_link.a; sourceTree = ""; }; + AA21E4750A9826CD00684CEA /* libogg_link.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libogg_link.a; sourceTree = ""; }; + AA21E4760A9826CD00684CEA /* libpng_link.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libpng_link.a; sourceTree = ""; }; + AA21E4770A9826CD00684CEA /* libtheora_link.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libtheora_link.a; sourceTree = ""; }; + AA21E4780A9826CD00684CEA /* libvorbis_link.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbis_link.a; sourceTree = ""; }; + AA22CBA306DE909C0083BA97 /* ScreenNetSelectMusic.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenNetSelectMusic.cpp; path = ../src/ScreenNetSelectMusic.cpp; sourceTree = ""; }; + AA22CBA406DE909C0083BA97 /* ScreenNetSelectMusic.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenNetSelectMusic.h; path = ../src/ScreenNetSelectMusic.h; sourceTree = ""; }; + AA230EAE06043704002672F3 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; + AA230EAF06043704002672F3 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = ""; }; + AA230ECF06043EFD002672F3 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; + AA251B7505841FCE00027ACB /* RageFileDriverZip.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileDriverZip.cpp; path = ../src/RageFileDriverZip.cpp; sourceTree = ""; }; + AA251B7605841FCE00027ACB /* RageFileDriverZip.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileDriverZip.h; path = ../src/RageFileDriverZip.h; sourceTree = ""; }; + AA25200D0587225500027ACB /* Style.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Style.h; path = ../src/Style.h; sourceTree = ""; }; + AA272C3004CD757100D02EE9 /* RageFile.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFile.cpp; path = ../src/RageFile.cpp; sourceTree = ""; }; + AA272C3104CD757100D02EE9 /* RageFile.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFile.h; path = ../src/RageFile.h; sourceTree = ""; }; + AA28B47A058F2F5D0097C109 /* MemoryCardManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MemoryCardManager.cpp; path = ../src/MemoryCardManager.cpp; sourceTree = ""; }; + AA28B47B058F2F5D0097C109 /* MemoryCardManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MemoryCardManager.h; path = ../src/MemoryCardManager.h; sourceTree = ""; }; + AA29CE570558741A00961A51 /* Info-StepMania.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; path = "Info-StepMania.plist"; sourceTree = SOURCE_ROOT; }; + AA29CE580558741A00961A51 /* sm-ssc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "sm-ssc.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + AA2C9C9F0BAD6F54002441E9 /* CodeSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CodeSet.cpp; path = ../src/CodeSet.cpp; sourceTree = ""; }; + AA2C9CA00BAD6F54002441E9 /* CodeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CodeSet.h; path = ../src/CodeSet.h; sourceTree = ""; }; + AA2CA89D0BB745BD002441E9 /* ScreenContinue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenContinue.cpp; path = ../src/ScreenContinue.cpp; sourceTree = ""; }; + AA2CA89E0BB745BD002441E9 /* ScreenContinue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenContinue.h; path = ../src/ScreenContinue.h; sourceTree = ""; }; + AA2E9FFF0A770208003A0C11 /* ScreenSelectLanguage.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenSelectLanguage.cpp; path = ../src/ScreenSelectLanguage.cpp; sourceTree = ""; }; + AA2EA0000A770208003A0C11 /* ScreenSelectLanguage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ScreenSelectLanguage.h; path = ../src/ScreenSelectLanguage.h; sourceTree = ""; }; + AA2FB638091212AF000FD574 /* LifeMeter.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LifeMeter.cpp; path = ../src/LifeMeter.cpp; sourceTree = ""; }; + AA31D51B0B1EC6540016AB6B /* RageSoundReader_Filter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_Filter.h; path = ../src/RageSoundReader_Filter.h; sourceTree = ""; }; + AA31D51C0B1EC6540016AB6B /* RageSoundReader_PitchChange.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader_PitchChange.cpp; path = ../src/RageSoundReader_PitchChange.cpp; sourceTree = ""; }; + AA31D51D0B1EC6540016AB6B /* RageSoundReader_PitchChange.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_PitchChange.h; path = ../src/RageSoundReader_PitchChange.h; sourceTree = ""; }; + AA31D51E0B1EC6540016AB6B /* RageSoundReader_SpeedChange.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader_SpeedChange.cpp; path = ../src/RageSoundReader_SpeedChange.cpp; sourceTree = ""; }; + AA31D51F0B1EC6540016AB6B /* RageSoundReader_SpeedChange.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_SpeedChange.h; path = ../src/RageSoundReader_SpeedChange.h; sourceTree = ""; }; + AA3396B60BDE195E00E1475F /* RageSoundReader_Merge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader_Merge.cpp; path = ../src/RageSoundReader_Merge.cpp; sourceTree = ""; }; + AA3396B70BDE195E00E1475F /* RageSoundReader_Merge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_Merge.h; path = ../src/RageSoundReader_Merge.h; sourceTree = ""; }; + AA339A7D0BF0FA6300E1475F /* LoadingWindow_Null.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadingWindow_Null.h; sourceTree = ""; }; + AA3A705E06AA144C006F755E /* CommonMetrics.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CommonMetrics.h; path = ../src/CommonMetrics.h; sourceTree = ""; }; + AA3A706006AA1645006F755E /* StyleUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = StyleUtil.cpp; path = ../src/StyleUtil.cpp; sourceTree = ""; }; + AA3A706106AA1645006F755E /* StyleUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = StyleUtil.h; path = ../src/StyleUtil.h; sourceTree = ""; }; + AA3D5E5A08214C77002AA665 /* LifeMeterTime.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LifeMeterTime.cpp; path = ../src/LifeMeterTime.cpp; sourceTree = ""; }; + AA3D5E5B08214C77002AA665 /* LifeMeterTime.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LifeMeterTime.h; path = ../src/LifeMeterTime.h; sourceTree = ""; }; + AA3D5E5C08214C77002AA665 /* ScoreDisplayLifeTime.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplayLifeTime.cpp; path = ../src/ScoreDisplayLifeTime.cpp; sourceTree = ""; }; + AA3D5E5D08214C77002AA665 /* ScoreDisplayLifeTime.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplayLifeTime.h; path = ../src/ScoreDisplayLifeTime.h; sourceTree = ""; }; + AA3D5E8F082152B6002AA665 /* StreamDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = StreamDisplay.cpp; path = ../src/StreamDisplay.cpp; sourceTree = ""; }; + AA3D5E90082152B6002AA665 /* StreamDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = StreamDisplay.h; path = ../src/StreamDisplay.h; sourceTree = ""; }; + AA3D78FF06A275E90064B980 /* RadarValues.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RadarValues.cpp; path = ../src/RadarValues.cpp; sourceTree = ""; }; + AA3D790006A275E90064B980 /* RadarValues.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RadarValues.h; path = ../src/RadarValues.h; sourceTree = ""; }; + AA3D793106A279530064B980 /* DateTime.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = DateTime.cpp; path = ../src/DateTime.cpp; sourceTree = ""; }; + AA3D793206A279530064B980 /* DateTime.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = DateTime.h; path = ../src/DateTime.h; sourceTree = ""; }; + AA3E3DF009D96A1400A259C7 /* CrashHandlerInternal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CrashHandlerInternal.cpp; sourceTree = ""; }; + AA3F283B04BE6DDC00D02EE9 /* ArchHooks.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ArchHooks.cpp; path = ArchHooks/ArchHooks.cpp; sourceTree = ""; }; + AA40D52B09A08D660068C0D5 /* sm-ssc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "sm-ssc.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + AA42F5E6067068D30013509E /* ScreenNetworkOptions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenNetworkOptions.cpp; path = ../src/ScreenNetworkOptions.cpp; sourceTree = ""; }; + AA42F5E7067068D30013509E /* ScreenNetworkOptions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenNetworkOptions.h; path = ../src/ScreenNetworkOptions.h; sourceTree = ""; }; + AA44705209846B0800983E82 /* HIDDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HIDDevice.h; sourceTree = ""; }; + AA44705309846B0800983E82 /* HIDDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HIDDevice.cpp; sourceTree = ""; }; + AA44708C0984720900983E82 /* JoystickDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JoystickDevice.h; sourceTree = ""; }; + AA44708D0984720900983E82 /* JoystickDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JoystickDevice.cpp; sourceTree = ""; }; + AA4470BA098476F600983E82 /* KeyboardDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeyboardDevice.h; sourceTree = ""; }; + AA4470BB098476F600983E82 /* KeyboardDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KeyboardDevice.cpp; sourceTree = ""; }; + AA4F27AE0B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader_ChannelSplit.cpp; path = ../src/RageSoundReader_ChannelSplit.cpp; sourceTree = ""; }; + AA4F27AF0B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_ChannelSplit.h; path = ../src/RageSoundReader_ChannelSplit.h; sourceTree = ""; }; + AA4F27B00B2C01B400ADEA79 /* RageSoundReader_Pan.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader_Pan.cpp; path = ../src/RageSoundReader_Pan.cpp; sourceTree = ""; }; + AA4F27B10B2C01B400ADEA79 /* RageSoundReader_Pan.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_Pan.h; path = ../src/RageSoundReader_Pan.h; sourceTree = ""; }; + AA4F38C004E2D0B700D02EE9 /* NoteDataUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NoteDataUtil.cpp; path = ../src/NoteDataUtil.cpp; sourceTree = ""; }; + AA4F38C104E2D0B700D02EE9 /* NoteDataUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NoteDataUtil.h; path = ../src/NoteDataUtil.h; sourceTree = ""; }; + AA50201D05D6D7B200ACEFD0 /* Profile.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Profile.cpp; path = ../src/Profile.cpp; sourceTree = ""; }; + AA50201E05D6D7B200ACEFD0 /* Profile.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Profile.h; path = ../src/Profile.h; sourceTree = ""; }; + AA52E9BD04DBBCF400D02EE9 /* ver.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = ver.cpp; sourceTree = ""; }; + AA53D28405277DAF00D02EE9 /* ScreenOptionsMaster.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenOptionsMaster.cpp; path = ../src/ScreenOptionsMaster.cpp; sourceTree = ""; }; + AA53D28505277DAF00D02EE9 /* ScreenOptionsMaster.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenOptionsMaster.h; path = ../src/ScreenOptionsMaster.h; sourceTree = ""; }; + AA53D28605277DAF00D02EE9 /* ScreenOptionsMasterPrefs.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenOptionsMasterPrefs.cpp; path = ../src/ScreenOptionsMasterPrefs.cpp; sourceTree = ""; }; + AA53D28705277DAF00D02EE9 /* ScreenOptionsMasterPrefs.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenOptionsMasterPrefs.h; path = ../src/ScreenOptionsMasterPrefs.h; sourceTree = ""; }; + AA53D28805277DAF00D02EE9 /* ScreenReloadSongs.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenReloadSongs.cpp; path = ../src/ScreenReloadSongs.cpp; sourceTree = ""; }; + AA53D28905277DAF00D02EE9 /* ScreenReloadSongs.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenReloadSongs.h; path = ../src/ScreenReloadSongs.h; sourceTree = ""; }; + AA54709106F559DF008EB9B2 /* Preference.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Preference.h; path = ../src/Preference.h; sourceTree = ""; }; + AA5A51F20A8441AA006DBB92 /* ModsGroup.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ModsGroup.h; path = ../src/ModsGroup.h; sourceTree = ""; }; + AA5C73F70637A5F000AFB891 /* CourseUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CourseUtil.cpp; path = ../src/CourseUtil.cpp; sourceTree = ""; }; + AA5C73F80637A5F000AFB891 /* CourseUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CourseUtil.h; path = ../src/CourseUtil.h; sourceTree = ""; }; + AA5C73F90637A5F000AFB891 /* SongUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = SongUtil.cpp; path = ../src/SongUtil.cpp; sourceTree = ""; }; + AA5C73FA0637A5F000AFB891 /* SongUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = SongUtil.h; path = ../src/SongUtil.h; sourceTree = ""; }; + AA5C73FB0637A5F000AFB891 /* StepsUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = StepsUtil.cpp; path = ../src/StepsUtil.cpp; sourceTree = ""; }; + AA5C73FC0637A5F000AFB891 /* StepsUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = StepsUtil.h; path = ../src/StepsUtil.h; sourceTree = ""; }; + AA5D16550A79805C00F17E86 /* RageTextureRenderTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageTextureRenderTarget.cpp; path = ../src/RageTextureRenderTarget.cpp; sourceTree = ""; }; + AA5D16560A79805C00F17E86 /* RageTextureRenderTarget.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RageTextureRenderTarget.h; path = ../src/RageTextureRenderTarget.h; sourceTree = ""; }; + AA5D166A0A798C0E00F17E86 /* ActorFrameTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ActorFrameTexture.cpp; path = ../src/ActorFrameTexture.cpp; sourceTree = ""; }; + AA5D166B0A798C0E00F17E86 /* ActorFrameTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ActorFrameTexture.h; path = ../src/ActorFrameTexture.h; sourceTree = ""; }; + AA608EBF0B0F85E400B39AC4 /* DialogDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DialogDriver.cpp; sourceTree = ""; }; + AA608FAC0B0F9A4E00B39AC4 /* RageSoundDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RageSoundDriver.cpp; sourceTree = ""; }; + AA6090E40B141D1C00B39AC4 /* GamePreferences.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = GamePreferences.cpp; path = ../src/GamePreferences.cpp; sourceTree = ""; }; + AA6090E50B141D1C00B39AC4 /* GamePreferences.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = GamePreferences.h; path = ../src/GamePreferences.h; sourceTree = ""; }; + AA60E0BC067992D7008ADC41 /* Threads.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = Threads.h; sourceTree = ""; }; + AA60E0BD067992D7008ADC41 /* Threads_Pthreads.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = Threads_Pthreads.cpp; sourceTree = ""; }; + AA60E0BE067992D7008ADC41 /* Threads_Pthreads.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = Threads_Pthreads.h; sourceTree = ""; }; + AA64218606EC606F00C21584 /* RageFileDriverMemory.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileDriverMemory.cpp; path = ../src/RageFileDriverMemory.cpp; sourceTree = ""; }; + AA64218706EC606F00C21584 /* RageFileDriverMemory.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileDriverMemory.h; path = ../src/RageFileDriverMemory.h; sourceTree = ""; }; + AA658779098C322800CE55CC /* ScreenUnlockStatus.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenUnlockStatus.cpp; path = ../src/ScreenUnlockStatus.cpp; sourceTree = ""; }; + AA65877A098C322800CE55CC /* ScreenUnlockStatus.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ScreenUnlockStatus.h; path = ../src/ScreenUnlockStatus.h; sourceTree = ""; }; + AA69995F0ACE1CBB000237F9 /* ControllerStateDisplay.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ControllerStateDisplay.cpp; path = ../src/ControllerStateDisplay.cpp; sourceTree = ""; }; + AA6999600ACE1CBB000237F9 /* ControllerStateDisplay.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ControllerStateDisplay.h; path = ../src/ControllerStateDisplay.h; sourceTree = ""; }; + AA6C6AD60DC6B17B00E7A13E /* ArchHooks_MacOSX.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ArchHooks_MacOSX.cpp; path = ArchHooks/ArchHooks_MacOSX.cpp; sourceTree = ""; }; + AA6C6AD70DC6B17B00E7A13E /* ArchHooks_MacOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ArchHooks_MacOSX.h; path = ArchHooks/ArchHooks_MacOSX.h; sourceTree = ""; }; + AA6C6ADC0DC6B1DC00E7A13E /* DialogDriver_MacOSX.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DialogDriver_MacOSX.cpp; sourceTree = ""; }; + AA6C6ADD0DC6B1DC00E7A13E /* DialogDriver_MacOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DialogDriver_MacOSX.h; sourceTree = ""; }; + AA6C6AE20DC6B22800E7A13E /* LoadingWindow_MacOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadingWindow_MacOSX.h; sourceTree = ""; }; + AA6C6AE30DC6B22800E7A13E /* LoadingWindow_MacOSX.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LoadingWindow_MacOSX.mm; sourceTree = ""; }; + AA6C6B000DC6B2B400E7A13E /* LowLevelWindow_MacOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LowLevelWindow_MacOSX.h; sourceTree = ""; }; + AA6C6B010DC6B2B400E7A13E /* LowLevelWindow_MacOSX.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LowLevelWindow_MacOSX.mm; sourceTree = ""; }; + AA6C6B060DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryCardDriverThreaded_MacOSX.cpp; sourceTree = ""; }; + AA6C6B070DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryCardDriverThreaded_MacOSX.h; sourceTree = ""; }; + AA6C6B0C0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InputHandler_MacOSX_HID.cpp; sourceTree = ""; }; + AA6C6B0D0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputHandler_MacOSX_HID.h; sourceTree = ""; }; + AA6DAF0805300B3D00D02EE9 /* ScoreDisplayPercentage.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplayPercentage.cpp; path = ../src/ScoreDisplayPercentage.cpp; sourceTree = ""; }; + AA6DAF0905300B3D00D02EE9 /* ScoreDisplayPercentage.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplayPercentage.h; path = ../src/ScoreDisplayPercentage.h; sourceTree = ""; }; + AA6E000A047711F3005F316C /* Screen.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Screen.cpp; path = ../src/Screen.cpp; sourceTree = ""; }; + AA6E000B047711F3005F316C /* Screen.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Screen.h; path = ../src/Screen.h; sourceTree = ""; }; + AA6E0010047711F3005F316C /* ScreenAttract.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenAttract.cpp; path = ../src/ScreenAttract.cpp; sourceTree = ""; }; + AA6E0011047711F3005F316C /* ScreenAttract.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenAttract.h; path = ../src/ScreenAttract.h; sourceTree = ""; }; + AA6E001B047711F3005F316C /* ScreenDemonstration.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenDemonstration.cpp; path = ../src/ScreenDemonstration.cpp; sourceTree = ""; }; + AA6E001C047711F3005F316C /* ScreenDemonstration.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenDemonstration.h; path = ../src/ScreenDemonstration.h; sourceTree = ""; }; + AA6E001D047711F3005F316C /* ScreenEdit.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenEdit.cpp; path = ../src/ScreenEdit.cpp; sourceTree = ""; }; + AA6E001E047711F3005F316C /* ScreenEdit.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenEdit.h; path = ../src/ScreenEdit.h; sourceTree = ""; }; + AA6E001F047711F3005F316C /* ScreenEditMenu.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenEditMenu.cpp; path = ../src/ScreenEditMenu.cpp; sourceTree = ""; }; + AA6E0020047711F3005F316C /* ScreenEditMenu.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenEditMenu.h; path = ../src/ScreenEditMenu.h; sourceTree = ""; }; + AA6E0021047711F3005F316C /* ScreenEvaluation.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenEvaluation.cpp; path = ../src/ScreenEvaluation.cpp; sourceTree = ""; }; + AA6E0022047711F3005F316C /* ScreenEvaluation.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenEvaluation.h; path = ../src/ScreenEvaluation.h; sourceTree = ""; }; + AA6E0029047711F3005F316C /* ScreenGameplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenGameplay.cpp; path = ../src/ScreenGameplay.cpp; sourceTree = ""; }; + AA6E002A047711F3005F316C /* ScreenGameplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenGameplay.h; path = ../src/ScreenGameplay.h; sourceTree = ""; }; + AA6E002F047711F3005F316C /* ScreenHowToPlay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenHowToPlay.cpp; path = ../src/ScreenHowToPlay.cpp; sourceTree = ""; }; + AA6E0030047711F3005F316C /* ScreenHowToPlay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenHowToPlay.h; path = ../src/ScreenHowToPlay.h; sourceTree = ""; }; + AA6E0033047711F3005F316C /* ScreenInstructions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenInstructions.cpp; path = ../src/ScreenInstructions.cpp; sourceTree = ""; }; + AA6E0034047711F3005F316C /* ScreenInstructions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenInstructions.h; path = ../src/ScreenInstructions.h; sourceTree = ""; }; + AA6E0037047711F3005F316C /* ScreenJukebox.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenJukebox.cpp; path = ../src/ScreenJukebox.cpp; sourceTree = ""; }; + AA6E0038047711F3005F316C /* ScreenJukebox.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenJukebox.h; path = ../src/ScreenJukebox.h; sourceTree = ""; }; + AA6E003F047711F3005F316C /* ScreenManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenManager.cpp; path = ../src/ScreenManager.cpp; sourceTree = ""; }; + AA6E0040047711F3005F316C /* ScreenManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenManager.h; path = ../src/ScreenManager.h; sourceTree = ""; }; + AA6E0041047711F3005F316C /* ScreenMapControllers.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenMapControllers.cpp; path = ../src/ScreenMapControllers.cpp; sourceTree = ""; }; + AA6E0042047711F3005F316C /* ScreenMapControllers.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenMapControllers.h; path = ../src/ScreenMapControllers.h; sourceTree = ""; }; + AA6E0044047711F3005F316C /* ScreenMessage.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenMessage.h; path = ../src/ScreenMessage.h; sourceTree = ""; }; + AA6E0045047711F3005F316C /* ScreenMiniMenu.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenMiniMenu.cpp; path = ../src/ScreenMiniMenu.cpp; sourceTree = ""; }; + AA6E0046047711F3005F316C /* ScreenMiniMenu.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenMiniMenu.h; path = ../src/ScreenMiniMenu.h; sourceTree = ""; }; + AA6E0049047711F3005F316C /* ScreenNameEntry.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenNameEntry.cpp; path = ../src/ScreenNameEntry.cpp; sourceTree = ""; }; + AA6E004A047711F3005F316C /* ScreenNameEntry.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenNameEntry.h; path = ../src/ScreenNameEntry.h; sourceTree = ""; }; + AA6E004B047711F3005F316C /* ScreenOptions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenOptions.cpp; path = ../src/ScreenOptions.cpp; sourceTree = ""; }; + AA6E004C047711F3005F316C /* ScreenOptions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenOptions.h; path = ../src/ScreenOptions.h; sourceTree = ""; }; + AA6E004F047711F3005F316C /* ScreenPlayerOptions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenPlayerOptions.cpp; path = ../src/ScreenPlayerOptions.cpp; sourceTree = ""; }; + AA6E0050047711F3005F316C /* ScreenPlayerOptions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenPlayerOptions.h; path = ../src/ScreenPlayerOptions.h; sourceTree = ""; }; + AA6E0051047711F3005F316C /* ScreenPrompt.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenPrompt.cpp; path = ../src/ScreenPrompt.cpp; sourceTree = ""; }; + AA6E0052047711F3005F316C /* ScreenPrompt.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenPrompt.h; path = ../src/ScreenPrompt.h; sourceTree = ""; }; + AA6E0053047711F3005F316C /* ScreenRanking.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenRanking.cpp; path = ../src/ScreenRanking.cpp; sourceTree = ""; }; + AA6E0054047711F3005F316C /* ScreenRanking.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenRanking.h; path = ../src/ScreenRanking.h; sourceTree = ""; }; + AA6E0057047711F3005F316C /* ScreenSandbox.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSandbox.cpp; path = ../src/ScreenSandbox.cpp; sourceTree = ""; }; + AA6E0058047711F3005F316C /* ScreenSandbox.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSandbox.h; path = ../src/ScreenSandbox.h; sourceTree = ""; }; + AA6E0059047711F3005F316C /* ScreenSelect.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSelect.cpp; path = ../src/ScreenSelect.cpp; sourceTree = ""; }; + AA6E005A047711F3005F316C /* ScreenSelect.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSelect.h; path = ../src/ScreenSelect.h; sourceTree = ""; }; + AA6E005B047711F3005F316C /* ScreenSelectCharacter.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSelectCharacter.cpp; path = ../src/ScreenSelectCharacter.cpp; sourceTree = ""; }; + AA6E005C047711F3005F316C /* ScreenSelectCharacter.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSelectCharacter.h; path = ../src/ScreenSelectCharacter.h; sourceTree = ""; }; + AA6E0069047711F3005F316C /* ScreenSelectMusic.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSelectMusic.cpp; path = ../src/ScreenSelectMusic.cpp; sourceTree = ""; }; + AA6E006A047711F3005F316C /* ScreenSelectMusic.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSelectMusic.h; path = ../src/ScreenSelectMusic.h; sourceTree = ""; }; + AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSongOptions.cpp; path = ../src/ScreenSongOptions.cpp; sourceTree = ""; }; + AA6E0070047711F3005F316C /* ScreenSongOptions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSongOptions.h; path = ../src/ScreenSongOptions.h; sourceTree = ""; }; + AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTestFonts.cpp; path = ../src/ScreenTestFonts.cpp; sourceTree = ""; }; + AA6E007A047711F3005F316C /* ScreenTestFonts.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTestFonts.h; path = ../src/ScreenTestFonts.h; sourceTree = ""; }; + AA6E007B047711F3005F316C /* ScreenTestSound.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTestSound.cpp; path = ../src/ScreenTestSound.cpp; sourceTree = ""; }; + AA6E007C047711F3005F316C /* ScreenTestSound.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTestSound.h; path = ../src/ScreenTestSound.h; sourceTree = ""; }; + AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTextEntry.cpp; path = ../src/ScreenTextEntry.cpp; sourceTree = ""; }; + AA6E007E047711F3005F316C /* ScreenTextEntry.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTextEntry.h; path = ../src/ScreenTextEntry.h; sourceTree = ""; }; + AA6E007F047711F3005F316C /* ScreenTitleMenu.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTitleMenu.cpp; path = ../src/ScreenTitleMenu.cpp; sourceTree = ""; }; + AA6E0080047711F3005F316C /* ScreenTitleMenu.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTitleMenu.h; path = ../src/ScreenTitleMenu.h; sourceTree = ""; }; + AA6E00FF0477128A005F316C /* AnnouncerManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = AnnouncerManager.cpp; path = ../src/AnnouncerManager.cpp; sourceTree = ""; }; + AA6E01000477128A005F316C /* AnnouncerManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = AnnouncerManager.h; path = ../src/AnnouncerManager.h; sourceTree = ""; }; + AA6E01010477128A005F316C /* GameManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GameManager.cpp; path = ../src/GameManager.cpp; sourceTree = ""; }; + AA6E01020477128A005F316C /* GameManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GameManager.h; path = ../src/GameManager.h; sourceTree = ""; }; + AA6E01030477128A005F316C /* GameState.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GameState.cpp; path = ../src/GameState.cpp; sourceTree = ""; }; + AA6E01040477128A005F316C /* GameState.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GameState.h; path = ../src/GameState.h; sourceTree = ""; }; + AA6E01050477128A005F316C /* InputFilter.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = InputFilter.cpp; path = ../src/InputFilter.cpp; sourceTree = ""; }; + AA6E01060477128A005F316C /* InputFilter.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = InputFilter.h; path = ../src/InputFilter.h; sourceTree = ""; }; + AA6E01070477128A005F316C /* InputMapper.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = InputMapper.cpp; path = ../src/InputMapper.cpp; sourceTree = ""; }; + AA6E01080477128A005F316C /* InputMapper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = InputMapper.h; path = ../src/InputMapper.h; sourceTree = ""; }; + AA6E01090477128A005F316C /* InputQueue.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = InputQueue.cpp; path = ../src/InputQueue.cpp; sourceTree = ""; }; + AA6E010A0477128A005F316C /* InputQueue.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = InputQueue.h; path = ../src/InputQueue.h; sourceTree = ""; }; + AA6E010B0477128A005F316C /* NoteSkinManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NoteSkinManager.cpp; path = ../src/NoteSkinManager.cpp; sourceTree = ""; }; + AA6E010C0477128A005F316C /* NoteSkinManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NoteSkinManager.h; path = ../src/NoteSkinManager.h; sourceTree = ""; }; + AA6E010D0477128A005F316C /* PrefsManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = PrefsManager.cpp; path = ../src/PrefsManager.cpp; sourceTree = ""; }; + AA6E010E0477128A005F316C /* PrefsManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = PrefsManager.h; path = ../src/PrefsManager.h; sourceTree = ""; }; + AA6E010F0477128A005F316C /* SongManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = SongManager.cpp; path = ../src/SongManager.cpp; sourceTree = ""; }; + AA6E01100477128A005F316C /* SongManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = SongManager.h; path = ../src/SongManager.h; sourceTree = ""; }; + AA6E01120477128A005F316C /* ThemeManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ThemeManager.cpp; path = ../src/ThemeManager.cpp; sourceTree = ""; }; + AA6E01130477128A005F316C /* ThemeManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ThemeManager.h; path = ../src/ThemeManager.h; sourceTree = ""; }; + AA6E012E047712BE005F316C /* RageSoundDriver_Null.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = RageSoundDriver_Null.cpp; sourceTree = ""; }; + AA6E012F047712BE005F316C /* RageSoundDriver_Null.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = RageSoundDriver_Null.h; sourceTree = ""; }; + AA6E01630477136A005F316C /* LowLevelWindow.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = LowLevelWindow.h; sourceTree = ""; }; + AA6E01DB04771F11005F316C /* MovieTexture.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MovieTexture.cpp; path = MovieTexture/MovieTexture.cpp; sourceTree = ""; }; + AA6E01DE04772005005F316C /* SongCacheIndex.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = SongCacheIndex.cpp; path = ../src/SongCacheIndex.cpp; sourceTree = ""; }; + AA6E01DF04772005005F316C /* SongCacheIndex.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = SongCacheIndex.h; path = ../src/SongCacheIndex.h; sourceTree = ""; }; + AA6E01E20477205A005F316C /* Song.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Song.cpp; path = ../src/Song.cpp; sourceTree = ""; }; + AA6E01E6047720A3005F316C /* RandomSample.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RandomSample.cpp; path = ../src/RandomSample.cpp; sourceTree = ""; }; + AA6E01E7047720A3005F316C /* RandomSample.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RandomSample.h; path = ../src/RandomSample.h; sourceTree = ""; }; + AA6E6E0907F518E800C3EBB4 /* Quad.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Quad.cpp; path = ../src/Quad.cpp; sourceTree = ""; }; + AA6EFD6D04770A7C005F316C /* RageBitmapTexture.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageBitmapTexture.cpp; path = ../src/RageBitmapTexture.cpp; sourceTree = ""; }; + AA6EFD6E04770A7C005F316C /* RageBitmapTexture.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageBitmapTexture.h; path = ../src/RageBitmapTexture.h; sourceTree = ""; }; + AA6EFD6F04770A7C005F316C /* RageDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageDisplay.cpp; path = ../src/RageDisplay.cpp; sourceTree = ""; }; + AA6EFD7004770A7C005F316C /* RageDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageDisplay.h; path = ../src/RageDisplay.h; sourceTree = ""; }; + AA6EFD7204770A7C005F316C /* RageException.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageException.cpp; path = ../src/RageException.cpp; sourceTree = ""; }; + AA6EFD7304770A7C005F316C /* RageException.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageException.h; path = ../src/RageException.h; sourceTree = ""; }; + AA6EFD7404770A7C005F316C /* RageInput.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageInput.cpp; path = ../src/RageInput.cpp; sourceTree = ""; }; + AA6EFD7504770A7C005F316C /* RageInput.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageInput.h; path = ../src/RageInput.h; sourceTree = ""; }; + AA6EFD7604770A7C005F316C /* RageInputDevice.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageInputDevice.cpp; path = ../src/RageInputDevice.cpp; sourceTree = ""; }; + AA6EFD7704770A7C005F316C /* RageInputDevice.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageInputDevice.h; path = ../src/RageInputDevice.h; sourceTree = ""; }; + AA6EFD7804770A7C005F316C /* RageLog.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageLog.cpp; path = ../src/RageLog.cpp; sourceTree = ""; }; + AA6EFD7904770A7C005F316C /* RageLog.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageLog.h; path = ../src/RageLog.h; sourceTree = ""; }; + AA6EFD7A04770A7C005F316C /* RageMath.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageMath.cpp; path = ../src/RageMath.cpp; sourceTree = ""; }; + AA6EFD7B04770A7C005F316C /* RageMath.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageMath.h; path = ../src/RageMath.h; sourceTree = ""; }; + AA6EFD7C04770A7C005F316C /* RageSound.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSound.cpp; path = ../src/RageSound.cpp; sourceTree = ""; }; + AA6EFD7D04770A7C005F316C /* RageSound.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSound.h; path = ../src/RageSound.h; sourceTree = ""; }; + AA6EFD7E04770A7C005F316C /* RageSoundManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundManager.cpp; path = ../src/RageSoundManager.cpp; sourceTree = ""; }; + AA6EFD7F04770A7C005F316C /* RageSoundManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundManager.h; path = ../src/RageSoundManager.h; sourceTree = ""; }; + AA6EFD8004770A7C005F316C /* RageSoundReader_Preload.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundReader_Preload.cpp; path = ../src/RageSoundReader_Preload.cpp; sourceTree = ""; }; + AA6EFD8104770A7C005F316C /* RageSoundReader_Preload.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_Preload.h; path = ../src/RageSoundReader_Preload.h; sourceTree = ""; }; + AA6EFD8604770A7C005F316C /* RageSoundReader.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader.h; path = ../src/RageSoundReader.h; sourceTree = ""; }; + AA6EFD8904770A7C005F316C /* RageTexture.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageTexture.cpp; path = ../src/RageTexture.cpp; sourceTree = ""; }; + AA6EFD8A04770A7C005F316C /* RageTexture.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageTexture.h; path = ../src/RageTexture.h; sourceTree = ""; }; + AA6EFD8B04770A7C005F316C /* RageTextureManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageTextureManager.cpp; path = ../src/RageTextureManager.cpp; sourceTree = ""; }; + AA6EFD8C04770A7C005F316C /* RageTextureManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageTextureManager.h; path = ../src/RageTextureManager.h; sourceTree = ""; }; + AA6EFD8D04770A7C005F316C /* RageThreads.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageThreads.cpp; path = ../src/RageThreads.cpp; sourceTree = ""; }; + AA6EFD8E04770A7C005F316C /* RageThreads.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageThreads.h; path = ../src/RageThreads.h; sourceTree = ""; }; + AA6EFD8F04770A7C005F316C /* RageTimer.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageTimer.cpp; path = ../src/RageTimer.cpp; sourceTree = ""; }; + AA6EFD9004770A7C005F316C /* RageTimer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageTimer.h; path = ../src/RageTimer.h; sourceTree = ""; }; + AA6EFD9104770A7C005F316C /* RageTypes.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageTypes.h; path = ../src/RageTypes.h; sourceTree = ""; }; + AA6EFD9204770A7C005F316C /* RageUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageUtil.cpp; path = ../src/RageUtil.cpp; sourceTree = ""; }; + AA6EFD9304770A7C005F316C /* RageUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageUtil.h; path = ../src/RageUtil.h; sourceTree = ""; }; + AA6EFDCB04770C79005F316C /* Character.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Character.cpp; path = ../src/Character.cpp; sourceTree = ""; }; + AA6EFDCC04770C79005F316C /* Character.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Character.h; path = ../src/Character.h; sourceTree = ""; }; + AA6EFDCD04770C79005F316C /* CodeDetector.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CodeDetector.cpp; path = ../src/CodeDetector.cpp; sourceTree = ""; }; + AA6EFDCE04770C79005F316C /* CodeDetector.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CodeDetector.h; path = ../src/CodeDetector.h; sourceTree = ""; }; + AA6EFDCF04770C79005F316C /* Course.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Course.cpp; path = ../src/Course.cpp; sourceTree = ""; }; + AA6EFDD004770C79005F316C /* Course.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Course.h; path = ../src/Course.h; sourceTree = ""; }; + AA6EFDD104770C79005F316C /* Font.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Font.cpp; path = ../src/Font.cpp; sourceTree = ""; }; + AA6EFDD204770C79005F316C /* Font.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Font.h; path = ../src/Font.h; sourceTree = ""; }; + AA6EFDD304770C79005F316C /* FontCharAliases.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = FontCharAliases.cpp; path = ../src/FontCharAliases.cpp; sourceTree = ""; }; + AA6EFDD404770C79005F316C /* FontCharAliases.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = FontCharAliases.h; path = ../src/FontCharAliases.h; sourceTree = ""; }; + AA6EFDD504770C79005F316C /* FontCharmaps.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = FontCharmaps.cpp; path = ../src/FontCharmaps.cpp; sourceTree = ""; }; + AA6EFDD604770C79005F316C /* FontCharmaps.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = FontCharmaps.h; path = ../src/FontCharmaps.h; sourceTree = ""; }; + AA6EFDD704770C79005F316C /* FontManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = FontManager.cpp; path = ../src/FontManager.cpp; sourceTree = ""; }; + AA6EFDD804770C79005F316C /* FontManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = FontManager.h; path = ../src/FontManager.h; sourceTree = ""; }; + AA6EFDD904770C79005F316C /* GameConstantsAndTypes.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GameConstantsAndTypes.cpp; path = ../src/GameConstantsAndTypes.cpp; sourceTree = ""; }; + AA6EFDDA04770C79005F316C /* GameConstantsAndTypes.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GameConstantsAndTypes.h; path = ../src/GameConstantsAndTypes.h; sourceTree = ""; }; + AA6EFDDD04770C79005F316C /* GameInput.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GameInput.cpp; path = ../src/GameInput.cpp; sourceTree = ""; }; + AA6EFDDE04770C79005F316C /* GameInput.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GameInput.h; path = ../src/GameInput.h; sourceTree = ""; }; + AA6EFDDF04770C79005F316C /* Grade.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Grade.cpp; path = ../src/Grade.cpp; sourceTree = ""; }; + AA6EFDE004770C79005F316C /* Grade.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Grade.h; path = ../src/Grade.h; sourceTree = ""; }; + AA6EFDE104770C79005F316C /* Inventory.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Inventory.cpp; path = ../src/Inventory.cpp; sourceTree = ""; }; + AA6EFDE204770C79005F316C /* Inventory.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Inventory.h; path = ../src/Inventory.h; sourceTree = ""; }; + AA6EFDE304770C79005F316C /* LyricsLoader.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LyricsLoader.cpp; path = ../src/LyricsLoader.cpp; sourceTree = ""; }; + AA6EFDE404770C79005F316C /* LyricsLoader.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LyricsLoader.h; path = ../src/LyricsLoader.h; sourceTree = ""; }; + AA6EFDE504770C79005F316C /* NoteData.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NoteData.cpp; path = ../src/NoteData.cpp; sourceTree = ""; }; + AA6EFDE604770C79005F316C /* NoteData.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NoteData.h; path = ../src/NoteData.h; sourceTree = ""; }; + AA6EFDE704770C79005F316C /* NoteDataWithScoring.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NoteDataWithScoring.cpp; path = ../src/NoteDataWithScoring.cpp; sourceTree = ""; }; + AA6EFDE804770C79005F316C /* NoteDataWithScoring.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NoteDataWithScoring.h; path = ../src/NoteDataWithScoring.h; sourceTree = ""; }; + AA6EFDED04770C79005F316C /* NotesLoader.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NotesLoader.cpp; path = ../src/NotesLoader.cpp; sourceTree = ""; }; + AA6EFDEE04770C79005F316C /* NotesLoader.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NotesLoader.h; path = ../src/NotesLoader.h; sourceTree = ""; }; + AA6EFDEF04770C79005F316C /* NotesLoaderBMS.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NotesLoaderBMS.cpp; path = ../src/NotesLoaderBMS.cpp; sourceTree = ""; }; + AA6EFDF004770C79005F316C /* NotesLoaderBMS.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NotesLoaderBMS.h; path = ../src/NotesLoaderBMS.h; sourceTree = ""; }; + AA6EFDF104770C79005F316C /* NotesLoaderDWI.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NotesLoaderDWI.cpp; path = ../src/NotesLoaderDWI.cpp; sourceTree = ""; }; + AA6EFDF204770C79005F316C /* NotesLoaderDWI.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NotesLoaderDWI.h; path = ../src/NotesLoaderDWI.h; sourceTree = ""; }; + AA6EFDF304770C79005F316C /* NotesLoaderKSF.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NotesLoaderKSF.cpp; path = ../src/NotesLoaderKSF.cpp; sourceTree = ""; }; + AA6EFDF404770C79005F316C /* NotesLoaderKSF.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NotesLoaderKSF.h; path = ../src/NotesLoaderKSF.h; sourceTree = ""; }; + AA6EFDF504770C79005F316C /* NotesLoaderSM.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NotesLoaderSM.cpp; path = ../src/NotesLoaderSM.cpp; sourceTree = ""; }; + AA6EFDF604770C79005F316C /* NotesLoaderSM.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NotesLoaderSM.h; path = ../src/NotesLoaderSM.h; sourceTree = ""; }; + AA6EFDF704770C79005F316C /* NotesWriterDWI.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NotesWriterDWI.cpp; path = ../src/NotesWriterDWI.cpp; sourceTree = ""; }; + AA6EFDF804770C79005F316C /* NotesWriterDWI.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NotesWriterDWI.h; path = ../src/NotesWriterDWI.h; sourceTree = ""; }; + AA6EFDF904770C79005F316C /* NotesWriterSM.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NotesWriterSM.cpp; path = ../src/NotesWriterSM.cpp; sourceTree = ""; }; + AA6EFDFA04770C79005F316C /* NotesWriterSM.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NotesWriterSM.h; path = ../src/NotesWriterSM.h; sourceTree = ""; }; + AA6EFDFB04770C79005F316C /* NoteTypes.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NoteTypes.cpp; path = ../src/NoteTypes.cpp; sourceTree = ""; }; + AA6EFDFC04770C79005F316C /* NoteTypes.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NoteTypes.h; path = ../src/NoteTypes.h; sourceTree = ""; }; + AA6EFDFD04770C79005F316C /* Player.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Player.cpp; path = ../src/Player.cpp; sourceTree = ""; }; + AA6EFDFE04770C79005F316C /* Player.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Player.h; path = ../src/Player.h; sourceTree = ""; }; + AA6EFDFF04770C79005F316C /* PlayerAI.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = PlayerAI.cpp; path = ../src/PlayerAI.cpp; sourceTree = ""; }; + AA6EFE0004770C79005F316C /* PlayerAI.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = PlayerAI.h; path = ../src/PlayerAI.h; sourceTree = ""; }; + AA6EFE0104770C79005F316C /* PlayerNumber.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = PlayerNumber.cpp; path = ../src/PlayerNumber.cpp; sourceTree = ""; }; + AA6EFE0204770C79005F316C /* PlayerNumber.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = PlayerNumber.h; path = ../src/PlayerNumber.h; sourceTree = ""; }; + AA6EFE0304770C79005F316C /* PlayerOptions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = PlayerOptions.cpp; path = ../src/PlayerOptions.cpp; sourceTree = ""; }; + AA6EFE0404770C79005F316C /* PlayerOptions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = PlayerOptions.h; path = ../src/PlayerOptions.h; sourceTree = ""; }; + AA6EFE0704770C79005F316C /* SongOptions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = SongOptions.cpp; path = ../src/SongOptions.cpp; sourceTree = ""; }; + AA6EFE0804770C79005F316C /* SongOptions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = SongOptions.h; path = ../src/SongOptions.h; sourceTree = ""; }; + AA6EFE0904770C79005F316C /* StageStats.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = StageStats.cpp; path = ../src/StageStats.cpp; sourceTree = ""; }; + AA6EFE0A04770C79005F316C /* StageStats.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = StageStats.h; path = ../src/StageStats.h; sourceTree = ""; }; + AA6EFE0E04770C79005F316C /* TitleSubstitution.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = TitleSubstitution.cpp; path = ../src/TitleSubstitution.cpp; sourceTree = ""; }; + AA6EFE0F04770C79005F316C /* TitleSubstitution.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = TitleSubstitution.h; path = ../src/TitleSubstitution.h; sourceTree = ""; }; + AA6EFE5804770CAA005F316C /* IniFile.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = IniFile.cpp; path = ../src/IniFile.cpp; sourceTree = ""; }; + AA6EFE5904770CAA005F316C /* IniFile.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = IniFile.h; path = ../src/IniFile.h; sourceTree = ""; }; + AA6EFE5A04770CAA005F316C /* MsdFile.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MsdFile.cpp; path = ../src/MsdFile.cpp; sourceTree = ""; }; + AA6EFE5B04770CAA005F316C /* MsdFile.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MsdFile.h; path = ../src/MsdFile.h; sourceTree = ""; }; + AA6EFE6004770CF7005F316C /* global.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = global.h; sourceTree = ""; }; + AA6EFE6104770CF7005F316C /* ScreenDimensions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenDimensions.h; path = ../src/ScreenDimensions.h; sourceTree = ""; }; + AA6EFE6204770CF7005F316C /* StdString.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = StdString.h; sourceTree = ""; }; + AA6EFE6304770CF7005F316C /* StepMania.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = StepMania.cpp; sourceTree = ""; }; + AA6EFE6404770CF7005F316C /* StepMania.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = StepMania.h; sourceTree = ""; }; + AA6EFE6E04770D61005F316C /* Banner.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Banner.cpp; path = ../src/Banner.cpp; sourceTree = ""; }; + AA6EFE6F04770D61005F316C /* Banner.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Banner.h; path = ../src/Banner.h; sourceTree = ""; }; + AA6EFE7604770E7C005F316C /* BPMDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = BPMDisplay.cpp; path = ../src/BPMDisplay.cpp; sourceTree = ""; }; + AA6EFE7704770E7C005F316C /* BPMDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = BPMDisplay.h; path = ../src/BPMDisplay.h; sourceTree = ""; }; + AA6EFE7804770E7C005F316C /* CourseContentsList.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CourseContentsList.cpp; path = ../src/CourseContentsList.cpp; sourceTree = ""; }; + AA6EFE7904770E7C005F316C /* CourseContentsList.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CourseContentsList.h; path = ../src/CourseContentsList.h; sourceTree = ""; }; + AA6EFE7E04770E7C005F316C /* DifficultyIcon.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = DifficultyIcon.cpp; path = ../src/DifficultyIcon.cpp; sourceTree = ""; }; + AA6EFE7F04770E7C005F316C /* DifficultyIcon.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = DifficultyIcon.h; path = ../src/DifficultyIcon.h; sourceTree = ""; }; + AA6EFE8404770E7C005F316C /* EditMenu.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = EditMenu.cpp; path = ../src/EditMenu.cpp; sourceTree = ""; }; + AA6EFE8504770E7C005F316C /* EditMenu.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = EditMenu.h; path = ../src/EditMenu.h; sourceTree = ""; }; + AA6EFE8A04770E7C005F316C /* FadingBanner.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = FadingBanner.cpp; path = ../src/FadingBanner.cpp; sourceTree = ""; }; + AA6EFE8B04770E7C005F316C /* FadingBanner.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = FadingBanner.h; path = ../src/FadingBanner.h; sourceTree = ""; }; + AA6EFE8C04770E7C005F316C /* GradeDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GradeDisplay.cpp; path = ../src/GradeDisplay.cpp; sourceTree = ""; }; + AA6EFE8D04770E7C005F316C /* GradeDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GradeDisplay.h; path = ../src/GradeDisplay.h; sourceTree = ""; }; + AA6EFE9004770E7C005F316C /* GrooveRadar.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GrooveRadar.cpp; path = ../src/GrooveRadar.cpp; sourceTree = ""; }; + AA6EFE9104770E7C005F316C /* GrooveRadar.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GrooveRadar.h; path = ../src/GrooveRadar.h; sourceTree = ""; }; + AA6EFE9404770E7C005F316C /* HelpDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = HelpDisplay.cpp; path = ../src/HelpDisplay.cpp; sourceTree = ""; }; + AA6EFE9504770E7C005F316C /* HelpDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = HelpDisplay.h; path = ../src/HelpDisplay.h; sourceTree = ""; }; + AA6EFE9A04770E7C005F316C /* MenuTimer.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MenuTimer.cpp; path = ../src/MenuTimer.cpp; sourceTree = ""; }; + AA6EFE9B04770E7C005F316C /* MenuTimer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MenuTimer.h; path = ../src/MenuTimer.h; sourceTree = ""; }; + AA6EFE9C04770E7C005F316C /* MeterDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MeterDisplay.cpp; path = ../src/MeterDisplay.cpp; sourceTree = ""; }; + AA6EFE9D04770E7C005F316C /* MeterDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MeterDisplay.h; path = ../src/MeterDisplay.h; sourceTree = ""; }; + AA6EFEA404770E7C005F316C /* MusicWheel.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MusicWheel.cpp; path = ../src/MusicWheel.cpp; sourceTree = ""; }; + AA6EFEA504770E7C005F316C /* MusicWheel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MusicWheel.h; path = ../src/MusicWheel.h; sourceTree = ""; }; + AA6EFEA604770E7C005F316C /* MusicWheelItem.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MusicWheelItem.cpp; path = ../src/MusicWheelItem.cpp; sourceTree = ""; }; + AA6EFEA704770E7C005F316C /* MusicWheelItem.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MusicWheelItem.h; path = ../src/MusicWheelItem.h; sourceTree = ""; }; + AA6EFEAC04770E7C005F316C /* OptionsCursor.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = OptionsCursor.cpp; path = ../src/OptionsCursor.cpp; sourceTree = ""; }; + AA6EFEAD04770E7C005F316C /* OptionsCursor.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = OptionsCursor.h; path = ../src/OptionsCursor.h; sourceTree = ""; }; + AA6EFEAE04770E7C005F316C /* ScrollBar.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScrollBar.cpp; path = ../src/ScrollBar.cpp; sourceTree = ""; }; + AA6EFEAF04770E7C005F316C /* ScrollBar.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScrollBar.h; path = ../src/ScrollBar.h; sourceTree = ""; }; + AA6EFEB204770E7C005F316C /* SnapDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = SnapDisplay.cpp; path = ../src/SnapDisplay.cpp; sourceTree = ""; }; + AA6EFEB304770E7C005F316C /* SnapDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = SnapDisplay.h; path = ../src/SnapDisplay.h; sourceTree = ""; }; + AA6EFEB404770E7C005F316C /* TextBanner.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = TextBanner.cpp; path = ../src/TextBanner.cpp; sourceTree = ""; }; + AA6EFEB504770E7C005F316C /* TextBanner.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = TextBanner.h; path = ../src/TextBanner.h; sourceTree = ""; }; + AA6EFEB604770E7C005F316C /* WheelNotifyIcon.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = WheelNotifyIcon.cpp; path = ../src/WheelNotifyIcon.cpp; sourceTree = ""; }; + AA6EFEB704770E7C005F316C /* WheelNotifyIcon.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = WheelNotifyIcon.h; path = ../src/WheelNotifyIcon.h; sourceTree = ""; }; + AA6EFEFD04770F63005F316C /* ArrowEffects.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ArrowEffects.cpp; path = ../src/ArrowEffects.cpp; sourceTree = ""; }; + AA6EFEFE04770F63005F316C /* ArrowEffects.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ArrowEffects.h; path = ../src/ArrowEffects.h; sourceTree = ""; }; + AA6EFEFF04770F63005F316C /* Background.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Background.cpp; path = ../src/Background.cpp; sourceTree = ""; }; + AA6EFF0004770F63005F316C /* Background.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Background.h; path = ../src/Background.h; sourceTree = ""; }; + AA6EFF0104770F63005F316C /* BGAnimation.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = BGAnimation.cpp; path = ../src/BGAnimation.cpp; sourceTree = ""; }; + AA6EFF0204770F63005F316C /* BGAnimation.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = BGAnimation.h; path = ../src/BGAnimation.h; sourceTree = ""; }; + AA6EFF0304770F63005F316C /* BGAnimationLayer.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = BGAnimationLayer.cpp; path = ../src/BGAnimationLayer.cpp; sourceTree = ""; }; + AA6EFF0404770F63005F316C /* BGAnimationLayer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = BGAnimationLayer.h; path = ../src/BGAnimationLayer.h; sourceTree = ""; }; + AA6EFF0704770F63005F316C /* DancingCharacters.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = DancingCharacters.cpp; path = ../src/DancingCharacters.cpp; sourceTree = ""; }; + AA6EFF0804770F63005F316C /* DancingCharacters.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = DancingCharacters.h; path = ../src/DancingCharacters.h; sourceTree = ""; }; + AA6EFF0D04770F63005F316C /* GhostArrowRow.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GhostArrowRow.cpp; path = ../src/GhostArrowRow.cpp; sourceTree = ""; }; + AA6EFF0E04770F63005F316C /* GhostArrowRow.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GhostArrowRow.h; path = ../src/GhostArrowRow.h; sourceTree = ""; }; + AA6EFF1504770F63005F316C /* HoldJudgment.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = HoldJudgment.cpp; path = ../src/HoldJudgment.cpp; sourceTree = ""; }; + AA6EFF1604770F63005F316C /* HoldJudgment.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = HoldJudgment.h; path = ../src/HoldJudgment.h; sourceTree = ""; }; + AA6EFF1A04770F63005F316C /* LifeMeter.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LifeMeter.h; path = ../src/LifeMeter.h; sourceTree = ""; }; + AA6EFF1B04770F63005F316C /* LifeMeterBar.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LifeMeterBar.cpp; path = ../src/LifeMeterBar.cpp; sourceTree = ""; }; + AA6EFF1C04770F63005F316C /* LifeMeterBar.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LifeMeterBar.h; path = ../src/LifeMeterBar.h; sourceTree = ""; }; + AA6EFF1D04770F63005F316C /* LifeMeterBattery.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LifeMeterBattery.cpp; path = ../src/LifeMeterBattery.cpp; sourceTree = ""; }; + AA6EFF1E04770F63005F316C /* LifeMeterBattery.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LifeMeterBattery.h; path = ../src/LifeMeterBattery.h; sourceTree = ""; }; + AA6EFF1F04770F63005F316C /* LyricDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LyricDisplay.cpp; path = ../src/LyricDisplay.cpp; sourceTree = ""; }; + AA6EFF2004770F63005F316C /* LyricDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LyricDisplay.h; path = ../src/LyricDisplay.h; sourceTree = ""; }; + AA6EFF2104770F63005F316C /* NoteDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NoteDisplay.cpp; path = ../src/NoteDisplay.cpp; sourceTree = ""; }; + AA6EFF2204770F63005F316C /* NoteDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NoteDisplay.h; path = ../src/NoteDisplay.h; sourceTree = ""; }; + AA6EFF2304770F63005F316C /* NoteField.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NoteField.cpp; path = ../src/NoteField.cpp; sourceTree = ""; }; + AA6EFF2404770F63005F316C /* NoteField.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NoteField.h; path = ../src/NoteField.h; sourceTree = ""; }; + AA6EFF2504770F63005F316C /* ScoreDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplay.cpp; path = ../src/ScoreDisplay.cpp; sourceTree = ""; }; + AA6EFF2604770F63005F316C /* ScoreDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplay.h; path = ../src/ScoreDisplay.h; sourceTree = ""; }; + AA6EFF2704770F63005F316C /* ScoreDisplayBattle.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplayBattle.cpp; path = ../src/ScoreDisplayBattle.cpp; sourceTree = ""; }; + AA6EFF2804770F63005F316C /* ScoreDisplayBattle.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplayBattle.h; path = ../src/ScoreDisplayBattle.h; sourceTree = ""; }; + AA6EFF2904770F63005F316C /* ScoreDisplayNormal.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplayNormal.cpp; path = ../src/ScoreDisplayNormal.cpp; sourceTree = ""; }; + AA6EFF2A04770F63005F316C /* ScoreDisplayNormal.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplayNormal.h; path = ../src/ScoreDisplayNormal.h; sourceTree = ""; }; + AA6EFF2B04770F63005F316C /* ScoreDisplayOni.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplayOni.cpp; path = ../src/ScoreDisplayOni.cpp; sourceTree = ""; }; + AA6EFF2C04770F63005F316C /* ScoreDisplayOni.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplayOni.h; path = ../src/ScoreDisplayOni.h; sourceTree = ""; }; + AA6EFF2D04770F63005F316C /* ScoreDisplayRave.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplayRave.cpp; path = ../src/ScoreDisplayRave.cpp; sourceTree = ""; }; + AA6EFF2E04770F63005F316C /* ScoreDisplayRave.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplayRave.h; path = ../src/ScoreDisplayRave.h; sourceTree = ""; }; + AA6EFF3004770F63005F316C /* ScoreKeeper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreKeeper.h; path = ../src/ScoreKeeper.h; sourceTree = ""; }; + AA6EFF7004770F86005F316C /* Transition.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Transition.cpp; path = ../src/Transition.cpp; sourceTree = ""; }; + AA6EFF7104770F86005F316C /* Transition.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Transition.h; path = ../src/Transition.h; sourceTree = ""; }; + AA6EFF7504770FFD005F316C /* Actor.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Actor.cpp; path = ../src/Actor.cpp; sourceTree = ""; }; + AA6EFF7604770FFD005F316C /* Actor.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Actor.h; path = ../src/Actor.h; sourceTree = ""; }; + AA6EFF7704770FFD005F316C /* ActorFrame.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ActorFrame.cpp; path = ../src/ActorFrame.cpp; sourceTree = ""; }; + AA6EFF7804770FFD005F316C /* ActorFrame.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ActorFrame.h; path = ../src/ActorFrame.h; sourceTree = ""; }; + AA6EFF7904770FFD005F316C /* ActorScroller.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ActorScroller.cpp; path = ../src/ActorScroller.cpp; sourceTree = ""; }; + AA6EFF7A04770FFD005F316C /* ActorScroller.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ActorScroller.h; path = ../src/ActorScroller.h; sourceTree = ""; }; + AA6EFFB904770FFD005F316C /* BitmapText.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = BitmapText.cpp; path = ../src/BitmapText.cpp; sourceTree = ""; }; + AA6EFFBA04770FFD005F316C /* BitmapText.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = BitmapText.h; path = ../src/BitmapText.h; sourceTree = ""; }; + AA6EFFBD04770FFD005F316C /* Model.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Model.cpp; path = ../src/Model.cpp; sourceTree = ""; }; + AA6EFFBE04770FFD005F316C /* Model.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Model.h; path = ../src/Model.h; sourceTree = ""; }; + AA6EFFBF04770FFD005F316C /* ModelTypes.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ModelTypes.cpp; path = ../src/ModelTypes.cpp; sourceTree = ""; }; + AA6EFFC004770FFD005F316C /* ModelTypes.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ModelTypes.h; path = ../src/ModelTypes.h; sourceTree = ""; }; + AA6EFFC104770FFD005F316C /* Quad.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Quad.h; path = ../src/Quad.h; sourceTree = ""; }; + AA6EFFC204770FFD005F316C /* Sprite.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Sprite.cpp; path = ../src/Sprite.cpp; sourceTree = ""; }; + AA6EFFC304770FFD005F316C /* Sprite.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Sprite.h; path = ../src/Sprite.h; sourceTree = ""; }; + AA70E3640663112800DAE1FD /* Foreach.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = Foreach.h; sourceTree = ""; }; + AA70E3650663112800DAE1FD /* Trail.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Trail.cpp; path = ../src/Trail.cpp; sourceTree = ""; }; + AA70E3660663112800DAE1FD /* Trail.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Trail.h; path = ../src/Trail.h; sourceTree = ""; }; + AA70E3670663112800DAE1FD /* TrailUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = TrailUtil.cpp; path = ../src/TrailUtil.cpp; sourceTree = ""; }; + AA70E3680663112800DAE1FD /* TrailUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = TrailUtil.h; path = ../src/TrailUtil.h; sourceTree = ""; }; + AA7144AF0809EEEC00545684 /* ScoreDisplayAliveTime.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplayAliveTime.cpp; path = ../src/ScoreDisplayAliveTime.cpp; sourceTree = ""; }; + AA7144B00809EEEC00545684 /* ScoreDisplayAliveTime.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplayAliveTime.h; path = ../src/ScoreDisplayAliveTime.h; sourceTree = ""; }; + AA729C420599B50D00779F33 /* TimingData.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = TimingData.cpp; path = ../src/TimingData.cpp; sourceTree = ""; }; + AA729C430599B50D00779F33 /* TimingData.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = TimingData.h; path = ../src/TimingData.h; sourceTree = ""; }; + AA729C460599B54D00779F33 /* MemoryCardDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MemoryCardDisplay.cpp; path = ../src/MemoryCardDisplay.cpp; sourceTree = ""; }; + AA729C470599B54D00779F33 /* MemoryCardDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MemoryCardDisplay.h; path = ../src/MemoryCardDisplay.h; sourceTree = ""; }; + AA729C4E0599B58D00779F33 /* ReceptorArrow.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ReceptorArrow.cpp; path = ../src/ReceptorArrow.cpp; sourceTree = ""; }; + AA729C4F0599B58D00779F33 /* ReceptorArrow.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ReceptorArrow.h; path = ../src/ReceptorArrow.h; sourceTree = ""; }; + AA729C500599B58D00779F33 /* ReceptorArrowRow.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ReceptorArrowRow.cpp; path = ../src/ReceptorArrowRow.cpp; sourceTree = ""; }; + AA729C510599B58D00779F33 /* ReceptorArrowRow.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ReceptorArrowRow.h; path = ../src/ReceptorArrowRow.h; sourceTree = ""; }; + AA76D15404D9D2D200D02EE9 /* CrashHandler.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = CrashHandler.cpp; sourceTree = ""; }; + AA76D15504D9D2D200D02EE9 /* CrashHandlerChild.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = CrashHandlerChild.cpp; sourceTree = ""; }; + AA77E74508B64B1400FA24CA /* CharacterManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CharacterManager.cpp; path = ../src/CharacterManager.cpp; sourceTree = ""; }; + AA77E74608B64B1400FA24CA /* CharacterManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CharacterManager.h; path = ../src/CharacterManager.h; sourceTree = ""; }; + AA77E74B08B64B5600FA24CA /* CourseLoaderCRS.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CourseLoaderCRS.cpp; path = ../src/CourseLoaderCRS.cpp; sourceTree = ""; }; + AA77E74C08B64B5600FA24CA /* CourseLoaderCRS.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CourseLoaderCRS.h; path = ../src/CourseLoaderCRS.h; sourceTree = ""; }; + AA77E74D08B64B5600FA24CA /* CourseWriterCRS.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CourseWriterCRS.cpp; path = ../src/CourseWriterCRS.cpp; sourceTree = ""; }; + AA77E74E08B64B5600FA24CA /* CourseWriterCRS.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CourseWriterCRS.h; path = ../src/CourseWriterCRS.h; sourceTree = ""; }; + AA77E75B08B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenOptionsManageCourses.cpp; path = ../src/ScreenOptionsManageCourses.cpp; sourceTree = ""; }; + AA77E75C08B64B9A00FA24CA /* ScreenOptionsManageCourses.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenOptionsManageCourses.h; path = ../src/ScreenOptionsManageCourses.h; sourceTree = ""; }; + AA77E75D08B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenOptionsManageProfiles.cpp; path = ../src/ScreenOptionsManageProfiles.cpp; sourceTree = ""; }; + AA77E75E08B64B9A00FA24CA /* ScreenOptionsManageProfiles.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenOptionsManageProfiles.h; path = ../src/ScreenOptionsManageProfiles.h; sourceTree = ""; }; + AA77E8A108B6ABD500FA24CA /* vecLib.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = vecLib.framework; path = /System/Library/Frameworks/vecLib.framework; sourceTree = ""; }; + AA7A2B940AE09B520054C5BA /* lua */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lua; sourceTree = BUILT_PRODUCTS_DIR; }; + AA7A2BAB0AE09CD50054C5BA /* luac */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = luac; sourceTree = BUILT_PRODUCTS_DIR; }; + AA7ADC23072CAB7F00C50A7F /* RageSoundReader_Chain.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundReader_Chain.cpp; path = ../src/RageSoundReader_Chain.cpp; sourceTree = ""; }; + AA7ADC24072CAB7F00C50A7F /* RageSoundReader_Chain.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_Chain.h; path = ../src/RageSoundReader_Chain.h; sourceTree = ""; }; + AA7ADC25072CAB7F00C50A7F /* RageSoundUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundUtil.cpp; path = ../src/RageSoundUtil.cpp; sourceTree = ""; }; + AA7ADC26072CAB7F00C50A7F /* RageSoundUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundUtil.h; path = ../src/RageSoundUtil.h; sourceTree = ""; }; + AA7C895F0B67444700FD9940 /* libtommath.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libtommath.a; sourceTree = BUILT_PRODUCTS_DIR; }; + AA7C8A800B6744F600FD9940 /* bn_error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_error.c; sourceTree = ""; }; + AA7C8A810B6744F600FD9940 /* bn_fast_mp_invmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_mp_invmod.c; sourceTree = ""; }; + AA7C8A820B6744F600FD9940 /* bn_fast_mp_montgomery_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_mp_montgomery_reduce.c; sourceTree = ""; }; + AA7C8A830B6744F600FD9940 /* bn_fast_s_mp_mul_digs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_s_mp_mul_digs.c; sourceTree = ""; }; + AA7C8A840B6744F600FD9940 /* bn_fast_s_mp_mul_high_digs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_s_mp_mul_high_digs.c; sourceTree = ""; }; + AA7C8A850B6744F600FD9940 /* bn_fast_s_mp_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_s_mp_sqr.c; sourceTree = ""; }; + AA7C8A860B6744F600FD9940 /* bn_mp_2expt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_2expt.c; sourceTree = ""; }; + AA7C8A870B6744F600FD9940 /* bn_mp_abs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_abs.c; sourceTree = ""; }; + AA7C8A880B6744F600FD9940 /* bn_mp_add.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_add.c; sourceTree = ""; }; + AA7C8A890B6744F600FD9940 /* bn_mp_add_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_add_d.c; sourceTree = ""; }; + AA7C8A8A0B6744F600FD9940 /* bn_mp_addmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_addmod.c; sourceTree = ""; }; + AA7C8A8B0B6744F600FD9940 /* bn_mp_and.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_and.c; sourceTree = ""; }; + AA7C8A8C0B6744F600FD9940 /* bn_mp_clamp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_clamp.c; sourceTree = ""; }; + AA7C8A8D0B6744F600FD9940 /* bn_mp_clear.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_clear.c; sourceTree = ""; }; + AA7C8A8E0B6744F600FD9940 /* bn_mp_clear_multi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_clear_multi.c; sourceTree = ""; }; + AA7C8A8F0B6744F600FD9940 /* bn_mp_cmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_cmp.c; sourceTree = ""; }; + AA7C8A900B6744F600FD9940 /* bn_mp_cmp_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_cmp_d.c; sourceTree = ""; }; + AA7C8A910B6744F600FD9940 /* bn_mp_cmp_mag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_cmp_mag.c; sourceTree = ""; }; + AA7C8A920B6744F600FD9940 /* bn_mp_cnt_lsb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_cnt_lsb.c; sourceTree = ""; }; + AA7C8A930B6744F600FD9940 /* bn_mp_copy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_copy.c; sourceTree = ""; }; + AA7C8A940B6744F600FD9940 /* bn_mp_count_bits.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_count_bits.c; sourceTree = ""; }; + AA7C8A950B6744F600FD9940 /* bn_mp_div.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div.c; sourceTree = ""; }; + AA7C8A960B6744F600FD9940 /* bn_mp_div_2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_2.c; sourceTree = ""; }; + AA7C8A970B6744F600FD9940 /* bn_mp_div_2d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_2d.c; sourceTree = ""; }; + AA7C8A980B6744F600FD9940 /* bn_mp_div_3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_3.c; sourceTree = ""; }; + AA7C8A990B6744F600FD9940 /* bn_mp_div_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_d.c; sourceTree = ""; }; + AA7C8A9A0B6744F600FD9940 /* bn_mp_dr_is_modulus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_dr_is_modulus.c; sourceTree = ""; }; + AA7C8A9B0B6744F600FD9940 /* bn_mp_dr_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_dr_reduce.c; sourceTree = ""; }; + AA7C8A9C0B6744F600FD9940 /* bn_mp_dr_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_dr_setup.c; sourceTree = ""; }; + AA7C8A9D0B6744F600FD9940 /* bn_mp_exch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exch.c; sourceTree = ""; }; + AA7C8A9E0B6744F600FD9940 /* bn_mp_expt_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_expt_d.c; sourceTree = ""; }; + AA7C8A9F0B6744F600FD9940 /* bn_mp_exptmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exptmod.c; sourceTree = ""; }; + AA7C8AA00B6744F600FD9940 /* bn_mp_exptmod_fast.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exptmod_fast.c; sourceTree = ""; }; + AA7C8AA10B6744F600FD9940 /* bn_mp_exteuclid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exteuclid.c; sourceTree = ""; }; + AA7C8AA20B6744F600FD9940 /* bn_mp_fread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_fread.c; sourceTree = ""; }; + AA7C8AA30B6744F600FD9940 /* bn_mp_fwrite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_fwrite.c; sourceTree = ""; }; + AA7C8AA40B6744F600FD9940 /* bn_mp_gcd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_gcd.c; sourceTree = ""; }; + AA7C8AA50B6744F600FD9940 /* bn_mp_get_int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_get_int.c; sourceTree = ""; }; + AA7C8AA60B6744F600FD9940 /* bn_mp_grow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_grow.c; sourceTree = ""; }; + AA7C8AA70B6744F600FD9940 /* bn_mp_init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init.c; sourceTree = ""; }; + AA7C8AA80B6744F600FD9940 /* bn_mp_init_copy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_copy.c; sourceTree = ""; }; + AA7C8AA90B6744F600FD9940 /* bn_mp_init_multi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_multi.c; sourceTree = ""; }; + AA7C8AAA0B6744F600FD9940 /* bn_mp_init_set.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_set.c; sourceTree = ""; }; + AA7C8AAB0B6744F600FD9940 /* bn_mp_init_set_int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_set_int.c; sourceTree = ""; }; + AA7C8AAC0B6744F600FD9940 /* bn_mp_init_size.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_size.c; sourceTree = ""; }; + AA7C8AAD0B6744F600FD9940 /* bn_mp_invmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_invmod.c; sourceTree = ""; }; + AA7C8AAE0B6744F600FD9940 /* bn_mp_invmod_slow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_invmod_slow.c; sourceTree = ""; }; + AA7C8AAF0B6744F600FD9940 /* bn_mp_is_square.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_is_square.c; sourceTree = ""; }; + AA7C8AB00B6744F600FD9940 /* bn_mp_jacobi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_jacobi.c; sourceTree = ""; }; + AA7C8AB10B6744F600FD9940 /* bn_mp_karatsuba_mul.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_karatsuba_mul.c; sourceTree = ""; }; + AA7C8AB20B6744F600FD9940 /* bn_mp_karatsuba_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_karatsuba_sqr.c; sourceTree = ""; }; + AA7C8AB30B6744F600FD9940 /* bn_mp_lcm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_lcm.c; sourceTree = ""; }; + AA7C8AB40B6744F700FD9940 /* bn_mp_lshd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_lshd.c; sourceTree = ""; }; + AA7C8AB50B6744F700FD9940 /* bn_mp_mod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mod.c; sourceTree = ""; }; + AA7C8AB60B6744F700FD9940 /* bn_mp_mod_2d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mod_2d.c; sourceTree = ""; }; + AA7C8AB70B6744F700FD9940 /* bn_mp_mod_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mod_d.c; sourceTree = ""; }; + AA7C8AB80B6744F700FD9940 /* bn_mp_montgomery_calc_normalization.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_montgomery_calc_normalization.c; sourceTree = ""; }; + AA7C8AB90B6744F700FD9940 /* bn_mp_montgomery_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_montgomery_reduce.c; sourceTree = ""; }; + AA7C8ABA0B6744F700FD9940 /* bn_mp_montgomery_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_montgomery_setup.c; sourceTree = ""; }; + AA7C8ABB0B6744F700FD9940 /* bn_mp_mul.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mul.c; sourceTree = ""; }; + AA7C8ABC0B6744F700FD9940 /* bn_mp_mul_2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mul_2.c; sourceTree = ""; }; + AA7C8ABD0B6744F700FD9940 /* bn_mp_mul_2d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mul_2d.c; sourceTree = ""; }; + AA7C8ABE0B6744F700FD9940 /* bn_mp_mul_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mul_d.c; sourceTree = ""; }; + AA7C8ABF0B6744F700FD9940 /* bn_mp_mulmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mulmod.c; sourceTree = ""; }; + AA7C8AC00B6744F700FD9940 /* bn_mp_n_root.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_n_root.c; sourceTree = ""; }; + AA7C8AC10B6744F700FD9940 /* bn_mp_neg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_neg.c; sourceTree = ""; }; + AA7C8AC20B6744F700FD9940 /* bn_mp_or.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_or.c; sourceTree = ""; }; + AA7C8AC30B6744F700FD9940 /* bn_mp_prime_fermat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_fermat.c; sourceTree = ""; }; + AA7C8AC40B6744F700FD9940 /* bn_mp_prime_is_divisible.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_is_divisible.c; sourceTree = ""; }; + AA7C8AC50B6744F700FD9940 /* bn_mp_prime_is_prime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_is_prime.c; sourceTree = ""; }; + AA7C8AC60B6744F700FD9940 /* bn_mp_prime_miller_rabin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_miller_rabin.c; sourceTree = ""; }; + AA7C8AC70B6744F700FD9940 /* bn_mp_prime_next_prime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_next_prime.c; sourceTree = ""; }; + AA7C8AC80B6744F700FD9940 /* bn_mp_prime_rabin_miller_trials.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_rabin_miller_trials.c; sourceTree = ""; }; + AA7C8AC90B6744F700FD9940 /* bn_mp_prime_random_ex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_random_ex.c; sourceTree = ""; }; + AA7C8ACA0B6744F700FD9940 /* bn_mp_radix_size.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_radix_size.c; sourceTree = ""; }; + AA7C8ACB0B6744F700FD9940 /* bn_mp_radix_smap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_radix_smap.c; sourceTree = ""; }; + AA7C8ACC0B6744F700FD9940 /* bn_mp_rand.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_rand.c; sourceTree = ""; }; + AA7C8ACD0B6744F700FD9940 /* bn_mp_read_radix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_read_radix.c; sourceTree = ""; }; + AA7C8ACE0B6744F700FD9940 /* bn_mp_read_signed_bin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_read_signed_bin.c; sourceTree = ""; }; + AA7C8ACF0B6744F700FD9940 /* bn_mp_read_unsigned_bin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_read_unsigned_bin.c; sourceTree = ""; }; + AA7C8AD00B6744F700FD9940 /* bn_mp_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce.c; sourceTree = ""; }; + AA7C8AD10B6744F700FD9940 /* bn_mp_reduce_2k.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_2k.c; sourceTree = ""; }; + AA7C8AD20B6744F700FD9940 /* bn_mp_reduce_2k_l.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_2k_l.c; sourceTree = ""; }; + AA7C8AD30B6744F700FD9940 /* bn_mp_reduce_2k_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_2k_setup.c; sourceTree = ""; }; + AA7C8AD40B6744F700FD9940 /* bn_mp_reduce_2k_setup_l.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_2k_setup_l.c; sourceTree = ""; }; + AA7C8AD50B6744F700FD9940 /* bn_mp_reduce_is_2k.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_is_2k.c; sourceTree = ""; }; + AA7C8AD60B6744F700FD9940 /* bn_mp_reduce_is_2k_l.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_is_2k_l.c; sourceTree = ""; }; + AA7C8AD70B6744F700FD9940 /* bn_mp_reduce_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_setup.c; sourceTree = ""; }; + AA7C8AD80B6744F700FD9940 /* bn_mp_rshd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_rshd.c; sourceTree = ""; }; + AA7C8AD90B6744F700FD9940 /* bn_mp_set.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_set.c; sourceTree = ""; }; + AA7C8ADA0B6744F700FD9940 /* bn_mp_set_int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_set_int.c; sourceTree = ""; }; + AA7C8ADB0B6744F700FD9940 /* bn_mp_shrink.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_shrink.c; sourceTree = ""; }; + AA7C8ADC0B6744F700FD9940 /* bn_mp_signed_bin_size.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_signed_bin_size.c; sourceTree = ""; }; + AA7C8ADD0B6744F700FD9940 /* bn_mp_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sqr.c; sourceTree = ""; }; + AA7C8ADE0B6744F700FD9940 /* bn_mp_sqrmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sqrmod.c; sourceTree = ""; }; + AA7C8ADF0B6744F700FD9940 /* bn_mp_sqrt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sqrt.c; sourceTree = ""; }; + AA7C8AE00B6744F700FD9940 /* bn_mp_sub.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sub.c; sourceTree = ""; }; + AA7C8AE10B6744F700FD9940 /* bn_mp_sub_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sub_d.c; sourceTree = ""; }; + AA7C8AE20B6744F700FD9940 /* bn_mp_submod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_submod.c; sourceTree = ""; }; + AA7C8AE30B6744F700FD9940 /* bn_mp_to_signed_bin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_to_signed_bin.c; sourceTree = ""; }; + AA7C8AE40B6744F700FD9940 /* bn_mp_to_signed_bin_n.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_to_signed_bin_n.c; sourceTree = ""; }; + AA7C8AE50B6744F700FD9940 /* bn_mp_to_unsigned_bin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_to_unsigned_bin.c; sourceTree = ""; }; + AA7C8AE60B6744F700FD9940 /* bn_mp_to_unsigned_bin_n.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_to_unsigned_bin_n.c; sourceTree = ""; }; + AA7C8AE70B6744F700FD9940 /* bn_mp_toom_mul.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_toom_mul.c; sourceTree = ""; }; + AA7C8AE80B6744F700FD9940 /* bn_mp_toom_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_toom_sqr.c; sourceTree = ""; }; + AA7C8AE90B6744F700FD9940 /* bn_mp_toradix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_toradix.c; sourceTree = ""; }; + AA7C8AEA0B6744F700FD9940 /* bn_mp_toradix_n.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_toradix_n.c; sourceTree = ""; }; + AA7C8AEB0B6744F700FD9940 /* bn_mp_unsigned_bin_size.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_unsigned_bin_size.c; sourceTree = ""; }; + AA7C8AEC0B6744F700FD9940 /* bn_mp_xor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_xor.c; sourceTree = ""; }; + AA7C8AED0B6744F700FD9940 /* bn_mp_zero.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_zero.c; sourceTree = ""; }; + AA7C8AEE0B6744F700FD9940 /* bn_prime_tab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_prime_tab.c; sourceTree = ""; }; + AA7C8AEF0B6744F700FD9940 /* bn_reverse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_reverse.c; sourceTree = ""; }; + AA7C8AF00B6744F700FD9940 /* bn_s_mp_add.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_add.c; sourceTree = ""; }; + AA7C8AF10B6744F700FD9940 /* bn_s_mp_exptmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_exptmod.c; sourceTree = ""; }; + AA7C8AF20B6744F700FD9940 /* bn_s_mp_mul_digs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_mul_digs.c; sourceTree = ""; }; + AA7C8AF30B6744F700FD9940 /* bn_s_mp_mul_high_digs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_mul_high_digs.c; sourceTree = ""; }; + AA7C8AF40B6744F700FD9940 /* bn_s_mp_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_sqr.c; sourceTree = ""; }; + AA7C8AF50B6744F700FD9940 /* bn_s_mp_sub.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_sub.c; sourceTree = ""; }; + AA7C8AF60B6744F700FD9940 /* bncore.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bncore.c; sourceTree = ""; }; + AA7C8AF90B6744F700FD9940 /* tommath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath.h; sourceTree = ""; }; + AA7C8AFA0B6744F700FD9940 /* tommath_class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath_class.h; sourceTree = ""; }; + AA7C8AFB0B6744F700FD9940 /* tommath_superclass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath_superclass.h; sourceTree = ""; }; + AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libtomcrypt.a; sourceTree = BUILT_PRODUCTS_DIR; }; + AA7C8B950B67467C00FD9940 /* aes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = aes.c; sourceTree = ""; }; + AA7C8B960B67467C00FD9940 /* aes_tab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = aes_tab.c; sourceTree = ""; }; + AA7C8B990B67467C00FD9940 /* hash_memory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hash_memory.c; sourceTree = ""; }; + AA7C8B9A0B67467C00FD9940 /* md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = md5.c; sourceTree = ""; }; + AA7C8B9B0B67467C00FD9940 /* sha1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sha1.c; sourceTree = ""; }; + AA7C8B9D0B67467C00FD9940 /* tomcrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt.h; sourceTree = ""; }; + AA7C8B9E0B67467C00FD9940 /* tomcrypt_argchk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_argchk.h; sourceTree = ""; }; + AA7C8B9F0B67467C00FD9940 /* tomcrypt_cfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_cfg.h; sourceTree = ""; }; + AA7C8BA00B67467C00FD9940 /* tomcrypt_cipher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_cipher.h; sourceTree = ""; }; + AA7C8BA10B67467C00FD9940 /* tomcrypt_custom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_custom.h; sourceTree = ""; }; + AA7C8BA20B67467C00FD9940 /* tomcrypt_hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_hash.h; sourceTree = ""; }; + AA7C8BA30B67467C00FD9940 /* tomcrypt_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_mac.h; sourceTree = ""; }; + AA7C8BA40B67467C00FD9940 /* tomcrypt_macros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_macros.h; sourceTree = ""; }; + AA7C8BA50B67467C00FD9940 /* tomcrypt_math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_math.h; sourceTree = ""; }; + AA7C8BA60B67467C00FD9940 /* tomcrypt_misc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_misc.h; sourceTree = ""; }; + AA7C8BA70B67467C00FD9940 /* tomcrypt_pk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_pk.h; sourceTree = ""; }; + AA7C8BA80B67467C00FD9940 /* tomcrypt_pkcs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_pkcs.h; sourceTree = ""; }; + AA7C8BA90B67467C00FD9940 /* tomcrypt_prng.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_prng.h; sourceTree = ""; }; + AA7C8BAC0B67467C00FD9940 /* ltc_ecc_fp_mulmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ltc_ecc_fp_mulmod.c; sourceTree = ""; }; + AA7C8BAD0B67467C00FD9940 /* ltm_desc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ltm_desc.c; sourceTree = ""; }; + AA7C8BAE0B67467C00FD9940 /* multi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = multi.c; sourceTree = ""; }; + AA7C8BAF0B67467C00FD9940 /* rand_prime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rand_prime.c; sourceTree = ""; }; + AA7C8BB20B67467C00FD9940 /* base64_decode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = base64_decode.c; sourceTree = ""; }; + AA7C8BB30B67467C00FD9940 /* base64_encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = base64_encode.c; sourceTree = ""; }; + AA7C8BB40B67467C00FD9940 /* burn_stack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = burn_stack.c; sourceTree = ""; }; + AA7C8BB60B67467C00FD9940 /* crypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt.c; sourceTree = ""; }; + AA7C8BB70B67467C00FD9940 /* crypt_argchk.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_argchk.c; sourceTree = ""; }; + AA7C8BB80B67467C00FD9940 /* crypt_cipher_descriptor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_cipher_descriptor.c; sourceTree = ""; }; + AA7C8BB90B67467C00FD9940 /* crypt_cipher_is_valid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_cipher_is_valid.c; sourceTree = ""; }; + AA7C8BBA0B67467C00FD9940 /* crypt_find_cipher.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_find_cipher.c; sourceTree = ""; }; + AA7C8BBB0B67467C00FD9940 /* crypt_find_cipher_any.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_find_cipher_any.c; sourceTree = ""; }; + AA7C8BBC0B67467C00FD9940 /* crypt_find_cipher_id.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_find_cipher_id.c; sourceTree = ""; }; + AA7C8BBD0B67467C00FD9940 /* crypt_find_hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_find_hash.c; sourceTree = ""; }; + AA7C8BBE0B67467C00FD9940 /* crypt_find_hash_any.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_find_hash_any.c; sourceTree = ""; }; + AA7C8BBF0B67467C00FD9940 /* crypt_find_hash_id.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_find_hash_id.c; sourceTree = ""; }; + AA7C8BC00B67467C00FD9940 /* crypt_find_hash_oid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_find_hash_oid.c; sourceTree = ""; }; + AA7C8BC10B67467C00FD9940 /* crypt_find_prng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_find_prng.c; sourceTree = ""; }; + AA7C8BC20B67467C00FD9940 /* crypt_fsa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_fsa.c; sourceTree = ""; }; + AA7C8BC30B67467C00FD9940 /* crypt_hash_descriptor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_hash_descriptor.c; sourceTree = ""; }; + AA7C8BC40B67467C00FD9940 /* crypt_hash_is_valid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_hash_is_valid.c; sourceTree = ""; }; + AA7C8BC50B67467C00FD9940 /* crypt_ltc_mp_descriptor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_ltc_mp_descriptor.c; sourceTree = ""; }; + AA7C8BC60B67467C00FD9940 /* crypt_prng_descriptor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_prng_descriptor.c; sourceTree = ""; }; + AA7C8BC70B67467C00FD9940 /* crypt_prng_is_valid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_prng_is_valid.c; sourceTree = ""; }; + AA7C8BC80B67467C00FD9940 /* crypt_register_cipher.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_register_cipher.c; sourceTree = ""; }; + AA7C8BC90B67467C00FD9940 /* crypt_register_hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_register_hash.c; sourceTree = ""; }; + AA7C8BCA0B67467C00FD9940 /* crypt_register_prng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_register_prng.c; sourceTree = ""; }; + AA7C8BCB0B67467C00FD9940 /* crypt_unregister_cipher.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_unregister_cipher.c; sourceTree = ""; }; + AA7C8BCC0B67467C00FD9940 /* crypt_unregister_hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_unregister_hash.c; sourceTree = ""; }; + AA7C8BCD0B67467C00FD9940 /* crypt_unregister_prng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_unregister_prng.c; sourceTree = ""; }; + AA7C8BCE0B67467C00FD9940 /* error_to_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = error_to_string.c; sourceTree = ""; }; + AA7C8BD00B67467C00FD9940 /* pkcs_5_1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_5_1.c; sourceTree = ""; }; + AA7C8BD10B67467C00FD9940 /* pkcs_5_2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_5_2.c; sourceTree = ""; }; + AA7C8BD20B67467C00FD9940 /* zeromem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zeromem.c; sourceTree = ""; }; + AA7C8BD50B67467C00FD9940 /* cbc_decrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cbc_decrypt.c; sourceTree = ""; }; + AA7C8BD60B67467C00FD9940 /* cbc_done.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cbc_done.c; sourceTree = ""; }; + AA7C8BD70B67467C00FD9940 /* cbc_encrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cbc_encrypt.c; sourceTree = ""; }; + AA7C8BD80B67467C00FD9940 /* cbc_getiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cbc_getiv.c; sourceTree = ""; }; + AA7C8BD90B67467C00FD9940 /* cbc_setiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cbc_setiv.c; sourceTree = ""; }; + AA7C8BDA0B67467C00FD9940 /* cbc_start.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cbc_start.c; sourceTree = ""; }; + AA7C8BDC0B67467C00FD9940 /* cfb_decrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cfb_decrypt.c; sourceTree = ""; }; + AA7C8BDD0B67467C00FD9940 /* cfb_done.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cfb_done.c; sourceTree = ""; }; + AA7C8BDE0B67467C00FD9940 /* cfb_encrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cfb_encrypt.c; sourceTree = ""; }; + AA7C8BDF0B67467C00FD9940 /* cfb_getiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cfb_getiv.c; sourceTree = ""; }; + AA7C8BE00B67467C00FD9940 /* cfb_setiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cfb_setiv.c; sourceTree = ""; }; + AA7C8BE10B67467C00FD9940 /* cfb_start.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cfb_start.c; sourceTree = ""; }; + AA7C8BE30B67467C00FD9940 /* ctr_decrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ctr_decrypt.c; sourceTree = ""; }; + AA7C8BE40B67467C00FD9940 /* ctr_done.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ctr_done.c; sourceTree = ""; }; + AA7C8BE50B67467C00FD9940 /* ctr_encrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ctr_encrypt.c; sourceTree = ""; }; + AA7C8BE60B67467C00FD9940 /* ctr_getiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ctr_getiv.c; sourceTree = ""; }; + AA7C8BE70B67467C00FD9940 /* ctr_setiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ctr_setiv.c; sourceTree = ""; }; + AA7C8BE80B67467C00FD9940 /* ctr_start.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ctr_start.c; sourceTree = ""; }; + AA7C8BE90B67467C00FD9940 /* ctr_test.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ctr_test.c; sourceTree = ""; }; + AA7C8BEB0B67467C00FD9940 /* ecb_decrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ecb_decrypt.c; sourceTree = ""; }; + AA7C8BEC0B67467C00FD9940 /* ecb_done.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ecb_done.c; sourceTree = ""; }; + AA7C8BED0B67467C00FD9940 /* ecb_encrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ecb_encrypt.c; sourceTree = ""; }; + AA7C8BEE0B67467C00FD9940 /* ecb_start.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ecb_start.c; sourceTree = ""; }; + AA7C8BF00B67467C00FD9940 /* ofb_decrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ofb_decrypt.c; sourceTree = ""; }; + AA7C8BF10B67467C00FD9940 /* ofb_done.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ofb_done.c; sourceTree = ""; }; + AA7C8BF20B67467C00FD9940 /* ofb_encrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ofb_encrypt.c; sourceTree = ""; }; + AA7C8BF30B67467C00FD9940 /* ofb_getiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ofb_getiv.c; sourceTree = ""; }; + AA7C8BF40B67467C00FD9940 /* ofb_setiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ofb_setiv.c; sourceTree = ""; }; + AA7C8BF50B67467C00FD9940 /* ofb_start.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ofb_start.c; sourceTree = ""; }; + AA7C8BFA0B67467C00FD9940 /* der_decode_bit_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_bit_string.c; sourceTree = ""; }; + AA7C8BFB0B67467C00FD9940 /* der_encode_bit_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_bit_string.c; sourceTree = ""; }; + AA7C8BFC0B67467C00FD9940 /* der_length_bit_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_bit_string.c; sourceTree = ""; }; + AA7C8BFE0B67467C00FD9940 /* der_decode_boolean.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_boolean.c; sourceTree = ""; }; + AA7C8BFF0B67467C00FD9940 /* der_encode_boolean.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_boolean.c; sourceTree = ""; }; + AA7C8C000B67467C00FD9940 /* der_length_boolean.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_boolean.c; sourceTree = ""; }; + AA7C8C020B67467C00FD9940 /* der_decode_choice.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_choice.c; sourceTree = ""; }; + AA7C8C040B67467C00FD9940 /* der_decode_ia5_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_ia5_string.c; sourceTree = ""; }; + AA7C8C050B67467D00FD9940 /* der_encode_ia5_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_ia5_string.c; sourceTree = ""; }; + AA7C8C060B67467D00FD9940 /* der_length_ia5_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_ia5_string.c; sourceTree = ""; }; + AA7C8C080B67467D00FD9940 /* der_decode_integer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_integer.c; sourceTree = ""; }; + AA7C8C090B67467D00FD9940 /* der_encode_integer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_integer.c; sourceTree = ""; }; + AA7C8C0A0B67467D00FD9940 /* der_length_integer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_integer.c; sourceTree = ""; }; + AA7C8C0C0B67467D00FD9940 /* der_decode_object_identifier.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_object_identifier.c; sourceTree = ""; }; + AA7C8C0D0B67467D00FD9940 /* der_encode_object_identifier.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_object_identifier.c; sourceTree = ""; }; + AA7C8C0E0B67467D00FD9940 /* der_length_object_identifier.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_object_identifier.c; sourceTree = ""; }; + AA7C8C100B67467D00FD9940 /* der_decode_octet_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_octet_string.c; sourceTree = ""; }; + AA7C8C110B67467D00FD9940 /* der_encode_octet_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_octet_string.c; sourceTree = ""; }; + AA7C8C120B67467D00FD9940 /* der_length_octet_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_octet_string.c; sourceTree = ""; }; + AA7C8C140B67467D00FD9940 /* der_decode_printable_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_printable_string.c; sourceTree = ""; }; + AA7C8C150B67467D00FD9940 /* der_encode_printable_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_printable_string.c; sourceTree = ""; }; + AA7C8C160B67467D00FD9940 /* der_length_printable_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_printable_string.c; sourceTree = ""; }; + AA7C8C180B67467D00FD9940 /* der_decode_sequence_ex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_sequence_ex.c; sourceTree = ""; }; + AA7C8C190B67467D00FD9940 /* der_decode_sequence_flexi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_sequence_flexi.c; sourceTree = ""; }; + AA7C8C1A0B67467D00FD9940 /* der_decode_sequence_multi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_sequence_multi.c; sourceTree = ""; }; + AA7C8C1B0B67467D00FD9940 /* der_encode_sequence_ex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_sequence_ex.c; sourceTree = ""; }; + AA7C8C1C0B67467D00FD9940 /* der_encode_sequence_multi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_sequence_multi.c; sourceTree = ""; }; + AA7C8C1D0B67467D00FD9940 /* der_length_sequence.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_sequence.c; sourceTree = ""; }; + AA7C8C1E0B67467D00FD9940 /* der_sequence_free.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_sequence_free.c; sourceTree = ""; }; + AA7C8C200B67467D00FD9940 /* der_encode_set.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_set.c; sourceTree = ""; }; + AA7C8C210B67467D00FD9940 /* der_encode_setof.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_setof.c; sourceTree = ""; }; + AA7C8C230B67467D00FD9940 /* der_decode_short_integer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_short_integer.c; sourceTree = ""; }; + AA7C8C240B67467D00FD9940 /* der_encode_short_integer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_short_integer.c; sourceTree = ""; }; + AA7C8C250B67467D00FD9940 /* der_length_short_integer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_short_integer.c; sourceTree = ""; }; + AA7C8C270B67467D00FD9940 /* der_decode_utctime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_utctime.c; sourceTree = ""; }; + AA7C8C280B67467D00FD9940 /* der_encode_utctime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_utctime.c; sourceTree = ""; }; + AA7C8C290B67467D00FD9940 /* der_length_utctime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_utctime.c; sourceTree = ""; }; + AA7C8C2B0B67467D00FD9940 /* der_decode_utf8_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_utf8_string.c; sourceTree = ""; }; + AA7C8C2C0B67467D00FD9940 /* der_encode_utf8_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_utf8_string.c; sourceTree = ""; }; + AA7C8C2D0B67467D00FD9940 /* der_length_utf8_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_utf8_string.c; sourceTree = ""; }; + AA7C8C2F0B67467D00FD9940 /* dsa_decrypt_key.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_decrypt_key.c; sourceTree = ""; }; + AA7C8C300B67467D00FD9940 /* dsa_encrypt_key.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_encrypt_key.c; sourceTree = ""; }; + AA7C8C310B67467D00FD9940 /* dsa_export.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_export.c; sourceTree = ""; }; + AA7C8C320B67467D00FD9940 /* dsa_free.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_free.c; sourceTree = ""; }; + AA7C8C330B67467D00FD9940 /* dsa_import.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_import.c; sourceTree = ""; }; + AA7C8C340B67467D00FD9940 /* dsa_make_key.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_make_key.c; sourceTree = ""; }; + AA7C8C350B67467D00FD9940 /* dsa_shared_secret.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_shared_secret.c; sourceTree = ""; }; + AA7C8C360B67467D00FD9940 /* dsa_sign_hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_sign_hash.c; sourceTree = ""; }; + AA7C8C370B67467D00FD9940 /* dsa_verify_hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_verify_hash.c; sourceTree = ""; }; + AA7C8C380B67467D00FD9940 /* dsa_verify_key.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_verify_key.c; sourceTree = ""; }; + AA7C8C3A0B67467D00FD9940 /* pkcs_1_i2osp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_i2osp.c; sourceTree = ""; }; + AA7C8C3B0B67467D00FD9940 /* pkcs_1_mgf1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_mgf1.c; sourceTree = ""; }; + AA7C8C3C0B67467D00FD9940 /* pkcs_1_oaep_decode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_oaep_decode.c; sourceTree = ""; }; + AA7C8C3D0B67467D00FD9940 /* pkcs_1_oaep_encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_oaep_encode.c; sourceTree = ""; }; + AA7C8C3E0B67467D00FD9940 /* pkcs_1_os2ip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_os2ip.c; sourceTree = ""; }; + AA7C8C3F0B67467D00FD9940 /* pkcs_1_pss_decode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_pss_decode.c; sourceTree = ""; }; + AA7C8C400B67467D00FD9940 /* pkcs_1_pss_encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_pss_encode.c; sourceTree = ""; }; + AA7C8C410B67467D00FD9940 /* pkcs_1_v1_5_decode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_v1_5_decode.c; sourceTree = ""; }; + AA7C8C420B67467D00FD9940 /* pkcs_1_v1_5_encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_v1_5_encode.c; sourceTree = ""; }; + AA7C8C440B67467D00FD9940 /* rsa_decrypt_key.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_decrypt_key.c; sourceTree = ""; }; + AA7C8C450B67467D00FD9940 /* rsa_encrypt_key.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_encrypt_key.c; sourceTree = ""; }; + AA7C8C460B67467D00FD9940 /* rsa_export.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_export.c; sourceTree = ""; }; + AA7C8C470B67467D00FD9940 /* rsa_exptmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_exptmod.c; sourceTree = ""; }; + AA7C8C480B67467D00FD9940 /* rsa_free.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_free.c; sourceTree = ""; }; + AA7C8C490B67467D00FD9940 /* rsa_import.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_import.c; sourceTree = ""; }; + AA7C8C4A0B67467D00FD9940 /* rsa_make_key.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_make_key.c; sourceTree = ""; }; + AA7C8C4B0B67467D00FD9940 /* rsa_sign_hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_sign_hash.c; sourceTree = ""; }; + AA7C8C4C0B67467D00FD9940 /* rsa_verify_hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_verify_hash.c; sourceTree = ""; }; + AA7C8C4E0B67467D00FD9940 /* fortuna.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fortuna.c; sourceTree = ""; }; + AA7C8C4F0B67467D00FD9940 /* rc4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rc4.c; sourceTree = ""; }; + AA7C8C500B67467D00FD9940 /* rng_get_bytes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rng_get_bytes.c; sourceTree = ""; }; + AA7C8C510B67467D00FD9940 /* rng_make_prng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rng_make_prng.c; sourceTree = ""; }; + AA7C8C520B67467D00FD9940 /* sober128.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sober128.c; sourceTree = ""; }; + AA7C8C530B67467D00FD9940 /* sober128tab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sober128tab.c; sourceTree = ""; }; + AA7C8C540B67467D00FD9940 /* sprng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sprng.c; sourceTree = ""; }; + AA7C8C550B67467D00FD9940 /* yarrow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = yarrow.c; sourceTree = ""; }; + AA7C8DAC0B68CB2200FD9940 /* GameplayAssist.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GameplayAssist.cpp; path = ../src/GameplayAssist.cpp; sourceTree = ""; }; + AA7C8DAD0B68CB2200FD9940 /* GameplayAssist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GameplayAssist.h; path = ../src/GameplayAssist.h; sourceTree = ""; }; + AA7CDD930D8395F90001DAFC /* Song.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Song.h; path = ../src/Song.h; sourceTree = SOURCE_ROOT; }; + AA7DA2EF085760E90057F1EA /* BackgroundUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = BackgroundUtil.cpp; path = ../src/BackgroundUtil.cpp; sourceTree = ""; }; + AA7DA2F0085760E90057F1EA /* BackgroundUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = BackgroundUtil.h; path = ../src/BackgroundUtil.h; sourceTree = ""; }; + AA80C75207F20D0D00C99272 /* UnlockManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = UnlockManager.cpp; path = ../src/UnlockManager.cpp; sourceTree = ""; }; + AA80C75307F20D0D00C99272 /* UnlockManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = UnlockManager.h; path = ../src/UnlockManager.h; sourceTree = ""; }; + AA80C75707F20D6600C99272 /* OptionRowHandler.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = OptionRowHandler.cpp; path = ../src/OptionRowHandler.cpp; sourceTree = ""; }; + AA80C75807F20D6600C99272 /* OptionRowHandler.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = OptionRowHandler.h; path = ../src/OptionRowHandler.h; sourceTree = ""; }; + AA80C75B07F20D7F00C99272 /* ScreenMessage.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenMessage.cpp; path = ../src/ScreenMessage.cpp; sourceTree = ""; }; + AA84B7050996F8370085EECB /* AdjustSync.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = AdjustSync.cpp; path = ../src/AdjustSync.cpp; sourceTree = ""; }; + AA84B7060996F8370085EECB /* AdjustSync.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AdjustSync.h; path = ../src/AdjustSync.h; sourceTree = ""; }; + AA8A3E6306EDCD11002F25AB /* DarwinThreadHelpers.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = DarwinThreadHelpers.cpp; sourceTree = ""; }; + AA8A3EC806EDDAE4002F25AB /* DarwinThreadHelpers.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = DarwinThreadHelpers.h; sourceTree = ""; }; + AA8A404F06EEFF72002F25AB /* RageUtil_BackgroundLoader.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageUtil_BackgroundLoader.cpp; path = ../src/RageUtil_BackgroundLoader.cpp; sourceTree = ""; }; + AA8A405006EEFF72002F25AB /* RageUtil_BackgroundLoader.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageUtil_BackgroundLoader.h; path = ../src/RageUtil_BackgroundLoader.h; sourceTree = ""; }; + AA8B6C7904AFD87300D02EE9 /* chartables.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; path = chartables.c; sourceTree = ""; }; + AA8B6C7A04AFD87300D02EE9 /* get.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; path = get.c; sourceTree = ""; }; + AA8B6C7B04AFD87300D02EE9 /* internal.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = internal.h; sourceTree = ""; }; + AA8B6C7C04AFD87300D02EE9 /* maketables.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; path = maketables.c; sourceTree = ""; }; + AA8B6C7D04AFD87300D02EE9 /* pcre.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; path = pcre.c; sourceTree = ""; }; + AA8B6C7E04AFD87300D02EE9 /* pcre.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = pcre.h; sourceTree = ""; }; + AA8B6C7F04AFD87300D02EE9 /* study.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; path = study.c; sourceTree = ""; }; + AA8B8C49091F48C000D14C5F /* product.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = product.xcconfig; sourceTree = SOURCE_ROOT; }; + AA8BD2A107C9391B00EA04E1 /* LuaReference.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LuaReference.cpp; path = ../src/LuaReference.cpp; sourceTree = ""; }; + AA8BD2A207C9391B00EA04E1 /* LuaReference.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LuaReference.h; path = ../src/LuaReference.h; sourceTree = ""; }; + AA8BD2A307C9391B00EA04E1 /* MessageManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MessageManager.cpp; path = ../src/MessageManager.cpp; sourceTree = ""; }; + AA8BD2A407C9391B00EA04E1 /* MessageManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MessageManager.h; path = ../src/MessageManager.h; sourceTree = ""; }; + AA8BD2A507C9391B00EA04E1 /* StatsManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = StatsManager.cpp; path = ../src/StatsManager.cpp; sourceTree = ""; }; + AA8BD2A607C9391B00EA04E1 /* StatsManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = StatsManager.h; path = ../src/StatsManager.h; sourceTree = ""; }; + AA8BD2A707C9391B00EA04E1 /* SubscriptionManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = SubscriptionManager.h; path = ../src/SubscriptionManager.h; sourceTree = ""; }; + AA8BD2AF07C9395400EA04E1 /* AutoActor.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = AutoActor.cpp; path = ../src/AutoActor.cpp; sourceTree = ""; }; + AA8BD2B007C9395400EA04E1 /* AutoActor.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = AutoActor.h; path = ../src/AutoActor.h; sourceTree = ""; }; + AA8BD2B407C939A200EA04E1 /* OptionRow.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = OptionRow.cpp; path = ../src/OptionRow.cpp; sourceTree = ""; }; + AA8BD2B507C939A200EA04E1 /* OptionRow.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = OptionRow.h; path = ../src/OptionRow.h; sourceTree = ""; }; + AA8BD2B807C939F800EA04E1 /* PlayerStageStats.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = PlayerStageStats.cpp; path = ../src/PlayerStageStats.cpp; sourceTree = ""; }; + AA8BD2B907C939F800EA04E1 /* PlayerStageStats.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = PlayerStageStats.h; path = ../src/PlayerStageStats.h; sourceTree = ""; }; + AA8BD2BA07C939F800EA04E1 /* PlayerState.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = PlayerState.cpp; path = ../src/PlayerState.cpp; sourceTree = ""; }; + AA8BD2BB07C939F800EA04E1 /* RollingNumbers.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RollingNumbers.cpp; path = ../src/RollingNumbers.cpp; sourceTree = ""; }; + AA8BD2BC07C939F800EA04E1 /* RollingNumbers.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RollingNumbers.h; path = ../src/RollingNumbers.h; sourceTree = ""; }; + AA8BD2BD07C939F800EA04E1 /* ScoreDisplayCalories.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplayCalories.cpp; path = ../src/ScoreDisplayCalories.cpp; sourceTree = ""; }; + AA8BD2BE07C939F800EA04E1 /* ScoreDisplayCalories.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplayCalories.h; path = ../src/ScoreDisplayCalories.h; sourceTree = ""; }; + AA8BD2C607C93A1E00EA04E1 /* CommonMetrics.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CommonMetrics.cpp; path = ../src/CommonMetrics.cpp; sourceTree = ""; }; + AA8CF5150A4518BE0005F1B4 /* RageSoundDriver_AU.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RageSoundDriver_AU.h; sourceTree = ""; }; + AA8CF5160A4518BE0005F1B4 /* RageSoundDriver_AU.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RageSoundDriver_AU.cpp; sourceTree = ""; }; + AA8DD84904A2E51400D02EE9 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; + AA8EE0750866E266002C51A7 /* LuaBinding.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LuaBinding.cpp; path = ../src/LuaBinding.cpp; sourceTree = ""; }; + AA8F136F0624BAB200C6A467 /* EnumHelper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = EnumHelper.h; path = ../src/EnumHelper.h; sourceTree = ""; }; + AA90919F067ED43000C1FCFF /* RageSurface_Load_BMP.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Load_BMP.cpp; path = ../src/RageSurface_Load_BMP.cpp; sourceTree = ""; }; + AA9091A0067ED43000C1FCFF /* RageSurface_Load_BMP.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Load_BMP.h; path = ../src/RageSurface_Load_BMP.h; sourceTree = ""; }; + AA9091A3067ED46400C1FCFF /* RageSurface_Save_BMP.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Save_BMP.cpp; path = ../src/RageSurface_Save_BMP.cpp; sourceTree = ""; }; + AA9091A4067ED46400C1FCFF /* RageSurface_Save_BMP.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Save_BMP.h; path = ../src/RageSurface_Save_BMP.h; sourceTree = ""; }; + AA909E1D0B45B676002852D3 /* RageDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RageDriver.cpp; sourceTree = ""; }; + AA909E1E0B45B676002852D3 /* RageDriver.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RageDriver.h; sourceTree = ""; }; + AA909E230B45B696002852D3 /* LowLevelWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = LowLevelWindow.cpp; sourceTree = ""; }; + AA909E260B45B6AB002852D3 /* LoadingWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = LoadingWindow.cpp; sourceTree = ""; }; + AA909E390B45B8FA002852D3 /* RageSoundReader_Extend.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader_Extend.cpp; path = ../src/RageSoundReader_Extend.cpp; sourceTree = ""; }; + AA909E3A0B45B8FA002852D3 /* RageSoundReader_Extend.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_Extend.h; path = ../src/RageSoundReader_Extend.h; sourceTree = ""; }; + AA909E3B0B45B8FA002852D3 /* RageSoundReader_ThreadedBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader_ThreadedBuffer.cpp; path = ../src/RageSoundReader_ThreadedBuffer.cpp; sourceTree = ""; }; + AA909E3C0B45B8FA002852D3 /* RageSoundReader_ThreadedBuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_ThreadedBuffer.h; path = ../src/RageSoundReader_ThreadedBuffer.h; sourceTree = ""; }; + AA909E480B45B93E002852D3 /* LightsDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = LightsDriver.cpp; sourceTree = ""; }; + AA915879067D2C2C00078E36 /* RageSurface.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface.cpp; path = ../src/RageSurface.cpp; sourceTree = ""; }; + AA91587A067D2C2C00078E36 /* RageSurface.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface.h; path = ../src/RageSurface.h; sourceTree = ""; }; + AA91ACAF0878BB2C00FB2F8F /* RageTexturePreloader.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageTexturePreloader.cpp; path = ../src/RageTexturePreloader.cpp; sourceTree = ""; }; + AA91ACB00878BB2C00FB2F8F /* RageTexturePreloader.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageTexturePreloader.h; path = ../src/RageTexturePreloader.h; sourceTree = ""; }; + AA9A78A906B5C72200B03E97 /* Game.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Game.cpp; path = ../src/Game.cpp; sourceTree = ""; }; + AA9A78AA06B5C72200B03E97 /* Game.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Game.h; path = ../src/Game.h; sourceTree = ""; }; + AA9D236C0561B6CE00FC7F14 /* CombinedLifeMeter.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CombinedLifeMeter.h; path = ../src/CombinedLifeMeter.h; sourceTree = ""; }; + AA9EC2F0055F5126007E5098 /* RageTextureID.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageTextureID.cpp; path = ../src/RageTextureID.cpp; sourceTree = ""; }; + AA9EC2F1055F5126007E5098 /* RageTextureID.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageTextureID.h; path = ../src/RageTextureID.h; sourceTree = ""; }; + AAA0704D0CE5082D005A3060 /* libffmpeg_link.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffmpeg_link.a; sourceTree = ""; }; + AAA070A90CE7B0DF005A3060 /* libmad.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libmad.a; sourceTree = BUILT_PRODUCTS_DIR; }; + AAA070B40CE7B3AD005A3060 /* bit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bit.c; sourceTree = ""; }; + AAA070B50CE7B3AD005A3060 /* bit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bit.h; sourceTree = ""; }; + AAA070C00CE7B3AD005A3060 /* decoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = decoder.c; sourceTree = ""; }; + AAA070C10CE7B3AD005A3060 /* decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoder.h; sourceTree = ""; }; + AAA070C30CE7B3AD005A3060 /* fixed.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fixed.c; sourceTree = ""; }; + AAA070C40CE7B3AD005A3060 /* fixed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fixed.h; sourceTree = ""; }; + AAA070C50CE7B3AD005A3060 /* frame.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = frame.c; sourceTree = ""; }; + AAA070C60CE7B3AD005A3060 /* frame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = frame.h; sourceTree = ""; }; + AAA070C70CE7B3AD005A3060 /* global.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = global.h; sourceTree = ""; }; + AAA070C80CE7B3AD005A3060 /* huffman.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = huffman.c; sourceTree = ""; }; + AAA070C90CE7B3AD005A3060 /* huffman.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = huffman.h; sourceTree = ""; }; + AAA070CE0CE7B3AD005A3060 /* layer12.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = layer12.c; sourceTree = ""; }; + AAA070CF0CE7B3AD005A3060 /* layer12.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = layer12.h; sourceTree = ""; }; + AAA070D00CE7B3AD005A3060 /* layer3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = layer3.c; sourceTree = ""; }; + AAA070D10CE7B3AD005A3060 /* layer3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = layer3.h; sourceTree = ""; }; + AAA070D40CE7B3AD005A3060 /* mad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mad.h; sourceTree = ""; }; + AAA070E80CE7B3AD005A3060 /* stream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stream.c; sourceTree = ""; }; + AAA070E90CE7B3AD005A3060 /* stream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stream.h; sourceTree = ""; }; + AAA070EA0CE7B3AD005A3060 /* synth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = synth.c; sourceTree = ""; }; + AAA070EB0CE7B3AD005A3060 /* synth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = synth.h; sourceTree = ""; }; + AAA070EC0CE7B3AD005A3060 /* timer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = timer.c; sourceTree = ""; }; + AAA070ED0CE7B3AD005A3060 /* timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timer.h; sourceTree = ""; }; + AAA070F00CE7B3AE005A3060 /* version.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = version.c; sourceTree = ""; }; + AAA070F10CE7B3AE005A3060 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; + AAA0F7CE047AC7BF005F316C /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; + AAA0F7D0047AC7EA005F316C /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + AAA0F7D2047ACBC9005F316C /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; }; + AAA372D00909934500141131 /* MovieTexture_Generic.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MovieTexture_Generic.cpp; path = MovieTexture/MovieTexture_Generic.cpp; sourceTree = ""; }; + AAA372D10909934500141131 /* MovieTexture_Generic.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MovieTexture_Generic.h; path = MovieTexture/MovieTexture_Generic.h; sourceTree = ""; }; + AAA372D20909934500141131 /* MovieTexture_Theora.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MovieTexture_Theora.cpp; path = MovieTexture/MovieTexture_Theora.cpp; sourceTree = ""; }; + AAA372D30909934500141131 /* MovieTexture_Theora.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MovieTexture_Theora.h; path = MovieTexture/MovieTexture_Theora.h; sourceTree = ""; }; + AAA6BFEA0644AB3700AFBBC8 /* ScreenWithMenuElements.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenWithMenuElements.cpp; path = ../src/ScreenWithMenuElements.cpp; sourceTree = ""; }; + AAA6BFEB0644AB3700AFBBC8 /* ScreenWithMenuElements.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenWithMenuElements.h; path = ../src/ScreenWithMenuElements.h; sourceTree = ""; }; + AAA71EA005EE154E00D2E8FF /* global.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = global.cpp; sourceTree = ""; }; + AAA7D4C70C7E872500FB8F78 /* ScreenOptionsToggleSongs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenOptionsToggleSongs.cpp; path = ../src/ScreenOptionsToggleSongs.cpp; sourceTree = ""; }; + AAA7D4C80C7E872500FB8F78 /* ScreenOptionsToggleSongs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenOptionsToggleSongs.h; path = ../src/ScreenOptionsToggleSongs.h; sourceTree = ""; }; + AAA8E0020696984300FCE1F9 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; + AAA983CA04B9060A00D02EE9 /* ActorUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ActorUtil.cpp; path = ../src/ActorUtil.cpp; sourceTree = ""; }; + AAAA11C40A662F9C00B2BD88 /* ScoreKeeperShared.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScoreKeeperShared.h; path = ../src/ScoreKeeperShared.h; sourceTree = ""; }; + AAAA11C50A662F9C00B2BD88 /* ScoreKeeperShared.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScoreKeeperShared.cpp; path = ../src/ScoreKeeperShared.cpp; sourceTree = ""; }; + AAAB2CDD072BD2EC00CD9FC9 /* AutoKeysounds.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = AutoKeysounds.cpp; path = ../src/AutoKeysounds.cpp; sourceTree = ""; }; + AAAB2CDE072BD2EC00CD9FC9 /* AutoKeysounds.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = AutoKeysounds.h; path = ../src/AutoKeysounds.h; sourceTree = ""; }; + AAAB2CE1072BD2FA00CD9FC9 /* RageSoundMixBuffer.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundMixBuffer.cpp; path = ../src/RageSoundMixBuffer.cpp; sourceTree = ""; }; + AAAB2CE2072BD2FA00CD9FC9 /* RageSoundMixBuffer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundMixBuffer.h; path = ../src/RageSoundMixBuffer.h; sourceTree = ""; }; + AAADA4AE04E5F3DE00D02EE9 /* ProductInfo.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = ProductInfo.h; sourceTree = ""; }; + AAAE28F4052254A900D02EE9 /* RageSoundReader_Resample_Good.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundReader_Resample_Good.cpp; path = ../src/RageSoundReader_Resample_Good.cpp; sourceTree = ""; }; + AAAE28F5052254A900D02EE9 /* RageSoundReader_Resample_Good.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_Resample_Good.h; path = ../src/RageSoundReader_Resample_Good.h; sourceTree = ""; }; + AAAFE81C0835E7FF00FC43E0 /* WheelBase.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = WheelBase.cpp; path = ../src/WheelBase.cpp; sourceTree = ""; }; + AAAFE81D0835E7FF00FC43E0 /* WheelBase.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = WheelBase.h; path = ../src/WheelBase.h; sourceTree = ""; }; + AAAFE81E0835E7FF00FC43E0 /* WheelItemBase.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = WheelItemBase.cpp; path = ../src/WheelItemBase.cpp; sourceTree = ""; }; + AAAFE81F0835E7FF00FC43E0 /* WheelItemBase.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = WheelItemBase.h; path = ../src/WheelItemBase.h; sourceTree = ""; }; + AAAFE82E0835E8B100FC43E0 /* RoomWheel.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RoomWheel.cpp; path = ../src/RoomWheel.cpp; sourceTree = ""; }; + AAAFE82F0835E8B100FC43E0 /* RoomWheel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RoomWheel.h; path = ../src/RoomWheel.h; sourceTree = ""; }; + AAB005F00579B8CB000BBA58 /* AttackDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = AttackDisplay.cpp; path = ../src/AttackDisplay.cpp; sourceTree = ""; }; + AAB005F10579B8CB000BBA58 /* AttackDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = AttackDisplay.h; path = ../src/AttackDisplay.h; sourceTree = ""; }; + AAB0085B057F4F7A000BBA58 /* RageFileDriver.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileDriver.cpp; path = ../src/RageFileDriver.cpp; sourceTree = ""; }; + AAB0085C057F4F7A000BBA58 /* RageFileDriver.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileDriver.h; path = ../src/RageFileDriver.h; sourceTree = ""; }; + AAB0085D057F4F7A000BBA58 /* RageFileDriverDirect.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileDriverDirect.cpp; path = ../src/RageFileDriverDirect.cpp; sourceTree = ""; }; + AAB0085E057F4F7A000BBA58 /* RageFileDriverDirect.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileDriverDirect.h; path = ../src/RageFileDriverDirect.h; sourceTree = ""; }; + AAB0085F057F4F7A000BBA58 /* RageFileManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileManager.cpp; path = ../src/RageFileManager.cpp; sourceTree = ""; }; + AAB00860057F4F7A000BBA58 /* RageFileManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileManager.h; path = ../src/RageFileManager.h; sourceTree = ""; }; + AAB3B36B04C38B4600D02EE9 /* InputHandler.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = InputHandler.cpp; sourceTree = ""; }; + AAB3B36C04C38B4600D02EE9 /* InputHandler.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = InputHandler.h; sourceTree = ""; }; + AAB3B37704C38BF600D02EE9 /* MovieTexture.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MovieTexture.h; path = MovieTexture/MovieTexture.h; sourceTree = ""; }; + AAB3B39004C5921800D02EE9 /* MovieTexture_Null.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MovieTexture_Null.cpp; path = MovieTexture/MovieTexture_Null.cpp; sourceTree = ""; }; + AAB3B39104C5921800D02EE9 /* MovieTexture_Null.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MovieTexture_Null.h; path = MovieTexture/MovieTexture_Null.h; sourceTree = ""; }; + AAB3B7DA0C6C582D001BF487 /* ScreenSelectProfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenSelectProfile.cpp; path = ../src/ScreenSelectProfile.cpp; sourceTree = ""; }; + AAB3B7DB0C6C582D001BF487 /* ScreenSelectProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenSelectProfile.h; path = ../src/ScreenSelectProfile.h; sourceTree = ""; }; + AAB3BB570C718F2C001BF487 /* RageUtil_CachedObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RageUtil_CachedObject.cpp; path = ../src/RageUtil_CachedObject.cpp; sourceTree = ""; }; + AAB3BB580C718F2C001BF487 /* RageUtil_CachedObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RageUtil_CachedObject.h; path = ../src/RageUtil_CachedObject.h; sourceTree = ""; }; + AAB55EB509A7E3D3008FDC69 /* ScreenGameplaySyncMachine.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenGameplaySyncMachine.cpp; path = ../src/ScreenGameplaySyncMachine.cpp; sourceTree = ""; }; + AAB55EB609A7E3D3008FDC69 /* ScreenGameplaySyncMachine.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ScreenGameplaySyncMachine.h; path = ../src/ScreenGameplaySyncMachine.h; sourceTree = ""; }; + AAB55EB709A7E3D3008FDC69 /* ScreenUnlockBrowse.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenUnlockBrowse.cpp; path = ../src/ScreenUnlockBrowse.cpp; sourceTree = ""; }; + AAB55EB809A7E3D3008FDC69 /* ScreenUnlockBrowse.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ScreenUnlockBrowse.h; path = ../src/ScreenUnlockBrowse.h; sourceTree = ""; }; + AAB55EB909A7E3D3008FDC69 /* ScreenUnlockCelebrate.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenUnlockCelebrate.cpp; path = ../src/ScreenUnlockCelebrate.cpp; sourceTree = ""; }; + AAB55EBA09A7E3D3008FDC69 /* ScreenUnlockCelebrate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ScreenUnlockCelebrate.h; path = ../src/ScreenUnlockCelebrate.h; sourceTree = ""; }; + AAB691F205704FA50078BED4 /* LightsDriver_SystemMessage.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = LightsDriver_SystemMessage.cpp; sourceTree = ""; }; + AAB691F305704FA50078BED4 /* LightsDriver_SystemMessage.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = LightsDriver_SystemMessage.h; sourceTree = ""; }; + AAB6B475085761B700CEE7BA /* ScreenSplash.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSplash.cpp; path = ../src/ScreenSplash.cpp; sourceTree = ""; }; + AAB6B476085761B700CEE7BA /* ScreenSplash.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSplash.h; path = ../src/ScreenSplash.h; sourceTree = ""; }; + AAB779F90B0D9CB200B74314 /* ScoreKeeperGuitar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ScoreKeeperGuitar.cpp; path = ../src/ScoreKeeperGuitar.cpp; sourceTree = ""; }; + AAB779FA0B0D9CB200B74314 /* ScoreKeeperGuitar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ScoreKeeperGuitar.h; path = ../src/ScoreKeeperGuitar.h; sourceTree = ""; }; + AAB895E504A9057100D02EE9 /* smicon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = smicon.icns; sourceTree = ""; }; + AAB9C8AB06EAF64400AD97CD /* RageSurfaceUtils_Palettize.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurfaceUtils_Palettize.cpp; path = ../src/RageSurfaceUtils_Palettize.cpp; sourceTree = ""; }; + AAB9C8AC06EAF64400AD97CD /* RageSurfaceUtils_Palettize.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurfaceUtils_Palettize.h; path = ../src/RageSurfaceUtils_Palettize.h; sourceTree = ""; }; + AAB9C8AD06EAF64400AD97CD /* RageSurfaceUtils.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurfaceUtils.cpp; path = ../src/RageSurfaceUtils.cpp; sourceTree = ""; }; + AAB9C8AE06EAF64400AD97CD /* RageSurfaceUtils.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurfaceUtils.h; path = ../src/RageSurfaceUtils.h; sourceTree = ""; }; + AAB9C8B306EAF66C00AD97CD /* ScreenNetEvaluation.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenNetEvaluation.cpp; path = ../src/ScreenNetEvaluation.cpp; sourceTree = ""; }; + AAB9C8B406EAF66C00AD97CD /* ScreenNetEvaluation.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenNetEvaluation.h; path = ../src/ScreenNetEvaluation.h; sourceTree = ""; }; + AABBD80605D8E9FC00B44FC2 /* HighScore.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = HighScore.cpp; path = ../src/HighScore.cpp; sourceTree = ""; }; + AABBD80705D8E9FC00B44FC2 /* HighScore.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = HighScore.h; path = ../src/HighScore.h; sourceTree = ""; }; + AABBF66C0659E78D00738526 /* RageSurface_Load_GIF.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Load_GIF.cpp; path = ../src/RageSurface_Load_GIF.cpp; sourceTree = ""; }; + AABBF66D0659E78D00738526 /* RageSurface_Load_GIF.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Load_GIF.h; path = ../src/RageSurface_Load_GIF.h; sourceTree = ""; }; + AABBF66E0659E78D00738526 /* RageSurface_Load_JPEG.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Load_JPEG.cpp; path = ../src/RageSurface_Load_JPEG.cpp; sourceTree = ""; }; + AABBF66F0659E78D00738526 /* RageSurface_Load_JPEG.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Load_JPEG.h; path = ../src/RageSurface_Load_JPEG.h; sourceTree = ""; }; + AABBF6700659E78D00738526 /* RageSurface_Load_PNG.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Load_PNG.cpp; path = ../src/RageSurface_Load_PNG.cpp; sourceTree = ""; }; + AABBF6710659E78D00738526 /* RageSurface_Load_PNG.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Load_PNG.h; path = ../src/RageSurface_Load_PNG.h; sourceTree = ""; }; + AABBF6720659E78D00738526 /* RageSurface_Load_XPM.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Load_XPM.cpp; path = ../src/RageSurface_Load_XPM.cpp; sourceTree = ""; }; + AABBF6730659E78D00738526 /* RageSurface_Load_XPM.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Load_XPM.h; path = ../src/RageSurface_Load_XPM.h; sourceTree = ""; }; + AABBF6740659E78D00738526 /* RageSurface_Load.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Load.cpp; path = ../src/RageSurface_Load.cpp; sourceTree = ""; }; + AABBF6750659E78D00738526 /* RageSurface_Load.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Load.h; path = ../src/RageSurface_Load.h; sourceTree = ""; }; + AABBFCD209838C3A00F077E2 /* SMMain.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = SMMain.mm; sourceTree = ""; }; + AABD0B3605DF3F22004F7929 /* CryptManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CryptManager.cpp; path = ../src/CryptManager.cpp; sourceTree = ""; }; + AABD0B3705DF3F22004F7929 /* CryptManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CryptManager.h; path = ../src/CryptManager.h; sourceTree = ""; }; + AABE321A05ACD8ED001A0E84 /* ScreenEnding.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenEnding.cpp; path = ../src/ScreenEnding.cpp; sourceTree = ""; }; + AABE321B05ACD8ED001A0E84 /* ScreenEnding.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenEnding.h; path = ../src/ScreenEnding.h; sourceTree = ""; }; + AABE321E05ACD931001A0E84 /* Foreground.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Foreground.cpp; path = ../src/Foreground.cpp; sourceTree = ""; }; + AABE321F05ACD931001A0E84 /* Foreground.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Foreground.h; path = ../src/Foreground.h; sourceTree = ""; }; + AABE322205ACDA52001A0E84 /* RageFileDriverDirectHelpers.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileDriverDirectHelpers.cpp; path = ../src/RageFileDriverDirectHelpers.cpp; sourceTree = ""; }; + AABE322305ACDA52001A0E84 /* RageFileDriverDirectHelpers.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileDriverDirectHelpers.h; path = ../src/RageFileDriverDirectHelpers.h; sourceTree = ""; }; + AABE35EB04967E25005F316C /* BannerCache.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = BannerCache.cpp; path = ../src/BannerCache.cpp; sourceTree = ""; }; + AABE35EC04967E26005F316C /* BannerCache.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = BannerCache.h; path = ../src/BannerCache.h; sourceTree = ""; }; + AABE36F60497CE16005F316C /* arch_default.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = arch_default.h; sourceTree = ""; }; + AABE36FC0497CE44005F316C /* ArchHooks.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ArchHooks.h; path = ArchHooks/ArchHooks.h; sourceTree = ""; }; + AABE37030497CF85005F316C /* RageSoundDriver.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = RageSoundDriver.h; sourceTree = ""; }; + AABE78760591287100E8BF50 /* MemoryCardDriver_Null.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = MemoryCardDriver_Null.h; sourceTree = ""; }; + AABE788B05912B0600E8BF50 /* DualScrollBar.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = DualScrollBar.h; path = ../src/DualScrollBar.h; sourceTree = ""; }; + AABE788C05912B0600E8BF50 /* DualScrollBar.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = DualScrollBar.cpp; path = ../src/DualScrollBar.cpp; sourceTree = ""; }; + AABE830D0A9524D400001678 /* ModsGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ModsGroup.cpp; path = ../src/ModsGroup.cpp; sourceTree = ""; }; + AAC0BFDF0E2951EC00F56EEB /* CryptHelpers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CryptHelpers.cpp; path = ../src/CryptHelpers.cpp; sourceTree = SOURCE_ROOT; }; + AAC0BFE00E2951EC00F56EEB /* CryptHelpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CryptHelpers.h; path = ../src/CryptHelpers.h; sourceTree = SOURCE_ROOT; }; + AAC0C8C00984AE3B0075FC53 /* Tween.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Tween.cpp; path = ../src/Tween.cpp; sourceTree = ""; }; + AAC0C8C10984AE3B0075FC53 /* Tween.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Tween.h; path = ../src/Tween.h; sourceTree = ""; }; + AAC23F7E0485E68D005F316C /* RageUtil_CharConversions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageUtil_CharConversions.cpp; path = ../src/RageUtil_CharConversions.cpp; sourceTree = ""; }; + AAC23F7F0485E68D005F316C /* RageUtil_CharConversions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageUtil_CharConversions.h; path = ../src/RageUtil_CharConversions.h; sourceTree = ""; }; + AAC28BB904F758E500D02EE9 /* BeginnerHelper.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = BeginnerHelper.cpp; path = ../src/BeginnerHelper.cpp; sourceTree = ""; }; + AAC28BBA04F758E500D02EE9 /* BeginnerHelper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = BeginnerHelper.h; path = ../src/BeginnerHelper.h; sourceTree = ""; }; + AAC622FA05389A0500D02EE9 /* ScreenTestInput.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTestInput.cpp; path = ../src/ScreenTestInput.cpp; sourceTree = ""; }; + AAC622FB05389A0500D02EE9 /* ScreenTestInput.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTestInput.h; path = ../src/ScreenTestInput.h; sourceTree = ""; }; + AAC6889905D7F3C800964E6D /* XmlFile.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = XmlFile.cpp; path = ../src/XmlFile.cpp; sourceTree = ""; }; + AAC6889A05D7F3C800964E6D /* XmlFile.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = XmlFile.h; path = ../src/XmlFile.h; sourceTree = ""; }; + AAC6DCE30567660A00B5D56F /* LightsManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LightsManager.cpp; path = ../src/LightsManager.cpp; sourceTree = ""; }; + AAC6DCE40567660A00B5D56F /* LightsManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LightsManager.h; path = ../src/LightsManager.h; sourceTree = ""; }; + AAC6DCEE0567663800B5D56F /* LightsDriver.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = LightsDriver.h; sourceTree = ""; }; + AAC6DDDE0569C71000B5D56F /* PaneDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = PaneDisplay.cpp; path = ../src/PaneDisplay.cpp; sourceTree = ""; }; + AAC6DDDF0569C71000B5D56F /* PaneDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = PaneDisplay.h; path = ../src/PaneDisplay.h; sourceTree = ""; }; + AAC6DDE60569C80900B5D56F /* DifficultyList.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = DifficultyList.cpp; path = ../src/DifficultyList.cpp; sourceTree = ""; }; + AAC6DDE70569C80900B5D56F /* DifficultyList.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = DifficultyList.h; path = ../src/DifficultyList.h; sourceTree = ""; }; + AAC9F32E069E22BB00D53E2C /* GameSoundManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GameSoundManager.cpp; path = ../src/GameSoundManager.cpp; sourceTree = ""; }; + AAC9F32F069E22BB00D53E2C /* GameSoundManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GameSoundManager.h; path = ../src/GameSoundManager.h; sourceTree = ""; }; + AAC9F332069E22CF00D53E2C /* MemoryCardDriver.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = MemoryCardDriver.cpp; sourceTree = ""; }; + AAC9F333069E22CF00D53E2C /* MemoryCardDriver.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = MemoryCardDriver.h; sourceTree = ""; }; + AACA592A07B5E23400763545 /* RageFileDriverTimeout.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileDriverTimeout.cpp; path = ../src/RageFileDriverTimeout.cpp; sourceTree = ""; }; + AACA592B07B5E23400763545 /* RageFileDriverTimeout.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileDriverTimeout.h; path = ../src/RageFileDriverTimeout.h; sourceTree = ""; }; + AACA592C07B5E23400763545 /* RageUtil_AutoPtr.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageUtil_AutoPtr.h; path = ../src/RageUtil_AutoPtr.h; sourceTree = ""; }; + AACA592D07B5E23400763545 /* RageUtil_WorkerThread.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageUtil_WorkerThread.cpp; path = ../src/RageUtil_WorkerThread.cpp; sourceTree = ""; }; + AACA592E07B5E23400763545 /* RageUtil_WorkerThread.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageUtil_WorkerThread.h; path = ../src/RageUtil_WorkerThread.h; sourceTree = ""; }; + AACFBE2608E7D793005087FC /* ActorSound.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ActorSound.cpp; path = ../src/ActorSound.cpp; sourceTree = ""; }; + AACFBE2708E7D793005087FC /* ActorSound.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ActorSound.h; path = ../src/ActorSound.h; sourceTree = ""; }; + AACFBE3908E7D832005087FC /* InputEventPlus.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = InputEventPlus.h; path = ../src/InputEventPlus.h; sourceTree = ""; }; + AACFBE4908E7D893005087FC /* ScreenGameplayLesson.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenGameplayLesson.cpp; path = ../src/ScreenGameplayLesson.cpp; sourceTree = ""; }; + AACFBE4A08E7D893005087FC /* ScreenGameplayLesson.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenGameplayLesson.h; path = ../src/ScreenGameplayLesson.h; sourceTree = ""; }; + AACFBE6108E7DBA8005087FC /* LuaExpressionTransform.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LuaExpressionTransform.cpp; path = ../src/LuaExpressionTransform.cpp; sourceTree = ""; }; + AACFBE6208E7DBA8005087FC /* LuaExpressionTransform.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LuaExpressionTransform.h; path = ../src/LuaExpressionTransform.h; sourceTree = ""; }; + AAD36082062BB8AE00D0CED8 /* RageSoundPosMap.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundPosMap.cpp; path = ../src/RageSoundPosMap.cpp; sourceTree = ""; }; + AAD36083062BB8AE00D0CED8 /* RageSoundPosMap.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundPosMap.h; path = ../src/RageSoundPosMap.h; sourceTree = ""; }; + AAD3D5AB05B5AB4E00014FAC /* RageUtil_CircularBuffer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageUtil_CircularBuffer.h; path = ../src/RageUtil_CircularBuffer.h; sourceTree = ""; }; + AAD620A5052EC78B00D02EE9 /* PercentageDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = PercentageDisplay.cpp; path = ../src/PercentageDisplay.cpp; sourceTree = ""; }; + AAD620A6052EC78B00D02EE9 /* PercentageDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = PercentageDisplay.h; path = ../src/PercentageDisplay.h; sourceTree = ""; }; + AAD64AA10603FE7300EF8CDE /* StepMania.pch */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = StepMania.pch; sourceTree = ""; }; + AAD675EF06795175006002B0 /* Dialog.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = Dialog.cpp; sourceTree = ""; }; + AAD675F006795175006002B0 /* Dialog.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = Dialog.h; sourceTree = ""; }; + AAD675F106795175006002B0 /* DialogDriver.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = DialogDriver.h; sourceTree = ""; }; + AAD6A712065E0FDF0042165A /* Difficulty.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Difficulty.cpp; path = ../src/Difficulty.cpp; sourceTree = ""; }; + AAD6A713065E0FDF0042165A /* Difficulty.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Difficulty.h; path = ../src/Difficulty.h; sourceTree = ""; }; + AAD8F9320A4B97DF000311CF /* ScreenGameplayShared.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenGameplayShared.h; path = ../src/ScreenGameplayShared.h; sourceTree = ""; }; + AAD8F9330A4B97DF000311CF /* ScreenGameplayShared.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenGameplayShared.cpp; path = ../src/ScreenGameplayShared.cpp; sourceTree = ""; }; + AADB4E7A04D4FE5D00D02EE9 /* RageSoundReader_FileReader.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_FileReader.h; path = ../src/RageSoundReader_FileReader.h; sourceTree = ""; }; + AADB4E8804D50FB900D02EE9 /* CrashHandler.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = CrashHandler.h; sourceTree = ""; }; + AADB4E8A04D50FB900D02EE9 /* CrashHandlerInternal.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = CrashHandlerInternal.h; sourceTree = ""; }; + AADB4E8B04D50FB900D02EE9 /* SignalHandler.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = SignalHandler.cpp; sourceTree = ""; }; + AADB4E8C04D50FB900D02EE9 /* SignalHandler.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = SignalHandler.h; sourceTree = ""; }; + AADB4E8F04D5263200D02EE9 /* arch_setup.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = arch_setup.h; sourceTree = ""; }; + AADB4F5904D9220700D02EE9 /* Crash.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = Crash.h; sourceTree = ""; }; + AADBE360053D5F8A00D02EE9 /* ScreenBookkeeping.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenBookkeeping.cpp; path = ../src/ScreenBookkeeping.cpp; sourceTree = ""; }; + AADBE361053D5F8A00D02EE9 /* ScreenBookkeeping.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenBookkeeping.h; path = ../src/ScreenBookkeeping.h; sourceTree = ""; }; + AADBE362053D5F8A00D02EE9 /* ScreenNameEntryTraditional.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenNameEntryTraditional.cpp; path = ../src/ScreenNameEntryTraditional.cpp; sourceTree = ""; }; + AADBE363053D5F8A00D02EE9 /* ScreenNameEntryTraditional.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenNameEntryTraditional.h; path = ../src/ScreenNameEntryTraditional.h; sourceTree = ""; }; + AADBE368053DA38C00D02EE9 /* Bookkeeper.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Bookkeeper.cpp; path = ../src/Bookkeeper.cpp; sourceTree = ""; }; + AADBE369053DA38C00D02EE9 /* Bookkeeper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Bookkeeper.h; path = ../src/Bookkeeper.h; sourceTree = ""; }; + AADD1CC2095C233E0088C9DF /* LocalizedString.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LocalizedString.cpp; path = ../src/LocalizedString.cpp; sourceTree = ""; }; + AADD1CC3095C233F0088C9DF /* LocalizedString.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LocalizedString.h; path = ../src/LocalizedString.h; sourceTree = ""; }; + AAE2D6D30A67481E00071546 /* ScoreKeeper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScoreKeeper.cpp; path = ../src/ScoreKeeper.cpp; sourceTree = ""; }; + AAE443EB04B0F9F600D02EE9 /* CombinedLifeMeterTug.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CombinedLifeMeterTug.cpp; path = ../src/CombinedLifeMeterTug.cpp; sourceTree = ""; }; + AAE443EC04B0F9F600D02EE9 /* CombinedLifeMeterTug.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CombinedLifeMeterTug.h; path = ../src/CombinedLifeMeterTug.h; sourceTree = ""; }; + AAE443F304B0FEB700D02EE9 /* ScoreKeeperRave.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreKeeperRave.cpp; path = ../src/ScoreKeeperRave.cpp; sourceTree = ""; }; + AAE443F404B0FEB700D02EE9 /* ScoreKeeperRave.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreKeeperRave.h; path = ../src/ScoreKeeperRave.h; sourceTree = ""; }; + AAE77F570AC3B52500AEFC64 /* RageTypes.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageTypes.cpp; path = ../src/RageTypes.cpp; sourceTree = ""; }; + AAE7803C0AC76A1200AEFC64 /* WorkoutGraph.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = WorkoutGraph.cpp; path = ../src/WorkoutGraph.cpp; sourceTree = ""; }; + AAE7803D0AC76A1200AEFC64 /* WorkoutGraph.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = WorkoutGraph.h; path = ../src/WorkoutGraph.h; sourceTree = ""; }; + AAE78049060814AC0034E65F /* NetworkSyncManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NetworkSyncManager.cpp; path = ../src/NetworkSyncManager.cpp; sourceTree = ""; }; + AAE7804A060814AC0034E65F /* NetworkSyncManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NetworkSyncManager.h; path = ../src/NetworkSyncManager.h; sourceTree = ""; }; + AAE7808506081A000034E65F /* ezsockets.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ezsockets.cpp; path = ../src/ezsockets.cpp; sourceTree = ""; }; + AAE7808606081A000034E65F /* ezsockets.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ezsockets.h; path = ../src/ezsockets.h; sourceTree = ""; }; + AAE7812B0608249E0034E65F /* ActiveAttackList.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ActiveAttackList.cpp; path = ../src/ActiveAttackList.cpp; sourceTree = ""; }; + AAE7812C0608249E0034E65F /* ActiveAttackList.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ActiveAttackList.h; path = ../src/ActiveAttackList.h; sourceTree = ""; }; + AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "liblua-5.1.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + AAEBC6C607A20AFE00793F0E /* RageSurface_Save_JPEG.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Save_JPEG.cpp; path = ../src/RageSurface_Save_JPEG.cpp; sourceTree = ""; }; + AAEBC6C707A20AFE00793F0E /* RageSurface_Save_JPEG.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Save_JPEG.h; path = ../src/RageSurface_Save_JPEG.h; sourceTree = ""; }; + AAEBC6C807A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurfaceUtils_Dither.cpp; path = ../src/RageSurfaceUtils_Dither.cpp; sourceTree = ""; }; + AAEBC6C907A20AFE00793F0E /* RageSurfaceUtils_Dither.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurfaceUtils_Dither.h; path = ../src/RageSurfaceUtils_Dither.h; sourceTree = ""; }; + AAEBC6CA07A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurfaceUtils_Zoom.cpp; path = ../src/RageSurfaceUtils_Zoom.cpp; sourceTree = ""; }; + AAEBC6CB07A20AFE00793F0E /* RageSurfaceUtils_Zoom.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurfaceUtils_Zoom.h; path = ../src/RageSurfaceUtils_Zoom.h; sourceTree = ""; }; + AAEBC78C07A4FF5600793F0E /* LuaBinding.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LuaBinding.h; path = ../src/LuaBinding.h; sourceTree = ""; }; + AAEBC78D07A4FF5600793F0E /* LuaManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LuaManager.cpp; path = ../src/LuaManager.cpp; sourceTree = ""; }; + AAEBC78E07A4FF5600793F0E /* LuaManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LuaManager.h; path = ../src/LuaManager.h; sourceTree = ""; }; + AAEBC78F07A4FF5600793F0E /* PlayerState.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = PlayerState.h; path = ../src/PlayerState.h; sourceTree = ""; }; + AAEBF55E0B5C517E005F3C7C /* SampleHistory.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SampleHistory.cpp; path = ../src/SampleHistory.cpp; sourceTree = ""; }; + AAEBF55F0B5C517E005F3C7C /* SampleHistory.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SampleHistory.h; path = ../src/SampleHistory.h; sourceTree = ""; }; + AAEBF57C0B5C83F4005F3C7C /* SoundEffectControl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SoundEffectControl.cpp; path = ../src/SoundEffectControl.cpp; sourceTree = ""; }; + AAEBF57D0B5C83F4005F3C7C /* SoundEffectControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SoundEffectControl.h; path = ../src/SoundEffectControl.h; sourceTree = ""; }; + AAECF8BF05265DB600D02EE9 /* ScreenExit.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenExit.cpp; path = ../src/ScreenExit.cpp; sourceTree = ""; }; + AAECF8C005265DB600D02EE9 /* ScreenExit.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenExit.h; path = ../src/ScreenExit.h; sourceTree = ""; }; + AAED6F280601C528002D2DEE /* Backtrace.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = Backtrace.cpp; sourceTree = ""; }; + AAED6F290601C528002D2DEE /* Backtrace.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = Backtrace.h; sourceTree = ""; }; + AAED6F2A0601C528002D2DEE /* BacktraceNames.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = BacktraceNames.cpp; sourceTree = ""; }; + AAED6F2B0601C528002D2DEE /* BacktraceNames.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = BacktraceNames.h; sourceTree = ""; }; + AAEDFD680A03762B00590617 /* Crash.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Crash.cpp; sourceTree = ""; }; + AAEF3D1004B53E2900D02EE9 /* LoadingWindow.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = LoadingWindow.h; sourceTree = ""; }; + AAF33F2A04FF213100F93C24 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; + AAF3442908F1C36A0006EDB7 /* DynamicActorScroller.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = DynamicActorScroller.cpp; path = ../src/DynamicActorScroller.cpp; sourceTree = ""; }; + AAF3442A08F1C36A0006EDB7 /* DynamicActorScroller.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = DynamicActorScroller.h; path = ../src/DynamicActorScroller.h; sourceTree = ""; }; + AAF34ADC0900AEBD0006EDB7 /* ScoreKeeperNormal.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreKeeperNormal.cpp; path = ../src/ScoreKeeperNormal.cpp; sourceTree = ""; }; + AAF34ADD0900AEBD0006EDB7 /* ScoreKeeperNormal.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreKeeperNormal.h; path = ../src/ScoreKeeperNormal.h; sourceTree = ""; }; + AAF34AEB0900B00C0006EDB7 /* ScreenStatsOverlay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenStatsOverlay.cpp; path = ../src/ScreenStatsOverlay.cpp; sourceTree = ""; }; + AAF34AEC0900B00C0006EDB7 /* ScreenStatsOverlay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenStatsOverlay.h; path = ../src/ScreenStatsOverlay.h; sourceTree = ""; }; + AAF4206505D63FA700056441 /* ModelManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ModelManager.cpp; path = ../src/ModelManager.cpp; sourceTree = ""; }; + AAF4206605D63FA700056441 /* ModelManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ModelManager.h; path = ../src/ModelManager.h; sourceTree = ""; }; + AAF4206905D6400800056441 /* RageModelGeometry.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageModelGeometry.cpp; path = ../src/RageModelGeometry.cpp; sourceTree = ""; }; + AAF4206A05D6400800056441 /* RageModelGeometry.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageModelGeometry.h; path = ../src/RageModelGeometry.h; sourceTree = ""; }; + AAF430FD04DC98BC00D02EE9 /* Steps.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Steps.cpp; path = ../src/Steps.cpp; sourceTree = ""; }; + AAF430FE04DC98BC00D02EE9 /* Steps.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Steps.h; path = ../src/Steps.h; sourceTree = ""; }; + AAF580A704B3E2DC00D02EE9 /* RageUtil_FileDB.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageUtil_FileDB.cpp; path = ../src/RageUtil_FileDB.cpp; sourceTree = ""; }; + AAF580A804B3E2DC00D02EE9 /* RageUtil_FileDB.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageUtil_FileDB.h; path = ../src/RageUtil_FileDB.h; sourceTree = ""; }; + AAF6A33109B69C7700D5C614 /* it */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; + AAF6A38F09B6A2A600D5C614 /* es */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; + AAF6A3AE09B6A88800D5C614 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; + AAF6A3B109B6A90C00D5C614 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + AAF6A3B209B6A91000D5C614 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; + AAF6A3B309B6A91600D5C614 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; + AAF7435906110E8D00B19AD1 /* ScreenTestLights.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTestLights.cpp; path = ../src/ScreenTestLights.cpp; sourceTree = ""; }; + AAF7435A06110E8D00B19AD1 /* ScreenTestLights.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTestLights.h; path = ../src/ScreenTestLights.h; sourceTree = ""; }; + AAF7458E061181F700B19AD1 /* RageDisplay_Null.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageDisplay_Null.cpp; path = ../src/RageDisplay_Null.cpp; sourceTree = ""; }; + AAF7458F061181F700B19AD1 /* RageDisplay_Null.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageDisplay_Null.h; path = ../src/RageDisplay_Null.h; sourceTree = ""; }; + AAF793F1074FE69E00D74516 /* ScreenNetRoom.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenNetRoom.cpp; path = ../src/ScreenNetRoom.cpp; sourceTree = ""; }; + AAF793F2074FE69E00D74516 /* ScreenNetRoom.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenNetRoom.h; path = ../src/ScreenNetRoom.h; sourceTree = ""; }; + AAF793F3074FE69E00D74516 /* ScreenNetSelectBase.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenNetSelectBase.cpp; path = ../src/ScreenNetSelectBase.cpp; sourceTree = ""; }; + AAF793F4074FE69E00D74516 /* ScreenNetSelectBase.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenNetSelectBase.h; path = ../src/ScreenNetSelectBase.h; sourceTree = ""; }; + AAFAB5BB0889098600767BF7 /* ScreenOptionsEditProfile.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenOptionsEditProfile.cpp; path = ../src/ScreenOptionsEditProfile.cpp; sourceTree = ""; }; + AAFAB5BC0889098600767BF7 /* ScreenOptionsEditProfile.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenOptionsEditProfile.h; path = ../src/ScreenOptionsEditProfile.h; sourceTree = ""; }; + AAFAB5CB08890B5200767BF7 /* GameLoop.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = GameLoop.cpp; sourceTree = ""; }; + AAFAB5CC08890B5200767BF7 /* GameLoop.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = GameLoop.h; sourceTree = ""; }; + AAFAFC8E0AC8DB9F00427A6E /* EnumHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = EnumHelper.cpp; path = ../src/EnumHelper.cpp; sourceTree = ""; }; + AAFB549D0B1BC32700FC3A81 /* RageSoundReader.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader.cpp; path = ../src/RageSoundReader.cpp; sourceTree = ""; }; + AAFBEECF094D7FCB000029DE /* SpecialFiles.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = SpecialFiles.cpp; sourceTree = ""; }; + AAFBEED0094D7FCB000029DE /* SpecialFiles.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = SpecialFiles.h; sourceTree = ""; }; + AAFBEEE5094D807E000029DE /* ScreenOptionsManageEditSteps.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenOptionsManageEditSteps.cpp; path = ../src/ScreenOptionsManageEditSteps.cpp; sourceTree = ""; }; + AAFBEEE6094D807E000029DE /* ScreenOptionsManageEditSteps.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenOptionsManageEditSteps.h; path = ../src/ScreenOptionsManageEditSteps.h; sourceTree = ""; }; + AAFBEEE7094D807E000029DE /* ScreenOptionsMemoryCard.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenOptionsMemoryCard.cpp; path = ../src/ScreenOptionsMemoryCard.cpp; sourceTree = ""; }; + AAFBEEE8094D807E000029DE /* ScreenOptionsMemoryCard.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenOptionsMemoryCard.h; path = ../src/ScreenOptionsMemoryCard.h; sourceTree = ""; }; + AAFBEEE9094D807E000029DE /* ScreenServiceAction.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenServiceAction.cpp; path = ../src/ScreenServiceAction.cpp; sourceTree = ""; }; + AAFBEEEA094D807E000029DE /* ScreenServiceAction.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenServiceAction.h; path = ../src/ScreenServiceAction.h; sourceTree = ""; }; + AAFC6CEF072A30440053AAD3 /* InputHandler_MonkeyKeyboard.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = InputHandler_MonkeyKeyboard.cpp; sourceTree = ""; }; + AAFC6CF0072A30440053AAD3 /* InputHandler_MonkeyKeyboard.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = InputHandler_MonkeyKeyboard.h; sourceTree = ""; }; + AAFC7FF00513A67700D02EE9 /* RageSoundReader_FileReader.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundReader_FileReader.cpp; path = ../src/RageSoundReader_FileReader.cpp; sourceTree = ""; }; + AAFC7FF10513A67700D02EE9 /* RageSoundReader_MP3.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundReader_MP3.cpp; path = ../src/RageSoundReader_MP3.cpp; sourceTree = ""; }; + AAFC7FF20513A67700D02EE9 /* RageSoundReader_MP3.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_MP3.h; path = ../src/RageSoundReader_MP3.h; sourceTree = ""; }; + AAFE71090A91ADE6005F2290 /* ActorProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ActorProxy.cpp; path = ../src/ActorProxy.cpp; sourceTree = ""; }; + AAFE710A0A91ADE6005F2290 /* ActorProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ActorProxy.h; path = ../src/ActorProxy.h; sourceTree = ""; }; + AAFE711C0A91B551005F2290 /* RageSurface_Save_PNG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RageSurface_Save_PNG.cpp; path = ../src/RageSurface_Save_PNG.cpp; sourceTree = ""; }; + AAFE711D0A91B551005F2290 /* RoomInfoDisplay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RoomInfoDisplay.cpp; path = ../src/RoomInfoDisplay.cpp; sourceTree = ""; }; + AAFE711E0A91B551005F2290 /* RoomInfoDisplay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RoomInfoDisplay.h; path = ../src/RoomInfoDisplay.h; sourceTree = ""; }; + AAFE71280A91B58F005F2290 /* RageSurface_Save_PNG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RageSurface_Save_PNG.h; path = ../src/RageSurface_Save_PNG.h; sourceTree = ""; }; + AAFF41A10F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenOptionsExportPackage.cpp; path = ../src/ScreenOptionsExportPackage.cpp; sourceTree = SOURCE_ROOT; }; + AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenOptionsExportPackage.h; path = ../src/ScreenOptionsExportPackage.h; sourceTree = SOURCE_ROOT; }; + AAFF551D0549F39700D02EE9 /* GraphDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GraphDisplay.cpp; path = ../src/GraphDisplay.cpp; sourceTree = ""; }; + AAFF551E0549F39700D02EE9 /* GraphDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GraphDisplay.h; path = ../src/GraphDisplay.h; sourceTree = ""; }; + AAFF55210549F43A00D02EE9 /* ComboGraph.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ComboGraph.cpp; path = ../src/ComboGraph.cpp; sourceTree = ""; }; + AAFF55220549F43A00D02EE9 /* ComboGraph.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ComboGraph.h; path = ../src/ComboGraph.h; sourceTree = ""; }; + AAFF5541054E736D00D02EE9 /* Attack.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Attack.cpp; path = ../src/Attack.cpp; sourceTree = ""; }; + AAFF5542054E736D00D02EE9 /* Attack.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Attack.h; path = ../src/Attack.h; sourceTree = ""; }; + EE2153A710A75BEE0074B01B /* NotesLoaderPMS.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderPMS.cpp; path = ../src/NotesLoaderPMS.cpp; sourceTree = SOURCE_ROOT; }; + EE2153A810A75BEE0074B01B /* NotesLoaderPMS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NotesLoaderPMS.h; path = ../src/NotesLoaderPMS.h; sourceTree = SOURCE_ROOT; }; + EE879B5C132DEE720078FDDC /* RageDisplay_Legacy_Helpers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RageDisplay_Legacy_Helpers.cpp; path = ../src/RageDisplay_Legacy_Helpers.cpp; sourceTree = SOURCE_ROOT; }; + EE879B5D132DEE720078FDDC /* RageDisplay_Legacy_Helpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RageDisplay_Legacy_Helpers.h; path = ../src/RageDisplay_Legacy_Helpers.h; sourceTree = SOURCE_ROOT; }; + EE879B5E132DEE720078FDDC /* RageDisplay_Legacy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RageDisplay_Legacy.cpp; path = ../src/RageDisplay_Legacy.cpp; sourceTree = SOURCE_ROOT; }; + EE879B5F132DEE720078FDDC /* RageDisplay_Legacy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RageDisplay_Legacy.h; path = ../src/RageDisplay_Legacy.h; sourceTree = SOURCE_ROOT; }; + EE879BAA132E06C50078FDDC /* glew.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = glew.c; path = src/glew.c; sourceTree = ""; }; + EE906F6412BF3A1B00146C96 /* ScreenInstallOverlay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenInstallOverlay.cpp; path = ../src/ScreenInstallOverlay.cpp; sourceTree = SOURCE_ROOT; }; + EE906F6512BF3A1B00146C96 /* ScreenInstallOverlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenInstallOverlay.h; path = ../src/ScreenInstallOverlay.h; sourceTree = SOURCE_ROOT; }; + EE906F8012BF3AF800146C96 /* JsonUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JsonUtil.cpp; path = ../src/JsonUtil.cpp; sourceTree = SOURCE_ROOT; }; + EE906F8112BF3AF800146C96 /* JsonUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JsonUtil.h; path = ../src/JsonUtil.h; sourceTree = SOURCE_ROOT; }; + EE906F8812BF3C7C00146C96 /* FileDownload.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileDownload.cpp; path = ../src/FileDownload.cpp; sourceTree = SOURCE_ROOT; }; + EE906F8912BF3C7C00146C96 /* FileDownload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileDownload.h; path = ../src/FileDownload.h; sourceTree = SOURCE_ROOT; }; + EEA7C84110A805A300082E7B /* ScreenPackagesSSC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenPackagesSSC.cpp; path = ../src/ScreenPackagesSSC.cpp; sourceTree = SOURCE_ROOT; }; + EEA7C84210A805A300082E7B /* ScreenPackagesSSC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenPackagesSSC.h; path = ../src/ScreenPackagesSSC.h; sourceTree = SOURCE_ROOT; }; + EEC7863D0E58208B00F559BC /* StepsDisplay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StepsDisplay.cpp; path = ../src/StepsDisplay.cpp; sourceTree = ""; }; + EEC7863E0E58208B00F559BC /* StepsDisplay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StepsDisplay.h; path = ../src/StepsDisplay.h; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AA29CE3B0558741A00961A51 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AA29CE3C0558741A00961A51 /* Cocoa.framework in Frameworks */, + AA29CE3D0558741A00961A51 /* Carbon.framework in Frameworks */, + AA29CE3E0558741A00961A51 /* IOKit.framework in Frameworks */, + AA29CE3F0558741A00961A51 /* QuickTime.framework in Frameworks */, + AA29CE400558741A00961A51 /* OpenGL.framework in Frameworks */, + AA29CE420558741A00961A51 /* CoreFoundation.framework in Frameworks */, + AA230EB006043704002672F3 /* AudioToolbox.framework in Frameworks */, + AA230EB106043704002672F3 /* AudioUnit.framework in Frameworks */, + AAA8E0030696984300FCE1F9 /* CoreAudio.framework in Frameworks */, + AA77E8B108B6ABD500FA24CA /* vecLib.framework in Frameworks */, + AA21E4790A9826CD00684CEA /* libjpeg_link.a in Frameworks */, + AA21E47B0A9826CD00684CEA /* libogg_link.a in Frameworks */, + AA21E47C0A9826CD00684CEA /* libpng_link.a in Frameworks */, + AA21E47D0A9826CD00684CEA /* libtheora_link.a in Frameworks */, + AA21E47E0A9826CD00684CEA /* libvorbis_link.a in Frameworks */, + AAE782030AC7E64D00AEFC64 /* liblua-5.1.a in Frameworks */, + AA7C8D200B6748E400FD9940 /* libtomcrypt.a in Frameworks */, + AA7C8D1F0B6748E300FD9940 /* libtommath.a in Frameworks */, + AA059E2C0B8F0C67006F8139 /* libz_link.a in Frameworks */, + AAA0704E0CE5082E005A3060 /* libffmpeg_link.a in Frameworks */, + AAA071B40CE7C9C9005A3060 /* libmad.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA40D51409A08D650068C0D5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AA40D51509A08D650068C0D5 /* Cocoa.framework in Frameworks */, + AA40D51609A08D650068C0D5 /* Carbon.framework in Frameworks */, + AA40D51709A08D650068C0D5 /* IOKit.framework in Frameworks */, + AA40D51809A08D650068C0D5 /* QuickTime.framework in Frameworks */, + AA40D51909A08D650068C0D5 /* OpenGL.framework in Frameworks */, + AA40D51A09A08D650068C0D5 /* CoreFoundation.framework in Frameworks */, + AA40D51C09A08D650068C0D5 /* AudioToolbox.framework in Frameworks */, + AA40D51D09A08D650068C0D5 /* AudioUnit.framework in Frameworks */, + AA40D51E09A08D650068C0D5 /* CoreAudio.framework in Frameworks */, + AA40D51F09A08D650068C0D5 /* vecLib.framework in Frameworks */, + AA21E47F0A9826CD00684CEA /* libjpeg_link.a in Frameworks */, + AA21E4810A9826CD00684CEA /* libogg_link.a in Frameworks */, + AA21E4820A9826CD00684CEA /* libpng_link.a in Frameworks */, + AA21E4830A9826CD00684CEA /* libtheora_link.a in Frameworks */, + AA21E4840A9826CD00684CEA /* libvorbis_link.a in Frameworks */, + AAE782040AC7E65200AEFC64 /* liblua-5.1.a in Frameworks */, + AA7C8D440B674F4F00FD9940 /* libtomcrypt.a in Frameworks */, + AA7C8D430B674F4E00FD9940 /* libtommath.a in Frameworks */, + AA059E2B0B8F0C67006F8139 /* libz_link.a in Frameworks */, + AAA0704F0CE5082E005A3060 /* libffmpeg_link.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7A2B920AE09B520054C5BA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AA7A2BAF0AE09CEC0054C5BA /* liblua-5.1.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7A2BA90AE09CD50054C5BA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AA7A2BB00AE09CF10054C5BA /* liblua-5.1.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7C895D0B67444700FD9940 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7C8B890B67460600FD9940 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AAA070A70CE7B0DF005A3060 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AAE7817C0AC7E37B00AEFC64 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + AA230EAE06043704002672F3 /* AudioToolbox.framework */, + AA230EAF06043704002672F3 /* AudioUnit.framework */, + AAA0F7CE047AC7BF005F316C /* Carbon.framework */, + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, + AAA8E0020696984300FCE1F9 /* CoreAudio.framework */, + AAF33F2A04FF213100F93C24 /* CoreFoundation.framework */, + AA230ECF06043EFD002672F3 /* CoreServices.framework */, + AAA0F7D0047AC7EA005F316C /* IOKit.framework */, + AA8DD84904A2E51400D02EE9 /* OpenGL.framework */, + AAA0F7D2047ACBC9005F316C /* QuickTime.framework */, + AA77E8A108B6ABD500FA24CA /* vecLib.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 29B97325FDCFA39411CA2CEA /* Foundation.framework */, + 29B97324FDCFA39411CA2CEA /* AppKit.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FACFE9D520D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + AA29CE580558741A00961A51 /* sm-ssc.app */, + AA40D52B09A08D660068C0D5 /* sm-ssc.app */, + AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */, + AA7A2B940AE09B520054C5BA /* lua */, + AA7A2BAB0AE09CD50054C5BA /* luac */, + AA7C895F0B67444700FD9940 /* libtommath.a */, + AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */, + AAA070A90CE7B0DF005A3060 /* libmad.a */, + ); + name = Products; + sourceTree = ""; + }; + 29B97314FDCFA39411CA2CEA /* SDL App */ = { + isa = PBXGroup; + children = ( + 2BDB87261371F7FF00E6FD3A /* extern */, + AA6EFF7404770F8B005F316C /* Actors */, + AA6EFEFA04770E84005F316C /* ActorsInGameplay */, + AA6EFE6D04770D3E005F316C /* ActorsInMenus */, + AA6E01400477136A005F316C /* arch */, + AA6E017E0477136A005F316C /* archutils */, + AA6EFDC804770AF1005F316C /* DataStructures */, + AA6EFE5704770C7E005F316C /* FileTypes */, + AA6E00FE047711FF005F316C /* GlobalSingletons */, + 2B766980132FF62B00586512 /* NoteParsing */, + 29B97315FDCFA39411CA2CEA /* Other Source */, + AA6EFDBB04770A83005F316C /* Rage */, + AA6EFE6A04770D01005F316C /* StepMania */, + AA6E00090477103E005F316C /* Screens */, + AA52E9BD04DBBCF400D02EE9 /* ver.cpp */, + AA29CE570558741A00961A51 /* Info-StepMania.plist */, + AAA3741C09099ADA00141131 /* Libraries */, + 29B97323FDCFA39411CA2CEA /* Frameworks */, + 19C28FACFE9D520D11CA2CBB /* Products */, + 29B97317FDCFA39411CA2CEA /* Resources */, + AA8B8C49091F48C000D14C5F /* product.xcconfig */, + ); + name = "SDL App"; + sourceTree = ""; + }; + 29B97315FDCFA39411CA2CEA /* Other Source */ = { + isa = PBXGroup; + children = ( + AA70E3640663112800DAE1FD /* Foreach.h */, + 3659B56D0F902143002B6B68 /* CommandLineActions.cpp */, + 3659B56E0F902143002B6B68 /* CommandLineActions.h */, + ); + name = "Other Source"; + path = ../src; + sourceTree = ""; + }; + 29B97317FDCFA39411CA2CEA /* Resources */ = { + isa = PBXGroup; + children = ( + AA1DE9590C5468FE00D59F20 /* Hardware.in.plist */, + AA1DE9560C5468CE00D59F20 /* Hardware.plist */, + AAF6A2F709B695BA00D5C614 /* Localizable.strings */, + AAB895E504A9057100D02EE9 /* smicon.icns */, + ); + name = Resources; + sourceTree = ""; + }; + 29B97323FDCFA39411CA2CEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + 2B766980132FF62B00586512 /* NoteParsing */ = { + isa = PBXGroup; + children = ( + AA6EFDED04770C79005F316C /* NotesLoader.cpp */, + AA6EFDEE04770C79005F316C /* NotesLoader.h */, + AA6EFDEF04770C79005F316C /* NotesLoaderBMS.cpp */, + AA6EFDF004770C79005F316C /* NotesLoaderBMS.h */, + AA6EFDF104770C79005F316C /* NotesLoaderDWI.cpp */, + AA6EFDF204770C79005F316C /* NotesLoaderDWI.h */, + AA6EFDF304770C79005F316C /* NotesLoaderKSF.cpp */, + AA6EFDF404770C79005F316C /* NotesLoaderKSF.h */, + 3688B8510BD42DAA004186AD /* NotesLoaderMidi.cpp */, + 3688B8520BD42DAA004186AD /* NotesLoaderMidi.h */, + EE2153A710A75BEE0074B01B /* NotesLoaderPMS.cpp */, + EE2153A810A75BEE0074B01B /* NotesLoaderPMS.h */, + AA6EFDF504770C79005F316C /* NotesLoaderSM.cpp */, + AA6EFDF604770C79005F316C /* NotesLoaderSM.h */, + 2B76698A132FF71500586512 /* NotesLoaderSMA.cpp */, + 2B766989132FF71500586512 /* NotesLoaderSMA.h */, + 2BA7925A1304F20D002BD8E1 /* NotesLoaderSSC.cpp */, + 2BA7925B1304F20D002BD8E1 /* NotesLoaderSSC.h */, + AA6EFDF704770C79005F316C /* NotesWriterDWI.cpp */, + AA6EFDF804770C79005F316C /* NotesWriterDWI.h */, + AA6EFDF904770C79005F316C /* NotesWriterSM.cpp */, + AA6EFDFA04770C79005F316C /* NotesWriterSM.h */, + 2BA7925C1304F20D002BD8E1 /* NotesWriterSSC.cpp */, + 2BA7925D1304F20D002BD8E1 /* NotesWriterSSC.h */, + ); + name = NoteParsing; + sourceTree = ""; + }; + 2BDB87261371F7FF00E6FD3A /* extern */ = { + isa = PBXGroup; + children = ( + EE879B8E132E06C50078FDDC /* glew-1.5.8 */, + EE906F6F12BF3A5B00146C96 /* json */, + AA7C8A7F0B6744F600FD9940 /* libtommath */, + AA7C8B920B67467C00FD9940 /* libtomcrypt */, + AAE781870AC7E46E00AEFC64 /* lua-5.1 */, + AAA070B20CE7B3AD005A3060 /* mad-0.15.1b */, + AA8B6C7804AFD82B00D02EE9 /* pcre */, + ); + name = extern; + sourceTree = ""; + }; + AA60E0BB067992D7008ADC41 /* Threads */ = { + isa = PBXGroup; + children = ( + AA60E0BC067992D7008ADC41 /* Threads.h */, + AA60E0BD067992D7008ADC41 /* Threads_Pthreads.cpp */, + AA60E0BE067992D7008ADC41 /* Threads_Pthreads.h */, + ); + path = Threads; + sourceTree = ""; + }; + AA6E00090477103E005F316C /* Screens */ = { + isa = PBXGroup; + children = ( + AA6E000A047711F3005F316C /* Screen.cpp */, + AA6E000B047711F3005F316C /* Screen.h */, + AA6E0010047711F3005F316C /* ScreenAttract.cpp */, + AA6E0011047711F3005F316C /* ScreenAttract.h */, + AADBE360053D5F8A00D02EE9 /* ScreenBookkeeping.cpp */, + AADBE361053D5F8A00D02EE9 /* ScreenBookkeeping.h */, + AA2CA89D0BB745BD002441E9 /* ScreenContinue.cpp */, + AA2CA89E0BB745BD002441E9 /* ScreenContinue.h */, + AA07A5550843E72B00E33D21 /* ScreenDebugOverlay.cpp */, + AA07A5560843E72B00E33D21 /* ScreenDebugOverlay.h */, + AA6E001B047711F3005F316C /* ScreenDemonstration.cpp */, + AA6E001C047711F3005F316C /* ScreenDemonstration.h */, + AA21D59C0712ADE4008B825F /* ScreenDimensions.cpp */, + AA6EFE6104770CF7005F316C /* ScreenDimensions.h */, + AA6E001D047711F3005F316C /* ScreenEdit.cpp */, + AA6E001E047711F3005F316C /* ScreenEdit.h */, + AA6E001F047711F3005F316C /* ScreenEditMenu.cpp */, + AA6E0020047711F3005F316C /* ScreenEditMenu.h */, + AABE321A05ACD8ED001A0E84 /* ScreenEnding.cpp */, + AABE321B05ACD8ED001A0E84 /* ScreenEnding.h */, + AA6E0021047711F3005F316C /* ScreenEvaluation.cpp */, + AA6E0022047711F3005F316C /* ScreenEvaluation.h */, + AAECF8BF05265DB600D02EE9 /* ScreenExit.cpp */, + AAECF8C005265DB600D02EE9 /* ScreenExit.h */, + AA6E0029047711F3005F316C /* ScreenGameplay.cpp */, + AA6E002A047711F3005F316C /* ScreenGameplay.h */, + AACFBE4908E7D893005087FC /* ScreenGameplayLesson.cpp */, + AACFBE4A08E7D893005087FC /* ScreenGameplayLesson.h */, + 1215D7A008C6559A00B87D8B /* ScreenGameplayNormal.cpp */, + 1215D7A108C6559A00B87D8B /* ScreenGameplayNormal.h */, + AAD8F9330A4B97DF000311CF /* ScreenGameplayShared.cpp */, + AAD8F9320A4B97DF000311CF /* ScreenGameplayShared.h */, + AAB55EB509A7E3D3008FDC69 /* ScreenGameplaySyncMachine.cpp */, + AAB55EB609A7E3D3008FDC69 /* ScreenGameplaySyncMachine.h */, + 367D57590EDE56F200B46814 /* ScreenHighScores.cpp */, + 367D575A0EDE56F200B46814 /* ScreenHighScores.h */, + AA6E002F047711F3005F316C /* ScreenHowToPlay.cpp */, + AA6E0030047711F3005F316C /* ScreenHowToPlay.h */, + EE906F6412BF3A1B00146C96 /* ScreenInstallOverlay.cpp */, + EE906F6512BF3A1B00146C96 /* ScreenInstallOverlay.h */, + AA6E0033047711F3005F316C /* ScreenInstructions.cpp */, + AA6E0034047711F3005F316C /* ScreenInstructions.h */, + AA6E0037047711F3005F316C /* ScreenJukebox.cpp */, + AA6E0038047711F3005F316C /* ScreenJukebox.h */, + AA6E0041047711F3005F316C /* ScreenMapControllers.cpp */, + AA6E0042047711F3005F316C /* ScreenMapControllers.h */, + AA80C75B07F20D7F00C99272 /* ScreenMessage.cpp */, + AA6E0044047711F3005F316C /* ScreenMessage.h */, + AA6E0045047711F3005F316C /* ScreenMiniMenu.cpp */, + AA6E0046047711F3005F316C /* ScreenMiniMenu.h */, + AA6E0049047711F3005F316C /* ScreenNameEntry.cpp */, + AA6E004A047711F3005F316C /* ScreenNameEntry.h */, + AADBE362053D5F8A00D02EE9 /* ScreenNameEntryTraditional.cpp */, + AADBE363053D5F8A00D02EE9 /* ScreenNameEntryTraditional.h */, + AAB9C8B306EAF66C00AD97CD /* ScreenNetEvaluation.cpp */, + AAB9C8B406EAF66C00AD97CD /* ScreenNetEvaluation.h */, + AAF793F1074FE69E00D74516 /* ScreenNetRoom.cpp */, + AAF793F2074FE69E00D74516 /* ScreenNetRoom.h */, + AAF793F3074FE69E00D74516 /* ScreenNetSelectBase.cpp */, + AAF793F4074FE69E00D74516 /* ScreenNetSelectBase.h */, + AA22CBA306DE909C0083BA97 /* ScreenNetSelectMusic.cpp */, + AA22CBA406DE909C0083BA97 /* ScreenNetSelectMusic.h */, + AA42F5E6067068D30013509E /* ScreenNetworkOptions.cpp */, + AA42F5E7067068D30013509E /* ScreenNetworkOptions.h */, + AA6E004B047711F3005F316C /* ScreenOptions.cpp */, + AA6E004C047711F3005F316C /* ScreenOptions.h */, + 36CA531A0F91564A0063D59D /* ScreenOptionsCourseOverview.cpp */, + 36CA531B0F91564A0063D59D /* ScreenOptionsCourseOverview.h */, + 36CA531E0F9156860063D59D /* ScreenOptionsEditCourse.cpp */, + 36CA531F0F9156860063D59D /* ScreenOptionsEditCourse.h */, + AAFAB5BB0889098600767BF7 /* ScreenOptionsEditProfile.cpp */, + AAFAB5BC0889098600767BF7 /* ScreenOptionsEditProfile.h */, + AAFF41A10F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp */, + AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */, + AA77E75B08B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp */, + AA77E75C08B64B9A00FA24CA /* ScreenOptionsManageCourses.h */, + AAFBEEE5094D807E000029DE /* ScreenOptionsManageEditSteps.cpp */, + AAFBEEE6094D807E000029DE /* ScreenOptionsManageEditSteps.h */, + AA77E75D08B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp */, + AA77E75E08B64B9A00FA24CA /* ScreenOptionsManageProfiles.h */, + AA53D28405277DAF00D02EE9 /* ScreenOptionsMaster.cpp */, + AA53D28505277DAF00D02EE9 /* ScreenOptionsMaster.h */, + AA53D28605277DAF00D02EE9 /* ScreenOptionsMasterPrefs.cpp */, + AA53D28705277DAF00D02EE9 /* ScreenOptionsMasterPrefs.h */, + AAFBEEE7094D807E000029DE /* ScreenOptionsMemoryCard.cpp */, + AAFBEEE8094D807E000029DE /* ScreenOptionsMemoryCard.h */, + AAA7D4C70C7E872500FB8F78 /* ScreenOptionsToggleSongs.cpp */, + AAA7D4C80C7E872500FB8F78 /* ScreenOptionsToggleSongs.h */, + AA1145D9075DFADF0050A3D1 /* ScreenPackages.cpp */, + AA1145DA075DFADF0050A3D1 /* ScreenPackages.h */, + EEA7C84110A805A300082E7B /* ScreenPackagesSSC.cpp */, + EEA7C84210A805A300082E7B /* ScreenPackagesSSC.h */, + AA6E004F047711F3005F316C /* ScreenPlayerOptions.cpp */, + AA6E0050047711F3005F316C /* ScreenPlayerOptions.h */, + AA18935C0BD777C400AEC0BF /* ScreenProfileLoad.cpp */, + AA18935D0BD777C400AEC0BF /* ScreenProfileLoad.h */, + AA18935E0BD777C400AEC0BF /* ScreenProfileSave.cpp */, + AA18935F0BD777C400AEC0BF /* ScreenProfileSave.h */, + AA6E0051047711F3005F316C /* ScreenPrompt.cpp */, + AA6E0052047711F3005F316C /* ScreenPrompt.h */, + AA6E0053047711F3005F316C /* ScreenRanking.cpp */, + AA6E0054047711F3005F316C /* ScreenRanking.h */, + AA53D28805277DAF00D02EE9 /* ScreenReloadSongs.cpp */, + AA53D28905277DAF00D02EE9 /* ScreenReloadSongs.h */, + AA6E0057047711F3005F316C /* ScreenSandbox.cpp */, + AA6E0058047711F3005F316C /* ScreenSandbox.h */, + AA07A5590843E72B00E33D21 /* ScreenSaveSync.cpp */, + AA07A55A0843E72B00E33D21 /* ScreenSaveSync.h */, + AA6E0059047711F3005F316C /* ScreenSelect.cpp */, + AA6E005A047711F3005F316C /* ScreenSelect.h */, + AA6E005B047711F3005F316C /* ScreenSelectCharacter.cpp */, + AA6E005C047711F3005F316C /* ScreenSelectCharacter.h */, + AA2E9FFF0A770208003A0C11 /* ScreenSelectLanguage.cpp */, + AA2EA0000A770208003A0C11 /* ScreenSelectLanguage.h */, + AA1DC47404A4861700D02EE9 /* ScreenSelectMaster.cpp */, + AA1DC47504A4861700D02EE9 /* ScreenSelectMaster.h */, + AA6E0069047711F3005F316C /* ScreenSelectMusic.cpp */, + AA6E006A047711F3005F316C /* ScreenSelectMusic.h */, + AAB3B7DA0C6C582D001BF487 /* ScreenSelectProfile.cpp */, + AAB3B7DB0C6C582D001BF487 /* ScreenSelectProfile.h */, + AAFBEEE9094D807E000029DE /* ScreenServiceAction.cpp */, + AAFBEEEA094D807E000029DE /* ScreenServiceAction.h */, + AA0A3DE6060513A00044E6B1 /* ScreenSetTime.cpp */, + AA0A3DE7060513A00044E6B1 /* ScreenSetTime.h */, + AA07A55B0843E72B00E33D21 /* ScreenSMOnlineLogin.cpp */, + AA07A55C0843E72B00E33D21 /* ScreenSMOnlineLogin.h */, + AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */, + AA6E0070047711F3005F316C /* ScreenSongOptions.h */, + AAB6B475085761B700CEE7BA /* ScreenSplash.cpp */, + AAB6B476085761B700CEE7BA /* ScreenSplash.h */, + AAF34AEB0900B00C0006EDB7 /* ScreenStatsOverlay.cpp */, + AAF34AEC0900B00C0006EDB7 /* ScreenStatsOverlay.h */, + AA07A55D0843E72B00E33D21 /* ScreenSyncOverlay.cpp */, + AA07A55E0843E72B00E33D21 /* ScreenSyncOverlay.h */, + AA1145DB075DFADF0050A3D1 /* ScreenSystemLayer.cpp */, + AA1145DC075DFADF0050A3D1 /* ScreenSystemLayer.h */, + AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */, + AA6E007A047711F3005F316C /* ScreenTestFonts.h */, + AAC622FA05389A0500D02EE9 /* ScreenTestInput.cpp */, + AAC622FB05389A0500D02EE9 /* ScreenTestInput.h */, + AAF7435906110E8D00B19AD1 /* ScreenTestLights.cpp */, + AAF7435A06110E8D00B19AD1 /* ScreenTestLights.h */, + AA6E007B047711F3005F316C /* ScreenTestSound.cpp */, + AA6E007C047711F3005F316C /* ScreenTestSound.h */, + AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */, + AA6E007E047711F3005F316C /* ScreenTextEntry.h */, + AA6E007F047711F3005F316C /* ScreenTitleMenu.cpp */, + AA6E0080047711F3005F316C /* ScreenTitleMenu.h */, + AAB55EB709A7E3D3008FDC69 /* ScreenUnlockBrowse.cpp */, + AAB55EB809A7E3D3008FDC69 /* ScreenUnlockBrowse.h */, + AAB55EB909A7E3D3008FDC69 /* ScreenUnlockCelebrate.cpp */, + AAB55EBA09A7E3D3008FDC69 /* ScreenUnlockCelebrate.h */, + AA658779098C322800CE55CC /* ScreenUnlockStatus.cpp */, + AA65877A098C322800CE55CC /* ScreenUnlockStatus.h */, + AAA6BFEA0644AB3700AFBBC8 /* ScreenWithMenuElements.cpp */, + AAA6BFEB0644AB3700AFBBC8 /* ScreenWithMenuElements.h */, + ); + name = Screens; + sourceTree = ""; + }; + AA6E00FE047711FF005F316C /* GlobalSingletons */ = { + isa = PBXGroup; + children = ( + AA6E00FF0477128A005F316C /* AnnouncerManager.cpp */, + AA6E01000477128A005F316C /* AnnouncerManager.h */, + AADBE368053DA38C00D02EE9 /* Bookkeeper.cpp */, + AADBE369053DA38C00D02EE9 /* Bookkeeper.h */, + AA77E74508B64B1400FA24CA /* CharacterManager.cpp */, + AA77E74608B64B1400FA24CA /* CharacterManager.h */, + AAC0BFDF0E2951EC00F56EEB /* CryptHelpers.cpp */, + AAC0BFE00E2951EC00F56EEB /* CryptHelpers.h */, + AABD0B3605DF3F22004F7929 /* CryptManager.cpp */, + AABD0B3705DF3F22004F7929 /* CryptManager.h */, + AA6E01010477128A005F316C /* GameManager.cpp */, + AA6E01020477128A005F316C /* GameManager.h */, + AAC9F32E069E22BB00D53E2C /* GameSoundManager.cpp */, + AAC9F32F069E22BB00D53E2C /* GameSoundManager.h */, + AA6E01030477128A005F316C /* GameState.cpp */, + AA6E01040477128A005F316C /* GameState.h */, + AA6E01050477128A005F316C /* InputFilter.cpp */, + AA6E01060477128A005F316C /* InputFilter.h */, + AA6E01070477128A005F316C /* InputMapper.cpp */, + AA6E01080477128A005F316C /* InputMapper.h */, + AA6E01090477128A005F316C /* InputQueue.cpp */, + AA6E010A0477128A005F316C /* InputQueue.h */, + AAC6DCE30567660A00B5D56F /* LightsManager.cpp */, + AAC6DCE40567660A00B5D56F /* LightsManager.h */, + AA8EE0750866E266002C51A7 /* LuaBinding.cpp */, + AAEBC78C07A4FF5600793F0E /* LuaBinding.h */, + AAEBC78D07A4FF5600793F0E /* LuaManager.cpp */, + AAEBC78E07A4FF5600793F0E /* LuaManager.h */, + AA8BD2A107C9391B00EA04E1 /* LuaReference.cpp */, + AA8BD2A207C9391B00EA04E1 /* LuaReference.h */, + AA28B47A058F2F5D0097C109 /* MemoryCardManager.cpp */, + AA28B47B058F2F5D0097C109 /* MemoryCardManager.h */, + AA8BD2A307C9391B00EA04E1 /* MessageManager.cpp */, + AA8BD2A407C9391B00EA04E1 /* MessageManager.h */, + AAF4206505D63FA700056441 /* ModelManager.cpp */, + AAF4206605D63FA700056441 /* ModelManager.h */, + AAE78049060814AC0034E65F /* NetworkSyncManager.cpp */, + AAE7804A060814AC0034E65F /* NetworkSyncManager.h */, + AA6E010B0477128A005F316C /* NoteSkinManager.cpp */, + AA6E010C0477128A005F316C /* NoteSkinManager.h */, + AA6E010D0477128A005F316C /* PrefsManager.cpp */, + AA6E010E0477128A005F316C /* PrefsManager.h */, + AA1C6556050D234B0073A143 /* ProfileManager.cpp */, + AA1C6557050D234B0073A143 /* ProfileManager.h */, + AAB0085F057F4F7A000BBA58 /* RageFileManager.cpp */, + AAB00860057F4F7A000BBA58 /* RageFileManager.h */, + AA6EFD7404770A7C005F316C /* RageInput.cpp */, + AA6EFD7504770A7C005F316C /* RageInput.h */, + AA6EFD7804770A7C005F316C /* RageLog.cpp */, + AA6EFD7904770A7C005F316C /* RageLog.h */, + AA6EFD7E04770A7C005F316C /* RageSoundManager.cpp */, + AA6EFD7F04770A7C005F316C /* RageSoundManager.h */, + AA6EFD8B04770A7C005F316C /* RageTextureManager.cpp */, + AA6EFD8C04770A7C005F316C /* RageTextureManager.h */, + AA6E003F047711F3005F316C /* ScreenManager.cpp */, + AA6E0040047711F3005F316C /* ScreenManager.h */, + AA6E01DE04772005005F316C /* SongCacheIndex.cpp */, + AA6E01DF04772005005F316C /* SongCacheIndex.h */, + AA6E010F0477128A005F316C /* SongManager.cpp */, + AA6E01100477128A005F316C /* SongManager.h */, + AA8BD2A507C9391B00EA04E1 /* StatsManager.cpp */, + AA8BD2A607C9391B00EA04E1 /* StatsManager.h */, + AA8BD2A707C9391B00EA04E1 /* SubscriptionManager.h */, + AA6E01120477128A005F316C /* ThemeManager.cpp */, + AA6E01130477128A005F316C /* ThemeManager.h */, + AA80C75207F20D0D00C99272 /* UnlockManager.cpp */, + AA80C75307F20D0D00C99272 /* UnlockManager.h */, + ); + name = GlobalSingletons; + sourceTree = ""; + }; + AA6E012D04771299005F316C /* Sound */ = { + isa = PBXGroup; + children = ( + AA608FAC0B0F9A4E00B39AC4 /* RageSoundDriver.cpp */, + AABE37030497CF85005F316C /* RageSoundDriver.h */, + AA8CF5160A4518BE0005F1B4 /* RageSoundDriver_AU.cpp */, + AA8CF5150A4518BE0005F1B4 /* RageSoundDriver_AU.h */, + AA1CD941060AE571003702C4 /* RageSoundDriver_Generic_Software.cpp */, + AA6E012E047712BE005F316C /* RageSoundDriver_Null.cpp */, + AA6E012F047712BE005F316C /* RageSoundDriver_Null.h */, + ); + path = Sound; + sourceTree = ""; + }; + AA6E01400477136A005F316C /* arch */ = { + isa = PBXGroup; + children = ( + AABE36F60497CE16005F316C /* arch_default.h */, + AABE36FE0497CE67005F316C /* ArchHooks */, + AAD675EE06795175006002B0 /* Dialog */, + AA6E01540477136A005F316C /* InputHandler */, + AAC6DCED0567663800B5D56F /* Lights */, + AA6E015A0477136A005F316C /* LoadingWindow */, + AA6E01620477136A005F316C /* LowLevelWindow */, + AABE78720591287100E8BF50 /* MemoryCard */, + AA6E01DD04771F19005F316C /* MovieTexture */, + AA909E1D0B45B676002852D3 /* RageDriver.cpp */, + AA909E1E0B45B676002852D3 /* RageDriver.h */, + AA6E012D04771299005F316C /* Sound */, + AA60E0BB067992D7008ADC41 /* Threads */, + ); + name = arch; + path = ../src/arch; + sourceTree = ""; + }; + AA6E01540477136A005F316C /* InputHandler */ = { + isa = PBXGroup; + children = ( + AAB3B36B04C38B4600D02EE9 /* InputHandler.cpp */, + AAB3B36C04C38B4600D02EE9 /* InputHandler.h */, + AA6C6B0C0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.cpp */, + AA6C6B0D0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.h */, + AAFC6CEF072A30440053AAD3 /* InputHandler_MonkeyKeyboard.cpp */, + AAFC6CF0072A30440053AAD3 /* InputHandler_MonkeyKeyboard.h */, + ); + path = InputHandler; + sourceTree = ""; + }; + AA6E015A0477136A005F316C /* LoadingWindow */ = { + isa = PBXGroup; + children = ( + AA909E260B45B6AB002852D3 /* LoadingWindow.cpp */, + AAEF3D1004B53E2900D02EE9 /* LoadingWindow.h */, + AA6C6AE20DC6B22800E7A13E /* LoadingWindow_MacOSX.h */, + AA6C6AE30DC6B22800E7A13E /* LoadingWindow_MacOSX.mm */, + AA339A7D0BF0FA6300E1475F /* LoadingWindow_Null.h */, + ); + path = LoadingWindow; + sourceTree = ""; + }; + AA6E01620477136A005F316C /* LowLevelWindow */ = { + isa = PBXGroup; + children = ( + AA909E230B45B696002852D3 /* LowLevelWindow.cpp */, + AA6E01630477136A005F316C /* LowLevelWindow.h */, + AA6C6B000DC6B2B400E7A13E /* LowLevelWindow_MacOSX.h */, + AA6C6B010DC6B2B400E7A13E /* LowLevelWindow_MacOSX.mm */, + ); + path = LowLevelWindow; + sourceTree = ""; + }; + AA6E017E0477136A005F316C /* archutils */ = { + isa = PBXGroup; + children = ( + AADB4E8E04D5263200D02EE9 /* Darwin */, + AADB4E8604D50FB900D02EE9 /* Unix */, + ); + name = archutils; + path = ../src/archutils; + sourceTree = ""; + }; + AA6E01DD04771F19005F316C /* MovieTexture */ = { + isa = PBXGroup; + children = ( + AA6E01DB04771F11005F316C /* MovieTexture.cpp */, + AAB3B37704C38BF600D02EE9 /* MovieTexture.h */, + AA14ED0F0509F40000E3FAD7 /* MovieTexture_FFMpeg.cpp */, + AA14ED100509F40000E3FAD7 /* MovieTexture_FFMpeg.h */, + AAA372D00909934500141131 /* MovieTexture_Generic.cpp */, + AAA372D10909934500141131 /* MovieTexture_Generic.h */, + AAB3B39004C5921800D02EE9 /* MovieTexture_Null.cpp */, + AAB3B39104C5921800D02EE9 /* MovieTexture_Null.h */, + AAA372D20909934500141131 /* MovieTexture_Theora.cpp */, + AAA372D30909934500141131 /* MovieTexture_Theora.h */, + ); + name = MovieTexture; + sourceTree = ""; + }; + AA6EFDBB04770A83005F316C /* Rage */ = { + isa = PBXGroup; + children = ( + AA6EFD6D04770A7C005F316C /* RageBitmapTexture.cpp */, + AA6EFD6E04770A7C005F316C /* RageBitmapTexture.h */, + AA6EFD6F04770A7C005F316C /* RageDisplay.cpp */, + AA6EFD7004770A7C005F316C /* RageDisplay.h */, + EE879B5E132DEE720078FDDC /* RageDisplay_Legacy.cpp */, + EE879B5F132DEE720078FDDC /* RageDisplay_Legacy.h */, + EE879B5C132DEE720078FDDC /* RageDisplay_Legacy_Helpers.cpp */, + EE879B5D132DEE720078FDDC /* RageDisplay_Legacy_Helpers.h */, + AAF7458E061181F700B19AD1 /* RageDisplay_Null.cpp */, + AAF7458F061181F700B19AD1 /* RageDisplay_Null.h */, + AA6EFD7204770A7C005F316C /* RageException.cpp */, + AA6EFD7304770A7C005F316C /* RageException.h */, + AA272C3004CD757100D02EE9 /* RageFile.cpp */, + AA272C3104CD757100D02EE9 /* RageFile.h */, + AA0E04CE076C4CD500716D81 /* RageFileBasic.cpp */, + AA0E04CF076C4CD500716D81 /* RageFileBasic.h */, + AAB0085B057F4F7A000BBA58 /* RageFileDriver.cpp */, + AAB0085C057F4F7A000BBA58 /* RageFileDriver.h */, + AA0E04D0076C4CD500716D81 /* RageFileDriverDeflate.cpp */, + AA0E04D1076C4CD500716D81 /* RageFileDriverDeflate.h */, + AAB0085D057F4F7A000BBA58 /* RageFileDriverDirect.cpp */, + AAB0085E057F4F7A000BBA58 /* RageFileDriverDirect.h */, + AABE322205ACDA52001A0E84 /* RageFileDriverDirectHelpers.cpp */, + AABE322305ACDA52001A0E84 /* RageFileDriverDirectHelpers.h */, + AA64218606EC606F00C21584 /* RageFileDriverMemory.cpp */, + AA64218706EC606F00C21584 /* RageFileDriverMemory.h */, + 36C6887F11297FFE00453295 /* RageFileDriverReadAhead.cpp */, + 36C6888011297FFE00453295 /* RageFileDriverReadAhead.h */, + AA0E04D2076C4CD500716D81 /* RageFileDriverSlice.cpp */, + AA0E04D3076C4CD500716D81 /* RageFileDriverSlice.h */, + AACA592A07B5E23400763545 /* RageFileDriverTimeout.cpp */, + AACA592B07B5E23400763545 /* RageFileDriverTimeout.h */, + AA251B7505841FCE00027ACB /* RageFileDriverZip.cpp */, + AA251B7605841FCE00027ACB /* RageFileDriverZip.h */, + 36C6888111297FFE00453295 /* RageFileManager_ReadAhead.cpp */, + 36C6888211297FFE00453295 /* RageFileManager_ReadAhead.h */, + AA6EFD7604770A7C005F316C /* RageInputDevice.cpp */, + AA6EFD7704770A7C005F316C /* RageInputDevice.h */, + AA6EFD7A04770A7C005F316C /* RageMath.cpp */, + AA6EFD7B04770A7C005F316C /* RageMath.h */, + AAF4206905D6400800056441 /* RageModelGeometry.cpp */, + AAF4206A05D6400800056441 /* RageModelGeometry.h */, + AA6EFD7C04770A7C005F316C /* RageSound.cpp */, + AA6EFD7D04770A7C005F316C /* RageSound.h */, + AAAB2CE1072BD2FA00CD9FC9 /* RageSoundMixBuffer.cpp */, + AAAB2CE2072BD2FA00CD9FC9 /* RageSoundMixBuffer.h */, + AAD36082062BB8AE00D0CED8 /* RageSoundPosMap.cpp */, + AAD36083062BB8AE00D0CED8 /* RageSoundPosMap.h */, + AAFB549D0B1BC32700FC3A81 /* RageSoundReader.cpp */, + AA6EFD8604770A7C005F316C /* RageSoundReader.h */, + AA7ADC23072CAB7F00C50A7F /* RageSoundReader_Chain.cpp */, + AA7ADC24072CAB7F00C50A7F /* RageSoundReader_Chain.h */, + AA4F27AE0B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.cpp */, + AA4F27AF0B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.h */, + AA909E390B45B8FA002852D3 /* RageSoundReader_Extend.cpp */, + AA909E3A0B45B8FA002852D3 /* RageSoundReader_Extend.h */, + AAFC7FF00513A67700D02EE9 /* RageSoundReader_FileReader.cpp */, + AADB4E7A04D4FE5D00D02EE9 /* RageSoundReader_FileReader.h */, + AA31D51B0B1EC6540016AB6B /* RageSoundReader_Filter.h */, + AA3396B60BDE195E00E1475F /* RageSoundReader_Merge.cpp */, + AA3396B70BDE195E00E1475F /* RageSoundReader_Merge.h */, + AAFC7FF10513A67700D02EE9 /* RageSoundReader_MP3.cpp */, + AAFC7FF20513A67700D02EE9 /* RageSoundReader_MP3.h */, + AA4F27B00B2C01B400ADEA79 /* RageSoundReader_Pan.cpp */, + AA4F27B10B2C01B400ADEA79 /* RageSoundReader_Pan.h */, + AA31D51C0B1EC6540016AB6B /* RageSoundReader_PitchChange.cpp */, + AA31D51D0B1EC6540016AB6B /* RageSoundReader_PitchChange.h */, + AA0700880B61F177003B85BB /* RageSoundReader_PostBuffering.cpp */, + AA0700890B61F177003B85BB /* RageSoundReader_PostBuffering.h */, + AA6EFD8004770A7C005F316C /* RageSoundReader_Preload.cpp */, + AA6EFD8104770A7C005F316C /* RageSoundReader_Preload.h */, + AAAE28F4052254A900D02EE9 /* RageSoundReader_Resample_Good.cpp */, + AAAE28F5052254A900D02EE9 /* RageSoundReader_Resample_Good.h */, + AA31D51E0B1EC6540016AB6B /* RageSoundReader_SpeedChange.cpp */, + AA31D51F0B1EC6540016AB6B /* RageSoundReader_SpeedChange.h */, + AA909E3B0B45B8FA002852D3 /* RageSoundReader_ThreadedBuffer.cpp */, + AA909E3C0B45B8FA002852D3 /* RageSoundReader_ThreadedBuffer.h */, + AA1C65A4050FD21F0073A143 /* RageSoundReader_Vorbisfile.cpp */, + AA1C65A5050FD21F0073A143 /* RageSoundReader_Vorbisfile.h */, + AA1C65A6050FD21F0073A143 /* RageSoundReader_WAV.cpp */, + AA1C65A7050FD21F0073A143 /* RageSoundReader_WAV.h */, + AA7ADC25072CAB7F00C50A7F /* RageSoundUtil.cpp */, + AA7ADC26072CAB7F00C50A7F /* RageSoundUtil.h */, + AA915879067D2C2C00078E36 /* RageSurface.cpp */, + AA91587A067D2C2C00078E36 /* RageSurface.h */, + AABBF6740659E78D00738526 /* RageSurface_Load.cpp */, + AABBF6750659E78D00738526 /* RageSurface_Load.h */, + AA90919F067ED43000C1FCFF /* RageSurface_Load_BMP.cpp */, + AA9091A0067ED43000C1FCFF /* RageSurface_Load_BMP.h */, + AABBF66C0659E78D00738526 /* RageSurface_Load_GIF.cpp */, + AABBF66D0659E78D00738526 /* RageSurface_Load_GIF.h */, + AABBF66E0659E78D00738526 /* RageSurface_Load_JPEG.cpp */, + AABBF66F0659E78D00738526 /* RageSurface_Load_JPEG.h */, + AABBF6700659E78D00738526 /* RageSurface_Load_PNG.cpp */, + AABBF6710659E78D00738526 /* RageSurface_Load_PNG.h */, + AABBF6720659E78D00738526 /* RageSurface_Load_XPM.cpp */, + AABBF6730659E78D00738526 /* RageSurface_Load_XPM.h */, + AA9091A3067ED46400C1FCFF /* RageSurface_Save_BMP.cpp */, + AA9091A4067ED46400C1FCFF /* RageSurface_Save_BMP.h */, + AAEBC6C607A20AFE00793F0E /* RageSurface_Save_JPEG.cpp */, + AAEBC6C707A20AFE00793F0E /* RageSurface_Save_JPEG.h */, + AAFE711C0A91B551005F2290 /* RageSurface_Save_PNG.cpp */, + AAFE71280A91B58F005F2290 /* RageSurface_Save_PNG.h */, + AAB9C8AD06EAF64400AD97CD /* RageSurfaceUtils.cpp */, + AAB9C8AE06EAF64400AD97CD /* RageSurfaceUtils.h */, + AAEBC6C807A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp */, + AAEBC6C907A20AFE00793F0E /* RageSurfaceUtils_Dither.h */, + AAB9C8AB06EAF64400AD97CD /* RageSurfaceUtils_Palettize.cpp */, + AAB9C8AC06EAF64400AD97CD /* RageSurfaceUtils_Palettize.h */, + AAEBC6CA07A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp */, + AAEBC6CB07A20AFE00793F0E /* RageSurfaceUtils_Zoom.h */, + AA6EFD8904770A7C005F316C /* RageTexture.cpp */, + AA6EFD8A04770A7C005F316C /* RageTexture.h */, + AA9EC2F0055F5126007E5098 /* RageTextureID.cpp */, + AA9EC2F1055F5126007E5098 /* RageTextureID.h */, + AA91ACAF0878BB2C00FB2F8F /* RageTexturePreloader.cpp */, + AA91ACB00878BB2C00FB2F8F /* RageTexturePreloader.h */, + AA5D16550A79805C00F17E86 /* RageTextureRenderTarget.cpp */, + AA5D16560A79805C00F17E86 /* RageTextureRenderTarget.h */, + AA6EFD8D04770A7C005F316C /* RageThreads.cpp */, + AA6EFD8E04770A7C005F316C /* RageThreads.h */, + AA6EFD8F04770A7C005F316C /* RageTimer.cpp */, + AA6EFD9004770A7C005F316C /* RageTimer.h */, + AAE77F570AC3B52500AEFC64 /* RageTypes.cpp */, + AA6EFD9104770A7C005F316C /* RageTypes.h */, + AA6EFD9204770A7C005F316C /* RageUtil.cpp */, + AA6EFD9304770A7C005F316C /* RageUtil.h */, + AACA592C07B5E23400763545 /* RageUtil_AutoPtr.h */, + AA8A404F06EEFF72002F25AB /* RageUtil_BackgroundLoader.cpp */, + AA8A405006EEFF72002F25AB /* RageUtil_BackgroundLoader.h */, + AAB3BB570C718F2C001BF487 /* RageUtil_CachedObject.cpp */, + AAB3BB580C718F2C001BF487 /* RageUtil_CachedObject.h */, + AAC23F7E0485E68D005F316C /* RageUtil_CharConversions.cpp */, + AAC23F7F0485E68D005F316C /* RageUtil_CharConversions.h */, + AAD3D5AB05B5AB4E00014FAC /* RageUtil_CircularBuffer.h */, + AAF580A704B3E2DC00D02EE9 /* RageUtil_FileDB.cpp */, + AAF580A804B3E2DC00D02EE9 /* RageUtil_FileDB.h */, + AACA592D07B5E23400763545 /* RageUtil_WorkerThread.cpp */, + AACA592E07B5E23400763545 /* RageUtil_WorkerThread.h */, + ); + name = Rage; + sourceTree = ""; + }; + AA6EFDC804770AF1005F316C /* DataStructures */ = { + isa = PBXGroup; + children = ( + AA84B7050996F8370085EECB /* AdjustSync.cpp */, + AA84B7060996F8370085EECB /* AdjustSync.h */, + AAFF5541054E736D00D02EE9 /* Attack.cpp */, + AAFF5542054E736D00D02EE9 /* Attack.h */, + AAAB2CDD072BD2EC00CD9FC9 /* AutoKeysounds.cpp */, + AAAB2CDE072BD2EC00CD9FC9 /* AutoKeysounds.h */, + AA7DA2EF085760E90057F1EA /* BackgroundUtil.cpp */, + AA7DA2F0085760E90057F1EA /* BackgroundUtil.h */, + AABE35EB04967E25005F316C /* BannerCache.cpp */, + AABE35EC04967E26005F316C /* BannerCache.h */, + AA6EFDCB04770C79005F316C /* Character.cpp */, + AA6EFDCC04770C79005F316C /* Character.h */, + AA6EFDCD04770C79005F316C /* CodeDetector.cpp */, + AA6EFDCE04770C79005F316C /* CodeDetector.h */, + AA2C9C9F0BAD6F54002441E9 /* CodeSet.cpp */, + AA2C9CA00BAD6F54002441E9 /* CodeSet.h */, + AA1B08370762532800835464 /* Command.cpp */, + AA1B08380762532800835464 /* Command.h */, + AA8BD2C607C93A1E00EA04E1 /* CommonMetrics.cpp */, + AA3A705E06AA144C006F755E /* CommonMetrics.h */, + AA6EFDCF04770C79005F316C /* Course.cpp */, + AA6EFDD004770C79005F316C /* Course.h */, + AA77E74B08B64B5600FA24CA /* CourseLoaderCRS.cpp */, + AA77E74C08B64B5600FA24CA /* CourseLoaderCRS.h */, + AA5C73F70637A5F000AFB891 /* CourseUtil.cpp */, + AA5C73F80637A5F000AFB891 /* CourseUtil.h */, + AA77E74D08B64B5600FA24CA /* CourseWriterCRS.cpp */, + AA77E74E08B64B5600FA24CA /* CourseWriterCRS.h */, + AA3D793106A279530064B980 /* DateTime.cpp */, + AA3D793206A279530064B980 /* DateTime.h */, + AAD6A712065E0FDF0042165A /* Difficulty.cpp */, + AAD6A713065E0FDF0042165A /* Difficulty.h */, + AA07328B0954381800F396C5 /* DisplayResolutions.h */, + AAFAFC8E0AC8DB9F00427A6E /* EnumHelper.cpp */, + AA8F136F0624BAB200C6A467 /* EnumHelper.h */, + AAE7808506081A000034E65F /* ezsockets.cpp */, + AAE7808606081A000034E65F /* ezsockets.h */, + EE906F8812BF3C7C00146C96 /* FileDownload.cpp */, + EE906F8912BF3C7C00146C96 /* FileDownload.h */, + AA6EFDD104770C79005F316C /* Font.cpp */, + AA6EFDD204770C79005F316C /* Font.h */, + AA6EFDD304770C79005F316C /* FontCharAliases.cpp */, + AA6EFDD404770C79005F316C /* FontCharAliases.h */, + AA6EFDD504770C79005F316C /* FontCharmaps.cpp */, + AA6EFDD604770C79005F316C /* FontCharmaps.h */, + AA6EFDD704770C79005F316C /* FontManager.cpp */, + AA6EFDD804770C79005F316C /* FontManager.h */, + AA9A78A906B5C72200B03E97 /* Game.cpp */, + AA9A78AA06B5C72200B03E97 /* Game.h */, + AA1B08390762532800835464 /* GameCommand.cpp */, + AA1B083A0762532800835464 /* GameCommand.h */, + AA6EFDD904770C79005F316C /* GameConstantsAndTypes.cpp */, + AA6EFDDA04770C79005F316C /* GameConstantsAndTypes.h */, + AA6EFDDD04770C79005F316C /* GameInput.cpp */, + AA6EFDDE04770C79005F316C /* GameInput.h */, + AA7C8DAC0B68CB2200FD9940 /* GameplayAssist.cpp */, + AA7C8DAD0B68CB2200FD9940 /* GameplayAssist.h */, + AA6090E40B141D1C00B39AC4 /* GamePreferences.cpp */, + AA6090E50B141D1C00B39AC4 /* GamePreferences.h */, + AA6EFDDF04770C79005F316C /* Grade.cpp */, + AA6EFDE004770C79005F316C /* Grade.h */, + AABBD80605D8E9FC00B44FC2 /* HighScore.cpp */, + AABBD80705D8E9FC00B44FC2 /* HighScore.h */, + AACFBE3908E7D832005087FC /* InputEventPlus.h */, + EE906F8012BF3AF800146C96 /* JsonUtil.cpp */, + EE906F8112BF3AF800146C96 /* JsonUtil.h */, + AADD1CC2095C233E0088C9DF /* LocalizedString.cpp */, + AADD1CC3095C233F0088C9DF /* LocalizedString.h */, + AACFBE6108E7DBA8005087FC /* LuaExpressionTransform.cpp */, + AACFBE6208E7DBA8005087FC /* LuaExpressionTransform.h */, + AA6EFDE304770C79005F316C /* LyricsLoader.cpp */, + AA6EFDE404770C79005F316C /* LyricsLoader.h */, + AABE830D0A9524D400001678 /* ModsGroup.cpp */, + AA5A51F20A8441AA006DBB92 /* ModsGroup.h */, + AA6EFDE504770C79005F316C /* NoteData.cpp */, + AA6EFDE604770C79005F316C /* NoteData.h */, + AA4F38C004E2D0B700D02EE9 /* NoteDataUtil.cpp */, + AA4F38C104E2D0B700D02EE9 /* NoteDataUtil.h */, + AA6EFDE704770C79005F316C /* NoteDataWithScoring.cpp */, + AA6EFDE804770C79005F316C /* NoteDataWithScoring.h */, + AA6EFDFB04770C79005F316C /* NoteTypes.cpp */, + AA6EFDFC04770C79005F316C /* NoteTypes.h */, + AA80C75707F20D6600C99272 /* OptionRowHandler.cpp */, + AA80C75807F20D6600C99272 /* OptionRowHandler.h */, + AA6EFDFF04770C79005F316C /* PlayerAI.cpp */, + AA6EFE0004770C79005F316C /* PlayerAI.h */, + AA6EFE0104770C79005F316C /* PlayerNumber.cpp */, + AA6EFE0204770C79005F316C /* PlayerNumber.h */, + AA6EFE0304770C79005F316C /* PlayerOptions.cpp */, + AA6EFE0404770C79005F316C /* PlayerOptions.h */, + AA8BD2B807C939F800EA04E1 /* PlayerStageStats.cpp */, + AA8BD2B907C939F800EA04E1 /* PlayerStageStats.h */, + AA8BD2BA07C939F800EA04E1 /* PlayerState.cpp */, + AAEBC78F07A4FF5600793F0E /* PlayerState.h */, + AA1B083B0762532800835464 /* Preference.cpp */, + AA54709106F559DF008EB9B2 /* Preference.h */, + AA50201D05D6D7B200ACEFD0 /* Profile.cpp */, + AA50201E05D6D7B200ACEFD0 /* Profile.h */, + AA3D78FF06A275E90064B980 /* RadarValues.cpp */, + AA3D790006A275E90064B980 /* RadarValues.h */, + AA6E01E6047720A3005F316C /* RandomSample.cpp */, + AA6E01E7047720A3005F316C /* RandomSample.h */, + AAEBF55E0B5C517E005F3C7C /* SampleHistory.cpp */, + AAEBF55F0B5C517E005F3C7C /* SampleHistory.h */, + AAE2D6D30A67481E00071546 /* ScoreKeeper.cpp */, + AA6EFF3004770F63005F316C /* ScoreKeeper.h */, + AAB779F90B0D9CB200B74314 /* ScoreKeeperGuitar.cpp */, + AAB779FA0B0D9CB200B74314 /* ScoreKeeperGuitar.h */, + AAF34ADC0900AEBD0006EDB7 /* ScoreKeeperNormal.cpp */, + AAF34ADD0900AEBD0006EDB7 /* ScoreKeeperNormal.h */, + AAE443F304B0FEB700D02EE9 /* ScoreKeeperRave.cpp */, + AAE443F404B0FEB700D02EE9 /* ScoreKeeperRave.h */, + AAAA11C50A662F9C00B2BD88 /* ScoreKeeperShared.cpp */, + AAAA11C40A662F9C00B2BD88 /* ScoreKeeperShared.h */, + AA6E01E20477205A005F316C /* Song.cpp */, + AA7CDD930D8395F90001DAFC /* Song.h */, + AA6EFE0704770C79005F316C /* SongOptions.cpp */, + AA6EFE0804770C79005F316C /* SongOptions.h */, + AA5C73F90637A5F000AFB891 /* SongUtil.cpp */, + AA5C73FA0637A5F000AFB891 /* SongUtil.h */, + AAEBF57C0B5C83F4005F3C7C /* SoundEffectControl.cpp */, + AAEBF57D0B5C83F4005F3C7C /* SoundEffectControl.h */, + AA6EFE0904770C79005F316C /* StageStats.cpp */, + AA6EFE0A04770C79005F316C /* StageStats.h */, + AAF430FD04DC98BC00D02EE9 /* Steps.cpp */, + AAF430FE04DC98BC00D02EE9 /* Steps.h */, + AA5C73FB0637A5F000AFB891 /* StepsUtil.cpp */, + AA5C73FC0637A5F000AFB891 /* StepsUtil.h */, + AA139C4606923EBE00C1F6ED /* Style.cpp */, + AA25200D0587225500027ACB /* Style.h */, + AA3A706006AA1645006F755E /* StyleUtil.cpp */, + AA3A706106AA1645006F755E /* StyleUtil.h */, + AA21D5A10712AE16008B825F /* ThemeMetric.h */, + AA729C420599B50D00779F33 /* TimingData.cpp */, + AA729C430599B50D00779F33 /* TimingData.h */, + AA6EFE0E04770C79005F316C /* TitleSubstitution.cpp */, + AA6EFE0F04770C79005F316C /* TitleSubstitution.h */, + AA70E3650663112800DAE1FD /* Trail.cpp */, + AA70E3660663112800DAE1FD /* Trail.h */, + AA70E3670663112800DAE1FD /* TrailUtil.cpp */, + AA70E3680663112800DAE1FD /* TrailUtil.h */, + AA07328C0954381800F396C5 /* XmlFileUtil.cpp */, + AA07328D0954381800F396C5 /* XmlFileUtil.h */, + ); + name = DataStructures; + sourceTree = ""; + }; + AA6EFE5704770C7E005F316C /* FileTypes */ = { + isa = PBXGroup; + children = ( + AA6EFE5804770CAA005F316C /* IniFile.cpp */, + AA6EFE5904770CAA005F316C /* IniFile.h */, + AA6EFE5A04770CAA005F316C /* MsdFile.cpp */, + AA6EFE5B04770CAA005F316C /* MsdFile.h */, + AAC6889905D7F3C800964E6D /* XmlFile.cpp */, + AAC6889A05D7F3C800964E6D /* XmlFile.h */, + ); + name = FileTypes; + sourceTree = ""; + }; + AA6EFE6A04770D01005F316C /* StepMania */ = { + isa = PBXGroup; + children = ( + AAFAB5CB08890B5200767BF7 /* GameLoop.cpp */, + AAFAB5CC08890B5200767BF7 /* GameLoop.h */, + AAA71EA005EE154E00D2E8FF /* global.cpp */, + AA6EFE6004770CF7005F316C /* global.h */, + AAADA4AE04E5F3DE00D02EE9 /* ProductInfo.h */, + AAFBEECF094D7FCB000029DE /* SpecialFiles.cpp */, + AAFBEED0094D7FCB000029DE /* SpecialFiles.h */, + AA6EFE6204770CF7005F316C /* StdString.h */, + AA6EFE6304770CF7005F316C /* StepMania.cpp */, + AA6EFE6404770CF7005F316C /* StepMania.h */, + ); + name = StepMania; + path = ../src; + sourceTree = ""; + }; + AA6EFE6D04770D3E005F316C /* ActorsInMenus */ = { + isa = PBXGroup; + children = ( + AA6EFE6E04770D61005F316C /* Banner.cpp */, + AA6EFE6F04770D61005F316C /* Banner.h */, + AA6EFE7604770E7C005F316C /* BPMDisplay.cpp */, + AA6EFE7704770E7C005F316C /* BPMDisplay.h */, + AAFF55210549F43A00D02EE9 /* ComboGraph.cpp */, + AAFF55220549F43A00D02EE9 /* ComboGraph.h */, + AA69995F0ACE1CBB000237F9 /* ControllerStateDisplay.cpp */, + AA6999600ACE1CBB000237F9 /* ControllerStateDisplay.h */, + AA6EFE7804770E7C005F316C /* CourseContentsList.cpp */, + AA6EFE7904770E7C005F316C /* CourseContentsList.h */, + AA6EFE7E04770E7C005F316C /* DifficultyIcon.cpp */, + AA6EFE7F04770E7C005F316C /* DifficultyIcon.h */, + AAC6DDE60569C80900B5D56F /* DifficultyList.cpp */, + AAC6DDE70569C80900B5D56F /* DifficultyList.h */, + AABE788C05912B0600E8BF50 /* DualScrollBar.cpp */, + AABE788B05912B0600E8BF50 /* DualScrollBar.h */, + AA6EFE8404770E7C005F316C /* EditMenu.cpp */, + AA6EFE8504770E7C005F316C /* EditMenu.h */, + AA6EFE8A04770E7C005F316C /* FadingBanner.cpp */, + AA6EFE8B04770E7C005F316C /* FadingBanner.h */, + AA6EFE8C04770E7C005F316C /* GradeDisplay.cpp */, + AA6EFE8D04770E7C005F316C /* GradeDisplay.h */, + AAFF551D0549F39700D02EE9 /* GraphDisplay.cpp */, + AAFF551E0549F39700D02EE9 /* GraphDisplay.h */, + AA6EFE9004770E7C005F316C /* GrooveRadar.cpp */, + AA6EFE9104770E7C005F316C /* GrooveRadar.h */, + AA6EFE9404770E7C005F316C /* HelpDisplay.cpp */, + AA6EFE9504770E7C005F316C /* HelpDisplay.h */, + AA729C460599B54D00779F33 /* MemoryCardDisplay.cpp */, + AA729C470599B54D00779F33 /* MemoryCardDisplay.h */, + AA6EFE9A04770E7C005F316C /* MenuTimer.cpp */, + AA6EFE9B04770E7C005F316C /* MenuTimer.h */, + AA6EFE9C04770E7C005F316C /* MeterDisplay.cpp */, + AA6EFE9D04770E7C005F316C /* MeterDisplay.h */, + AA11A20B0DC5A1B0006BD8AC /* ModIcon.cpp */, + AA11A20C0DC5A1B0006BD8AC /* ModIcon.h */, + AA11A20D0DC5A1B0006BD8AC /* ModIconRow.cpp */, + AA11A20E0DC5A1B0006BD8AC /* ModIconRow.h */, + AA6EFEA404770E7C005F316C /* MusicWheel.cpp */, + AA6EFEA504770E7C005F316C /* MusicWheel.h */, + AA6EFEA604770E7C005F316C /* MusicWheelItem.cpp */, + AA6EFEA704770E7C005F316C /* MusicWheelItem.h */, + AA8BD2B407C939A200EA04E1 /* OptionRow.cpp */, + AA8BD2B507C939A200EA04E1 /* OptionRow.h */, + AA6EFEAC04770E7C005F316C /* OptionsCursor.cpp */, + AA6EFEAD04770E7C005F316C /* OptionsCursor.h */, + AA05A0AE0BA2EFF3006F8139 /* OptionsList.cpp */, + AA05A0AF0BA2EFF3006F8139 /* OptionsList.h */, + AAC6DDDE0569C71000B5D56F /* PaneDisplay.cpp */, + AAC6DDDF0569C71000B5D56F /* PaneDisplay.h */, + AAFE711D0A91B551005F2290 /* RoomInfoDisplay.cpp */, + AAFE711E0A91B551005F2290 /* RoomInfoDisplay.h */, + AAAFE82E0835E8B100FC43E0 /* RoomWheel.cpp */, + AAAFE82F0835E8B100FC43E0 /* RoomWheel.h */, + AA6EFEAE04770E7C005F316C /* ScrollBar.cpp */, + AA6EFEAF04770E7C005F316C /* ScrollBar.h */, + AA6EFEB204770E7C005F316C /* SnapDisplay.cpp */, + AA6EFEB304770E7C005F316C /* SnapDisplay.h */, + EEC7863D0E58208B00F559BC /* StepsDisplay.cpp */, + EEC7863E0E58208B00F559BC /* StepsDisplay.h */, + AA6EFEB404770E7C005F316C /* TextBanner.cpp */, + AA6EFEB504770E7C005F316C /* TextBanner.h */, + AA6EFF7004770F86005F316C /* Transition.cpp */, + AA6EFF7104770F86005F316C /* Transition.h */, + AAAFE81C0835E7FF00FC43E0 /* WheelBase.cpp */, + AAAFE81D0835E7FF00FC43E0 /* WheelBase.h */, + AAAFE81E0835E7FF00FC43E0 /* WheelItemBase.cpp */, + AAAFE81F0835E7FF00FC43E0 /* WheelItemBase.h */, + AA6EFEB604770E7C005F316C /* WheelNotifyIcon.cpp */, + AA6EFEB704770E7C005F316C /* WheelNotifyIcon.h */, + ); + name = ActorsInMenus; + sourceTree = ""; + }; + AA6EFEFA04770E84005F316C /* ActorsInGameplay */ = { + isa = PBXGroup; + children = ( + AAE7812B0608249E0034E65F /* ActiveAttackList.cpp */, + AAE7812C0608249E0034E65F /* ActiveAttackList.h */, + AA6EFEFD04770F63005F316C /* ArrowEffects.cpp */, + AA6EFEFE04770F63005F316C /* ArrowEffects.h */, + AAB005F00579B8CB000BBA58 /* AttackDisplay.cpp */, + AAB005F10579B8CB000BBA58 /* AttackDisplay.h */, + AA6EFEFF04770F63005F316C /* Background.cpp */, + AA6EFF0004770F63005F316C /* Background.h */, + AAC28BB904F758E500D02EE9 /* BeginnerHelper.cpp */, + AAC28BBA04F758E500D02EE9 /* BeginnerHelper.h */, + AA9D236C0561B6CE00FC7F14 /* CombinedLifeMeter.h */, + AAE443EB04B0F9F600D02EE9 /* CombinedLifeMeterTug.cpp */, + AAE443EC04B0F9F600D02EE9 /* CombinedLifeMeterTug.h */, + AA6EFF0704770F63005F316C /* DancingCharacters.cpp */, + AA6EFF0804770F63005F316C /* DancingCharacters.h */, + AABE321E05ACD931001A0E84 /* Foreground.cpp */, + AABE321F05ACD931001A0E84 /* Foreground.h */, + AA6EFF0D04770F63005F316C /* GhostArrowRow.cpp */, + AA6EFF0E04770F63005F316C /* GhostArrowRow.h */, + AA6EFF1504770F63005F316C /* HoldJudgment.cpp */, + AA6EFF1604770F63005F316C /* HoldJudgment.h */, + AA6EFDE104770C79005F316C /* Inventory.cpp */, + AA6EFDE204770C79005F316C /* Inventory.h */, + AA2FB638091212AF000FD574 /* LifeMeter.cpp */, + AA6EFF1A04770F63005F316C /* LifeMeter.h */, + AA6EFF1B04770F63005F316C /* LifeMeterBar.cpp */, + AA6EFF1C04770F63005F316C /* LifeMeterBar.h */, + AA6EFF1D04770F63005F316C /* LifeMeterBattery.cpp */, + AA6EFF1E04770F63005F316C /* LifeMeterBattery.h */, + AA3D5E5A08214C77002AA665 /* LifeMeterTime.cpp */, + AA3D5E5B08214C77002AA665 /* LifeMeterTime.h */, + AA6EFF1F04770F63005F316C /* LyricDisplay.cpp */, + AA6EFF2004770F63005F316C /* LyricDisplay.h */, + AA6EFF2104770F63005F316C /* NoteDisplay.cpp */, + AA6EFF2204770F63005F316C /* NoteDisplay.h */, + AA6EFF2304770F63005F316C /* NoteField.cpp */, + AA6EFF2404770F63005F316C /* NoteField.h */, + AAD620A5052EC78B00D02EE9 /* PercentageDisplay.cpp */, + AAD620A6052EC78B00D02EE9 /* PercentageDisplay.h */, + AA6EFDFD04770C79005F316C /* Player.cpp */, + AA6EFDFE04770C79005F316C /* Player.h */, + AA729C4E0599B58D00779F33 /* ReceptorArrow.cpp */, + AA729C4F0599B58D00779F33 /* ReceptorArrow.h */, + AA729C500599B58D00779F33 /* ReceptorArrowRow.cpp */, + AA729C510599B58D00779F33 /* ReceptorArrowRow.h */, + AA6EFF2504770F63005F316C /* ScoreDisplay.cpp */, + AA6EFF2604770F63005F316C /* ScoreDisplay.h */, + AA7144AF0809EEEC00545684 /* ScoreDisplayAliveTime.cpp */, + AA7144B00809EEEC00545684 /* ScoreDisplayAliveTime.h */, + AA6EFF2704770F63005F316C /* ScoreDisplayBattle.cpp */, + AA6EFF2804770F63005F316C /* ScoreDisplayBattle.h */, + AA8BD2BD07C939F800EA04E1 /* ScoreDisplayCalories.cpp */, + AA8BD2BE07C939F800EA04E1 /* ScoreDisplayCalories.h */, + AA3D5E5C08214C77002AA665 /* ScoreDisplayLifeTime.cpp */, + AA3D5E5D08214C77002AA665 /* ScoreDisplayLifeTime.h */, + AA6EFF2904770F63005F316C /* ScoreDisplayNormal.cpp */, + AA6EFF2A04770F63005F316C /* ScoreDisplayNormal.h */, + AA6EFF2B04770F63005F316C /* ScoreDisplayOni.cpp */, + AA6EFF2C04770F63005F316C /* ScoreDisplayOni.h */, + AA6DAF0805300B3D00D02EE9 /* ScoreDisplayPercentage.cpp */, + AA6DAF0905300B3D00D02EE9 /* ScoreDisplayPercentage.h */, + AA6EFF2D04770F63005F316C /* ScoreDisplayRave.cpp */, + AA6EFF2E04770F63005F316C /* ScoreDisplayRave.h */, + AA3D5E8F082152B6002AA665 /* StreamDisplay.cpp */, + AA3D5E90082152B6002AA665 /* StreamDisplay.h */, + AAE7803C0AC76A1200AEFC64 /* WorkoutGraph.cpp */, + AAE7803D0AC76A1200AEFC64 /* WorkoutGraph.h */, + ); + name = ActorsInGameplay; + sourceTree = ""; + }; + AA6EFF7404770F8B005F316C /* Actors */ = { + isa = PBXGroup; + children = ( + AA6EFF7504770FFD005F316C /* Actor.cpp */, + AA6EFF7604770FFD005F316C /* Actor.h */, + AA6EFF7704770FFD005F316C /* ActorFrame.cpp */, + AA6EFF7804770FFD005F316C /* ActorFrame.h */, + AA5D166A0A798C0E00F17E86 /* ActorFrameTexture.cpp */, + AA5D166B0A798C0E00F17E86 /* ActorFrameTexture.h */, + AA059ABA0B8CCFB5006F8139 /* ActorMultiTexture.cpp */, + AA059ABB0B8CCFB5006F8139 /* ActorMultiTexture.h */, + AAFE71090A91ADE6005F2290 /* ActorProxy.cpp */, + AAFE710A0A91ADE6005F2290 /* ActorProxy.h */, + AA6EFF7904770FFD005F316C /* ActorScroller.cpp */, + AA6EFF7A04770FFD005F316C /* ActorScroller.h */, + AACFBE2608E7D793005087FC /* ActorSound.cpp */, + AACFBE2708E7D793005087FC /* ActorSound.h */, + AAA983CA04B9060A00D02EE9 /* ActorUtil.cpp */, + AA1DC47204A485E900D02EE9 /* ActorUtil.h */, + AA8BD2AF07C9395400EA04E1 /* AutoActor.cpp */, + AA8BD2B007C9395400EA04E1 /* AutoActor.h */, + AA6EFF0104770F63005F316C /* BGAnimation.cpp */, + AA6EFF0204770F63005F316C /* BGAnimation.h */, + AA6EFF0304770F63005F316C /* BGAnimationLayer.cpp */, + AA6EFF0404770F63005F316C /* BGAnimationLayer.h */, + AA6EFFB904770FFD005F316C /* BitmapText.cpp */, + AA6EFFBA04770FFD005F316C /* BitmapText.h */, + AAF3442908F1C36A0006EDB7 /* DynamicActorScroller.cpp */, + AAF3442A08F1C36A0006EDB7 /* DynamicActorScroller.h */, + AA6EFFBD04770FFD005F316C /* Model.cpp */, + AA6EFFBE04770FFD005F316C /* Model.h */, + AA6EFFBF04770FFD005F316C /* ModelTypes.cpp */, + AA6EFFC004770FFD005F316C /* ModelTypes.h */, + AA6E6E0907F518E800C3EBB4 /* Quad.cpp */, + AA6EFFC104770FFD005F316C /* Quad.h */, + AA8BD2BB07C939F800EA04E1 /* RollingNumbers.cpp */, + AA8BD2BC07C939F800EA04E1 /* RollingNumbers.h */, + AA6EFFC204770FFD005F316C /* Sprite.cpp */, + AA6EFFC304770FFD005F316C /* Sprite.h */, + AAC0C8C00984AE3B0075FC53 /* Tween.cpp */, + AAC0C8C10984AE3B0075FC53 /* Tween.h */, + ); + name = Actors; + sourceTree = ""; + }; + AA7C8A7F0B6744F600FD9940 /* libtommath */ = { + isa = PBXGroup; + children = ( + AA7C8A800B6744F600FD9940 /* bn_error.c */, + AA7C8A810B6744F600FD9940 /* bn_fast_mp_invmod.c */, + AA7C8A820B6744F600FD9940 /* bn_fast_mp_montgomery_reduce.c */, + AA7C8A830B6744F600FD9940 /* bn_fast_s_mp_mul_digs.c */, + AA7C8A840B6744F600FD9940 /* bn_fast_s_mp_mul_high_digs.c */, + AA7C8A850B6744F600FD9940 /* bn_fast_s_mp_sqr.c */, + AA7C8A860B6744F600FD9940 /* bn_mp_2expt.c */, + AA7C8A870B6744F600FD9940 /* bn_mp_abs.c */, + AA7C8A880B6744F600FD9940 /* bn_mp_add.c */, + AA7C8A890B6744F600FD9940 /* bn_mp_add_d.c */, + AA7C8A8A0B6744F600FD9940 /* bn_mp_addmod.c */, + AA7C8A8B0B6744F600FD9940 /* bn_mp_and.c */, + AA7C8A8C0B6744F600FD9940 /* bn_mp_clamp.c */, + AA7C8A8D0B6744F600FD9940 /* bn_mp_clear.c */, + AA7C8A8E0B6744F600FD9940 /* bn_mp_clear_multi.c */, + AA7C8A8F0B6744F600FD9940 /* bn_mp_cmp.c */, + AA7C8A900B6744F600FD9940 /* bn_mp_cmp_d.c */, + AA7C8A910B6744F600FD9940 /* bn_mp_cmp_mag.c */, + AA7C8A920B6744F600FD9940 /* bn_mp_cnt_lsb.c */, + AA7C8A930B6744F600FD9940 /* bn_mp_copy.c */, + AA7C8A940B6744F600FD9940 /* bn_mp_count_bits.c */, + AA7C8A950B6744F600FD9940 /* bn_mp_div.c */, + AA7C8A960B6744F600FD9940 /* bn_mp_div_2.c */, + AA7C8A970B6744F600FD9940 /* bn_mp_div_2d.c */, + AA7C8A980B6744F600FD9940 /* bn_mp_div_3.c */, + AA7C8A990B6744F600FD9940 /* bn_mp_div_d.c */, + AA7C8A9A0B6744F600FD9940 /* bn_mp_dr_is_modulus.c */, + AA7C8A9B0B6744F600FD9940 /* bn_mp_dr_reduce.c */, + AA7C8A9C0B6744F600FD9940 /* bn_mp_dr_setup.c */, + AA7C8A9D0B6744F600FD9940 /* bn_mp_exch.c */, + AA7C8A9E0B6744F600FD9940 /* bn_mp_expt_d.c */, + AA7C8A9F0B6744F600FD9940 /* bn_mp_exptmod.c */, + AA7C8AA00B6744F600FD9940 /* bn_mp_exptmod_fast.c */, + AA7C8AA10B6744F600FD9940 /* bn_mp_exteuclid.c */, + AA7C8AA20B6744F600FD9940 /* bn_mp_fread.c */, + AA7C8AA30B6744F600FD9940 /* bn_mp_fwrite.c */, + AA7C8AA40B6744F600FD9940 /* bn_mp_gcd.c */, + AA7C8AA50B6744F600FD9940 /* bn_mp_get_int.c */, + AA7C8AA60B6744F600FD9940 /* bn_mp_grow.c */, + AA7C8AA70B6744F600FD9940 /* bn_mp_init.c */, + AA7C8AA80B6744F600FD9940 /* bn_mp_init_copy.c */, + AA7C8AA90B6744F600FD9940 /* bn_mp_init_multi.c */, + AA7C8AAA0B6744F600FD9940 /* bn_mp_init_set.c */, + AA7C8AAB0B6744F600FD9940 /* bn_mp_init_set_int.c */, + AA7C8AAC0B6744F600FD9940 /* bn_mp_init_size.c */, + AA7C8AAD0B6744F600FD9940 /* bn_mp_invmod.c */, + AA7C8AAE0B6744F600FD9940 /* bn_mp_invmod_slow.c */, + AA7C8AAF0B6744F600FD9940 /* bn_mp_is_square.c */, + AA7C8AB00B6744F600FD9940 /* bn_mp_jacobi.c */, + AA7C8AB10B6744F600FD9940 /* bn_mp_karatsuba_mul.c */, + AA7C8AB20B6744F600FD9940 /* bn_mp_karatsuba_sqr.c */, + AA7C8AB30B6744F600FD9940 /* bn_mp_lcm.c */, + AA7C8AB40B6744F700FD9940 /* bn_mp_lshd.c */, + AA7C8AB50B6744F700FD9940 /* bn_mp_mod.c */, + AA7C8AB60B6744F700FD9940 /* bn_mp_mod_2d.c */, + AA7C8AB70B6744F700FD9940 /* bn_mp_mod_d.c */, + AA7C8AB80B6744F700FD9940 /* bn_mp_montgomery_calc_normalization.c */, + AA7C8AB90B6744F700FD9940 /* bn_mp_montgomery_reduce.c */, + AA7C8ABA0B6744F700FD9940 /* bn_mp_montgomery_setup.c */, + AA7C8ABB0B6744F700FD9940 /* bn_mp_mul.c */, + AA7C8ABC0B6744F700FD9940 /* bn_mp_mul_2.c */, + AA7C8ABD0B6744F700FD9940 /* bn_mp_mul_2d.c */, + AA7C8ABE0B6744F700FD9940 /* bn_mp_mul_d.c */, + AA7C8ABF0B6744F700FD9940 /* bn_mp_mulmod.c */, + AA7C8AC00B6744F700FD9940 /* bn_mp_n_root.c */, + AA7C8AC10B6744F700FD9940 /* bn_mp_neg.c */, + AA7C8AC20B6744F700FD9940 /* bn_mp_or.c */, + AA7C8AC30B6744F700FD9940 /* bn_mp_prime_fermat.c */, + AA7C8AC40B6744F700FD9940 /* bn_mp_prime_is_divisible.c */, + AA7C8AC50B6744F700FD9940 /* bn_mp_prime_is_prime.c */, + AA7C8AC60B6744F700FD9940 /* bn_mp_prime_miller_rabin.c */, + AA7C8AC70B6744F700FD9940 /* bn_mp_prime_next_prime.c */, + AA7C8AC80B6744F700FD9940 /* bn_mp_prime_rabin_miller_trials.c */, + AA7C8AC90B6744F700FD9940 /* bn_mp_prime_random_ex.c */, + AA7C8ACA0B6744F700FD9940 /* bn_mp_radix_size.c */, + AA7C8ACB0B6744F700FD9940 /* bn_mp_radix_smap.c */, + AA7C8ACC0B6744F700FD9940 /* bn_mp_rand.c */, + AA7C8ACD0B6744F700FD9940 /* bn_mp_read_radix.c */, + AA7C8ACE0B6744F700FD9940 /* bn_mp_read_signed_bin.c */, + AA7C8ACF0B6744F700FD9940 /* bn_mp_read_unsigned_bin.c */, + AA7C8AD00B6744F700FD9940 /* bn_mp_reduce.c */, + AA7C8AD10B6744F700FD9940 /* bn_mp_reduce_2k.c */, + AA7C8AD20B6744F700FD9940 /* bn_mp_reduce_2k_l.c */, + AA7C8AD30B6744F700FD9940 /* bn_mp_reduce_2k_setup.c */, + AA7C8AD40B6744F700FD9940 /* bn_mp_reduce_2k_setup_l.c */, + AA7C8AD50B6744F700FD9940 /* bn_mp_reduce_is_2k.c */, + AA7C8AD60B6744F700FD9940 /* bn_mp_reduce_is_2k_l.c */, + AA7C8AD70B6744F700FD9940 /* bn_mp_reduce_setup.c */, + AA7C8AD80B6744F700FD9940 /* bn_mp_rshd.c */, + AA7C8AD90B6744F700FD9940 /* bn_mp_set.c */, + AA7C8ADA0B6744F700FD9940 /* bn_mp_set_int.c */, + AA7C8ADB0B6744F700FD9940 /* bn_mp_shrink.c */, + AA7C8ADC0B6744F700FD9940 /* bn_mp_signed_bin_size.c */, + AA7C8ADD0B6744F700FD9940 /* bn_mp_sqr.c */, + AA7C8ADE0B6744F700FD9940 /* bn_mp_sqrmod.c */, + AA7C8ADF0B6744F700FD9940 /* bn_mp_sqrt.c */, + AA7C8AE00B6744F700FD9940 /* bn_mp_sub.c */, + AA7C8AE10B6744F700FD9940 /* bn_mp_sub_d.c */, + AA7C8AE20B6744F700FD9940 /* bn_mp_submod.c */, + AA7C8AE30B6744F700FD9940 /* bn_mp_to_signed_bin.c */, + AA7C8AE40B6744F700FD9940 /* bn_mp_to_signed_bin_n.c */, + AA7C8AE50B6744F700FD9940 /* bn_mp_to_unsigned_bin.c */, + AA7C8AE60B6744F700FD9940 /* bn_mp_to_unsigned_bin_n.c */, + AA7C8AE70B6744F700FD9940 /* bn_mp_toom_mul.c */, + AA7C8AE80B6744F700FD9940 /* bn_mp_toom_sqr.c */, + AA7C8AE90B6744F700FD9940 /* bn_mp_toradix.c */, + AA7C8AEA0B6744F700FD9940 /* bn_mp_toradix_n.c */, + AA7C8AEB0B6744F700FD9940 /* bn_mp_unsigned_bin_size.c */, + AA7C8AEC0B6744F700FD9940 /* bn_mp_xor.c */, + AA7C8AED0B6744F700FD9940 /* bn_mp_zero.c */, + AA7C8AEE0B6744F700FD9940 /* bn_prime_tab.c */, + AA7C8AEF0B6744F700FD9940 /* bn_reverse.c */, + AA7C8AF00B6744F700FD9940 /* bn_s_mp_add.c */, + AA7C8AF10B6744F700FD9940 /* bn_s_mp_exptmod.c */, + AA7C8AF20B6744F700FD9940 /* bn_s_mp_mul_digs.c */, + AA7C8AF30B6744F700FD9940 /* bn_s_mp_mul_high_digs.c */, + AA7C8AF40B6744F700FD9940 /* bn_s_mp_sqr.c */, + AA7C8AF50B6744F700FD9940 /* bn_s_mp_sub.c */, + AA7C8AF60B6744F700FD9940 /* bncore.c */, + AA7C8AF90B6744F700FD9940 /* tommath.h */, + AA7C8AFA0B6744F700FD9940 /* tommath_class.h */, + AA7C8AFB0B6744F700FD9940 /* tommath_superclass.h */, + ); + name = libtommath; + path = ../src/libtommath; + sourceTree = ""; + }; + AA7C8B920B67467C00FD9940 /* libtomcrypt */ = { + isa = PBXGroup; + children = ( + AA7C8B930B67467C00FD9940 /* ciphers */, + AA7C8B970B67467C00FD9940 /* hashes */, + AA7C8B9C0B67467C00FD9940 /* headers */, + AA7C8BAA0B67467C00FD9940 /* math */, + AA7C8BB00B67467C00FD9940 /* misc */, + AA7C8BD30B67467C00FD9940 /* modes */, + AA7C8BF60B67467C00FD9940 /* pk */, + AA7C8C4D0B67467D00FD9940 /* prngs */, + ); + name = libtomcrypt; + path = ../src/libtomcrypt/src; + sourceTree = ""; + }; + AA7C8B930B67467C00FD9940 /* ciphers */ = { + isa = PBXGroup; + children = ( + AA7C8B940B67467C00FD9940 /* aes */, + ); + path = ciphers; + sourceTree = ""; + }; + AA7C8B940B67467C00FD9940 /* aes */ = { + isa = PBXGroup; + children = ( + AA7C8B950B67467C00FD9940 /* aes.c */, + AA7C8B960B67467C00FD9940 /* aes_tab.c */, + ); + path = aes; + sourceTree = ""; + }; + AA7C8B970B67467C00FD9940 /* hashes */ = { + isa = PBXGroup; + children = ( + AA7C8B980B67467C00FD9940 /* helper */, + AA7C8B9A0B67467C00FD9940 /* md5.c */, + AA7C8B9B0B67467C00FD9940 /* sha1.c */, + ); + path = hashes; + sourceTree = ""; + }; + AA7C8B980B67467C00FD9940 /* helper */ = { + isa = PBXGroup; + children = ( + AA7C8B990B67467C00FD9940 /* hash_memory.c */, + ); + path = helper; + sourceTree = ""; + }; + AA7C8B9C0B67467C00FD9940 /* headers */ = { + isa = PBXGroup; + children = ( + AA7C8B9D0B67467C00FD9940 /* tomcrypt.h */, + AA7C8B9E0B67467C00FD9940 /* tomcrypt_argchk.h */, + AA7C8B9F0B67467C00FD9940 /* tomcrypt_cfg.h */, + AA7C8BA00B67467C00FD9940 /* tomcrypt_cipher.h */, + AA7C8BA10B67467C00FD9940 /* tomcrypt_custom.h */, + AA7C8BA20B67467C00FD9940 /* tomcrypt_hash.h */, + AA7C8BA30B67467C00FD9940 /* tomcrypt_mac.h */, + AA7C8BA40B67467C00FD9940 /* tomcrypt_macros.h */, + AA7C8BA50B67467C00FD9940 /* tomcrypt_math.h */, + AA7C8BA60B67467C00FD9940 /* tomcrypt_misc.h */, + AA7C8BA70B67467C00FD9940 /* tomcrypt_pk.h */, + AA7C8BA80B67467C00FD9940 /* tomcrypt_pkcs.h */, + AA7C8BA90B67467C00FD9940 /* tomcrypt_prng.h */, + ); + path = headers; + sourceTree = ""; + }; + AA7C8BAA0B67467C00FD9940 /* math */ = { + isa = PBXGroup; + children = ( + AA7C8BAB0B67467C00FD9940 /* fp */, + AA7C8BAD0B67467C00FD9940 /* ltm_desc.c */, + AA7C8BAE0B67467C00FD9940 /* multi.c */, + AA7C8BAF0B67467C00FD9940 /* rand_prime.c */, + ); + path = math; + sourceTree = ""; + }; + AA7C8BAB0B67467C00FD9940 /* fp */ = { + isa = PBXGroup; + children = ( + AA7C8BAC0B67467C00FD9940 /* ltc_ecc_fp_mulmod.c */, + ); + path = fp; + sourceTree = ""; + }; + AA7C8BB00B67467C00FD9940 /* misc */ = { + isa = PBXGroup; + children = ( + AA7C8BB10B67467C00FD9940 /* base64 */, + AA7C8BB40B67467C00FD9940 /* burn_stack.c */, + AA7C8BB50B67467C00FD9940 /* crypt */, + AA7C8BCE0B67467C00FD9940 /* error_to_string.c */, + AA7C8BCF0B67467C00FD9940 /* pkcs5 */, + AA7C8BD20B67467C00FD9940 /* zeromem.c */, + ); + path = misc; + sourceTree = ""; + }; + AA7C8BB10B67467C00FD9940 /* base64 */ = { + isa = PBXGroup; + children = ( + AA7C8BB20B67467C00FD9940 /* base64_decode.c */, + AA7C8BB30B67467C00FD9940 /* base64_encode.c */, + ); + path = base64; + sourceTree = ""; + }; + AA7C8BB50B67467C00FD9940 /* crypt */ = { + isa = PBXGroup; + children = ( + AA7C8BB60B67467C00FD9940 /* crypt.c */, + AA7C8BB70B67467C00FD9940 /* crypt_argchk.c */, + AA7C8BB80B67467C00FD9940 /* crypt_cipher_descriptor.c */, + AA7C8BB90B67467C00FD9940 /* crypt_cipher_is_valid.c */, + AA7C8BBA0B67467C00FD9940 /* crypt_find_cipher.c */, + AA7C8BBB0B67467C00FD9940 /* crypt_find_cipher_any.c */, + AA7C8BBC0B67467C00FD9940 /* crypt_find_cipher_id.c */, + AA7C8BBD0B67467C00FD9940 /* crypt_find_hash.c */, + AA7C8BBE0B67467C00FD9940 /* crypt_find_hash_any.c */, + AA7C8BBF0B67467C00FD9940 /* crypt_find_hash_id.c */, + AA7C8BC00B67467C00FD9940 /* crypt_find_hash_oid.c */, + AA7C8BC10B67467C00FD9940 /* crypt_find_prng.c */, + AA7C8BC20B67467C00FD9940 /* crypt_fsa.c */, + AA7C8BC30B67467C00FD9940 /* crypt_hash_descriptor.c */, + AA7C8BC40B67467C00FD9940 /* crypt_hash_is_valid.c */, + AA7C8BC50B67467C00FD9940 /* crypt_ltc_mp_descriptor.c */, + AA7C8BC60B67467C00FD9940 /* crypt_prng_descriptor.c */, + AA7C8BC70B67467C00FD9940 /* crypt_prng_is_valid.c */, + AA7C8BC80B67467C00FD9940 /* crypt_register_cipher.c */, + AA7C8BC90B67467C00FD9940 /* crypt_register_hash.c */, + AA7C8BCA0B67467C00FD9940 /* crypt_register_prng.c */, + AA7C8BCB0B67467C00FD9940 /* crypt_unregister_cipher.c */, + AA7C8BCC0B67467C00FD9940 /* crypt_unregister_hash.c */, + AA7C8BCD0B67467C00FD9940 /* crypt_unregister_prng.c */, + ); + path = crypt; + sourceTree = ""; + }; + AA7C8BCF0B67467C00FD9940 /* pkcs5 */ = { + isa = PBXGroup; + children = ( + AA7C8BD00B67467C00FD9940 /* pkcs_5_1.c */, + AA7C8BD10B67467C00FD9940 /* pkcs_5_2.c */, + ); + path = pkcs5; + sourceTree = ""; + }; + AA7C8BD30B67467C00FD9940 /* modes */ = { + isa = PBXGroup; + children = ( + AA7C8BD40B67467C00FD9940 /* cbc */, + AA7C8BDB0B67467C00FD9940 /* cfb */, + AA7C8BE20B67467C00FD9940 /* ctr */, + AA7C8BEA0B67467C00FD9940 /* ecb */, + AA7C8BEF0B67467C00FD9940 /* ofb */, + ); + path = modes; + sourceTree = ""; + }; + AA7C8BD40B67467C00FD9940 /* cbc */ = { + isa = PBXGroup; + children = ( + AA7C8BD50B67467C00FD9940 /* cbc_decrypt.c */, + AA7C8BD60B67467C00FD9940 /* cbc_done.c */, + AA7C8BD70B67467C00FD9940 /* cbc_encrypt.c */, + AA7C8BD80B67467C00FD9940 /* cbc_getiv.c */, + AA7C8BD90B67467C00FD9940 /* cbc_setiv.c */, + AA7C8BDA0B67467C00FD9940 /* cbc_start.c */, + ); + path = cbc; + sourceTree = ""; + }; + AA7C8BDB0B67467C00FD9940 /* cfb */ = { + isa = PBXGroup; + children = ( + AA7C8BDC0B67467C00FD9940 /* cfb_decrypt.c */, + AA7C8BDD0B67467C00FD9940 /* cfb_done.c */, + AA7C8BDE0B67467C00FD9940 /* cfb_encrypt.c */, + AA7C8BDF0B67467C00FD9940 /* cfb_getiv.c */, + AA7C8BE00B67467C00FD9940 /* cfb_setiv.c */, + AA7C8BE10B67467C00FD9940 /* cfb_start.c */, + ); + path = cfb; + sourceTree = ""; + }; + AA7C8BE20B67467C00FD9940 /* ctr */ = { + isa = PBXGroup; + children = ( + AA7C8BE30B67467C00FD9940 /* ctr_decrypt.c */, + AA7C8BE40B67467C00FD9940 /* ctr_done.c */, + AA7C8BE50B67467C00FD9940 /* ctr_encrypt.c */, + AA7C8BE60B67467C00FD9940 /* ctr_getiv.c */, + AA7C8BE70B67467C00FD9940 /* ctr_setiv.c */, + AA7C8BE80B67467C00FD9940 /* ctr_start.c */, + AA7C8BE90B67467C00FD9940 /* ctr_test.c */, + ); + path = ctr; + sourceTree = ""; + }; + AA7C8BEA0B67467C00FD9940 /* ecb */ = { + isa = PBXGroup; + children = ( + AA7C8BEB0B67467C00FD9940 /* ecb_decrypt.c */, + AA7C8BEC0B67467C00FD9940 /* ecb_done.c */, + AA7C8BED0B67467C00FD9940 /* ecb_encrypt.c */, + AA7C8BEE0B67467C00FD9940 /* ecb_start.c */, + ); + path = ecb; + sourceTree = ""; + }; + AA7C8BEF0B67467C00FD9940 /* ofb */ = { + isa = PBXGroup; + children = ( + AA7C8BF00B67467C00FD9940 /* ofb_decrypt.c */, + AA7C8BF10B67467C00FD9940 /* ofb_done.c */, + AA7C8BF20B67467C00FD9940 /* ofb_encrypt.c */, + AA7C8BF30B67467C00FD9940 /* ofb_getiv.c */, + AA7C8BF40B67467C00FD9940 /* ofb_setiv.c */, + AA7C8BF50B67467C00FD9940 /* ofb_start.c */, + ); + path = ofb; + sourceTree = ""; + }; + AA7C8BF60B67467C00FD9940 /* pk */ = { + isa = PBXGroup; + children = ( + AA7C8BF70B67467C00FD9940 /* asn1 */, + AA7C8C2E0B67467D00FD9940 /* dsa */, + AA7C8C390B67467D00FD9940 /* pkcs1 */, + AA7C8C430B67467D00FD9940 /* rsa */, + ); + path = pk; + sourceTree = ""; + }; + AA7C8BF70B67467C00FD9940 /* asn1 */ = { + isa = PBXGroup; + children = ( + AA7C8BF80B67467C00FD9940 /* der */, + ); + path = asn1; + sourceTree = ""; + }; + AA7C8BF80B67467C00FD9940 /* der */ = { + isa = PBXGroup; + children = ( + AA7C8BF90B67467C00FD9940 /* bit */, + AA7C8BFD0B67467C00FD9940 /* boolean */, + AA7C8C010B67467C00FD9940 /* choice */, + AA7C8C030B67467C00FD9940 /* ia5 */, + AA7C8C070B67467D00FD9940 /* integer */, + AA7C8C0B0B67467D00FD9940 /* object_identifier */, + AA7C8C0F0B67467D00FD9940 /* octet */, + AA7C8C130B67467D00FD9940 /* printable_string */, + AA7C8C170B67467D00FD9940 /* sequence */, + AA7C8C1F0B67467D00FD9940 /* set */, + AA7C8C220B67467D00FD9940 /* short_integer */, + AA7C8C260B67467D00FD9940 /* utctime */, + AA7C8C2A0B67467D00FD9940 /* utf8 */, + ); + path = der; + sourceTree = ""; + }; + AA7C8BF90B67467C00FD9940 /* bit */ = { + isa = PBXGroup; + children = ( + AA7C8BFA0B67467C00FD9940 /* der_decode_bit_string.c */, + AA7C8BFB0B67467C00FD9940 /* der_encode_bit_string.c */, + AA7C8BFC0B67467C00FD9940 /* der_length_bit_string.c */, + ); + path = bit; + sourceTree = ""; + }; + AA7C8BFD0B67467C00FD9940 /* boolean */ = { + isa = PBXGroup; + children = ( + AA7C8BFE0B67467C00FD9940 /* der_decode_boolean.c */, + AA7C8BFF0B67467C00FD9940 /* der_encode_boolean.c */, + AA7C8C000B67467C00FD9940 /* der_length_boolean.c */, + ); + path = boolean; + sourceTree = ""; + }; + AA7C8C010B67467C00FD9940 /* choice */ = { + isa = PBXGroup; + children = ( + AA7C8C020B67467C00FD9940 /* der_decode_choice.c */, + ); + path = choice; + sourceTree = ""; + }; + AA7C8C030B67467C00FD9940 /* ia5 */ = { + isa = PBXGroup; + children = ( + AA7C8C040B67467C00FD9940 /* der_decode_ia5_string.c */, + AA7C8C050B67467D00FD9940 /* der_encode_ia5_string.c */, + AA7C8C060B67467D00FD9940 /* der_length_ia5_string.c */, + ); + path = ia5; + sourceTree = ""; + }; + AA7C8C070B67467D00FD9940 /* integer */ = { + isa = PBXGroup; + children = ( + AA7C8C080B67467D00FD9940 /* der_decode_integer.c */, + AA7C8C090B67467D00FD9940 /* der_encode_integer.c */, + AA7C8C0A0B67467D00FD9940 /* der_length_integer.c */, + ); + path = integer; + sourceTree = ""; + }; + AA7C8C0B0B67467D00FD9940 /* object_identifier */ = { + isa = PBXGroup; + children = ( + AA7C8C0C0B67467D00FD9940 /* der_decode_object_identifier.c */, + AA7C8C0D0B67467D00FD9940 /* der_encode_object_identifier.c */, + AA7C8C0E0B67467D00FD9940 /* der_length_object_identifier.c */, + ); + path = object_identifier; + sourceTree = ""; + }; + AA7C8C0F0B67467D00FD9940 /* octet */ = { + isa = PBXGroup; + children = ( + AA7C8C100B67467D00FD9940 /* der_decode_octet_string.c */, + AA7C8C110B67467D00FD9940 /* der_encode_octet_string.c */, + AA7C8C120B67467D00FD9940 /* der_length_octet_string.c */, + ); + path = octet; + sourceTree = ""; + }; + AA7C8C130B67467D00FD9940 /* printable_string */ = { + isa = PBXGroup; + children = ( + AA7C8C140B67467D00FD9940 /* der_decode_printable_string.c */, + AA7C8C150B67467D00FD9940 /* der_encode_printable_string.c */, + AA7C8C160B67467D00FD9940 /* der_length_printable_string.c */, + ); + path = printable_string; + sourceTree = ""; + }; + AA7C8C170B67467D00FD9940 /* sequence */ = { + isa = PBXGroup; + children = ( + AA7C8C180B67467D00FD9940 /* der_decode_sequence_ex.c */, + AA7C8C190B67467D00FD9940 /* der_decode_sequence_flexi.c */, + AA7C8C1A0B67467D00FD9940 /* der_decode_sequence_multi.c */, + AA7C8C1B0B67467D00FD9940 /* der_encode_sequence_ex.c */, + AA7C8C1C0B67467D00FD9940 /* der_encode_sequence_multi.c */, + AA7C8C1D0B67467D00FD9940 /* der_length_sequence.c */, + AA7C8C1E0B67467D00FD9940 /* der_sequence_free.c */, + ); + path = sequence; + sourceTree = ""; + }; + AA7C8C1F0B67467D00FD9940 /* set */ = { + isa = PBXGroup; + children = ( + AA7C8C200B67467D00FD9940 /* der_encode_set.c */, + AA7C8C210B67467D00FD9940 /* der_encode_setof.c */, + ); + path = set; + sourceTree = ""; + }; + AA7C8C220B67467D00FD9940 /* short_integer */ = { + isa = PBXGroup; + children = ( + AA7C8C230B67467D00FD9940 /* der_decode_short_integer.c */, + AA7C8C240B67467D00FD9940 /* der_encode_short_integer.c */, + AA7C8C250B67467D00FD9940 /* der_length_short_integer.c */, + ); + path = short_integer; + sourceTree = ""; + }; + AA7C8C260B67467D00FD9940 /* utctime */ = { + isa = PBXGroup; + children = ( + AA7C8C270B67467D00FD9940 /* der_decode_utctime.c */, + AA7C8C280B67467D00FD9940 /* der_encode_utctime.c */, + AA7C8C290B67467D00FD9940 /* der_length_utctime.c */, + ); + path = utctime; + sourceTree = ""; + }; + AA7C8C2A0B67467D00FD9940 /* utf8 */ = { + isa = PBXGroup; + children = ( + AA7C8C2B0B67467D00FD9940 /* der_decode_utf8_string.c */, + AA7C8C2C0B67467D00FD9940 /* der_encode_utf8_string.c */, + AA7C8C2D0B67467D00FD9940 /* der_length_utf8_string.c */, + ); + path = utf8; + sourceTree = ""; + }; + AA7C8C2E0B67467D00FD9940 /* dsa */ = { + isa = PBXGroup; + children = ( + AA7C8C2F0B67467D00FD9940 /* dsa_decrypt_key.c */, + AA7C8C300B67467D00FD9940 /* dsa_encrypt_key.c */, + AA7C8C310B67467D00FD9940 /* dsa_export.c */, + AA7C8C320B67467D00FD9940 /* dsa_free.c */, + AA7C8C330B67467D00FD9940 /* dsa_import.c */, + AA7C8C340B67467D00FD9940 /* dsa_make_key.c */, + AA7C8C350B67467D00FD9940 /* dsa_shared_secret.c */, + AA7C8C360B67467D00FD9940 /* dsa_sign_hash.c */, + AA7C8C370B67467D00FD9940 /* dsa_verify_hash.c */, + AA7C8C380B67467D00FD9940 /* dsa_verify_key.c */, + ); + path = dsa; + sourceTree = ""; + }; + AA7C8C390B67467D00FD9940 /* pkcs1 */ = { + isa = PBXGroup; + children = ( + AA7C8C3A0B67467D00FD9940 /* pkcs_1_i2osp.c */, + AA7C8C3B0B67467D00FD9940 /* pkcs_1_mgf1.c */, + AA7C8C3C0B67467D00FD9940 /* pkcs_1_oaep_decode.c */, + AA7C8C3D0B67467D00FD9940 /* pkcs_1_oaep_encode.c */, + AA7C8C3E0B67467D00FD9940 /* pkcs_1_os2ip.c */, + AA7C8C3F0B67467D00FD9940 /* pkcs_1_pss_decode.c */, + AA7C8C400B67467D00FD9940 /* pkcs_1_pss_encode.c */, + AA7C8C410B67467D00FD9940 /* pkcs_1_v1_5_decode.c */, + AA7C8C420B67467D00FD9940 /* pkcs_1_v1_5_encode.c */, + ); + path = pkcs1; + sourceTree = ""; + }; + AA7C8C430B67467D00FD9940 /* rsa */ = { + isa = PBXGroup; + children = ( + AA7C8C440B67467D00FD9940 /* rsa_decrypt_key.c */, + AA7C8C450B67467D00FD9940 /* rsa_encrypt_key.c */, + AA7C8C460B67467D00FD9940 /* rsa_export.c */, + AA7C8C470B67467D00FD9940 /* rsa_exptmod.c */, + AA7C8C480B67467D00FD9940 /* rsa_free.c */, + AA7C8C490B67467D00FD9940 /* rsa_import.c */, + AA7C8C4A0B67467D00FD9940 /* rsa_make_key.c */, + AA7C8C4B0B67467D00FD9940 /* rsa_sign_hash.c */, + AA7C8C4C0B67467D00FD9940 /* rsa_verify_hash.c */, + ); + path = rsa; + sourceTree = ""; + }; + AA7C8C4D0B67467D00FD9940 /* prngs */ = { + isa = PBXGroup; + children = ( + AA7C8C4E0B67467D00FD9940 /* fortuna.c */, + AA7C8C4F0B67467D00FD9940 /* rc4.c */, + AA7C8C500B67467D00FD9940 /* rng_get_bytes.c */, + AA7C8C510B67467D00FD9940 /* rng_make_prng.c */, + AA7C8C520B67467D00FD9940 /* sober128.c */, + AA7C8C530B67467D00FD9940 /* sober128tab.c */, + AA7C8C540B67467D00FD9940 /* sprng.c */, + AA7C8C550B67467D00FD9940 /* yarrow.c */, + ); + path = prngs; + sourceTree = ""; + }; + AA8B6C7804AFD82B00D02EE9 /* pcre */ = { + isa = PBXGroup; + children = ( + AA8B6C7904AFD87300D02EE9 /* chartables.c */, + AA8B6C7A04AFD87300D02EE9 /* get.c */, + AA8B6C7B04AFD87300D02EE9 /* internal.h */, + AA8B6C7C04AFD87300D02EE9 /* maketables.c */, + AA8B6C7D04AFD87300D02EE9 /* pcre.c */, + AA8B6C7E04AFD87300D02EE9 /* pcre.h */, + AA8B6C7F04AFD87300D02EE9 /* study.c */, + ); + name = pcre; + path = ../extern/pcre; + sourceTree = ""; + }; + AAA070B20CE7B3AD005A3060 /* mad-0.15.1b */ = { + isa = PBXGroup; + children = ( + AAA070B40CE7B3AD005A3060 /* bit.c */, + AAA070B50CE7B3AD005A3060 /* bit.h */, + AAA070C00CE7B3AD005A3060 /* decoder.c */, + AAA070C10CE7B3AD005A3060 /* decoder.h */, + AAA070C30CE7B3AD005A3060 /* fixed.c */, + AAA070C40CE7B3AD005A3060 /* fixed.h */, + AAA070C50CE7B3AD005A3060 /* frame.c */, + AAA070C60CE7B3AD005A3060 /* frame.h */, + AAA070C70CE7B3AD005A3060 /* global.h */, + AAA070C80CE7B3AD005A3060 /* huffman.c */, + AAA070C90CE7B3AD005A3060 /* huffman.h */, + AAA070CE0CE7B3AD005A3060 /* layer12.c */, + AAA070CF0CE7B3AD005A3060 /* layer12.h */, + AAA070D00CE7B3AD005A3060 /* layer3.c */, + AAA070D10CE7B3AD005A3060 /* layer3.h */, + AAA070D40CE7B3AD005A3060 /* mad.h */, + AAA070E80CE7B3AD005A3060 /* stream.c */, + AAA070E90CE7B3AD005A3060 /* stream.h */, + AAA070EA0CE7B3AD005A3060 /* synth.c */, + AAA070EB0CE7B3AD005A3060 /* synth.h */, + AAA070EC0CE7B3AD005A3060 /* timer.c */, + AAA070ED0CE7B3AD005A3060 /* timer.h */, + AAA070F00CE7B3AE005A3060 /* version.c */, + AAA070F10CE7B3AE005A3060 /* version.h */, + ); + name = "mad-0.15.1b"; + path = "../extern/mad-0.15.1b"; + sourceTree = ""; + }; + AAA3741C09099ADA00141131 /* Libraries */ = { + isa = PBXGroup; + children = ( + AAA0704D0CE5082D005A3060 /* libffmpeg_link.a */, + AA21E4730A9826CD00684CEA /* libjpeg_link.a */, + AA21E4750A9826CD00684CEA /* libogg_link.a */, + AA21E4760A9826CD00684CEA /* libpng_link.a */, + AA21E4770A9826CD00684CEA /* libtheora_link.a */, + AA21E4780A9826CD00684CEA /* libvorbis_link.a */, + AA059E2A0B8F0C66006F8139 /* libz_link.a */, + ); + path = Libraries; + sourceTree = ""; + }; + AABE36FE0497CE67005F316C /* ArchHooks */ = { + isa = PBXGroup; + children = ( + AA3F283B04BE6DDC00D02EE9 /* ArchHooks.cpp */, + AABE36FC0497CE44005F316C /* ArchHooks.h */, + AA6C6AD60DC6B17B00E7A13E /* ArchHooks_MacOSX.cpp */, + AA6C6AD70DC6B17B00E7A13E /* ArchHooks_MacOSX.h */, + ); + name = ArchHooks; + sourceTree = ""; + }; + AABE78720591287100E8BF50 /* MemoryCard */ = { + isa = PBXGroup; + children = ( + AAC9F332069E22CF00D53E2C /* MemoryCardDriver.cpp */, + AAC9F333069E22CF00D53E2C /* MemoryCardDriver.h */, + AABE78760591287100E8BF50 /* MemoryCardDriver_Null.h */, + AA6C6B060DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.cpp */, + AA6C6B070DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.h */, + ); + path = MemoryCard; + sourceTree = ""; + }; + AAC6DCED0567663800B5D56F /* Lights */ = { + isa = PBXGroup; + children = ( + AA909E480B45B93E002852D3 /* LightsDriver.cpp */, + AAC6DCEE0567663800B5D56F /* LightsDriver.h */, + AAB691F205704FA50078BED4 /* LightsDriver_SystemMessage.cpp */, + AAB691F305704FA50078BED4 /* LightsDriver_SystemMessage.h */, + ); + path = Lights; + sourceTree = ""; + }; + AAD675EE06795175006002B0 /* Dialog */ = { + isa = PBXGroup; + children = ( + AAD675EF06795175006002B0 /* Dialog.cpp */, + AAD675F006795175006002B0 /* Dialog.h */, + AA608EBF0B0F85E400B39AC4 /* DialogDriver.cpp */, + AAD675F106795175006002B0 /* DialogDriver.h */, + AA6C6ADC0DC6B1DC00E7A13E /* DialogDriver_MacOSX.cpp */, + AA6C6ADD0DC6B1DC00E7A13E /* DialogDriver_MacOSX.h */, + ); + path = Dialog; + sourceTree = ""; + }; + AADB4E8604D50FB900D02EE9 /* Unix */ = { + isa = PBXGroup; + children = ( + AAED6F280601C528002D2DEE /* Backtrace.cpp */, + AAED6F290601C528002D2DEE /* Backtrace.h */, + AAED6F2A0601C528002D2DEE /* BacktraceNames.cpp */, + AAED6F2B0601C528002D2DEE /* BacktraceNames.h */, + AA76D15404D9D2D200D02EE9 /* CrashHandler.cpp */, + AADB4E8804D50FB900D02EE9 /* CrashHandler.h */, + AA76D15504D9D2D200D02EE9 /* CrashHandlerChild.cpp */, + AADB4E8A04D50FB900D02EE9 /* CrashHandlerInternal.h */, + AADB4E8B04D50FB900D02EE9 /* SignalHandler.cpp */, + AADB4E8C04D50FB900D02EE9 /* SignalHandler.h */, + AA3E3DF009D96A1400A259C7 /* CrashHandlerInternal.cpp */, + ); + path = Unix; + sourceTree = ""; + }; + AADB4E8E04D5263200D02EE9 /* Darwin */ = { + isa = PBXGroup; + children = ( + AADB4E8F04D5263200D02EE9 /* arch_setup.h */, + AAEDFD680A03762B00590617 /* Crash.cpp */, + AADB4F5904D9220700D02EE9 /* Crash.h */, + AA8A3E6306EDCD11002F25AB /* DarwinThreadHelpers.cpp */, + AA8A3EC806EDDAE4002F25AB /* DarwinThreadHelpers.h */, + AA44705309846B0800983E82 /* HIDDevice.cpp */, + AA44705209846B0800983E82 /* HIDDevice.h */, + AA44708D0984720900983E82 /* JoystickDevice.cpp */, + AA44708C0984720900983E82 /* JoystickDevice.h */, + AA4470BB098476F600983E82 /* KeyboardDevice.cpp */, + AA4470BA098476F600983E82 /* KeyboardDevice.h */, + 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */, + 2B30D6811315EA7E00044B68 /* MouseDevice.h */, + AA1F9C4609AF1BF5002C15A8 /* PumpDevice.cpp */, + AA1F9C4509AF1BF5002C15A8 /* PumpDevice.h */, + AABBFCD209838C3A00F077E2 /* SMMain.mm */, + AAD64AA10603FE7300EF8CDE /* StepMania.pch */, + AA147F190A0F78D8006EADF6 /* VectorHelper.cpp */, + AA147F180A0F78D8006EADF6 /* VectorHelper.h */, + ); + path = Darwin; + sourceTree = ""; + }; + AAE781870AC7E46E00AEFC64 /* lua-5.1 */ = { + isa = PBXGroup; + children = ( + 2BDB88B2137201F700E6FD3A /* lapi.c */, + 2BDB88B3137201F700E6FD3A /* lapi.h */, + 2BDB88B4137201F700E6FD3A /* lauxlib.c */, + 2BDB88B5137201F700E6FD3A /* lauxlib.h */, + 2BDB88B6137201F700E6FD3A /* lbaselib.c */, + 2BDB88B7137201F700E6FD3A /* lcode.c */, + 2BDB88B8137201F700E6FD3A /* lcode.h */, + 2BDB88B9137201F700E6FD3A /* ldblib.c */, + 2BDB88BA137201F700E6FD3A /* ldebug.c */, + 2BDB88BB137201F700E6FD3A /* ldebug.h */, + 2BDB88BC137201F700E6FD3A /* ldo.c */, + 2BDB88BD137201F700E6FD3A /* ldo.h */, + 2BDB88BE137201F700E6FD3A /* ldump.c */, + 2BDB88BF137201F700E6FD3A /* lfunc.c */, + 2BDB88C0137201F700E6FD3A /* lfunc.h */, + 2BDB88C1137201F700E6FD3A /* lgc.c */, + 2BDB88C2137201F700E6FD3A /* lgc.h */, + 2BDB88C3137201F700E6FD3A /* linit.c */, + 2BDB88C4137201F700E6FD3A /* liolib.c */, + 2BDB88C5137201F700E6FD3A /* llex.c */, + 2BDB88C6137201F700E6FD3A /* llex.h */, + 2BDB88C7137201F700E6FD3A /* llimits.h */, + 2BDB88C8137201F700E6FD3A /* lmathlib.c */, + 2BDB88C9137201F700E6FD3A /* lmem.c */, + 2BDB88CA137201F700E6FD3A /* lmem.h */, + 2BDB88CB137201F700E6FD3A /* loadlib.c */, + 2BDB88CC137201F700E6FD3A /* lobject.c */, + 2BDB88CD137201F700E6FD3A /* lobject.h */, + 2BDB88CE137201F700E6FD3A /* lopcodes.c */, + 2BDB88CF137201F700E6FD3A /* lopcodes.h */, + 2BDB88D0137201F700E6FD3A /* loslib.c */, + 2BDB88D1137201F700E6FD3A /* lparser.c */, + 2BDB88D2137201F700E6FD3A /* lparser.h */, + 2BDB88D3137201F700E6FD3A /* lstate.c */, + 2BDB88D4137201F700E6FD3A /* lstate.h */, + 2BDB88D5137201F700E6FD3A /* lstring.c */, + 2BDB88D6137201F700E6FD3A /* lstring.h */, + 2BDB88D7137201F700E6FD3A /* lstrlib.c */, + 2BDB88D8137201F700E6FD3A /* ltable.c */, + 2BDB88D9137201F700E6FD3A /* ltable.h */, + 2BDB88DA137201F700E6FD3A /* ltablib.c */, + 2BDB88DB137201F700E6FD3A /* ltm.c */, + 2BDB88DC137201F700E6FD3A /* ltm.h */, + 2BDB88DD137201F700E6FD3A /* lua.c */, + 2BDB88DE137201F700E6FD3A /* lua.h */, + 2BDB88DF137201F700E6FD3A /* luac.c */, + 2BDB88E0137201F700E6FD3A /* luaconf.h */, + 2BDB88E1137201F700E6FD3A /* lualib.h */, + 2BDB88E2137201F700E6FD3A /* lundump.c */, + 2BDB88E3137201F700E6FD3A /* lundump.h */, + 2BDB88E4137201F700E6FD3A /* lvm.c */, + 2BDB88E5137201F700E6FD3A /* lvm.h */, + 2BDB88E6137201F700E6FD3A /* lzio.c */, + 2BDB88E7137201F700E6FD3A /* lzio.h */, + 2BDB88E8137201F700E6FD3A /* print.c */, + ); + name = "lua-5.1"; + path = "../extern/lua-5.1"; + sourceTree = ""; + }; + EE879B8E132E06C50078FDDC /* glew-1.5.8 */ = { + isa = PBXGroup; + children = ( + EE879BAA132E06C50078FDDC /* glew.c */, + ); + name = "glew-1.5.8"; + path = "../extern/glew-1.5.8"; + sourceTree = SOURCE_ROOT; + }; + EE906F6F12BF3A5B00146C96 /* json */ = { + isa = PBXGroup; + children = ( + 2BD06FDD137240CF0018CB9F /* json_batchallocator.h */, + 2BD06FDE137240CF0018CB9F /* json_internalarray.inl */, + 2BD06FDF137240CF0018CB9F /* json_internalmap.inl */, + 2BD06FE0137240CF0018CB9F /* json_reader.cpp */, + 2BD06FE1137240CF0018CB9F /* json_value.cpp */, + 2BD06FE2137240CF0018CB9F /* json_valueiterator.inl */, + 2BD06FE3137240CF0018CB9F /* json_writer.cpp */, + ); + name = json; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + AA29CC270558741A00961A51 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AAFF41A40F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */, + 3659B5700F902143002B6B68 /* CommandLineActions.h in Headers */, + 36CA531D0F91564A0063D59D /* ScreenOptionsCourseOverview.h in Headers */, + 36CA53210F9156860063D59D /* ScreenOptionsEditCourse.h in Headers */, + EE2153AA10A75BEE0074B01B /* NotesLoaderPMS.h in Headers */, + EEA7C84410A805A300082E7B /* ScreenPackagesSSC.h in Headers */, + 36C6888411297FFE00453295 /* RageFileDriverReadAhead.h in Headers */, + 36C6888611297FFE00453295 /* RageFileManager_ReadAhead.h in Headers */, + EE906F6712BF3A1B00146C96 /* ScreenInstallOverlay.h in Headers */, + EE906F8312BF3AF800146C96 /* JsonUtil.h in Headers */, + EE906F8B12BF3C7C00146C96 /* FileDownload.h in Headers */, + 2BA7925F1304F20D002BD8E1 /* NotesLoaderSSC.h in Headers */, + 2BA792611304F20D002BD8E1 /* NotesWriterSSC.h in Headers */, + 2B30D6831315EA7E00044B68 /* MouseDevice.h in Headers */, + EE879B61132DEE720078FDDC /* RageDisplay_Legacy_Helpers.h in Headers */, + EE879B63132DEE720078FDDC /* RageDisplay_Legacy.h in Headers */, + 2B76698B132FF71500586512 /* NotesLoaderSMA.h in Headers */, + 2BD06FEE137242680018CB9F /* json_batchallocator.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA40D1B809A08D650068C0D5 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AA40D1B909A08D650068C0D5 /* StepMania.pch in Headers */, + AA40D1BA09A08D650068C0D5 /* RageBitmapTexture.h in Headers */, + AA40D1BB09A08D650068C0D5 /* RageDisplay.h in Headers */, + AA40D1BC09A08D650068C0D5 /* RageException.h in Headers */, + AA40D1BD09A08D650068C0D5 /* RageInput.h in Headers */, + AA40D1BE09A08D650068C0D5 /* RageLog.h in Headers */, + AA40D1BF09A08D650068C0D5 /* RageMath.h in Headers */, + AA40D1C009A08D650068C0D5 /* RageSound.h in Headers */, + AA40D1C109A08D650068C0D5 /* RageSoundManager.h in Headers */, + AA40D1C209A08D650068C0D5 /* RageSoundReader_Preload.h in Headers */, + AA40D1C409A08D650068C0D5 /* RageSoundReader.h in Headers */, + AA40D1C509A08D650068C0D5 /* RageTexture.h in Headers */, + AA40D1C609A08D650068C0D5 /* RageTextureManager.h in Headers */, + AA40D1C709A08D650068C0D5 /* RageThreads.h in Headers */, + AA40D1C809A08D650068C0D5 /* RageTimer.h in Headers */, + AA40D1C909A08D650068C0D5 /* RageTypes.h in Headers */, + AA40D1CA09A08D650068C0D5 /* RageUtil.h in Headers */, + AA40D1CB09A08D650068C0D5 /* Character.h in Headers */, + AA40D1CC09A08D650068C0D5 /* CodeDetector.h in Headers */, + AA40D1CD09A08D650068C0D5 /* Course.h in Headers */, + AA40D1CE09A08D650068C0D5 /* Font.h in Headers */, + AA40D1CF09A08D650068C0D5 /* FontCharAliases.h in Headers */, + AA40D1D009A08D650068C0D5 /* FontCharmaps.h in Headers */, + AA40D1D109A08D650068C0D5 /* FontManager.h in Headers */, + AA40D1D209A08D650068C0D5 /* GameConstantsAndTypes.h in Headers */, + AA40D1D309A08D650068C0D5 /* GameInput.h in Headers */, + AA40D1D409A08D650068C0D5 /* Grade.h in Headers */, + AA40D1D509A08D650068C0D5 /* Inventory.h in Headers */, + AA40D1D609A08D650068C0D5 /* LyricsLoader.h in Headers */, + AA40D1D709A08D650068C0D5 /* NoteData.h in Headers */, + AA40D1D809A08D650068C0D5 /* NoteDataWithScoring.h in Headers */, + AA40D1DA09A08D650068C0D5 /* NotesLoader.h in Headers */, + AA40D1DB09A08D650068C0D5 /* NotesLoaderBMS.h in Headers */, + AA40D1DC09A08D650068C0D5 /* NotesLoaderDWI.h in Headers */, + AA40D1DD09A08D650068C0D5 /* NotesLoaderKSF.h in Headers */, + AA40D1DE09A08D650068C0D5 /* NotesLoaderSM.h in Headers */, + AA40D1DF09A08D650068C0D5 /* NotesWriterDWI.h in Headers */, + AA40D1E009A08D650068C0D5 /* NotesWriterSM.h in Headers */, + AA40D1E109A08D650068C0D5 /* NoteTypes.h in Headers */, + AA40D1E209A08D650068C0D5 /* Player.h in Headers */, + AA40D1E309A08D650068C0D5 /* PlayerAI.h in Headers */, + AA40D1E409A08D650068C0D5 /* PlayerNumber.h in Headers */, + AA40D1E509A08D650068C0D5 /* PlayerOptions.h in Headers */, + AA40D1E609A08D650068C0D5 /* SongOptions.h in Headers */, + AA40D1E709A08D650068C0D5 /* StageStats.h in Headers */, + AA40D1E909A08D650068C0D5 /* TitleSubstitution.h in Headers */, + AA40D1EA09A08D650068C0D5 /* IniFile.h in Headers */, + AA40D1EB09A08D650068C0D5 /* MsdFile.h in Headers */, + AA40D1EC09A08D650068C0D5 /* global.h in Headers */, + AA40D1ED09A08D650068C0D5 /* ScreenDimensions.h in Headers */, + AA40D1EE09A08D650068C0D5 /* StdString.h in Headers */, + AA40D1EF09A08D650068C0D5 /* StepMania.h in Headers */, + AA40D1F009A08D650068C0D5 /* Banner.h in Headers */, + AA40D1F109A08D650068C0D5 /* BPMDisplay.h in Headers */, + AA40D1F209A08D650068C0D5 /* CourseContentsList.h in Headers */, + AA40D1F409A08D650068C0D5 /* DifficultyIcon.h in Headers */, + AA40D1F709A08D650068C0D5 /* EditMenu.h in Headers */, + AA40D1F809A08D650068C0D5 /* FadingBanner.h in Headers */, + AA40D1F909A08D650068C0D5 /* GradeDisplay.h in Headers */, + AA40D1FA09A08D650068C0D5 /* GrooveRadar.h in Headers */, + AA40D1FC09A08D650068C0D5 /* HelpDisplay.h in Headers */, + AA40D1FD09A08D650068C0D5 /* MenuTimer.h in Headers */, + AA40D1FE09A08D650068C0D5 /* MeterDisplay.h in Headers */, + AA40D20209A08D650068C0D5 /* MusicWheel.h in Headers */, + AA40D20309A08D650068C0D5 /* MusicWheelItem.h in Headers */, + AA40D20609A08D650068C0D5 /* OptionsCursor.h in Headers */, + AA40D20709A08D650068C0D5 /* ScrollBar.h in Headers */, + AA40D20909A08D650068C0D5 /* SnapDisplay.h in Headers */, + AA40D20A09A08D650068C0D5 /* TextBanner.h in Headers */, + AA40D20B09A08D650068C0D5 /* WheelNotifyIcon.h in Headers */, + AA40D20C09A08D650068C0D5 /* ArrowEffects.h in Headers */, + AA40D20D09A08D650068C0D5 /* Background.h in Headers */, + AA40D20E09A08D650068C0D5 /* BGAnimation.h in Headers */, + AA40D20F09A08D650068C0D5 /* BGAnimationLayer.h in Headers */, + AA40D21109A08D650068C0D5 /* DancingCharacters.h in Headers */, + AA40D21209A08D650068C0D5 /* GhostArrowRow.h in Headers */, + AA40D21309A08D650068C0D5 /* HoldJudgment.h in Headers */, + AA40D21509A08D650068C0D5 /* LifeMeter.h in Headers */, + AA40D21609A08D650068C0D5 /* LifeMeterBar.h in Headers */, + AA40D21709A08D650068C0D5 /* LifeMeterBattery.h in Headers */, + AA40D21809A08D650068C0D5 /* LyricDisplay.h in Headers */, + AA40D21909A08D650068C0D5 /* NoteDisplay.h in Headers */, + AA40D21A09A08D650068C0D5 /* NoteField.h in Headers */, + AA40D21B09A08D650068C0D5 /* ScoreDisplay.h in Headers */, + AA40D21C09A08D650068C0D5 /* ScoreDisplayBattle.h in Headers */, + AA40D21D09A08D650068C0D5 /* ScoreDisplayNormal.h in Headers */, + AA40D21E09A08D650068C0D5 /* ScoreDisplayOni.h in Headers */, + AA40D21F09A08D650068C0D5 /* ScoreDisplayRave.h in Headers */, + AA40D22009A08D650068C0D5 /* ScoreKeeper.h in Headers */, + AA40D22109A08D650068C0D5 /* Transition.h in Headers */, + AA40D22209A08D650068C0D5 /* Actor.h in Headers */, + AA40D22309A08D650068C0D5 /* ActorFrame.h in Headers */, + AA40D22409A08D650068C0D5 /* ActorScroller.h in Headers */, + AA40D22509A08D650068C0D5 /* BitmapText.h in Headers */, + AA40D22609A08D650068C0D5 /* Model.h in Headers */, + AA40D22709A08D650068C0D5 /* ModelTypes.h in Headers */, + AA40D22809A08D650068C0D5 /* Quad.h in Headers */, + AA40D22909A08D650068C0D5 /* Sprite.h in Headers */, + AA40D22A09A08D650068C0D5 /* Screen.h in Headers */, + AA40D22B09A08D650068C0D5 /* ScreenAttract.h in Headers */, + AA40D22D09A08D650068C0D5 /* ScreenDemonstration.h in Headers */, + AA40D22E09A08D650068C0D5 /* ScreenEdit.h in Headers */, + AA40D22F09A08D650068C0D5 /* ScreenEditMenu.h in Headers */, + AA40D23009A08D650068C0D5 /* ScreenEvaluation.h in Headers */, + AA40D23309A08D650068C0D5 /* ScreenGameplay.h in Headers */, + AA40D23409A08D650068C0D5 /* ScreenInstructions.h in Headers */, + AA40D23509A08D650068C0D5 /* ScreenJukebox.h in Headers */, + AA40D23609A08D650068C0D5 /* ScreenManager.h in Headers */, + AA40D23709A08D650068C0D5 /* ScreenMapControllers.h in Headers */, + AA40D23809A08D650068C0D5 /* ScreenMessage.h in Headers */, + AA40D23909A08D650068C0D5 /* ScreenMiniMenu.h in Headers */, + AA40D23B09A08D650068C0D5 /* ScreenNameEntry.h in Headers */, + AA40D23C09A08D650068C0D5 /* ScreenOptions.h in Headers */, + AA40D23D09A08D650068C0D5 /* ScreenPlayerOptions.h in Headers */, + AA40D23E09A08D650068C0D5 /* ScreenPrompt.h in Headers */, + AA40D23F09A08D650068C0D5 /* ScreenRanking.h in Headers */, + AA40D24009A08D650068C0D5 /* ScreenSandbox.h in Headers */, + AA40D24109A08D650068C0D5 /* ScreenSelect.h in Headers */, + AA40D24209A08D650068C0D5 /* ScreenSelectCharacter.h in Headers */, + AA40D24609A08D650068C0D5 /* ScreenSelectMusic.h in Headers */, + AA40D24809A08D650068C0D5 /* ScreenSongOptions.h in Headers */, + AA40D24A09A08D650068C0D5 /* ScreenTestFonts.h in Headers */, + AA40D24B09A08D650068C0D5 /* ScreenTestSound.h in Headers */, + AA40D24C09A08D650068C0D5 /* ScreenTextEntry.h in Headers */, + AA40D24D09A08D650068C0D5 /* ScreenTitleMenu.h in Headers */, + AA40D24E09A08D650068C0D5 /* AnnouncerManager.h in Headers */, + AA40D24F09A08D650068C0D5 /* GameManager.h in Headers */, + AA40D25009A08D650068C0D5 /* GameState.h in Headers */, + AA40D25109A08D650068C0D5 /* InputFilter.h in Headers */, + AA40D25209A08D650068C0D5 /* InputMapper.h in Headers */, + AA40D25309A08D650068C0D5 /* InputQueue.h in Headers */, + AA40D25409A08D650068C0D5 /* NoteSkinManager.h in Headers */, + AA40D25509A08D650068C0D5 /* PrefsManager.h in Headers */, + AA40D25609A08D650068C0D5 /* SongManager.h in Headers */, + AA40D25709A08D650068C0D5 /* ThemeManager.h in Headers */, + AA40D25809A08D650068C0D5 /* RageSoundDriver_Null.h in Headers */, + AA40D25909A08D650068C0D5 /* LowLevelWindow.h in Headers */, + AA40D25A09A08D650068C0D5 /* SongCacheIndex.h in Headers */, + AA40D25C09A08D650068C0D5 /* RandomSample.h in Headers */, + AA40D25E09A08D650068C0D5 /* RageUtil_CharConversions.h in Headers */, + AA40D25F09A08D650068C0D5 /* BannerCache.h in Headers */, + AA40D26109A08D650068C0D5 /* arch_default.h in Headers */, + AA40D26309A08D650068C0D5 /* ArchHooks.h in Headers */, + AA40D26409A08D650068C0D5 /* RageSoundDriver.h in Headers */, + AA40D26609A08D650068C0D5 /* ActorUtil.h in Headers */, + AA40D26709A08D650068C0D5 /* ScreenSelectMaster.h in Headers */, + AA40D26B09A08D650068C0D5 /* CombinedLifeMeterTug.h in Headers */, + AA40D26C09A08D650068C0D5 /* ScoreKeeperRave.h in Headers */, + AA40D26D09A08D650068C0D5 /* internal.h in Headers */, + AA40D26E09A08D650068C0D5 /* pcre.h in Headers */, + AA40D26F09A08D650068C0D5 /* RageUtil_FileDB.h in Headers */, + AA40D27109A08D650068C0D5 /* LoadingWindow.h in Headers */, + AA40D27209A08D650068C0D5 /* InputHandler.h in Headers */, + AA40D27309A08D650068C0D5 /* MovieTexture.h in Headers */, + AA40D27509A08D650068C0D5 /* MovieTexture_Null.h in Headers */, + AA40D27609A08D650068C0D5 /* RageFile.h in Headers */, + AA40D27709A08D650068C0D5 /* RageInputDevice.h in Headers */, + AA40D27809A08D650068C0D5 /* RageSoundReader_FileReader.h in Headers */, + AA40D27909A08D650068C0D5 /* arch_setup.h in Headers */, + AA40D27A09A08D650068C0D5 /* CrashHandler.h in Headers */, + AA40D27B09A08D650068C0D5 /* CrashHandlerInternal.h in Headers */, + AA40D27C09A08D650068C0D5 /* Crash.h in Headers */, + AA40D27D09A08D650068C0D5 /* Steps.h in Headers */, + AA40D27E09A08D650068C0D5 /* NoteDataUtil.h in Headers */, + AA40D27F09A08D650068C0D5 /* ProductInfo.h in Headers */, + AA40D28009A08D650068C0D5 /* BeginnerHelper.h in Headers */, + AA40D28209A08D650068C0D5 /* MovieTexture_FFMpeg.h in Headers */, + AA40D28309A08D650068C0D5 /* ProfileManager.h in Headers */, + AA40D28409A08D650068C0D5 /* RageSoundReader_WAV.h in Headers */, + AA40D28609A08D650068C0D5 /* RageSoundReader_Vorbisfile.h in Headers */, + AA40D28809A08D650068C0D5 /* RageSoundReader_Resample_Good.h in Headers */, + AA40D28909A08D650068C0D5 /* ScreenExit.h in Headers */, + AA40D28A09A08D650068C0D5 /* ScreenOptionsMaster.h in Headers */, + AA40D28B09A08D650068C0D5 /* ScreenOptionsMasterPrefs.h in Headers */, + AA40D28C09A08D650068C0D5 /* ScreenReloadSongs.h in Headers */, + AA40D28D09A08D650068C0D5 /* ScreenHowToPlay.h in Headers */, + AA40D28E09A08D650068C0D5 /* PercentageDisplay.h in Headers */, + AA40D28F09A08D650068C0D5 /* ScoreDisplayPercentage.h in Headers */, + AA40D29109A08D650068C0D5 /* ScreenTestInput.h in Headers */, + AA40D29209A08D650068C0D5 /* ScreenBookkeeping.h in Headers */, + AA40D29309A08D650068C0D5 /* ScreenNameEntryTraditional.h in Headers */, + AA40D29409A08D650068C0D5 /* Bookkeeper.h in Headers */, + AA40D29509A08D650068C0D5 /* GraphDisplay.h in Headers */, + AA40D29609A08D650068C0D5 /* ComboGraph.h in Headers */, + AA40D29709A08D650068C0D5 /* Attack.h in Headers */, + AA40D29809A08D650068C0D5 /* RageTextureID.h in Headers */, + AA40D29909A08D650068C0D5 /* CombinedLifeMeter.h in Headers */, + AA40D29A09A08D650068C0D5 /* LightsManager.h in Headers */, + AA40D29B09A08D650068C0D5 /* LightsDriver.h in Headers */, + AA40D29D09A08D650068C0D5 /* PaneDisplay.h in Headers */, + AA40D29E09A08D650068C0D5 /* DifficultyList.h in Headers */, + AA40D29F09A08D650068C0D5 /* LightsDriver_SystemMessage.h in Headers */, + AA40D2A009A08D650068C0D5 /* AttackDisplay.h in Headers */, + AA40D2A109A08D650068C0D5 /* RageFileDriver.h in Headers */, + AA40D2A209A08D650068C0D5 /* RageFileDriverDirect.h in Headers */, + AA40D2A309A08D650068C0D5 /* RageFileManager.h in Headers */, + AA40D2A409A08D650068C0D5 /* RageFileDriverZip.h in Headers */, + AA40D2A509A08D650068C0D5 /* Style.h in Headers */, + AA40D2A609A08D650068C0D5 /* MemoryCardManager.h in Headers */, + AA40D2A709A08D650068C0D5 /* MemoryCardDriver_Null.h in Headers */, + AA40D2A809A08D650068C0D5 /* DualScrollBar.h in Headers */, + AA40D2A909A08D650068C0D5 /* TimingData.h in Headers */, + AA40D2AA09A08D650068C0D5 /* MemoryCardDisplay.h in Headers */, + AA40D2AB09A08D650068C0D5 /* ReceptorArrow.h in Headers */, + AA40D2AC09A08D650068C0D5 /* ReceptorArrowRow.h in Headers */, + AA40D2AD09A08D650068C0D5 /* ScreenEnding.h in Headers */, + AA40D2AE09A08D650068C0D5 /* Foreground.h in Headers */, + AA40D2AF09A08D650068C0D5 /* RageFileDriverDirectHelpers.h in Headers */, + AA40D2B009A08D650068C0D5 /* RageUtil_CircularBuffer.h in Headers */, + AA40D2B109A08D650068C0D5 /* ModelManager.h in Headers */, + AA40D2B209A08D650068C0D5 /* RageModelGeometry.h in Headers */, + AA40D2B309A08D650068C0D5 /* Profile.h in Headers */, + AA40D2B409A08D650068C0D5 /* XmlFile.h in Headers */, + AA40D2B509A08D650068C0D5 /* HighScore.h in Headers */, + AA40D2B609A08D650068C0D5 /* CryptManager.h in Headers */, + AA40D2B809A08D650068C0D5 /* Backtrace.h in Headers */, + AA40D2B909A08D650068C0D5 /* BacktraceNames.h in Headers */, + AA40D2BA09A08D650068C0D5 /* ScreenSetTime.h in Headers */, + AA40D2BB09A08D650068C0D5 /* NetworkSyncManager.h in Headers */, + AA40D2BD09A08D650068C0D5 /* ActiveAttackList.h in Headers */, + AA40D2BF09A08D650068C0D5 /* ScreenTestLights.h in Headers */, + AA40D2C009A08D650068C0D5 /* RageDisplay_Null.h in Headers */, + AA40D2CB09A08D650068C0D5 /* EnumHelper.h in Headers */, + AA40D2CC09A08D650068C0D5 /* RageSoundPosMap.h in Headers */, + AA40D2CD09A08D650068C0D5 /* SignalHandler.h in Headers */, + AA40D2CE09A08D650068C0D5 /* CourseUtil.h in Headers */, + AA40D2CF09A08D650068C0D5 /* SongUtil.h in Headers */, + AA40D2D009A08D650068C0D5 /* StepsUtil.h in Headers */, + AA40D2D109A08D650068C0D5 /* ScreenWithMenuElements.h in Headers */, + AA40D2F209A08D650068C0D5 /* RageSurface_Load_GIF.h in Headers */, + AA40D2F309A08D650068C0D5 /* RageSurface_Load_JPEG.h in Headers */, + AA40D2F409A08D650068C0D5 /* RageSurface_Load_PNG.h in Headers */, + AA40D2F509A08D650068C0D5 /* RageSurface_Load_XPM.h in Headers */, + AA40D2F609A08D650068C0D5 /* RageSurface_Load.h in Headers */, + AA40D2F809A08D650068C0D5 /* Difficulty.h in Headers */, + AA40D2F909A08D650068C0D5 /* Foreach.h in Headers */, + AA40D2FA09A08D650068C0D5 /* Trail.h in Headers */, + AA40D2FB09A08D650068C0D5 /* TrailUtil.h in Headers */, + AA40D2FC09A08D650068C0D5 /* ScreenNetworkOptions.h in Headers */, + AA40D2FD09A08D650068C0D5 /* Dialog.h in Headers */, + AA40D2FE09A08D650068C0D5 /* DialogDriver.h in Headers */, + AA40D30009A08D650068C0D5 /* Threads.h in Headers */, + AA40D30109A08D650068C0D5 /* Threads_Pthreads.h in Headers */, + AA40D30209A08D650068C0D5 /* RageSurface.h in Headers */, + AA40D30309A08D650068C0D5 /* RageSurface_Load_BMP.h in Headers */, + AA40D30409A08D650068C0D5 /* RageSurface_Save_BMP.h in Headers */, + AA40D30509A08D650068C0D5 /* GameSoundManager.h in Headers */, + AA40D30609A08D650068C0D5 /* MemoryCardDriver.h in Headers */, + AA40D30709A08D650068C0D5 /* RadarValues.h in Headers */, + AA40D30809A08D650068C0D5 /* DateTime.h in Headers */, + AA40D30909A08D650068C0D5 /* CommonMetrics.h in Headers */, + AA40D30A09A08D650068C0D5 /* StyleUtil.h in Headers */, + AA40D30B09A08D650068C0D5 /* Game.h in Headers */, + AA40D30C09A08D650068C0D5 /* ScreenNetSelectMusic.h in Headers */, + AA40D30E09A08D650068C0D5 /* RageSurfaceUtils_Palettize.h in Headers */, + AA40D30F09A08D650068C0D5 /* RageSurfaceUtils.h in Headers */, + AA40D31009A08D650068C0D5 /* ScreenNetEvaluation.h in Headers */, + AA40D31109A08D650068C0D5 /* RageFileDriverMemory.h in Headers */, + AA40D31209A08D650068C0D5 /* DarwinThreadHelpers.h in Headers */, + AA40D31309A08D650068C0D5 /* RageUtil_BackgroundLoader.h in Headers */, + AA40D31409A08D650068C0D5 /* Preference.h in Headers */, + AA40D31509A08D650068C0D5 /* ThemeMetric.h in Headers */, + AA40D31609A08D650068C0D5 /* InputHandler_MonkeyKeyboard.h in Headers */, + AA40D31709A08D650068C0D5 /* AutoKeysounds.h in Headers */, + AA40D31809A08D650068C0D5 /* RageSoundMixBuffer.h in Headers */, + AA40D31909A08D650068C0D5 /* RageSoundReader_Chain.h in Headers */, + AA40D31A09A08D650068C0D5 /* RageSoundUtil.h in Headers */, + AA40D31B09A08D650068C0D5 /* ScreenNetRoom.h in Headers */, + AA40D31C09A08D650068C0D5 /* ScreenNetSelectBase.h in Headers */, + AA40D31D09A08D650068C0D5 /* ScreenPackages.h in Headers */, + AA40D31E09A08D650068C0D5 /* ScreenSystemLayer.h in Headers */, + AA40D31F09A08D650068C0D5 /* Command.h in Headers */, + AA40D32009A08D650068C0D5 /* GameCommand.h in Headers */, + AA40D32109A08D650068C0D5 /* RageFileBasic.h in Headers */, + AA40D32209A08D650068C0D5 /* RageFileDriverDeflate.h in Headers */, + AA40D32309A08D650068C0D5 /* RageFileDriverSlice.h in Headers */, + AA40D32409A08D650068C0D5 /* RageSurface_Save_JPEG.h in Headers */, + AA40D32509A08D650068C0D5 /* RageSurfaceUtils_Dither.h in Headers */, + AA40D32609A08D650068C0D5 /* RageSurfaceUtils_Zoom.h in Headers */, + AA40D32709A08D650068C0D5 /* LuaBinding.h in Headers */, + AA40D32809A08D650068C0D5 /* LuaManager.h in Headers */, + AA40D32909A08D650068C0D5 /* PlayerState.h in Headers */, + AA40D32C09A08D650068C0D5 /* RageFileDriverTimeout.h in Headers */, + AA40D32D09A08D650068C0D5 /* RageUtil_AutoPtr.h in Headers */, + AA40D32E09A08D650068C0D5 /* RageUtil_WorkerThread.h in Headers */, + AA40D32F09A08D650068C0D5 /* LuaReference.h in Headers */, + AA40D33009A08D650068C0D5 /* MessageManager.h in Headers */, + AA40D33109A08D650068C0D5 /* StatsManager.h in Headers */, + AA40D33209A08D650068C0D5 /* SubscriptionManager.h in Headers */, + AA40D33309A08D650068C0D5 /* AutoActor.h in Headers */, + AA40D33409A08D650068C0D5 /* OptionRow.h in Headers */, + AA40D33509A08D650068C0D5 /* PlayerStageStats.h in Headers */, + AA40D33609A08D650068C0D5 /* RollingNumbers.h in Headers */, + AA40D33709A08D650068C0D5 /* ScoreDisplayCalories.h in Headers */, + AA40D34009A08D650068C0D5 /* UnlockManager.h in Headers */, + AA40D34109A08D650068C0D5 /* OptionRowHandler.h in Headers */, + AA40D34209A08D650068C0D5 /* ScoreDisplayAliveTime.h in Headers */, + AA40D34309A08D650068C0D5 /* ScoreDisplayLifeTime.h in Headers */, + AA40D34409A08D650068C0D5 /* StreamDisplay.h in Headers */, + AA40D34509A08D650068C0D5 /* LifeMeterTime.h in Headers */, + AA40D34609A08D650068C0D5 /* WheelBase.h in Headers */, + AA40D34709A08D650068C0D5 /* WheelItemBase.h in Headers */, + AA40D34909A08D650068C0D5 /* ScreenDebugOverlay.h in Headers */, + AA40D34B09A08D650068C0D5 /* ScreenSaveSync.h in Headers */, + AA40D34D09A08D650068C0D5 /* ScreenSyncOverlay.h in Headers */, + AA40D34E09A08D650068C0D5 /* BackgroundUtil.h in Headers */, + AA40D34F09A08D650068C0D5 /* ScreenSplash.h in Headers */, + AA40D35009A08D650068C0D5 /* RageTexturePreloader.h in Headers */, + AA40D35109A08D650068C0D5 /* ScreenOptionsEditProfile.h in Headers */, + AA40D35209A08D650068C0D5 /* GameLoop.h in Headers */, + AA40D35309A08D650068C0D5 /* CharacterManager.h in Headers */, + AA40D35409A08D650068C0D5 /* CourseLoaderCRS.h in Headers */, + AA40D35509A08D650068C0D5 /* CourseWriterCRS.h in Headers */, + AA40D35909A08D650068C0D5 /* ScreenOptionsManageCourses.h in Headers */, + AA40D35A09A08D650068C0D5 /* ScreenOptionsManageProfiles.h in Headers */, + AA40D35B09A08D650068C0D5 /* ScreenGameplayNormal.h in Headers */, + AA40D35C09A08D650068C0D5 /* ActorSound.h in Headers */, + AA40D35D09A08D650068C0D5 /* InputEventPlus.h in Headers */, + AA40D35F09A08D650068C0D5 /* ScreenGameplayLesson.h in Headers */, + AA40D36209A08D650068C0D5 /* LuaExpressionTransform.h in Headers */, + AA40D36309A08D650068C0D5 /* DynamicActorScroller.h in Headers */, + AA40D36409A08D650068C0D5 /* ScoreKeeperNormal.h in Headers */, + AA40D36509A08D650068C0D5 /* ScreenStatsOverlay.h in Headers */, + AA40D36709A08D650068C0D5 /* MovieTexture_Generic.h in Headers */, + AA40D36809A08D650068C0D5 /* MovieTexture_Theora.h in Headers */, + AA40D36B09A08D650068C0D5 /* SpecialFiles.h in Headers */, + AA40D36C09A08D650068C0D5 /* ScreenOptionsManageEditSteps.h in Headers */, + AA40D36D09A08D650068C0D5 /* ScreenOptionsMemoryCard.h in Headers */, + AA40D36E09A08D650068C0D5 /* ScreenServiceAction.h in Headers */, + AA40D36F09A08D650068C0D5 /* DisplayResolutions.h in Headers */, + AA40D37009A08D650068C0D5 /* XmlFileUtil.h in Headers */, + AA40D37109A08D650068C0D5 /* LocalizedString.h in Headers */, + AA40D37509A08D650068C0D5 /* HIDDevice.h in Headers */, + AA40D37609A08D650068C0D5 /* JoystickDevice.h in Headers */, + AA40D37709A08D650068C0D5 /* KeyboardDevice.h in Headers */, + AA40D37809A08D650068C0D5 /* Tween.h in Headers */, + AA40D37909A08D650068C0D5 /* ScreenUnlockStatus.h in Headers */, + AA40D37A09A08D650068C0D5 /* AdjustSync.h in Headers */, + AAB55FFF09A84E62008FDC69 /* ScreenUnlockCelebrate.h in Headers */, + AAB5600109A84E64008FDC69 /* ScreenUnlockBrowse.h in Headers */, + AA1F9C4909AF1BF5002C15A8 /* PumpDevice.h in Headers */, + F4BC045509E6B582003F770B /* ScreenGameplaySyncMachine.h in Headers */, + AA147F1C0A0F78D8006EADF6 /* VectorHelper.h in Headers */, + AA8CF5190A4518BE0005F1B4 /* RageSoundDriver_AU.h in Headers */, + AAD8F9340A4B97DF000311CF /* ScreenGameplayShared.h in Headers */, + AAAA11C80A662F9D00B2BD88 /* ScoreKeeperShared.h in Headers */, + AA2EA0040A770208003A0C11 /* ScreenSelectLanguage.h in Headers */, + AA5D165A0A79805C00F17E86 /* RageTextureRenderTarget.h in Headers */, + AA5D166F0A798C0E00F17E86 /* ActorFrameTexture.h in Headers */, + AA5A51F40A8441AA006DBB92 /* ModsGroup.h in Headers */, + AAFE710E0A91ADE6005F2290 /* ActorProxy.h in Headers */, + AAFE712A0A91B58F005F2290 /* RageSurface_Save_PNG.h in Headers */, + AAE780450AC76A1200AEFC64 /* WorkoutGraph.h in Headers */, + AA6999620ACE1CBB000237F9 /* ControllerStateDisplay.h in Headers */, + AAB779FE0B0D9CB200B74314 /* ScoreKeeperGuitar.h in Headers */, + AA6090E90B141D1C00B39AC4 /* GamePreferences.h in Headers */, + AA31D5250B1EC6550016AB6B /* RageSoundReader_Filter.h in Headers */, + AA31D5270B1EC6550016AB6B /* RageSoundReader_PitchChange.h in Headers */, + AA31D5290B1EC6550016AB6B /* RageSoundReader_SpeedChange.h in Headers */, + AA4F27B70B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.h in Headers */, + AA4F27B90B2C01B400ADEA79 /* RageSoundReader_Pan.h in Headers */, + AA909E220B45B676002852D3 /* RageDriver.h in Headers */, + AA909E420B45B8FB002852D3 /* RageSoundReader_Extend.h in Headers */, + AA909E440B45B8FB002852D3 /* RageSoundReader_ThreadedBuffer.h in Headers */, + AAEBF5630B5C517E005F3C7C /* SampleHistory.h in Headers */, + AAEBF5810B5C83F4005F3C7C /* SoundEffectControl.h in Headers */, + AA07008D0B61F177003B85BB /* RageSoundReader_PostBuffering.h in Headers */, + AA7C8DAF0B68CB2200FD9940 /* GameplayAssist.h in Headers */, + AA059ABD0B8CCFB5006F8139 /* ActorMultiTexture.h in Headers */, + AA05A0B10BA2EFF3006F8139 /* OptionsList.h in Headers */, + AA2C9CA20BAD6F55002441E9 /* CodeSet.h in Headers */, + AA2CA8A00BB745BD002441E9 /* ScreenContinue.h in Headers */, + AA1893610BD777C500AEC0BF /* ScreenProfileLoad.h in Headers */, + AA1893630BD777C500AEC0BF /* ScreenProfileSave.h in Headers */, + AA18937D0BD77ECE00AEC0BF /* NotesLoaderMidi.h in Headers */, + AA3396B90BDE195E00E1475F /* RageSoundReader_Merge.h in Headers */, + AA339A7E0BF0FA6400E1475F /* LoadingWindow_Null.h in Headers */, + AAB3B7DF0C6C582E001BF487 /* ScreenSelectProfile.h in Headers */, + AAB3BB5C0C718F2D001BF487 /* RageUtil_CachedObject.h in Headers */, + AAA7D4CC0C7E872600FB8F78 /* ScreenOptionsToggleSongs.h in Headers */, + AAA0713E0CE7B3BB005A3060 /* bit.h in Headers */, + AAA0714A0CE7B3BB005A3060 /* decoder.h in Headers */, + AAA0714D0CE7B3BB005A3060 /* fixed.h in Headers */, + AAA0714F0CE7B3BB005A3060 /* frame.h in Headers */, + AAA071500CE7B3BB005A3060 /* global.h in Headers */, + AAA071520CE7B3BB005A3060 /* huffman.h in Headers */, + AAA071580CE7B3BB005A3060 /* layer12.h in Headers */, + AAA0715A0CE7B3BB005A3060 /* layer3.h in Headers */, + AAA0715D0CE7B3BB005A3060 /* mad.h in Headers */, + AAA071700CE7B3BB005A3060 /* stream.h in Headers */, + AAA071720CE7B3BB005A3060 /* synth.h in Headers */, + AAA071740CE7B3BB005A3060 /* timer.h in Headers */, + AAA071780CE7B3BB005A3060 /* version.h in Headers */, + AA7CDD950D8395F90001DAFC /* Song.h in Headers */, + AA11A2140DC5A1B0006BD8AC /* ModIcon.h in Headers */, + AA11A2160DC5A1B0006BD8AC /* ModIconRow.h in Headers */, + AA6C6ADB0DC6B17B00E7A13E /* ArchHooks_MacOSX.h in Headers */, + AA6C6AE10DC6B1DC00E7A13E /* DialogDriver_MacOSX.h in Headers */, + AA6C6AE60DC6B22800E7A13E /* LoadingWindow_MacOSX.h in Headers */, + AA6C6B040DC6B2B400E7A13E /* LowLevelWindow_MacOSX.h in Headers */, + AA6C6B0B0DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.h in Headers */, + AA6C6B110DC6B48C00E7A13E /* InputHandler_MacOSX_HID.h in Headers */, + AAC0BFE40E2951EC00F56EEB /* CryptHelpers.h in Headers */, + AAFF41A60F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7C895B0B67444700FD9940 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AA7C8B730B6744F700FD9940 /* tommath.h in Headers */, + AA7C8B740B6744F700FD9940 /* tommath_class.h in Headers */, + AA7C8B750B6744F700FD9940 /* tommath_superclass.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7C8B870B67460600FD9940 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AA7C8C5B0B67467D00FD9940 /* tomcrypt.h in Headers */, + AA7C8C5C0B67467D00FD9940 /* tomcrypt_argchk.h in Headers */, + AA7C8C5D0B67467D00FD9940 /* tomcrypt_cfg.h in Headers */, + AA7C8C5E0B67467D00FD9940 /* tomcrypt_cipher.h in Headers */, + AA7C8C5F0B67467D00FD9940 /* tomcrypt_custom.h in Headers */, + AA7C8C600B67467D00FD9940 /* tomcrypt_hash.h in Headers */, + AA7C8C610B67467D00FD9940 /* tomcrypt_mac.h in Headers */, + AA7C8C620B67467D00FD9940 /* tomcrypt_macros.h in Headers */, + AA7C8C630B67467D00FD9940 /* tomcrypt_math.h in Headers */, + AA7C8C640B67467D00FD9940 /* tomcrypt_misc.h in Headers */, + AA7C8C650B67467D00FD9940 /* tomcrypt_pk.h in Headers */, + AA7C8C660B67467D00FD9940 /* tomcrypt_pkcs.h in Headers */, + AA7C8C670B67467D00FD9940 /* tomcrypt_prng.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AAA070A50CE7B0DF005A3060 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AAA0717F0CE7B4FB005A3060 /* version.h in Headers */, + AAA071810CE7B4FC005A3060 /* timer.h in Headers */, + AAA071830CE7B4FE005A3060 /* synth.h in Headers */, + AAA071850CE7B4FF005A3060 /* stream.h in Headers */, + AAA071870CE7B502005A3060 /* mad.h in Headers */, + AAA071880CE7B502005A3060 /* layer3.h in Headers */, + AAA0718A0CE7B503005A3060 /* layer12.h in Headers */, + AAA0718C0CE7B505005A3060 /* huffman.h in Headers */, + AAA0718E0CE7B508005A3060 /* global.h in Headers */, + AAA0718F0CE7B508005A3060 /* frame.h in Headers */, + AAA071910CE7B509005A3060 /* fixed.h in Headers */, + AAA071930CE7B50B005A3060 /* decoder.h in Headers */, + AAA071950CE7B50C005A3060 /* bit.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AAE7817A0AC7E37B00AEFC64 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 2BDB88EA137201F700E6FD3A /* lapi.h in Headers */, + 2BDB88EC137201F700E6FD3A /* lauxlib.h in Headers */, + 2BDB88EF137201F700E6FD3A /* lcode.h in Headers */, + 2BDB88F2137201F700E6FD3A /* ldebug.h in Headers */, + 2BDB88F4137201F700E6FD3A /* ldo.h in Headers */, + 2BDB88F7137201F700E6FD3A /* lfunc.h in Headers */, + 2BDB88F9137201F700E6FD3A /* lgc.h in Headers */, + 2BDB88FD137201F700E6FD3A /* llex.h in Headers */, + 2BDB88FE137201F700E6FD3A /* llimits.h in Headers */, + 2BDB8901137201F700E6FD3A /* lmem.h in Headers */, + 2BDB8904137201F700E6FD3A /* lobject.h in Headers */, + 2BDB8906137201F700E6FD3A /* lopcodes.h in Headers */, + 2BDB8909137201F700E6FD3A /* lparser.h in Headers */, + 2BDB890B137201F700E6FD3A /* lstate.h in Headers */, + 2BDB890D137201F700E6FD3A /* lstring.h in Headers */, + 2BDB8910137201F700E6FD3A /* ltable.h in Headers */, + 2BDB8913137201F700E6FD3A /* ltm.h in Headers */, + 2BDB8915137201F700E6FD3A /* lua.h in Headers */, + 2BDB8917137201F700E6FD3A /* luaconf.h in Headers */, + 2BDB8918137201F700E6FD3A /* lualib.h in Headers */, + 2BDB891A137201F700E6FD3A /* lundump.h in Headers */, + 2BDB891C137201F700E6FD3A /* lvm.h in Headers */, + 2BDB891E137201F700E6FD3A /* lzio.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXLegacyTarget section */ + AA30C60F07F5E24A0066F398 /* version */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "-w scripts/increment_version.pl"; + buildConfigurationList = AAC8450B0856A19700A9FEAB /* Build configuration list for PBXLegacyTarget "version" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/perl; + dependencies = ( + ); + name = version; + passBuildSettingsInEnvironment = 1; + productName = version; + }; +/* End PBXLegacyTarget section */ + +/* Begin PBXNativeTarget section */ + AA29CC240558741A00961A51 /* stepmania */ = { + isa = PBXNativeTarget; + buildConfigurationList = AAC8450F0856A19700A9FEAB /* Build configuration list for PBXNativeTarget "stepmania" */; + buildPhases = ( + AAA74CCF090CE268003F9A36 /* ShellScript */, + AA1DE8F30C54668900D59F20 /* ShellScript */, + AA29CC270558741A00961A51 /* Headers */, + AA29CD3C0558741A00961A51 /* Resources */, + AA4B428C05733DF2005FB5DB /* CopyFiles */, + AA29CD410558741A00961A51 /* Sources */, + AA29CE3B0558741A00961A51 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + AAE781FE0AC7E61900AEFC64 /* PBXTargetDependency */, + AA7C8D180B6748B800FD9940 /* PBXTargetDependency */, + AA7C8D160B6748B800FD9940 /* PBXTargetDependency */, + AAA071AA0CE7B879005A3060 /* PBXTargetDependency */, + AA30C61A07F5E2EF0066F398 /* PBXTargetDependency */, + ); + name = stepmania; + productInstallPath = "$(HOME)/Applications"; + productName = "SDL App"; + productReference = AA29CE580558741A00961A51 /* sm-ssc.app */; + productType = "com.apple.product-type.application"; + }; + AA40D1B409A08D650068C0D5 /* stepmania-bare */ = { + isa = PBXNativeTarget; + buildConfigurationList = AA40D52709A08D650068C0D5 /* Build configuration list for PBXNativeTarget "stepmania-bare" */; + buildPhases = ( + AA40D1B709A08D650068C0D5 /* ShellScript */, + AA21E4880A98289F00684CEA /* ShellScript */, + AA1DE95A0C54693D00D59F20 /* ShellScript */, + AA40D1B809A08D650068C0D5 /* Headers */, + AA40D37B09A08D650068C0D5 /* Resources */, + AA40D37D09A08D650068C0D5 /* CopyFiles */, + AA40D38009A08D650068C0D5 /* Sources */, + AA40D51409A08D650068C0D5 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + AAE782020AC7E63100AEFC64 /* PBXTargetDependency */, + AA7C8D1E0B6748CD00FD9940 /* PBXTargetDependency */, + AA7C8D1C0B6748CD00FD9940 /* PBXTargetDependency */, + AA40D1B509A08D650068C0D5 /* PBXTargetDependency */, + ); + name = "stepmania-bare"; + productInstallPath = "$(HOME)/Applications"; + productName = "SDL App"; + productReference = AA40D52B09A08D660068C0D5 /* sm-ssc.app */; + productType = "com.apple.product-type.application"; + }; + AA7A2B930AE09B520054C5BA /* lua */ = { + isa = PBXNativeTarget; + buildConfigurationList = AA7A2B990AE09BA50054C5BA /* Build configuration list for PBXNativeTarget "lua" */; + buildPhases = ( + AA7A2B910AE09B520054C5BA /* Sources */, + AA7A2B920AE09B520054C5BA /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + AA7A2BA60AE09C9B0054C5BA /* PBXTargetDependency */, + ); + name = lua; + productName = lua; + productReference = AA7A2B940AE09B520054C5BA /* lua */; + productType = "com.apple.product-type.tool"; + }; + AA7A2BAA0AE09CD50054C5BA /* luac */ = { + isa = PBXNativeTarget; + buildConfigurationList = AA7A2BB90AE09D4E0054C5BA /* Build configuration list for PBXNativeTarget "luac" */; + buildPhases = ( + AA7A2BA80AE09CD50054C5BA /* Sources */, + AA7A2BA90AE09CD50054C5BA /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + AA7A2BAE0AE09CDB0054C5BA /* PBXTargetDependency */, + ); + name = luac; + productName = luac; + productReference = AA7A2BAB0AE09CD50054C5BA /* luac */; + productType = "com.apple.product-type.tool"; + }; + AA7C895E0B67444700FD9940 /* tommath */ = { + isa = PBXNativeTarget; + buildConfigurationList = AA7C89810B67447E00FD9940 /* Build configuration list for PBXNativeTarget "tommath" */; + buildPhases = ( + AA7C895B0B67444700FD9940 /* Headers */, + AA7C895C0B67444700FD9940 /* Sources */, + AA7C895D0B67444700FD9940 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = tommath; + productName = tommath; + productReference = AA7C895F0B67444700FD9940 /* libtommath.a */; + productType = "com.apple.product-type.library.static"; + }; + AA7C8B8A0B67460600FD9940 /* tomcrypt */ = { + isa = PBXNativeTarget; + buildConfigurationList = AA7C8B8E0B67464300FD9940 /* Build configuration list for PBXNativeTarget "tomcrypt" */; + buildPhases = ( + AA7C8B870B67460600FD9940 /* Headers */, + AA7C8B880B67460600FD9940 /* Sources */, + AA7C8B890B67460600FD9940 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = tomcrypt; + productName = tomcrypt; + productReference = AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */; + productType = "com.apple.product-type.library.static"; + }; + AAA070A80CE7B0DF005A3060 /* mad */ = { + isa = PBXNativeTarget; + buildConfigurationList = AAA070AE0CE7B138005A3060 /* Build configuration list for PBXNativeTarget "mad" */; + buildPhases = ( + AAA070A50CE7B0DF005A3060 /* Headers */, + AAA070A60CE7B0DF005A3060 /* Sources */, + AAA070A70CE7B0DF005A3060 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = mad; + productName = mad; + productReference = AAA070A90CE7B0DF005A3060 /* libmad.a */; + productType = "com.apple.product-type.library.static"; + }; + AAE7817D0AC7E37B00AEFC64 /* lua-5.1 */ = { + isa = PBXNativeTarget; + buildConfigurationList = AAE7817F0AC7E3BF00AEFC64 /* Build configuration list for PBXNativeTarget "lua-5.1" */; + buildPhases = ( + AAE7817A0AC7E37B00AEFC64 /* Headers */, + AAE7817B0AC7E37B00AEFC64 /* Sources */, + AAE7817C0AC7E37B00AEFC64 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "lua-5.1"; + productName = "lua-5.1"; + productReference = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + isa = PBXProject; + buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */; + compatibilityVersion = "Xcode 3.0"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + it, + es, + de, + en, + ja, + fr, + ); + mainGroup = 29B97314FDCFA39411CA2CEA /* SDL App */; + projectDirPath = ""; + projectRoot = ..; + targets = ( + AA29CC240558741A00961A51 /* stepmania */, + AA30C60F07F5E24A0066F398 /* version */, + AA40D1B409A08D650068C0D5 /* stepmania-bare */, + AAE7817D0AC7E37B00AEFC64 /* lua-5.1 */, + AA7A2B930AE09B520054C5BA /* lua */, + AA7A2BAA0AE09CD50054C5BA /* luac */, + AA7A2BB30AE09D0F0054C5BA /* all lua */, + AA7C895E0B67444700FD9940 /* tommath */, + AA7C8B8A0B67460600FD9940 /* tomcrypt */, + AAA070A80CE7B0DF005A3060 /* mad */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AA29CD3C0558741A00961A51 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AA29CD3E0558741A00961A51 /* smicon.icns in Resources */, + AAF6A2F909B695BA00D5C614 /* Localizable.strings in Resources */, + AA1DE9580C5468CE00D59F20 /* Hardware.plist in Resources */, + 2BD06FEF137242680018CB9F /* json_internalarray.inl in Resources */, + 2BD06FF0137242680018CB9F /* json_internalmap.inl in Resources */, + 2BD06FF3137242680018CB9F /* json_valueiterator.inl in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA40D37B09A08D650068C0D5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AA40D37C09A08D650068C0D5 /* smicon.icns in Resources */, + AAF6A2FA09B695BA00D5C614 /* Localizable.strings in Resources */, + AA1DE9570C5468CE00D59F20 /* Hardware.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + AA1DE8F30C54668900D59F20 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/Hardware.in.plist", + ); + outputPaths = ( + "$(SRCROOT)/Hardware.plist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "plutil -convert binary1 -o \"$SRCROOT/Hardware.plist\" \"$SRCROOT/Hardware.in.plist\""; + }; + AA1DE95A0C54693D00D59F20 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/Hardware.in.plist", + ); + outputPaths = ( + "$(SRCROOT)/Hardware.plist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "plutil -convert binary1 -o \"$SRCROOT/Hardware.plist\" \"$SRCROOT/Hardware.in.plist\""; + }; + AA21E4880A98289F00684CEA /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 12; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/Libraries/libpng.a", + "$(SRCROOT)/Libraries/libogg.a", + "$(SRCROOT)/Libraries/libjpeg.a", + "$(SRCROOT)/Libraries/libvorbis.a", + "$(SRCROOT)/Libraries/libtheora.a", + "$(SRCROOT)/Libraries/libffmpeg.a", + ); + outputPaths = ( + "$(SRCROOT)/Libraries/libpng_link.a", + "$(SRCROOT)/Libraries/libogg_link.a", + "$(SRCROOT)/Libraries/libjpeg_link.a", + "$(SRCROOT)/Libraries/libvorbis_link.a", + "$(SRCROOT)/Libraries/libtheora_link.a", + "$(SRCROOT)/Libraries/libffmpeg_link.a", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "for i in ffmpeg theora vorbis jpeg ogg png z; do\n\tcp \"$SRCROOT\"/Libraries/lib${i}.a \"$SRCROOT\"/Libraries/lib${i}_link.a\n\tranlib \"$SRCROOT\"/Libraries/lib${i}_link.a\ndone"; + }; + AA40D1B709A08D650068C0D5 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + comments = "Work around stupid linker thinking archives are out of date if they've been moved."; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "rm -rf \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/mad.framework\"\n"; + }; + AAA74CCF090CE268003F9A36 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + comments = "Work around stupid linker thinking archives are out of date if they've been moved."; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/Libraries/libvorbis.a", + "$(SRCROOT)/Libraries/libtheora.a", + "$(SRCROOT)/Libraries/libpng.a", + "$(SRCROOT)/Libraries/libogg.a", + "$(SRCROOT)/Libraries/libjpeg.a", + "$(SRCROOT)/Libraries/libffmpeg.a", + ); + outputPaths = ( + "$(SRCROOT)/Libraries/libvorbis_link.a", + "$(SRCROOT)/Libraries/libtheora_link.a", + "$(SRCROOT)/Libraries/libpng_link.a", + "$(SRCROOT)/Libraries/libogg_link.a", + "$(SRCROOT)/Libraries/libjpeg_link.a", + "$(SRCROOT)/Libraries/libffmpeg_link.a", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "for i in ffmpeg theora vorbis jpeg ogg png z; do\n\tcp \"$SRCROOT\"/Libraries/lib${i}.a \"$SRCROOT\"/Libraries/lib${i}_link.a\n\tranlib \"$SRCROOT\"/Libraries/lib${i}_link.a\ndone"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AA29CD410558741A00961A51 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AA29CD520558741A00961A51 /* RageUtil.cpp in Sources */, + AA29CD420558741A00961A51 /* RageBitmapTexture.cpp in Sources */, + AA29CD430558741A00961A51 /* RageDisplay.cpp in Sources */, + AA29CD440558741A00961A51 /* RageException.cpp in Sources */, + AA29CD450558741A00961A51 /* RageInput.cpp in Sources */, + AA29CD460558741A00961A51 /* RageInputDevice.cpp in Sources */, + AA29CD470558741A00961A51 /* RageLog.cpp in Sources */, + AA29CD480558741A00961A51 /* RageMath.cpp in Sources */, + AA29CD490558741A00961A51 /* RageSound.cpp in Sources */, + AA29CD4A0558741A00961A51 /* RageSoundManager.cpp in Sources */, + AA29CD4B0558741A00961A51 /* RageSoundReader_Preload.cpp in Sources */, + AA29CD4E0558741A00961A51 /* RageTexture.cpp in Sources */, + AA29CD4F0558741A00961A51 /* RageTextureManager.cpp in Sources */, + AA29CD500558741A00961A51 /* RageThreads.cpp in Sources */, + AA29CD510558741A00961A51 /* RageTimer.cpp in Sources */, + AA29CD560558741A00961A51 /* Character.cpp in Sources */, + AA29CD570558741A00961A51 /* CodeDetector.cpp in Sources */, + AA29CD580558741A00961A51 /* Course.cpp in Sources */, + AA29CD590558741A00961A51 /* Font.cpp in Sources */, + AA29CD5A0558741A00961A51 /* FontCharAliases.cpp in Sources */, + AA29CD5B0558741A00961A51 /* FontCharmaps.cpp in Sources */, + AA29CD5C0558741A00961A51 /* FontManager.cpp in Sources */, + AA29CD5D0558741A00961A51 /* GameConstantsAndTypes.cpp in Sources */, + AA29CD5F0558741A00961A51 /* GameInput.cpp in Sources */, + AA29CD600558741A00961A51 /* Grade.cpp in Sources */, + AA29CD610558741A00961A51 /* Inventory.cpp in Sources */, + AA29CD620558741A00961A51 /* LyricsLoader.cpp in Sources */, + AA29CD630558741A00961A51 /* NoteData.cpp in Sources */, + AA29CD640558741A00961A51 /* NoteDataWithScoring.cpp in Sources */, + AA29CD660558741A00961A51 /* NotesLoader.cpp in Sources */, + AA29CD670558741A00961A51 /* NotesLoaderBMS.cpp in Sources */, + AA29CD680558741A00961A51 /* NotesLoaderDWI.cpp in Sources */, + AA29CD690558741A00961A51 /* NotesLoaderKSF.cpp in Sources */, + AA29CD6A0558741A00961A51 /* NotesLoaderSM.cpp in Sources */, + AA29CD6B0558741A00961A51 /* NotesWriterDWI.cpp in Sources */, + AA29CD6C0558741A00961A51 /* NotesWriterSM.cpp in Sources */, + AA29CD6D0558741A00961A51 /* NoteTypes.cpp in Sources */, + AA29CD6E0558741A00961A51 /* Player.cpp in Sources */, + AA29CD6F0558741A00961A51 /* PlayerAI.cpp in Sources */, + AA29CD700558741A00961A51 /* PlayerNumber.cpp in Sources */, + AA29CD710558741A00961A51 /* PlayerOptions.cpp in Sources */, + AA29CD720558741A00961A51 /* SongOptions.cpp in Sources */, + AA29CD730558741A00961A51 /* StageStats.cpp in Sources */, + AA29CD750558741A00961A51 /* TitleSubstitution.cpp in Sources */, + AA29CD760558741A00961A51 /* IniFile.cpp in Sources */, + AA29CD770558741A00961A51 /* MsdFile.cpp in Sources */, + AA29CD780558741A00961A51 /* StepMania.cpp in Sources */, + AA29CD790558741A00961A51 /* Banner.cpp in Sources */, + AA29CD7A0558741A00961A51 /* BPMDisplay.cpp in Sources */, + AA29CD7B0558741A00961A51 /* CourseContentsList.cpp in Sources */, + AA29CD7D0558741A00961A51 /* DifficultyIcon.cpp in Sources */, + AA29CD800558741A00961A51 /* EditMenu.cpp in Sources */, + AA29CD810558741A00961A51 /* FadingBanner.cpp in Sources */, + AA29CD820558741A00961A51 /* GradeDisplay.cpp in Sources */, + AA29CD840558741A00961A51 /* GrooveRadar.cpp in Sources */, + AA29CD860558741A00961A51 /* HelpDisplay.cpp in Sources */, + AA29CD890558741A00961A51 /* MenuTimer.cpp in Sources */, + AA29CD8A0558741A00961A51 /* MeterDisplay.cpp in Sources */, + AA29CD8E0558741A00961A51 /* MusicWheel.cpp in Sources */, + AA29CD8F0558741A00961A51 /* MusicWheelItem.cpp in Sources */, + AA29CD920558741A00961A51 /* OptionsCursor.cpp in Sources */, + AA29CD930558741A00961A51 /* ScrollBar.cpp in Sources */, + AA29CD950558741A00961A51 /* SnapDisplay.cpp in Sources */, + AA29CD960558741A00961A51 /* TextBanner.cpp in Sources */, + AA29CD970558741A00961A51 /* WheelNotifyIcon.cpp in Sources */, + AA29CD980558741A00961A51 /* ArrowEffects.cpp in Sources */, + AA29CD990558741A00961A51 /* Background.cpp in Sources */, + AA29CD9A0558741A00961A51 /* BGAnimation.cpp in Sources */, + AA29CD9B0558741A00961A51 /* BGAnimationLayer.cpp in Sources */, + AA29CD9D0558741A00961A51 /* DancingCharacters.cpp in Sources */, + AA29CD9F0558741A00961A51 /* GhostArrowRow.cpp in Sources */, + AA29CDA30558741A00961A51 /* HoldJudgment.cpp in Sources */, + AA29CDA50558741A00961A51 /* LifeMeterBar.cpp in Sources */, + AA29CDA60558741A00961A51 /* LifeMeterBattery.cpp in Sources */, + AA29CDA70558741A00961A51 /* LyricDisplay.cpp in Sources */, + AA29CDA80558741A00961A51 /* NoteDisplay.cpp in Sources */, + AA29CDA90558741A00961A51 /* NoteField.cpp in Sources */, + AA29CDAA0558741A00961A51 /* ScoreDisplay.cpp in Sources */, + AA29CDAB0558741A00961A51 /* ScoreDisplayBattle.cpp in Sources */, + AA29CDAC0558741A00961A51 /* ScoreDisplayNormal.cpp in Sources */, + AA29CDAD0558741A00961A51 /* ScoreDisplayOni.cpp in Sources */, + AA29CDAE0558741A00961A51 /* ScoreDisplayRave.cpp in Sources */, + AA29CDB10558741A00961A51 /* Transition.cpp in Sources */, + AA29CDB20558741A00961A51 /* Actor.cpp in Sources */, + AA29CDB30558741A00961A51 /* ActorFrame.cpp in Sources */, + AA29CDB40558741A00961A51 /* ActorScroller.cpp in Sources */, + AA29CDB50558741A00961A51 /* BitmapText.cpp in Sources */, + AA29CDB70558741A00961A51 /* Model.cpp in Sources */, + AA29CDB80558741A00961A51 /* ModelTypes.cpp in Sources */, + AA29CDB90558741A00961A51 /* Sprite.cpp in Sources */, + AA29CDBA0558741A00961A51 /* Screen.cpp in Sources */, + AA29CDBB0558741A00961A51 /* ScreenAttract.cpp in Sources */, + AA29CDBE0558741A00961A51 /* ScreenDemonstration.cpp in Sources */, + AA29CDBF0558741A00961A51 /* ScreenEdit.cpp in Sources */, + AA29CDC00558741A00961A51 /* ScreenEditMenu.cpp in Sources */, + AA29CDC10558741A00961A51 /* ScreenEvaluation.cpp in Sources */, + AA29CDC50558741A00961A51 /* ScreenGameplay.cpp in Sources */, + AA29CDC60558741A00961A51 /* ScreenJukebox.cpp in Sources */, + AA29CDC90558741A00961A51 /* ScreenManager.cpp in Sources */, + AA29CDCA0558741A00961A51 /* ScreenMapControllers.cpp in Sources */, + AA29CDCB0558741A00961A51 /* ScreenMiniMenu.cpp in Sources */, + AA29CDCD0558741A00961A51 /* ScreenNameEntry.cpp in Sources */, + AA29CDCE0558741A00961A51 /* ScreenOptions.cpp in Sources */, + AA29CDCF0558741A00961A51 /* ScreenPlayerOptions.cpp in Sources */, + AA29CDD00558741A00961A51 /* ScreenPrompt.cpp in Sources */, + AA29CDD10558741A00961A51 /* ScreenRanking.cpp in Sources */, + AA29CDD30558741A00961A51 /* ScreenSandbox.cpp in Sources */, + AA29CDD40558741A00961A51 /* ScreenSelect.cpp in Sources */, + AA29CDD50558741A00961A51 /* ScreenSelectCharacter.cpp in Sources */, + AA29CDDB0558741A00961A51 /* ScreenSelectMusic.cpp in Sources */, + AA29CDDD0558741A00961A51 /* ScreenSongOptions.cpp in Sources */, + AA29CDE10558741A00961A51 /* ScreenTestFonts.cpp in Sources */, + AA29CDE20558741A00961A51 /* ScreenTestSound.cpp in Sources */, + AA29CDE30558741A00961A51 /* ScreenTextEntry.cpp in Sources */, + AA29CDE40558741A00961A51 /* ScreenTitleMenu.cpp in Sources */, + AA29CDE60558741A00961A51 /* AnnouncerManager.cpp in Sources */, + AA29CDE70558741A00961A51 /* GameManager.cpp in Sources */, + AA29CDE80558741A00961A51 /* GameState.cpp in Sources */, + AA29CDE90558741A00961A51 /* InputFilter.cpp in Sources */, + AA29CDEA0558741A00961A51 /* InputMapper.cpp in Sources */, + AA29CDEB0558741A00961A51 /* InputQueue.cpp in Sources */, + AA29CDEC0558741A00961A51 /* NoteSkinManager.cpp in Sources */, + AA29CDED0558741A00961A51 /* PrefsManager.cpp in Sources */, + AA29CDEE0558741A00961A51 /* SongManager.cpp in Sources */, + AA29CDEF0558741A00961A51 /* ThemeManager.cpp in Sources */, + AA29CDF10558741A00961A51 /* RageSoundDriver_Null.cpp in Sources */, + AA29CDF50558741A00961A51 /* MovieTexture.cpp in Sources */, + AA29CDF60558741A00961A51 /* SongCacheIndex.cpp in Sources */, + AA29CDF70558741A00961A51 /* Song.cpp in Sources */, + AA29CDF80558741A00961A51 /* RandomSample.cpp in Sources */, + AA29CDFA0558741A00961A51 /* RageUtil_CharConversions.cpp in Sources */, + AA29CDFB0558741A00961A51 /* BannerCache.cpp in Sources */, + AA29CDFE0558741A00961A51 /* ScreenSelectMaster.cpp in Sources */, + AA29CE000558741A00961A51 /* CombinedLifeMeterTug.cpp in Sources */, + AA29CE010558741A00961A51 /* ScoreKeeperRave.cpp in Sources */, + AA29CE030558741A00961A51 /* get.c in Sources */, + AA29CE040558741A00961A51 /* maketables.c in Sources */, + AA29CE050558741A00961A51 /* pcre.c in Sources */, + AA29CE060558741A00961A51 /* study.c in Sources */, + AA29CE070558741A00961A51 /* RageUtil_FileDB.cpp in Sources */, + AA29CE090558741A00961A51 /* ActorUtil.cpp in Sources */, + AA29CE0B0558741A00961A51 /* ArchHooks.cpp in Sources */, + AA29CE0C0558741A00961A51 /* InputHandler.cpp in Sources */, + AA29CE0E0558741A00961A51 /* MovieTexture_Null.cpp in Sources */, + AA29CE100558741A00961A51 /* RageFile.cpp in Sources */, + AA29CE140558741A00961A51 /* CrashHandler.cpp in Sources */, + AA29CE150558741A00961A51 /* CrashHandlerChild.cpp in Sources */, + AA29CE170558741A00961A51 /* ver.cpp in Sources */, + AA29CE180558741A00961A51 /* Steps.cpp in Sources */, + AA29CE190558741A00961A51 /* NoteDataUtil.cpp in Sources */, + AA29CE1E0558741A00961A51 /* BeginnerHelper.cpp in Sources */, + AA29CE200558741A00961A51 /* MovieTexture_FFMpeg.cpp in Sources */, + AA29CE220558741A00961A51 /* ProfileManager.cpp in Sources */, + AA29CE230558741A00961A51 /* RageSoundReader_WAV.cpp in Sources */, + AA29CE240558741A00961A51 /* RageSoundReader_FileReader.cpp in Sources */, + AA29CE250558741A00961A51 /* RageSoundReader_MP3.cpp in Sources */, + AA29CE260558741A00961A51 /* RageSoundReader_Vorbisfile.cpp in Sources */, + AA29CE280558741A00961A51 /* RageSoundReader_Resample_Good.cpp in Sources */, + AA29CE290558741A00961A51 /* ScreenExit.cpp in Sources */, + AA29CE2B0558741A00961A51 /* ScreenOptionsMaster.cpp in Sources */, + AA29CE2C0558741A00961A51 /* ScreenOptionsMasterPrefs.cpp in Sources */, + AA29CE2D0558741A00961A51 /* ScreenReloadSongs.cpp in Sources */, + AA29CE2F0558741A00961A51 /* ScreenInstructions.cpp in Sources */, + AA29CE300558741A00961A51 /* ScreenHowToPlay.cpp in Sources */, + AA29CE310558741A00961A51 /* PercentageDisplay.cpp in Sources */, + AA29CE320558741A00961A51 /* ScoreDisplayPercentage.cpp in Sources */, + AA29CE340558741A00961A51 /* ScreenTestInput.cpp in Sources */, + AA29CE350558741A00961A51 /* ScreenBookkeeping.cpp in Sources */, + AA29CE360558741A00961A51 /* ScreenNameEntryTraditional.cpp in Sources */, + AA29CE370558741A00961A51 /* Bookkeeper.cpp in Sources */, + AA29CE380558741A00961A51 /* GraphDisplay.cpp in Sources */, + AA29CE390558741A00961A51 /* ComboGraph.cpp in Sources */, + AA29CE3A0558741A00961A51 /* Attack.cpp in Sources */, + AA9EC2F2055F5126007E5098 /* RageTextureID.cpp in Sources */, + AAC6DCE50567660A00B5D56F /* LightsManager.cpp in Sources */, + AAC6DDE00569C71000B5D56F /* PaneDisplay.cpp in Sources */, + AAC6DDE80569C80900B5D56F /* DifficultyList.cpp in Sources */, + AAB691F405704FA50078BED4 /* LightsDriver_SystemMessage.cpp in Sources */, + AAB005F20579B8CB000BBA58 /* AttackDisplay.cpp in Sources */, + AAB00861057F4F7A000BBA58 /* RageFileDriver.cpp in Sources */, + AAB00863057F4F7A000BBA58 /* RageFileDriverDirect.cpp in Sources */, + AAB00865057F4F7A000BBA58 /* RageFileManager.cpp in Sources */, + AA251B7705841FCE00027ACB /* RageFileDriverZip.cpp in Sources */, + AA28B47C058F2F5E0097C109 /* MemoryCardManager.cpp in Sources */, + AABE788E05912B0600E8BF50 /* DualScrollBar.cpp in Sources */, + AA729C440599B50D00779F33 /* TimingData.cpp in Sources */, + AA729C480599B54D00779F33 /* MemoryCardDisplay.cpp in Sources */, + AA729C520599B58D00779F33 /* ReceptorArrow.cpp in Sources */, + AA729C540599B58D00779F33 /* ReceptorArrowRow.cpp in Sources */, + AABE321C05ACD8ED001A0E84 /* ScreenEnding.cpp in Sources */, + AABE322005ACD931001A0E84 /* Foreground.cpp in Sources */, + AABE322405ACDA52001A0E84 /* RageFileDriverDirectHelpers.cpp in Sources */, + AAF4206705D63FA700056441 /* ModelManager.cpp in Sources */, + AAF4206B05D6400800056441 /* RageModelGeometry.cpp in Sources */, + AA50201F05D6D7B200ACEFD0 /* Profile.cpp in Sources */, + AABBD80805D8E9FC00B44FC2 /* HighScore.cpp in Sources */, + AABD0B3A05DF3F22004F7929 /* CryptManager.cpp in Sources */, + AAA71EA105EE154E00D2E8FF /* global.cpp in Sources */, + AAED6F2C0601C528002D2DEE /* Backtrace.cpp in Sources */, + AAED6F2E0601C528002D2DEE /* BacktraceNames.cpp in Sources */, + AA0A3DE8060513A00044E6B1 /* ScreenSetTime.cpp in Sources */, + AAE7804B060814AC0034E65F /* NetworkSyncManager.cpp in Sources */, + AAE7808706081A000034E65F /* ezsockets.cpp in Sources */, + AAE7812D0608249E0034E65F /* ActiveAttackList.cpp in Sources */, + AA1CD943060AE571003702C4 /* RageSoundDriver_Generic_Software.cpp in Sources */, + AAF7435B06110E8D00B19AD1 /* ScreenTestLights.cpp in Sources */, + AAF74590061181F700B19AD1 /* RageDisplay_Null.cpp in Sources */, + AAD36084062BB8AE00D0CED8 /* RageSoundPosMap.cpp in Sources */, + AA2828B3062FC0B8006F61EC /* SignalHandler.cpp in Sources */, + AA5C73FD0637A5F100AFB891 /* CourseUtil.cpp in Sources */, + AA5C73FF0637A5F100AFB891 /* SongUtil.cpp in Sources */, + AA5C74010637A5F100AFB891 /* StepsUtil.cpp in Sources */, + AAA6BFEC0644AB3700AFBBC8 /* ScreenWithMenuElements.cpp in Sources */, + AABBF6760659E78D00738526 /* RageSurface_Load_GIF.cpp in Sources */, + AABBF6780659E78D00738526 /* RageSurface_Load_JPEG.cpp in Sources */, + AABBF67A0659E78D00738526 /* RageSurface_Load_PNG.cpp in Sources */, + AABBF67C0659E78D00738526 /* RageSurface_Load_XPM.cpp in Sources */, + AABBF67E0659E78D00738526 /* RageSurface_Load.cpp in Sources */, + AAD6A714065E0FDF0042165A /* Difficulty.cpp in Sources */, + AA70E36A0663112800DAE1FD /* Trail.cpp in Sources */, + AA70E36C0663112800DAE1FD /* TrailUtil.cpp in Sources */, + AA42F5E8067068D30013509E /* ScreenNetworkOptions.cpp in Sources */, + AAD675F606795175006002B0 /* Dialog.cpp in Sources */, + AA60E0C2067992D7008ADC41 /* Threads_Pthreads.cpp in Sources */, + AA91587D067D2C2C00078E36 /* RageSurface.cpp in Sources */, + AA9091A1067ED43000C1FCFF /* RageSurface_Load_BMP.cpp in Sources */, + AA9091A5067ED46400C1FCFF /* RageSurface_Save_BMP.cpp in Sources */, + AA139C4706923EBE00C1F6ED /* Style.cpp in Sources */, + AAC9F330069E22BB00D53E2C /* GameSoundManager.cpp in Sources */, + AAC9F334069E22CF00D53E2C /* MemoryCardDriver.cpp in Sources */, + AA3D790106A275E90064B980 /* RadarValues.cpp in Sources */, + AA3D793306A279530064B980 /* DateTime.cpp in Sources */, + AA3A706206AA1645006F755E /* StyleUtil.cpp in Sources */, + AA9A78AB06B5C72200B03E97 /* Game.cpp in Sources */, + AA22CBA506DE909C0083BA97 /* ScreenNetSelectMusic.cpp in Sources */, + AAB9C8AF06EAF64400AD97CD /* RageSurfaceUtils_Palettize.cpp in Sources */, + AAB9C8B106EAF64400AD97CD /* RageSurfaceUtils.cpp in Sources */, + AAB9C8B506EAF66C00AD97CD /* ScreenNetEvaluation.cpp in Sources */, + AA64218806EC606F00C21584 /* RageFileDriverMemory.cpp in Sources */, + AA8A3E6406EDCD11002F25AB /* DarwinThreadHelpers.cpp in Sources */, + AA8A405106EEFF72002F25AB /* RageUtil_BackgroundLoader.cpp in Sources */, + AA21D59D0712ADE4008B825F /* ScreenDimensions.cpp in Sources */, + AAFC6CF1072A30440053AAD3 /* InputHandler_MonkeyKeyboard.cpp in Sources */, + AAAB2CDF072BD2EC00CD9FC9 /* AutoKeysounds.cpp in Sources */, + AAAB2CE3072BD2FA00CD9FC9 /* RageSoundMixBuffer.cpp in Sources */, + AA7ADC27072CAB7F00C50A7F /* RageSoundReader_Chain.cpp in Sources */, + AA7ADC29072CAB7F00C50A7F /* RageSoundUtil.cpp in Sources */, + AAF793F5074FE69E00D74516 /* ScreenNetRoom.cpp in Sources */, + AAF793F7074FE69E00D74516 /* ScreenNetSelectBase.cpp in Sources */, + AA1145DD075DFADF0050A3D1 /* ScreenPackages.cpp in Sources */, + AA1145DF075DFADF0050A3D1 /* ScreenSystemLayer.cpp in Sources */, + AA1B083C0762532800835464 /* Command.cpp in Sources */, + AA1B083E0762532800835464 /* GameCommand.cpp in Sources */, + AA1B08400762532800835464 /* Preference.cpp in Sources */, + AA0E04D4076C4CD500716D81 /* RageFileBasic.cpp in Sources */, + AA0E04D6076C4CD500716D81 /* RageFileDriverDeflate.cpp in Sources */, + AA0E04D8076C4CD500716D81 /* RageFileDriverSlice.cpp in Sources */, + AAEBC6CC07A20AFE00793F0E /* RageSurface_Save_JPEG.cpp in Sources */, + AAEBC6CE07A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp in Sources */, + AAEBC6D007A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp in Sources */, + AAEBC79107A4FF5600793F0E /* LuaManager.cpp in Sources */, + AACA593107B5E23400763545 /* RageFileDriverTimeout.cpp in Sources */, + AACA593407B5E23400763545 /* RageUtil_WorkerThread.cpp in Sources */, + AA8BD2A807C9391B00EA04E1 /* LuaReference.cpp in Sources */, + AA8BD2AA07C9391B00EA04E1 /* MessageManager.cpp in Sources */, + AA8BD2AC07C9391B00EA04E1 /* StatsManager.cpp in Sources */, + AA8BD2B107C9395400EA04E1 /* AutoActor.cpp in Sources */, + AA8BD2B607C939A200EA04E1 /* OptionRow.cpp in Sources */, + AA8BD2BF07C939F800EA04E1 /* PlayerStageStats.cpp in Sources */, + AA8BD2C107C939F800EA04E1 /* PlayerState.cpp in Sources */, + AA8BD2C207C939F800EA04E1 /* RollingNumbers.cpp in Sources */, + AA8BD2C407C939F800EA04E1 /* ScoreDisplayCalories.cpp in Sources */, + AA8BD2C707C93A1E00EA04E1 /* CommonMetrics.cpp in Sources */, + AA80C75407F20D0D00C99272 /* UnlockManager.cpp in Sources */, + AA80C75907F20D6600C99272 /* OptionRowHandler.cpp in Sources */, + AA80C75C07F20D8000C99272 /* ScreenMessage.cpp in Sources */, + AA6E6E0A07F518E800C3EBB4 /* Quad.cpp in Sources */, + AA7144B10809EEEC00545684 /* ScoreDisplayAliveTime.cpp in Sources */, + AA3D5E6008214C77002AA665 /* ScoreDisplayLifeTime.cpp in Sources */, + AA3D5E91082152B6002AA665 /* StreamDisplay.cpp in Sources */, + AA3D5E95082152E5002AA665 /* LifeMeterTime.cpp in Sources */, + AAAFE8200835E7FF00FC43E0 /* WheelBase.cpp in Sources */, + AAAFE8220835E7FF00FC43E0 /* WheelItemBase.cpp in Sources */, + AAAFE8300835E8B100FC43E0 /* RoomWheel.cpp in Sources */, + AA07A55F0843E72B00E33D21 /* ScreenDebugOverlay.cpp in Sources */, + AA07A5630843E72B00E33D21 /* ScreenSaveSync.cpp in Sources */, + AA07A5650843E72B00E33D21 /* ScreenSMOnlineLogin.cpp in Sources */, + AA07A5670843E72B00E33D21 /* ScreenSyncOverlay.cpp in Sources */, + AA7DA2F1085760E90057F1EA /* BackgroundUtil.cpp in Sources */, + AAB6B477085761B700CEE7BA /* ScreenSplash.cpp in Sources */, + AA8EE0760866E266002C51A7 /* LuaBinding.cpp in Sources */, + AA91ACB10878BB2C00FB2F8F /* RageTexturePreloader.cpp in Sources */, + AAFAB5C10889098600767BF7 /* ScreenOptionsEditProfile.cpp in Sources */, + AAFAB5CD08890B5200767BF7 /* GameLoop.cpp in Sources */, + AA77E74708B64B1400FA24CA /* CharacterManager.cpp in Sources */, + AA77E74F08B64B5600FA24CA /* CourseLoaderCRS.cpp in Sources */, + AA77E75108B64B5600FA24CA /* CourseWriterCRS.cpp in Sources */, + AA77E76508B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp in Sources */, + AA77E76708B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp in Sources */, + 1215D7A208C6559A00B87D8B /* ScreenGameplayNormal.cpp in Sources */, + AACFBE2808E7D793005087FC /* ActorSound.cpp in Sources */, + AACFBE4F08E7D893005087FC /* ScreenGameplayLesson.cpp in Sources */, + AACFBE6308E7DBA8005087FC /* LuaExpressionTransform.cpp in Sources */, + AAF3442B08F1C36A0006EDB7 /* DynamicActorScroller.cpp in Sources */, + AAF34ADE0900AEBD0006EDB7 /* ScoreKeeperNormal.cpp in Sources */, + AAF34AED0900B00C0006EDB7 /* ScreenStatsOverlay.cpp in Sources */, + AAA372D40909934500141131 /* MovieTexture_Generic.cpp in Sources */, + AAA372D60909934500141131 /* MovieTexture_Theora.cpp in Sources */, + AA2FB639091212B0000FD574 /* LifeMeter.cpp in Sources */, + AAFBEED1094D7FCB000029DE /* SpecialFiles.cpp in Sources */, + AAFBEEEB094D807E000029DE /* ScreenOptionsManageEditSteps.cpp in Sources */, + AAFBEEED094D807E000029DE /* ScreenOptionsMemoryCard.cpp in Sources */, + AAFBEEEF094D807E000029DE /* ScreenServiceAction.cpp in Sources */, + AA0732900954381800F396C5 /* XmlFileUtil.cpp in Sources */, + AAD5219C095513DA00073D86 /* XmlFile.cpp in Sources */, + AADD1CC5095C233F0088C9DF /* LocalizedString.cpp in Sources */, + AABBFCD309838C3A00F077E2 /* SMMain.mm in Sources */, + AA44705509846B0800983E82 /* HIDDevice.cpp in Sources */, + AA44708F0984720900983E82 /* JoystickDevice.cpp in Sources */, + AA4470BD098476F600983E82 /* KeyboardDevice.cpp in Sources */, + AAC0C8C20984AE3B0075FC53 /* Tween.cpp in Sources */, + AA65877B098C322800CE55CC /* ScreenUnlockStatus.cpp in Sources */, + AA84B7070996F8370085EECB /* AdjustSync.cpp in Sources */, + AAB55EBB09A7E3D3008FDC69 /* ScreenGameplaySyncMachine.cpp in Sources */, + AAB55EBD09A7E3D3008FDC69 /* ScreenUnlockBrowse.cpp in Sources */, + AAB55EBF09A7E3D3008FDC69 /* ScreenUnlockCelebrate.cpp in Sources */, + AA1F9C4809AF1BF5002C15A8 /* PumpDevice.cpp in Sources */, + AA3E3DF109D96A1400A259C7 /* CrashHandlerInternal.cpp in Sources */, + AAEDFD690A03762B00590617 /* Crash.cpp in Sources */, + AA147F1B0A0F78D8006EADF6 /* VectorHelper.cpp in Sources */, + AA8CF5180A4518BE0005F1B4 /* RageSoundDriver_AU.cpp in Sources */, + AAD8F9370A4B97DF000311CF /* ScreenGameplayShared.cpp in Sources */, + AAAA11C70A662F9D00B2BD88 /* ScoreKeeperShared.cpp in Sources */, + AAE2D6D40A67481E00071546 /* ScoreKeeper.cpp in Sources */, + AA2EA0010A770208003A0C11 /* ScreenSelectLanguage.cpp in Sources */, + AA5D16570A79805C00F17E86 /* RageTextureRenderTarget.cpp in Sources */, + AA5D166C0A798C0E00F17E86 /* ActorFrameTexture.cpp in Sources */, + AAFE710B0A91ADE6005F2290 /* ActorProxy.cpp in Sources */, + AAFE711F0A91B551005F2290 /* RageSurface_Save_PNG.cpp in Sources */, + AAFE71200A91B551005F2290 /* RoomInfoDisplay.cpp in Sources */, + AABE830E0A9524D400001678 /* ModsGroup.cpp in Sources */, + AAE77F580AC3B52500AEFC64 /* RageTypes.cpp in Sources */, + AAE780400AC76A1200AEFC64 /* WorkoutGraph.cpp in Sources */, + AAFAFC900AC8DB9F00427A6E /* EnumHelper.cpp in Sources */, + AA6999630ACE1CBB000237F9 /* ControllerStateDisplay.cpp in Sources */, + AAB779FB0B0D9CB200B74314 /* ScoreKeeperGuitar.cpp in Sources */, + AA608EC00B0F85E400B39AC4 /* DialogDriver.cpp in Sources */, + AA608FAD0B0F9A4E00B39AC4 /* RageSoundDriver.cpp in Sources */, + AA6090E60B141D1C00B39AC4 /* GamePreferences.cpp in Sources */, + AAFB549E0B1BC32700FC3A81 /* RageSoundReader.cpp in Sources */, + AA31D5210B1EC6540016AB6B /* RageSoundReader_PitchChange.cpp in Sources */, + AA31D5230B1EC6540016AB6B /* RageSoundReader_SpeedChange.cpp in Sources */, + AA4F27B20B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.cpp in Sources */, + AA4F27B40B2C01B400ADEA79 /* RageSoundReader_Pan.cpp in Sources */, + AA909E1F0B45B676002852D3 /* RageDriver.cpp in Sources */, + AA909E240B45B696002852D3 /* LowLevelWindow.cpp in Sources */, + AA909E270B45B6AC002852D3 /* LoadingWindow.cpp in Sources */, + AA909E3D0B45B8FB002852D3 /* RageSoundReader_Extend.cpp in Sources */, + AA909E3F0B45B8FB002852D3 /* RageSoundReader_ThreadedBuffer.cpp in Sources */, + AA909E490B45B93E002852D3 /* LightsDriver.cpp in Sources */, + AAEBF5600B5C517E005F3C7C /* SampleHistory.cpp in Sources */, + AAEBF57E0B5C83F4005F3C7C /* SoundEffectControl.cpp in Sources */, + AA07008A0B61F177003B85BB /* RageSoundReader_PostBuffering.cpp in Sources */, + AA7C8DB00B68CB2200FD9940 /* GameplayAssist.cpp in Sources */, + AA059ABE0B8CCFB5006F8139 /* ActorMultiTexture.cpp in Sources */, + AA05A0B20BA2EFF3006F8139 /* OptionsList.cpp in Sources */, + AA2C9CA30BAD6F55002441E9 /* CodeSet.cpp in Sources */, + AA2CA8A10BB745BD002441E9 /* ScreenContinue.cpp in Sources */, + 3688B8530BD42DAA004186AD /* NotesLoaderMidi.cpp in Sources */, + AA1893640BD777C500AEC0BF /* ScreenProfileLoad.cpp in Sources */, + AA1893660BD777C500AEC0BF /* ScreenProfileSave.cpp in Sources */, + AA3396BA0BDE195E00E1475F /* RageSoundReader_Merge.cpp in Sources */, + AAB3B7DC0C6C582E001BF487 /* ScreenSelectProfile.cpp in Sources */, + AAB3BB590C718F2D001BF487 /* RageUtil_CachedObject.cpp in Sources */, + AAA7D4C90C7E872600FB8F78 /* ScreenOptionsToggleSongs.cpp in Sources */, + AA11A20F0DC5A1B0006BD8AC /* ModIcon.cpp in Sources */, + AA11A2110DC5A1B0006BD8AC /* ModIconRow.cpp in Sources */, + AA6C6AD80DC6B17B00E7A13E /* ArchHooks_MacOSX.cpp in Sources */, + AA6C6ADE0DC6B1DC00E7A13E /* DialogDriver_MacOSX.cpp in Sources */, + AA6C6AE50DC6B22800E7A13E /* LoadingWindow_MacOSX.mm in Sources */, + AA6C6B030DC6B2B400E7A13E /* LowLevelWindow_MacOSX.mm in Sources */, + AA6C6B080DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.cpp in Sources */, + AA6C6B0E0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.cpp in Sources */, + AAC0BFE10E2951EC00F56EEB /* CryptHelpers.cpp in Sources */, + EEC7863F0E58208B00F559BC /* StepsDisplay.cpp in Sources */, + 367D575B0EDE56F200B46814 /* ScreenHighScores.cpp in Sources */, + AAFF41A30F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp in Sources */, + 3659B56F0F902143002B6B68 /* CommandLineActions.cpp in Sources */, + 36CA531C0F91564A0063D59D /* ScreenOptionsCourseOverview.cpp in Sources */, + 36CA53200F9156860063D59D /* ScreenOptionsEditCourse.cpp in Sources */, + EE2153A910A75BEE0074B01B /* NotesLoaderPMS.cpp in Sources */, + EEA7C84310A805A300082E7B /* ScreenPackagesSSC.cpp in Sources */, + 36C6888311297FFE00453295 /* RageFileDriverReadAhead.cpp in Sources */, + 36C6888511297FFE00453295 /* RageFileManager_ReadAhead.cpp in Sources */, + EE906F6612BF3A1B00146C96 /* ScreenInstallOverlay.cpp in Sources */, + EE906F8212BF3AF800146C96 /* JsonUtil.cpp in Sources */, + EE906F8A12BF3C7C00146C96 /* FileDownload.cpp in Sources */, + 2BA7925E1304F20D002BD8E1 /* NotesLoaderSSC.cpp in Sources */, + 2BA792601304F20D002BD8E1 /* NotesWriterSSC.cpp in Sources */, + 2B30D6821315EA7E00044B68 /* MouseDevice.cpp in Sources */, + EE879B60132DEE720078FDDC /* RageDisplay_Legacy_Helpers.cpp in Sources */, + EE879B62132DEE720078FDDC /* RageDisplay_Legacy.cpp in Sources */, + EE879BC3132E06C50078FDDC /* glew.c in Sources */, + 2B76698C132FF71500586512 /* NotesLoaderSMA.cpp in Sources */, + 2BD06FF1137242680018CB9F /* json_reader.cpp in Sources */, + 2BD06FF2137242680018CB9F /* json_value.cpp in Sources */, + 2BD06FF4137242680018CB9F /* json_writer.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA40D38009A08D650068C0D5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AA40D38109A08D650068C0D5 /* RageUtil.cpp in Sources */, + AA40D38209A08D650068C0D5 /* RageBitmapTexture.cpp in Sources */, + AA40D38309A08D650068C0D5 /* RageDisplay.cpp in Sources */, + AA40D38409A08D650068C0D5 /* RageException.cpp in Sources */, + AA40D38509A08D650068C0D5 /* RageInput.cpp in Sources */, + AA40D38609A08D650068C0D5 /* RageInputDevice.cpp in Sources */, + AA40D38709A08D650068C0D5 /* RageLog.cpp in Sources */, + AA40D38809A08D650068C0D5 /* RageMath.cpp in Sources */, + AA40D38909A08D650068C0D5 /* RageSound.cpp in Sources */, + AA40D38A09A08D650068C0D5 /* RageSoundManager.cpp in Sources */, + AA40D38B09A08D650068C0D5 /* RageSoundReader_Preload.cpp in Sources */, + AA40D38D09A08D650068C0D5 /* RageTexture.cpp in Sources */, + AA40D38E09A08D650068C0D5 /* RageTextureManager.cpp in Sources */, + AA40D38F09A08D650068C0D5 /* RageThreads.cpp in Sources */, + AA40D39009A08D650068C0D5 /* RageTimer.cpp in Sources */, + AA40D39109A08D650068C0D5 /* Character.cpp in Sources */, + AA40D39209A08D650068C0D5 /* CodeDetector.cpp in Sources */, + AA40D39309A08D650068C0D5 /* Course.cpp in Sources */, + AA40D39409A08D650068C0D5 /* Font.cpp in Sources */, + AA40D39509A08D650068C0D5 /* FontCharAliases.cpp in Sources */, + AA40D39609A08D650068C0D5 /* FontCharmaps.cpp in Sources */, + AA40D39709A08D650068C0D5 /* FontManager.cpp in Sources */, + AA40D39809A08D650068C0D5 /* GameConstantsAndTypes.cpp in Sources */, + AA40D39909A08D650068C0D5 /* GameInput.cpp in Sources */, + AA40D39A09A08D650068C0D5 /* Grade.cpp in Sources */, + AA40D39B09A08D650068C0D5 /* Inventory.cpp in Sources */, + AA40D39C09A08D650068C0D5 /* LyricsLoader.cpp in Sources */, + AA40D39D09A08D650068C0D5 /* NoteData.cpp in Sources */, + AA40D39E09A08D650068C0D5 /* NoteDataWithScoring.cpp in Sources */, + AA40D3A009A08D650068C0D5 /* NotesLoader.cpp in Sources */, + AA40D3A109A08D650068C0D5 /* NotesLoaderBMS.cpp in Sources */, + AA40D3A209A08D650068C0D5 /* NotesLoaderDWI.cpp in Sources */, + AA40D3A309A08D650068C0D5 /* NotesLoaderKSF.cpp in Sources */, + AA40D3A409A08D650068C0D5 /* NotesLoaderSM.cpp in Sources */, + AA40D3A509A08D650068C0D5 /* NotesWriterDWI.cpp in Sources */, + AA40D3A609A08D650068C0D5 /* NotesWriterSM.cpp in Sources */, + AA40D3A709A08D650068C0D5 /* NoteTypes.cpp in Sources */, + AA40D3A809A08D650068C0D5 /* Player.cpp in Sources */, + AA40D3A909A08D650068C0D5 /* PlayerAI.cpp in Sources */, + AA40D3AA09A08D650068C0D5 /* PlayerNumber.cpp in Sources */, + AA40D3AB09A08D650068C0D5 /* PlayerOptions.cpp in Sources */, + AA40D3AC09A08D650068C0D5 /* SongOptions.cpp in Sources */, + AA40D3AD09A08D650068C0D5 /* StageStats.cpp in Sources */, + AA40D3AE09A08D650068C0D5 /* TitleSubstitution.cpp in Sources */, + AA40D3AF09A08D650068C0D5 /* IniFile.cpp in Sources */, + AA40D3B009A08D650068C0D5 /* MsdFile.cpp in Sources */, + AA40D3B109A08D650068C0D5 /* StepMania.cpp in Sources */, + AA40D3B209A08D650068C0D5 /* Banner.cpp in Sources */, + AA40D3B309A08D650068C0D5 /* BPMDisplay.cpp in Sources */, + AA40D3B409A08D650068C0D5 /* CourseContentsList.cpp in Sources */, + AA40D3B609A08D650068C0D5 /* DifficultyIcon.cpp in Sources */, + AA40D3B909A08D650068C0D5 /* EditMenu.cpp in Sources */, + AA40D3BA09A08D650068C0D5 /* FadingBanner.cpp in Sources */, + AA40D3BB09A08D650068C0D5 /* GradeDisplay.cpp in Sources */, + AA40D3BC09A08D650068C0D5 /* GrooveRadar.cpp in Sources */, + AA40D3BE09A08D650068C0D5 /* HelpDisplay.cpp in Sources */, + AA40D3BF09A08D650068C0D5 /* MenuTimer.cpp in Sources */, + AA40D3C009A08D650068C0D5 /* MeterDisplay.cpp in Sources */, + AA40D3C409A08D650068C0D5 /* MusicWheel.cpp in Sources */, + AA40D3C509A08D650068C0D5 /* MusicWheelItem.cpp in Sources */, + AA40D3C809A08D650068C0D5 /* OptionsCursor.cpp in Sources */, + AA40D3C909A08D650068C0D5 /* ScrollBar.cpp in Sources */, + AA40D3CB09A08D650068C0D5 /* SnapDisplay.cpp in Sources */, + AA40D3CC09A08D650068C0D5 /* TextBanner.cpp in Sources */, + AA40D3CD09A08D650068C0D5 /* WheelNotifyIcon.cpp in Sources */, + AA40D3CE09A08D650068C0D5 /* ArrowEffects.cpp in Sources */, + AA40D3CF09A08D650068C0D5 /* Background.cpp in Sources */, + AA40D3D009A08D650068C0D5 /* BGAnimation.cpp in Sources */, + AA40D3D109A08D650068C0D5 /* BGAnimationLayer.cpp in Sources */, + AA40D3D309A08D650068C0D5 /* DancingCharacters.cpp in Sources */, + AA40D3D409A08D650068C0D5 /* GhostArrowRow.cpp in Sources */, + AA40D3D509A08D650068C0D5 /* HoldJudgment.cpp in Sources */, + AA40D3D709A08D650068C0D5 /* LifeMeterBar.cpp in Sources */, + AA40D3D809A08D650068C0D5 /* LifeMeterBattery.cpp in Sources */, + AA40D3D909A08D650068C0D5 /* LyricDisplay.cpp in Sources */, + AA40D3DA09A08D650068C0D5 /* NoteDisplay.cpp in Sources */, + AA40D3DB09A08D650068C0D5 /* NoteField.cpp in Sources */, + AA40D3DC09A08D650068C0D5 /* ScoreDisplay.cpp in Sources */, + AA40D3DD09A08D650068C0D5 /* ScoreDisplayBattle.cpp in Sources */, + AA40D3DE09A08D650068C0D5 /* ScoreDisplayNormal.cpp in Sources */, + AA40D3DF09A08D650068C0D5 /* ScoreDisplayOni.cpp in Sources */, + AA40D3E009A08D650068C0D5 /* ScoreDisplayRave.cpp in Sources */, + AA40D3E109A08D650068C0D5 /* Transition.cpp in Sources */, + AA40D3E209A08D650068C0D5 /* Actor.cpp in Sources */, + AA40D3E309A08D650068C0D5 /* ActorFrame.cpp in Sources */, + AA40D3E409A08D650068C0D5 /* ActorScroller.cpp in Sources */, + AA40D3E509A08D650068C0D5 /* BitmapText.cpp in Sources */, + AA40D3E609A08D650068C0D5 /* Model.cpp in Sources */, + AA40D3E709A08D650068C0D5 /* ModelTypes.cpp in Sources */, + AA40D3E809A08D650068C0D5 /* Sprite.cpp in Sources */, + AA40D3E909A08D650068C0D5 /* Screen.cpp in Sources */, + AA40D3EA09A08D650068C0D5 /* ScreenAttract.cpp in Sources */, + AA40D3EC09A08D650068C0D5 /* ScreenDemonstration.cpp in Sources */, + AA40D3ED09A08D650068C0D5 /* ScreenEdit.cpp in Sources */, + AA40D3EE09A08D650068C0D5 /* ScreenEditMenu.cpp in Sources */, + AA40D3EF09A08D650068C0D5 /* ScreenEvaluation.cpp in Sources */, + AA40D3F209A08D650068C0D5 /* ScreenGameplay.cpp in Sources */, + AA40D3F309A08D650068C0D5 /* ScreenJukebox.cpp in Sources */, + AA40D3F409A08D650068C0D5 /* ScreenManager.cpp in Sources */, + AA40D3F509A08D650068C0D5 /* ScreenMapControllers.cpp in Sources */, + AA40D3F609A08D650068C0D5 /* ScreenMiniMenu.cpp in Sources */, + AA40D3F809A08D650068C0D5 /* ScreenNameEntry.cpp in Sources */, + AA40D3F909A08D650068C0D5 /* ScreenOptions.cpp in Sources */, + AA40D3FA09A08D650068C0D5 /* ScreenPlayerOptions.cpp in Sources */, + AA40D3FB09A08D650068C0D5 /* ScreenPrompt.cpp in Sources */, + AA40D3FC09A08D650068C0D5 /* ScreenRanking.cpp in Sources */, + AA40D3FD09A08D650068C0D5 /* ScreenSandbox.cpp in Sources */, + AA40D3FE09A08D650068C0D5 /* ScreenSelect.cpp in Sources */, + AA40D3FF09A08D650068C0D5 /* ScreenSelectCharacter.cpp in Sources */, + AA40D40309A08D650068C0D5 /* ScreenSelectMusic.cpp in Sources */, + AA40D40509A08D650068C0D5 /* ScreenSongOptions.cpp in Sources */, + AA40D40709A08D650068C0D5 /* ScreenTestFonts.cpp in Sources */, + AA40D40809A08D650068C0D5 /* ScreenTestSound.cpp in Sources */, + AA40D40909A08D650068C0D5 /* ScreenTextEntry.cpp in Sources */, + AA40D40A09A08D650068C0D5 /* ScreenTitleMenu.cpp in Sources */, + AA40D40B09A08D650068C0D5 /* AnnouncerManager.cpp in Sources */, + AA40D40C09A08D650068C0D5 /* GameManager.cpp in Sources */, + AA40D40D09A08D650068C0D5 /* GameState.cpp in Sources */, + AA40D40E09A08D650068C0D5 /* InputFilter.cpp in Sources */, + AA40D40F09A08D650068C0D5 /* InputMapper.cpp in Sources */, + AA40D41009A08D650068C0D5 /* InputQueue.cpp in Sources */, + AA40D41109A08D650068C0D5 /* NoteSkinManager.cpp in Sources */, + AA40D41209A08D650068C0D5 /* PrefsManager.cpp in Sources */, + AA40D41309A08D650068C0D5 /* SongManager.cpp in Sources */, + AA40D41409A08D650068C0D5 /* ThemeManager.cpp in Sources */, + AA40D41509A08D650068C0D5 /* RageSoundDriver_Null.cpp in Sources */, + AA40D41709A08D650068C0D5 /* MovieTexture.cpp in Sources */, + AA40D41809A08D650068C0D5 /* SongCacheIndex.cpp in Sources */, + AA40D41909A08D650068C0D5 /* Song.cpp in Sources */, + AA40D41A09A08D650068C0D5 /* RandomSample.cpp in Sources */, + AA40D41C09A08D650068C0D5 /* RageUtil_CharConversions.cpp in Sources */, + AA40D41D09A08D650068C0D5 /* BannerCache.cpp in Sources */, + AA40D42009A08D650068C0D5 /* ScreenSelectMaster.cpp in Sources */, + AA40D42109A08D650068C0D5 /* CombinedLifeMeterTug.cpp in Sources */, + AA40D42209A08D650068C0D5 /* ScoreKeeperRave.cpp in Sources */, + AA40D42309A08D650068C0D5 /* get.c in Sources */, + AA40D42409A08D650068C0D5 /* maketables.c in Sources */, + AA40D42509A08D650068C0D5 /* pcre.c in Sources */, + AA40D42609A08D650068C0D5 /* study.c in Sources */, + AA40D42709A08D650068C0D5 /* RageUtil_FileDB.cpp in Sources */, + AA40D42909A08D650068C0D5 /* ActorUtil.cpp in Sources */, + AA40D42A09A08D650068C0D5 /* ArchHooks.cpp in Sources */, + AA40D42B09A08D650068C0D5 /* InputHandler.cpp in Sources */, + AA40D42D09A08D650068C0D5 /* MovieTexture_Null.cpp in Sources */, + AA40D42E09A08D650068C0D5 /* RageFile.cpp in Sources */, + AA40D42F09A08D650068C0D5 /* CrashHandler.cpp in Sources */, + AA40D43009A08D650068C0D5 /* CrashHandlerChild.cpp in Sources */, + AA40D43109A08D650068C0D5 /* ver.cpp in Sources */, + AA40D43209A08D650068C0D5 /* Steps.cpp in Sources */, + AA40D43309A08D650068C0D5 /* NoteDataUtil.cpp in Sources */, + AA40D43409A08D650068C0D5 /* BeginnerHelper.cpp in Sources */, + AA40D43609A08D650068C0D5 /* MovieTexture_FFMpeg.cpp in Sources */, + AA40D43709A08D650068C0D5 /* ProfileManager.cpp in Sources */, + AA40D43809A08D650068C0D5 /* RageSoundReader_WAV.cpp in Sources */, + AA40D43909A08D650068C0D5 /* RageSoundReader_FileReader.cpp in Sources */, + AA40D43B09A08D650068C0D5 /* RageSoundReader_Vorbisfile.cpp in Sources */, + AA40D43D09A08D650068C0D5 /* RageSoundReader_Resample_Good.cpp in Sources */, + AA40D43E09A08D650068C0D5 /* ScreenExit.cpp in Sources */, + AA40D43F09A08D650068C0D5 /* ScreenOptionsMaster.cpp in Sources */, + AA40D44009A08D650068C0D5 /* ScreenOptionsMasterPrefs.cpp in Sources */, + AA40D44109A08D650068C0D5 /* ScreenReloadSongs.cpp in Sources */, + AA40D44209A08D650068C0D5 /* ScreenInstructions.cpp in Sources */, + AA40D44309A08D650068C0D5 /* ScreenHowToPlay.cpp in Sources */, + AA40D44409A08D650068C0D5 /* PercentageDisplay.cpp in Sources */, + AA40D44509A08D650068C0D5 /* ScoreDisplayPercentage.cpp in Sources */, + AA40D44709A08D650068C0D5 /* ScreenTestInput.cpp in Sources */, + AA40D44809A08D650068C0D5 /* ScreenBookkeeping.cpp in Sources */, + AA40D44909A08D650068C0D5 /* ScreenNameEntryTraditional.cpp in Sources */, + AA40D44A09A08D650068C0D5 /* Bookkeeper.cpp in Sources */, + AA40D44B09A08D650068C0D5 /* GraphDisplay.cpp in Sources */, + AA40D44C09A08D650068C0D5 /* ComboGraph.cpp in Sources */, + AA40D44D09A08D650068C0D5 /* Attack.cpp in Sources */, + AA40D44E09A08D650068C0D5 /* RageTextureID.cpp in Sources */, + AA40D44F09A08D650068C0D5 /* LightsManager.cpp in Sources */, + AA40D45009A08D650068C0D5 /* PaneDisplay.cpp in Sources */, + AA40D45109A08D650068C0D5 /* DifficultyList.cpp in Sources */, + AA40D45209A08D650068C0D5 /* LightsDriver_SystemMessage.cpp in Sources */, + AA40D45309A08D650068C0D5 /* AttackDisplay.cpp in Sources */, + AA40D45409A08D650068C0D5 /* RageFileDriver.cpp in Sources */, + AA40D45509A08D650068C0D5 /* RageFileDriverDirect.cpp in Sources */, + AA40D45609A08D650068C0D5 /* RageFileManager.cpp in Sources */, + AA40D45709A08D650068C0D5 /* RageFileDriverZip.cpp in Sources */, + AA40D45809A08D650068C0D5 /* MemoryCardManager.cpp in Sources */, + AA40D45909A08D650068C0D5 /* DualScrollBar.cpp in Sources */, + AA40D45A09A08D650068C0D5 /* TimingData.cpp in Sources */, + AA40D45B09A08D650068C0D5 /* MemoryCardDisplay.cpp in Sources */, + AA40D45C09A08D650068C0D5 /* ReceptorArrow.cpp in Sources */, + AA40D45D09A08D650068C0D5 /* ReceptorArrowRow.cpp in Sources */, + AA40D45E09A08D650068C0D5 /* ScreenEnding.cpp in Sources */, + AA40D45F09A08D650068C0D5 /* Foreground.cpp in Sources */, + AA40D46009A08D650068C0D5 /* RageFileDriverDirectHelpers.cpp in Sources */, + AA40D46109A08D650068C0D5 /* ModelManager.cpp in Sources */, + AA40D46209A08D650068C0D5 /* RageModelGeometry.cpp in Sources */, + AA40D46309A08D650068C0D5 /* Profile.cpp in Sources */, + AA40D46409A08D650068C0D5 /* HighScore.cpp in Sources */, + AA40D46509A08D650068C0D5 /* CryptManager.cpp in Sources */, + AA40D46609A08D650068C0D5 /* global.cpp in Sources */, + AA40D46709A08D650068C0D5 /* Backtrace.cpp in Sources */, + AA40D46809A08D650068C0D5 /* BacktraceNames.cpp in Sources */, + AA40D46909A08D650068C0D5 /* ScreenSetTime.cpp in Sources */, + AA40D46A09A08D650068C0D5 /* NetworkSyncManager.cpp in Sources */, + AA40D46C09A08D650068C0D5 /* ActiveAttackList.cpp in Sources */, + AA40D46D09A08D650068C0D5 /* RageSoundDriver_Generic_Software.cpp in Sources */, + AA40D46E09A08D650068C0D5 /* ScreenTestLights.cpp in Sources */, + AA40D46F09A08D650068C0D5 /* RageDisplay_Null.cpp in Sources */, + AA40D47409A08D650068C0D5 /* RageSoundPosMap.cpp in Sources */, + AA40D47509A08D650068C0D5 /* SignalHandler.cpp in Sources */, + AA40D47609A08D650068C0D5 /* CourseUtil.cpp in Sources */, + AA40D47709A08D650068C0D5 /* SongUtil.cpp in Sources */, + AA40D47809A08D650068C0D5 /* StepsUtil.cpp in Sources */, + AA40D47909A08D650068C0D5 /* ScreenWithMenuElements.cpp in Sources */, + AA40D49009A08D650068C0D5 /* RageSurface_Load_GIF.cpp in Sources */, + AA40D49109A08D650068C0D5 /* RageSurface_Load_JPEG.cpp in Sources */, + AA40D49209A08D650068C0D5 /* RageSurface_Load_PNG.cpp in Sources */, + AA40D49309A08D650068C0D5 /* RageSurface_Load_XPM.cpp in Sources */, + AA40D49409A08D650068C0D5 /* RageSurface_Load.cpp in Sources */, + AA40D49609A08D650068C0D5 /* Difficulty.cpp in Sources */, + AA40D49709A08D650068C0D5 /* Trail.cpp in Sources */, + AA40D49809A08D650068C0D5 /* TrailUtil.cpp in Sources */, + AA40D49909A08D650068C0D5 /* ScreenNetworkOptions.cpp in Sources */, + AA40D49A09A08D650068C0D5 /* Dialog.cpp in Sources */, + AA40D49C09A08D650068C0D5 /* Threads_Pthreads.cpp in Sources */, + AA40D49D09A08D650068C0D5 /* RageSurface.cpp in Sources */, + AA40D49E09A08D650068C0D5 /* RageSurface_Load_BMP.cpp in Sources */, + AA40D49F09A08D650068C0D5 /* RageSurface_Save_BMP.cpp in Sources */, + AA40D4A009A08D650068C0D5 /* Style.cpp in Sources */, + AA40D4A109A08D650068C0D5 /* GameSoundManager.cpp in Sources */, + AA40D4A209A08D650068C0D5 /* MemoryCardDriver.cpp in Sources */, + AA40D4A309A08D650068C0D5 /* RadarValues.cpp in Sources */, + AA40D4A409A08D650068C0D5 /* DateTime.cpp in Sources */, + AA40D4A509A08D650068C0D5 /* StyleUtil.cpp in Sources */, + AA40D4A609A08D650068C0D5 /* Game.cpp in Sources */, + AA40D4A709A08D650068C0D5 /* ScreenNetSelectMusic.cpp in Sources */, + AA40D4A909A08D650068C0D5 /* RageSurfaceUtils_Palettize.cpp in Sources */, + AA40D4AA09A08D650068C0D5 /* RageSurfaceUtils.cpp in Sources */, + AA40D4AB09A08D650068C0D5 /* ScreenNetEvaluation.cpp in Sources */, + AA40D4AC09A08D650068C0D5 /* RageFileDriverMemory.cpp in Sources */, + AA40D4AD09A08D650068C0D5 /* DarwinThreadHelpers.cpp in Sources */, + AA40D4AE09A08D650068C0D5 /* RageUtil_BackgroundLoader.cpp in Sources */, + AA40D4AF09A08D650068C0D5 /* ScreenDimensions.cpp in Sources */, + AA40D4B009A08D650068C0D5 /* InputHandler_MonkeyKeyboard.cpp in Sources */, + AA40D4B109A08D650068C0D5 /* AutoKeysounds.cpp in Sources */, + AA40D4B209A08D650068C0D5 /* RageSoundMixBuffer.cpp in Sources */, + AA40D4B309A08D650068C0D5 /* RageSoundReader_Chain.cpp in Sources */, + AA40D4B409A08D650068C0D5 /* RageSoundUtil.cpp in Sources */, + AA40D4B509A08D650068C0D5 /* ScreenNetRoom.cpp in Sources */, + AA40D4B609A08D650068C0D5 /* ScreenNetSelectBase.cpp in Sources */, + AA40D4B709A08D650068C0D5 /* ScreenPackages.cpp in Sources */, + AA40D4B809A08D650068C0D5 /* ScreenSystemLayer.cpp in Sources */, + AA40D4B909A08D650068C0D5 /* Command.cpp in Sources */, + AA40D4BA09A08D650068C0D5 /* GameCommand.cpp in Sources */, + AA40D4BB09A08D650068C0D5 /* Preference.cpp in Sources */, + AA40D4BC09A08D650068C0D5 /* RageFileBasic.cpp in Sources */, + AA40D4BD09A08D650068C0D5 /* RageFileDriverDeflate.cpp in Sources */, + AA40D4BE09A08D650068C0D5 /* RageFileDriverSlice.cpp in Sources */, + AA40D4BF09A08D650068C0D5 /* RageSurface_Save_JPEG.cpp in Sources */, + AA40D4C009A08D650068C0D5 /* RageSurfaceUtils_Dither.cpp in Sources */, + AA40D4C109A08D650068C0D5 /* RageSurfaceUtils_Zoom.cpp in Sources */, + AA40D4C209A08D650068C0D5 /* LuaManager.cpp in Sources */, + AA40D4C609A08D650068C0D5 /* RageFileDriverTimeout.cpp in Sources */, + AA40D4C709A08D650068C0D5 /* RageUtil_WorkerThread.cpp in Sources */, + AA40D4C809A08D650068C0D5 /* LuaReference.cpp in Sources */, + AA40D4C909A08D650068C0D5 /* MessageManager.cpp in Sources */, + AA40D4CA09A08D650068C0D5 /* StatsManager.cpp in Sources */, + AA40D4CB09A08D650068C0D5 /* AutoActor.cpp in Sources */, + AA40D4CC09A08D650068C0D5 /* OptionRow.cpp in Sources */, + AA40D4CD09A08D650068C0D5 /* PlayerStageStats.cpp in Sources */, + AA40D4CE09A08D650068C0D5 /* PlayerState.cpp in Sources */, + AA40D4CF09A08D650068C0D5 /* RollingNumbers.cpp in Sources */, + AA40D4D009A08D650068C0D5 /* ScoreDisplayCalories.cpp in Sources */, + AA40D4D109A08D650068C0D5 /* CommonMetrics.cpp in Sources */, + AA40D4D209A08D650068C0D5 /* UnlockManager.cpp in Sources */, + AA40D4D309A08D650068C0D5 /* OptionRowHandler.cpp in Sources */, + AA40D4D409A08D650068C0D5 /* ScreenMessage.cpp in Sources */, + AA40D4D509A08D650068C0D5 /* Quad.cpp in Sources */, + AA40D4D609A08D650068C0D5 /* ScoreDisplayAliveTime.cpp in Sources */, + AA40D4D709A08D650068C0D5 /* ScoreDisplayLifeTime.cpp in Sources */, + AA40D4D809A08D650068C0D5 /* StreamDisplay.cpp in Sources */, + AA40D4D909A08D650068C0D5 /* LifeMeterTime.cpp in Sources */, + AA40D4DA09A08D650068C0D5 /* WheelBase.cpp in Sources */, + AA40D4DB09A08D650068C0D5 /* WheelItemBase.cpp in Sources */, + AA40D4DD09A08D650068C0D5 /* ScreenDebugOverlay.cpp in Sources */, + AA40D4DF09A08D650068C0D5 /* ScreenSaveSync.cpp in Sources */, + AA40D4E109A08D650068C0D5 /* ScreenSyncOverlay.cpp in Sources */, + AA40D4E209A08D650068C0D5 /* BackgroundUtil.cpp in Sources */, + AA40D4E309A08D650068C0D5 /* ScreenSplash.cpp in Sources */, + AA40D4E409A08D650068C0D5 /* LuaBinding.cpp in Sources */, + AA40D4E509A08D650068C0D5 /* RageTexturePreloader.cpp in Sources */, + AA40D4E609A08D650068C0D5 /* ScreenOptionsEditProfile.cpp in Sources */, + AA40D4E709A08D650068C0D5 /* GameLoop.cpp in Sources */, + AA40D4E809A08D650068C0D5 /* CharacterManager.cpp in Sources */, + AA40D4E909A08D650068C0D5 /* CourseLoaderCRS.cpp in Sources */, + AA40D4EA09A08D650068C0D5 /* CourseWriterCRS.cpp in Sources */, + AA40D4EE09A08D650068C0D5 /* ScreenOptionsManageCourses.cpp in Sources */, + AA40D4EF09A08D650068C0D5 /* ScreenOptionsManageProfiles.cpp in Sources */, + AA40D4F109A08D650068C0D5 /* ScreenGameplayNormal.cpp in Sources */, + AA40D4F209A08D650068C0D5 /* ActorSound.cpp in Sources */, + AA40D4F409A08D650068C0D5 /* ScreenGameplayLesson.cpp in Sources */, + AA40D4F709A08D650068C0D5 /* LuaExpressionTransform.cpp in Sources */, + AA40D4F809A08D650068C0D5 /* DynamicActorScroller.cpp in Sources */, + AA40D4F909A08D650068C0D5 /* ScoreKeeperNormal.cpp in Sources */, + AA40D4FA09A08D650068C0D5 /* ScreenStatsOverlay.cpp in Sources */, + AA40D4FC09A08D650068C0D5 /* MovieTexture_Generic.cpp in Sources */, + AA40D4FD09A08D650068C0D5 /* MovieTexture_Theora.cpp in Sources */, + AA40D4FF09A08D650068C0D5 /* LifeMeter.cpp in Sources */, + AA40D50109A08D650068C0D5 /* SpecialFiles.cpp in Sources */, + AA40D50209A08D650068C0D5 /* ScreenOptionsManageEditSteps.cpp in Sources */, + AA40D50309A08D650068C0D5 /* ScreenOptionsMemoryCard.cpp in Sources */, + AA40D50409A08D650068C0D5 /* ScreenServiceAction.cpp in Sources */, + AA40D50609A08D650068C0D5 /* XmlFileUtil.cpp in Sources */, + AA40D50709A08D650068C0D5 /* XmlFile.cpp in Sources */, + AA40D50809A08D650068C0D5 /* LocalizedString.cpp in Sources */, + AA40D50D09A08D650068C0D5 /* SMMain.mm in Sources */, + AA40D50E09A08D650068C0D5 /* HIDDevice.cpp in Sources */, + AA40D50F09A08D650068C0D5 /* JoystickDevice.cpp in Sources */, + AA40D51009A08D650068C0D5 /* KeyboardDevice.cpp in Sources */, + AA40D51109A08D650068C0D5 /* Tween.cpp in Sources */, + AA40D51209A08D650068C0D5 /* ScreenUnlockStatus.cpp in Sources */, + AA40D51309A08D650068C0D5 /* AdjustSync.cpp in Sources */, + AAB5600009A84E63008FDC69 /* ScreenUnlockCelebrate.cpp in Sources */, + AAB5600209A84E65008FDC69 /* ScreenUnlockBrowse.cpp in Sources */, + AA1F9C4A09AF1BF5002C15A8 /* PumpDevice.cpp in Sources */, + AA3E3DF209D96A1400A259C7 /* CrashHandlerInternal.cpp in Sources */, + F4BC045409E6B578003F770B /* ScreenGameplaySyncMachine.cpp in Sources */, + AAEDFD6A0A03762B00590617 /* Crash.cpp in Sources */, + AA147F1D0A0F78D8006EADF6 /* VectorHelper.cpp in Sources */, + AA8CF51A0A4518BE0005F1B4 /* RageSoundDriver_AU.cpp in Sources */, + AAD8F9350A4B97DF000311CF /* ScreenGameplayShared.cpp in Sources */, + AAAA11C90A662F9D00B2BD88 /* ScoreKeeperShared.cpp in Sources */, + AAE2D6D50A67481E00071546 /* ScoreKeeper.cpp in Sources */, + AA2EA0030A770208003A0C11 /* ScreenSelectLanguage.cpp in Sources */, + AA5D16590A79805C00F17E86 /* RageTextureRenderTarget.cpp in Sources */, + AA5D166E0A798C0E00F17E86 /* ActorFrameTexture.cpp in Sources */, + AAFE710D0A91ADE6005F2290 /* ActorProxy.cpp in Sources */, + AAFE71220A91B551005F2290 /* RageSurface_Save_PNG.cpp in Sources */, + AABE830F0A9524D400001678 /* ModsGroup.cpp in Sources */, + AAE77F590AC3B52500AEFC64 /* RageTypes.cpp in Sources */, + AAE780440AC76A1200AEFC64 /* WorkoutGraph.cpp in Sources */, + AAFAFC8F0AC8DB9F00427A6E /* EnumHelper.cpp in Sources */, + AA6999610ACE1CBB000237F9 /* ControllerStateDisplay.cpp in Sources */, + AAB779FD0B0D9CB200B74314 /* ScoreKeeperGuitar.cpp in Sources */, + AA608EC10B0F85E400B39AC4 /* DialogDriver.cpp in Sources */, + AA608FAE0B0F9A4E00B39AC4 /* RageSoundDriver.cpp in Sources */, + AA6090E80B141D1C00B39AC4 /* GamePreferences.cpp in Sources */, + AAFB549F0B1BC32700FC3A81 /* RageSoundReader.cpp in Sources */, + AA31D5260B1EC6550016AB6B /* RageSoundReader_PitchChange.cpp in Sources */, + AA31D5280B1EC6550016AB6B /* RageSoundReader_SpeedChange.cpp in Sources */, + AA4F27B60B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.cpp in Sources */, + AA4F27B80B2C01B400ADEA79 /* RageSoundReader_Pan.cpp in Sources */, + AA909E210B45B676002852D3 /* RageDriver.cpp in Sources */, + AA909E250B45B696002852D3 /* LowLevelWindow.cpp in Sources */, + AA909E280B45B6AC002852D3 /* LoadingWindow.cpp in Sources */, + AA909E410B45B8FB002852D3 /* RageSoundReader_Extend.cpp in Sources */, + AA909E430B45B8FB002852D3 /* RageSoundReader_ThreadedBuffer.cpp in Sources */, + AA909E4A0B45B93E002852D3 /* LightsDriver.cpp in Sources */, + AAEBF5620B5C517E005F3C7C /* SampleHistory.cpp in Sources */, + AAEBF5800B5C83F4005F3C7C /* SoundEffectControl.cpp in Sources */, + AA07008C0B61F177003B85BB /* RageSoundReader_PostBuffering.cpp in Sources */, + AA7C8DAE0B68CB2200FD9940 /* GameplayAssist.cpp in Sources */, + AA059ABC0B8CCFB5006F8139 /* ActorMultiTexture.cpp in Sources */, + AA05A0B00BA2EFF3006F8139 /* OptionsList.cpp in Sources */, + AA2C9CA10BAD6F54002441E9 /* CodeSet.cpp in Sources */, + AA2CA89F0BB745BD002441E9 /* ScreenContinue.cpp in Sources */, + AA1893600BD777C500AEC0BF /* ScreenProfileLoad.cpp in Sources */, + AA1893620BD777C500AEC0BF /* ScreenProfileSave.cpp in Sources */, + AA18937E0BD77ECF00AEC0BF /* NotesLoaderMidi.cpp in Sources */, + AA3396B80BDE195E00E1475F /* RageSoundReader_Merge.cpp in Sources */, + AAB3B7DE0C6C582E001BF487 /* ScreenSelectProfile.cpp in Sources */, + AAB3BB5B0C718F2D001BF487 /* RageUtil_CachedObject.cpp in Sources */, + AAA7D4CB0C7E872600FB8F78 /* ScreenOptionsToggleSongs.cpp in Sources */, + AAA0713D0CE7B3BB005A3060 /* bit.c in Sources */, + AAA071490CE7B3BB005A3060 /* decoder.c in Sources */, + AAA0714C0CE7B3BB005A3060 /* fixed.c in Sources */, + AAA0714E0CE7B3BB005A3060 /* frame.c in Sources */, + AAA071510CE7B3BB005A3060 /* huffman.c in Sources */, + AAA071570CE7B3BB005A3060 /* layer12.c in Sources */, + AAA071590CE7B3BB005A3060 /* layer3.c in Sources */, + AAA0716F0CE7B3BB005A3060 /* stream.c in Sources */, + AAA071710CE7B3BB005A3060 /* synth.c in Sources */, + AAA071730CE7B3BB005A3060 /* timer.c in Sources */, + AAA071770CE7B3BB005A3060 /* version.c in Sources */, + AA11A2130DC5A1B0006BD8AC /* ModIcon.cpp in Sources */, + AA11A2150DC5A1B0006BD8AC /* ModIconRow.cpp in Sources */, + AA6C6ADA0DC6B17B00E7A13E /* ArchHooks_MacOSX.cpp in Sources */, + AA6C6AE00DC6B1DC00E7A13E /* DialogDriver_MacOSX.cpp in Sources */, + AA6C6AE70DC6B22800E7A13E /* LoadingWindow_MacOSX.mm in Sources */, + AA6C6B050DC6B2B400E7A13E /* LowLevelWindow_MacOSX.mm in Sources */, + AA6C6B0A0DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.cpp in Sources */, + AA6C6B100DC6B48C00E7A13E /* InputHandler_MacOSX_HID.cpp in Sources */, + AAC0BFE30E2951EC00F56EEB /* CryptHelpers.cpp in Sources */, + AAFF41A50F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7A2B910AE09B520054C5BA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7A2BA80AE09CD50054C5BA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7C895C0B67444700FD9940 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AA7C8AFC0B6744F700FD9940 /* bn_error.c in Sources */, + AA7C8AFD0B6744F700FD9940 /* bn_fast_mp_invmod.c in Sources */, + AA7C8AFE0B6744F700FD9940 /* bn_fast_mp_montgomery_reduce.c in Sources */, + AA7C8AFF0B6744F700FD9940 /* bn_fast_s_mp_mul_digs.c in Sources */, + AA7C8B000B6744F700FD9940 /* bn_fast_s_mp_mul_high_digs.c in Sources */, + AA7C8B010B6744F700FD9940 /* bn_fast_s_mp_sqr.c in Sources */, + AA7C8B020B6744F700FD9940 /* bn_mp_2expt.c in Sources */, + AA7C8B030B6744F700FD9940 /* bn_mp_abs.c in Sources */, + AA7C8B040B6744F700FD9940 /* bn_mp_add.c in Sources */, + AA7C8B050B6744F700FD9940 /* bn_mp_add_d.c in Sources */, + AA7C8B060B6744F700FD9940 /* bn_mp_addmod.c in Sources */, + AA7C8B070B6744F700FD9940 /* bn_mp_and.c in Sources */, + AA7C8B080B6744F700FD9940 /* bn_mp_clamp.c in Sources */, + AA7C8B090B6744F700FD9940 /* bn_mp_clear.c in Sources */, + AA7C8B0A0B6744F700FD9940 /* bn_mp_clear_multi.c in Sources */, + AA7C8B0B0B6744F700FD9940 /* bn_mp_cmp.c in Sources */, + AA7C8B0C0B6744F700FD9940 /* bn_mp_cmp_d.c in Sources */, + AA7C8B0D0B6744F700FD9940 /* bn_mp_cmp_mag.c in Sources */, + AA7C8B0E0B6744F700FD9940 /* bn_mp_cnt_lsb.c in Sources */, + AA7C8B0F0B6744F700FD9940 /* bn_mp_copy.c in Sources */, + AA7C8B100B6744F700FD9940 /* bn_mp_count_bits.c in Sources */, + AA7C8B110B6744F700FD9940 /* bn_mp_div.c in Sources */, + AA7C8B120B6744F700FD9940 /* bn_mp_div_2.c in Sources */, + AA7C8B130B6744F700FD9940 /* bn_mp_div_2d.c in Sources */, + AA7C8B140B6744F700FD9940 /* bn_mp_div_3.c in Sources */, + AA7C8B150B6744F700FD9940 /* bn_mp_div_d.c in Sources */, + AA7C8B160B6744F700FD9940 /* bn_mp_dr_is_modulus.c in Sources */, + AA7C8B170B6744F700FD9940 /* bn_mp_dr_reduce.c in Sources */, + AA7C8B180B6744F700FD9940 /* bn_mp_dr_setup.c in Sources */, + AA7C8B190B6744F700FD9940 /* bn_mp_exch.c in Sources */, + AA7C8B1A0B6744F700FD9940 /* bn_mp_expt_d.c in Sources */, + AA7C8B1B0B6744F700FD9940 /* bn_mp_exptmod.c in Sources */, + AA7C8B1C0B6744F700FD9940 /* bn_mp_exptmod_fast.c in Sources */, + AA7C8B1D0B6744F700FD9940 /* bn_mp_exteuclid.c in Sources */, + AA7C8B1E0B6744F700FD9940 /* bn_mp_fread.c in Sources */, + AA7C8B1F0B6744F700FD9940 /* bn_mp_fwrite.c in Sources */, + AA7C8B200B6744F700FD9940 /* bn_mp_gcd.c in Sources */, + AA7C8B210B6744F700FD9940 /* bn_mp_get_int.c in Sources */, + AA7C8B220B6744F700FD9940 /* bn_mp_grow.c in Sources */, + AA7C8B230B6744F700FD9940 /* bn_mp_init.c in Sources */, + AA7C8B240B6744F700FD9940 /* bn_mp_init_copy.c in Sources */, + AA7C8B250B6744F700FD9940 /* bn_mp_init_multi.c in Sources */, + AA7C8B260B6744F700FD9940 /* bn_mp_init_set.c in Sources */, + AA7C8B270B6744F700FD9940 /* bn_mp_init_set_int.c in Sources */, + AA7C8B280B6744F700FD9940 /* bn_mp_init_size.c in Sources */, + AA7C8B290B6744F700FD9940 /* bn_mp_invmod.c in Sources */, + AA7C8B2A0B6744F700FD9940 /* bn_mp_invmod_slow.c in Sources */, + AA7C8B2B0B6744F700FD9940 /* bn_mp_is_square.c in Sources */, + AA7C8B2C0B6744F700FD9940 /* bn_mp_jacobi.c in Sources */, + AA7C8B2D0B6744F700FD9940 /* bn_mp_karatsuba_mul.c in Sources */, + AA7C8B2E0B6744F700FD9940 /* bn_mp_karatsuba_sqr.c in Sources */, + AA7C8B2F0B6744F700FD9940 /* bn_mp_lcm.c in Sources */, + AA7C8B300B6744F700FD9940 /* bn_mp_lshd.c in Sources */, + AA7C8B310B6744F700FD9940 /* bn_mp_mod.c in Sources */, + AA7C8B320B6744F700FD9940 /* bn_mp_mod_2d.c in Sources */, + AA7C8B330B6744F700FD9940 /* bn_mp_mod_d.c in Sources */, + AA7C8B340B6744F700FD9940 /* bn_mp_montgomery_calc_normalization.c in Sources */, + AA7C8B350B6744F700FD9940 /* bn_mp_montgomery_reduce.c in Sources */, + AA7C8B360B6744F700FD9940 /* bn_mp_montgomery_setup.c in Sources */, + AA7C8B370B6744F700FD9940 /* bn_mp_mul.c in Sources */, + AA7C8B380B6744F700FD9940 /* bn_mp_mul_2.c in Sources */, + AA7C8B390B6744F700FD9940 /* bn_mp_mul_2d.c in Sources */, + AA7C8B3A0B6744F700FD9940 /* bn_mp_mul_d.c in Sources */, + AA7C8B3B0B6744F700FD9940 /* bn_mp_mulmod.c in Sources */, + AA7C8B3C0B6744F700FD9940 /* bn_mp_n_root.c in Sources */, + AA7C8B3D0B6744F700FD9940 /* bn_mp_neg.c in Sources */, + AA7C8B3E0B6744F700FD9940 /* bn_mp_or.c in Sources */, + AA7C8B3F0B6744F700FD9940 /* bn_mp_prime_fermat.c in Sources */, + AA7C8B400B6744F700FD9940 /* bn_mp_prime_is_divisible.c in Sources */, + AA7C8B410B6744F700FD9940 /* bn_mp_prime_is_prime.c in Sources */, + AA7C8B420B6744F700FD9940 /* bn_mp_prime_miller_rabin.c in Sources */, + AA7C8B430B6744F700FD9940 /* bn_mp_prime_next_prime.c in Sources */, + AA7C8B440B6744F700FD9940 /* bn_mp_prime_rabin_miller_trials.c in Sources */, + AA7C8B450B6744F700FD9940 /* bn_mp_prime_random_ex.c in Sources */, + AA7C8B460B6744F700FD9940 /* bn_mp_radix_size.c in Sources */, + AA7C8B470B6744F700FD9940 /* bn_mp_radix_smap.c in Sources */, + AA7C8B480B6744F700FD9940 /* bn_mp_rand.c in Sources */, + AA7C8B490B6744F700FD9940 /* bn_mp_read_radix.c in Sources */, + AA7C8B4A0B6744F700FD9940 /* bn_mp_read_signed_bin.c in Sources */, + AA7C8B4B0B6744F700FD9940 /* bn_mp_read_unsigned_bin.c in Sources */, + AA7C8B4C0B6744F700FD9940 /* bn_mp_reduce.c in Sources */, + AA7C8B4D0B6744F700FD9940 /* bn_mp_reduce_2k.c in Sources */, + AA7C8B4E0B6744F700FD9940 /* bn_mp_reduce_2k_l.c in Sources */, + AA7C8B4F0B6744F700FD9940 /* bn_mp_reduce_2k_setup.c in Sources */, + AA7C8B500B6744F700FD9940 /* bn_mp_reduce_2k_setup_l.c in Sources */, + AA7C8B510B6744F700FD9940 /* bn_mp_reduce_is_2k.c in Sources */, + AA7C8B520B6744F700FD9940 /* bn_mp_reduce_is_2k_l.c in Sources */, + AA7C8B530B6744F700FD9940 /* bn_mp_reduce_setup.c in Sources */, + AA7C8B540B6744F700FD9940 /* bn_mp_rshd.c in Sources */, + AA7C8B550B6744F700FD9940 /* bn_mp_set.c in Sources */, + AA7C8B560B6744F700FD9940 /* bn_mp_set_int.c in Sources */, + AA7C8B570B6744F700FD9940 /* bn_mp_shrink.c in Sources */, + AA7C8B580B6744F700FD9940 /* bn_mp_signed_bin_size.c in Sources */, + AA7C8B590B6744F700FD9940 /* bn_mp_sqr.c in Sources */, + AA7C8B5A0B6744F700FD9940 /* bn_mp_sqrmod.c in Sources */, + AA7C8B5B0B6744F700FD9940 /* bn_mp_sqrt.c in Sources */, + AA7C8B5C0B6744F700FD9940 /* bn_mp_sub.c in Sources */, + AA7C8B5D0B6744F700FD9940 /* bn_mp_sub_d.c in Sources */, + AA7C8B5E0B6744F700FD9940 /* bn_mp_submod.c in Sources */, + AA7C8B5F0B6744F700FD9940 /* bn_mp_to_signed_bin.c in Sources */, + AA7C8B600B6744F700FD9940 /* bn_mp_to_signed_bin_n.c in Sources */, + AA7C8B610B6744F700FD9940 /* bn_mp_to_unsigned_bin.c in Sources */, + AA7C8B620B6744F700FD9940 /* bn_mp_to_unsigned_bin_n.c in Sources */, + AA7C8B630B6744F700FD9940 /* bn_mp_toom_mul.c in Sources */, + AA7C8B640B6744F700FD9940 /* bn_mp_toom_sqr.c in Sources */, + AA7C8B650B6744F700FD9940 /* bn_mp_toradix.c in Sources */, + AA7C8B660B6744F700FD9940 /* bn_mp_toradix_n.c in Sources */, + AA7C8B670B6744F700FD9940 /* bn_mp_unsigned_bin_size.c in Sources */, + AA7C8B680B6744F700FD9940 /* bn_mp_xor.c in Sources */, + AA7C8B690B6744F700FD9940 /* bn_mp_zero.c in Sources */, + AA7C8B6A0B6744F700FD9940 /* bn_prime_tab.c in Sources */, + AA7C8B6B0B6744F700FD9940 /* bn_reverse.c in Sources */, + AA7C8B6C0B6744F700FD9940 /* bn_s_mp_add.c in Sources */, + AA7C8B6D0B6744F700FD9940 /* bn_s_mp_exptmod.c in Sources */, + AA7C8B6E0B6744F700FD9940 /* bn_s_mp_mul_digs.c in Sources */, + AA7C8B6F0B6744F700FD9940 /* bn_s_mp_mul_high_digs.c in Sources */, + AA7C8B700B6744F700FD9940 /* bn_s_mp_sqr.c in Sources */, + AA7C8B710B6744F700FD9940 /* bn_s_mp_sub.c in Sources */, + AA7C8B720B6744F700FD9940 /* bncore.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7C8B880B67460600FD9940 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AA7C8C560B67467D00FD9940 /* aes.c in Sources */, + AA7C8C580B67467D00FD9940 /* hash_memory.c in Sources */, + AA7C8C590B67467D00FD9940 /* md5.c in Sources */, + AA7C8C5A0B67467D00FD9940 /* sha1.c in Sources */, + AA7C8C680B67467D00FD9940 /* ltc_ecc_fp_mulmod.c in Sources */, + AA7C8C690B67467D00FD9940 /* ltm_desc.c in Sources */, + AA7C8C6A0B67467D00FD9940 /* multi.c in Sources */, + AA7C8C6B0B67467D00FD9940 /* rand_prime.c in Sources */, + AA7C8C6C0B67467D00FD9940 /* base64_decode.c in Sources */, + AA7C8C6D0B67467D00FD9940 /* base64_encode.c in Sources */, + AA7C8C6E0B67467D00FD9940 /* burn_stack.c in Sources */, + AA7C8C6F0B67467D00FD9940 /* crypt.c in Sources */, + AA7C8C700B67467D00FD9940 /* crypt_argchk.c in Sources */, + AA7C8C710B67467D00FD9940 /* crypt_cipher_descriptor.c in Sources */, + AA7C8C720B67467D00FD9940 /* crypt_cipher_is_valid.c in Sources */, + AA7C8C730B67467D00FD9940 /* crypt_find_cipher.c in Sources */, + AA7C8C740B67467D00FD9940 /* crypt_find_cipher_any.c in Sources */, + AA7C8C750B67467D00FD9940 /* crypt_find_cipher_id.c in Sources */, + AA7C8C760B67467D00FD9940 /* crypt_find_hash.c in Sources */, + AA7C8C770B67467D00FD9940 /* crypt_find_hash_any.c in Sources */, + AA7C8C780B67467D00FD9940 /* crypt_find_hash_id.c in Sources */, + AA7C8C790B67467D00FD9940 /* crypt_find_hash_oid.c in Sources */, + AA7C8C7A0B67467D00FD9940 /* crypt_find_prng.c in Sources */, + AA7C8C7B0B67467D00FD9940 /* crypt_fsa.c in Sources */, + AA7C8C7C0B67467D00FD9940 /* crypt_hash_descriptor.c in Sources */, + AA7C8C7D0B67467D00FD9940 /* crypt_hash_is_valid.c in Sources */, + AA7C8C7E0B67467D00FD9940 /* crypt_ltc_mp_descriptor.c in Sources */, + AA7C8C7F0B67467D00FD9940 /* crypt_prng_descriptor.c in Sources */, + AA7C8C800B67467D00FD9940 /* crypt_prng_is_valid.c in Sources */, + AA7C8C810B67467D00FD9940 /* crypt_register_cipher.c in Sources */, + AA7C8C820B67467D00FD9940 /* crypt_register_hash.c in Sources */, + AA7C8C830B67467D00FD9940 /* crypt_register_prng.c in Sources */, + AA7C8C840B67467D00FD9940 /* crypt_unregister_cipher.c in Sources */, + AA7C8C850B67467D00FD9940 /* crypt_unregister_hash.c in Sources */, + AA7C8C860B67467D00FD9940 /* crypt_unregister_prng.c in Sources */, + AA7C8C870B67467D00FD9940 /* error_to_string.c in Sources */, + AA7C8C880B67467D00FD9940 /* pkcs_5_1.c in Sources */, + AA7C8C890B67467D00FD9940 /* pkcs_5_2.c in Sources */, + AA7C8C8A0B67467D00FD9940 /* zeromem.c in Sources */, + AA7C8C8B0B67467D00FD9940 /* cbc_decrypt.c in Sources */, + AA7C8C8C0B67467D00FD9940 /* cbc_done.c in Sources */, + AA7C8C8D0B67467D00FD9940 /* cbc_encrypt.c in Sources */, + AA7C8C8E0B67467D00FD9940 /* cbc_getiv.c in Sources */, + AA7C8C8F0B67467D00FD9940 /* cbc_setiv.c in Sources */, + AA7C8C900B67467D00FD9940 /* cbc_start.c in Sources */, + AA7C8C910B67467D00FD9940 /* cfb_decrypt.c in Sources */, + AA7C8C920B67467D00FD9940 /* cfb_done.c in Sources */, + AA7C8C930B67467D00FD9940 /* cfb_encrypt.c in Sources */, + AA7C8C940B67467D00FD9940 /* cfb_getiv.c in Sources */, + AA7C8C950B67467D00FD9940 /* cfb_setiv.c in Sources */, + AA7C8C960B67467D00FD9940 /* cfb_start.c in Sources */, + AA7C8C970B67467D00FD9940 /* ctr_decrypt.c in Sources */, + AA7C8C980B67467D00FD9940 /* ctr_done.c in Sources */, + AA7C8C990B67467D00FD9940 /* ctr_encrypt.c in Sources */, + AA7C8C9A0B67467D00FD9940 /* ctr_getiv.c in Sources */, + AA7C8C9B0B67467D00FD9940 /* ctr_setiv.c in Sources */, + AA7C8C9C0B67467D00FD9940 /* ctr_start.c in Sources */, + AA7C8C9D0B67467D00FD9940 /* ctr_test.c in Sources */, + AA7C8C9E0B67467D00FD9940 /* ecb_decrypt.c in Sources */, + AA7C8C9F0B67467D00FD9940 /* ecb_done.c in Sources */, + AA7C8CA00B67467D00FD9940 /* ecb_encrypt.c in Sources */, + AA7C8CA10B67467D00FD9940 /* ecb_start.c in Sources */, + AA7C8CA20B67467D00FD9940 /* ofb_decrypt.c in Sources */, + AA7C8CA30B67467D00FD9940 /* ofb_done.c in Sources */, + AA7C8CA40B67467D00FD9940 /* ofb_encrypt.c in Sources */, + AA7C8CA50B67467D00FD9940 /* ofb_getiv.c in Sources */, + AA7C8CA60B67467D00FD9940 /* ofb_setiv.c in Sources */, + AA7C8CA70B67467D00FD9940 /* ofb_start.c in Sources */, + AA7C8CA80B67467D00FD9940 /* der_decode_bit_string.c in Sources */, + AA7C8CA90B67467D00FD9940 /* der_encode_bit_string.c in Sources */, + AA7C8CAA0B67467D00FD9940 /* der_length_bit_string.c in Sources */, + AA7C8CAB0B67467D00FD9940 /* der_decode_boolean.c in Sources */, + AA7C8CAC0B67467D00FD9940 /* der_encode_boolean.c in Sources */, + AA7C8CAD0B67467D00FD9940 /* der_length_boolean.c in Sources */, + AA7C8CAE0B67467D00FD9940 /* der_decode_choice.c in Sources */, + AA7C8CAF0B67467D00FD9940 /* der_decode_ia5_string.c in Sources */, + AA7C8CB00B67467D00FD9940 /* der_encode_ia5_string.c in Sources */, + AA7C8CB10B67467D00FD9940 /* der_length_ia5_string.c in Sources */, + AA7C8CB20B67467D00FD9940 /* der_decode_integer.c in Sources */, + AA7C8CB30B67467D00FD9940 /* der_encode_integer.c in Sources */, + AA7C8CB40B67467D00FD9940 /* der_length_integer.c in Sources */, + AA7C8CB50B67467D00FD9940 /* der_decode_object_identifier.c in Sources */, + AA7C8CB60B67467D00FD9940 /* der_encode_object_identifier.c in Sources */, + AA7C8CB70B67467D00FD9940 /* der_length_object_identifier.c in Sources */, + AA7C8CB80B67467D00FD9940 /* der_decode_octet_string.c in Sources */, + AA7C8CB90B67467D00FD9940 /* der_encode_octet_string.c in Sources */, + AA7C8CBA0B67467D00FD9940 /* der_length_octet_string.c in Sources */, + AA7C8CBB0B67467D00FD9940 /* der_decode_printable_string.c in Sources */, + AA7C8CBC0B67467D00FD9940 /* der_encode_printable_string.c in Sources */, + AA7C8CBD0B67467D00FD9940 /* der_length_printable_string.c in Sources */, + AA7C8CBE0B67467D00FD9940 /* der_decode_sequence_ex.c in Sources */, + AA7C8CBF0B67467D00FD9940 /* der_decode_sequence_flexi.c in Sources */, + AA7C8CC00B67467D00FD9940 /* der_decode_sequence_multi.c in Sources */, + AA7C8CC10B67467D00FD9940 /* der_encode_sequence_ex.c in Sources */, + AA7C8CC20B67467D00FD9940 /* der_encode_sequence_multi.c in Sources */, + AA7C8CC30B67467D00FD9940 /* der_length_sequence.c in Sources */, + AA7C8CC40B67467D00FD9940 /* der_sequence_free.c in Sources */, + AA7C8CC50B67467D00FD9940 /* der_encode_set.c in Sources */, + AA7C8CC60B67467D00FD9940 /* der_encode_setof.c in Sources */, + AA7C8CC70B67467D00FD9940 /* der_decode_short_integer.c in Sources */, + AA7C8CC80B67467D00FD9940 /* der_encode_short_integer.c in Sources */, + AA7C8CC90B67467D00FD9940 /* der_length_short_integer.c in Sources */, + AA7C8CCA0B67467D00FD9940 /* der_decode_utctime.c in Sources */, + AA7C8CCB0B67467D00FD9940 /* der_encode_utctime.c in Sources */, + AA7C8CCC0B67467D00FD9940 /* der_length_utctime.c in Sources */, + AA7C8CCD0B67467D00FD9940 /* der_decode_utf8_string.c in Sources */, + AA7C8CCE0B67467D00FD9940 /* der_encode_utf8_string.c in Sources */, + AA7C8CCF0B67467D00FD9940 /* der_length_utf8_string.c in Sources */, + AA7C8CD00B67467D00FD9940 /* dsa_decrypt_key.c in Sources */, + AA7C8CD10B67467D00FD9940 /* dsa_encrypt_key.c in Sources */, + AA7C8CD20B67467D00FD9940 /* dsa_export.c in Sources */, + AA7C8CD30B67467D00FD9940 /* dsa_free.c in Sources */, + AA7C8CD40B67467D00FD9940 /* dsa_import.c in Sources */, + AA7C8CD50B67467D00FD9940 /* dsa_make_key.c in Sources */, + AA7C8CD60B67467D00FD9940 /* dsa_shared_secret.c in Sources */, + AA7C8CD70B67467D00FD9940 /* dsa_sign_hash.c in Sources */, + AA7C8CD80B67467D00FD9940 /* dsa_verify_hash.c in Sources */, + AA7C8CD90B67467D00FD9940 /* dsa_verify_key.c in Sources */, + AA7C8CDA0B67467D00FD9940 /* pkcs_1_i2osp.c in Sources */, + AA7C8CDB0B67467D00FD9940 /* pkcs_1_mgf1.c in Sources */, + AA7C8CDC0B67467D00FD9940 /* pkcs_1_oaep_decode.c in Sources */, + AA7C8CDD0B67467D00FD9940 /* pkcs_1_oaep_encode.c in Sources */, + AA7C8CDE0B67467D00FD9940 /* pkcs_1_os2ip.c in Sources */, + AA7C8CDF0B67467D00FD9940 /* pkcs_1_pss_decode.c in Sources */, + AA7C8CE00B67467D00FD9940 /* pkcs_1_pss_encode.c in Sources */, + AA7C8CE10B67467D00FD9940 /* pkcs_1_v1_5_decode.c in Sources */, + AA7C8CE20B67467D00FD9940 /* pkcs_1_v1_5_encode.c in Sources */, + AA7C8CE30B67467D00FD9940 /* rsa_decrypt_key.c in Sources */, + AA7C8CE40B67467D00FD9940 /* rsa_encrypt_key.c in Sources */, + AA7C8CE50B67467D00FD9940 /* rsa_export.c in Sources */, + AA7C8CE60B67467D00FD9940 /* rsa_exptmod.c in Sources */, + AA7C8CE70B67467D00FD9940 /* rsa_free.c in Sources */, + AA7C8CE80B67467D00FD9940 /* rsa_import.c in Sources */, + AA7C8CE90B67467D00FD9940 /* rsa_make_key.c in Sources */, + AA7C8CEA0B67467D00FD9940 /* rsa_sign_hash.c in Sources */, + AA7C8CEB0B67467D00FD9940 /* rsa_verify_hash.c in Sources */, + AA7C8CEC0B67467D00FD9940 /* fortuna.c in Sources */, + AA7C8CED0B67467D00FD9940 /* rc4.c in Sources */, + AA7C8CEE0B67467D00FD9940 /* rng_get_bytes.c in Sources */, + AA7C8CEF0B67467D00FD9940 /* rng_make_prng.c in Sources */, + AA7C8CF00B67467D00FD9940 /* sober128.c in Sources */, + AA7C8CF20B67467D00FD9940 /* sprng.c in Sources */, + AA7C8CF30B67467D00FD9940 /* yarrow.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AAA070A60CE7B0DF005A3060 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AAA071800CE7B4FB005A3060 /* version.c in Sources */, + AAA071820CE7B4FD005A3060 /* timer.c in Sources */, + AAA071840CE7B4FE005A3060 /* synth.c in Sources */, + AAA071860CE7B501005A3060 /* stream.c in Sources */, + AAA071890CE7B503005A3060 /* layer3.c in Sources */, + AAA0718B0CE7B505005A3060 /* layer12.c in Sources */, + AAA0718D0CE7B506005A3060 /* huffman.c in Sources */, + AAA071900CE7B509005A3060 /* frame.c in Sources */, + AAA071920CE7B50A005A3060 /* fixed.c in Sources */, + AAA071940CE7B50B005A3060 /* decoder.c in Sources */, + AAA071960CE7B50D005A3060 /* bit.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AAE7817B0AC7E37B00AEFC64 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2BDB88E9137201F700E6FD3A /* lapi.c in Sources */, + 2BDB88EB137201F700E6FD3A /* lauxlib.c in Sources */, + 2BDB88ED137201F700E6FD3A /* lbaselib.c in Sources */, + 2BDB88EE137201F700E6FD3A /* lcode.c in Sources */, + 2BDB88F0137201F700E6FD3A /* ldblib.c in Sources */, + 2BDB88F1137201F700E6FD3A /* ldebug.c in Sources */, + 2BDB88F3137201F700E6FD3A /* ldo.c in Sources */, + 2BDB88F5137201F700E6FD3A /* ldump.c in Sources */, + 2BDB88F6137201F700E6FD3A /* lfunc.c in Sources */, + 2BDB88F8137201F700E6FD3A /* lgc.c in Sources */, + 2BDB88FA137201F700E6FD3A /* linit.c in Sources */, + 2BDB88FB137201F700E6FD3A /* liolib.c in Sources */, + 2BDB88FC137201F700E6FD3A /* llex.c in Sources */, + 2BDB88FF137201F700E6FD3A /* lmathlib.c in Sources */, + 2BDB8900137201F700E6FD3A /* lmem.c in Sources */, + 2BDB8902137201F700E6FD3A /* loadlib.c in Sources */, + 2BDB8903137201F700E6FD3A /* lobject.c in Sources */, + 2BDB8905137201F700E6FD3A /* lopcodes.c in Sources */, + 2BDB8907137201F700E6FD3A /* loslib.c in Sources */, + 2BDB8908137201F700E6FD3A /* lparser.c in Sources */, + 2BDB890A137201F700E6FD3A /* lstate.c in Sources */, + 2BDB890C137201F700E6FD3A /* lstring.c in Sources */, + 2BDB890E137201F700E6FD3A /* lstrlib.c in Sources */, + 2BDB890F137201F700E6FD3A /* ltable.c in Sources */, + 2BDB8911137201F700E6FD3A /* ltablib.c in Sources */, + 2BDB8912137201F700E6FD3A /* ltm.c in Sources */, + 2BDB8914137201F700E6FD3A /* lua.c in Sources */, + 2BDB8916137201F700E6FD3A /* luac.c in Sources */, + 2BDB8919137201F700E6FD3A /* lundump.c in Sources */, + 2BDB891B137201F700E6FD3A /* lvm.c in Sources */, + 2BDB891D137201F700E6FD3A /* lzio.c in Sources */, + 2BDB891F137201F700E6FD3A /* print.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AA30C61A07F5E2EF0066F398 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA30C60F07F5E24A0066F398 /* version */; + targetProxy = AA30C61907F5E2EF0066F398 /* PBXContainerItemProxy */; + }; + AA40D1B509A08D650068C0D5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA30C60F07F5E24A0066F398 /* version */; + targetProxy = AA40D1B609A08D650068C0D5 /* PBXContainerItemProxy */; + }; + AA7A2BA60AE09C9B0054C5BA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AAE7817D0AC7E37B00AEFC64 /* lua-5.1 */; + targetProxy = AA7A2BA50AE09C9B0054C5BA /* PBXContainerItemProxy */; + }; + AA7A2BAE0AE09CDB0054C5BA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AAE7817D0AC7E37B00AEFC64 /* lua-5.1 */; + targetProxy = AA7A2BAD0AE09CDB0054C5BA /* PBXContainerItemProxy */; + }; + AA7A2BB50AE09D160054C5BA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA7A2B930AE09B520054C5BA /* lua */; + targetProxy = AA7A2BB40AE09D160054C5BA /* PBXContainerItemProxy */; + }; + AA7A2BB70AE09D160054C5BA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA7A2BAA0AE09CD50054C5BA /* luac */; + targetProxy = AA7A2BB60AE09D160054C5BA /* PBXContainerItemProxy */; + }; + AA7C8D160B6748B800FD9940 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA7C895E0B67444700FD9940 /* tommath */; + targetProxy = AA7C8D150B6748B800FD9940 /* PBXContainerItemProxy */; + }; + AA7C8D180B6748B800FD9940 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA7C8B8A0B67460600FD9940 /* tomcrypt */; + targetProxy = AA7C8D170B6748B800FD9940 /* PBXContainerItemProxy */; + }; + AA7C8D1C0B6748CD00FD9940 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA7C895E0B67444700FD9940 /* tommath */; + targetProxy = AA7C8D1B0B6748CD00FD9940 /* PBXContainerItemProxy */; + }; + AA7C8D1E0B6748CD00FD9940 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA7C8B8A0B67460600FD9940 /* tomcrypt */; + targetProxy = AA7C8D1D0B6748CD00FD9940 /* PBXContainerItemProxy */; + }; + AAA071AA0CE7B879005A3060 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AAA070A80CE7B0DF005A3060 /* mad */; + targetProxy = AAA071A90CE7B879005A3060 /* PBXContainerItemProxy */; + }; + AAE781FE0AC7E61900AEFC64 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AAE7817D0AC7E37B00AEFC64 /* lua-5.1 */; + targetProxy = AAE781FD0AC7E61900AEFC64 /* PBXContainerItemProxy */; + }; + AAE782020AC7E63100AEFC64 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AAE7817D0AC7E37B00AEFC64 /* lua-5.1 */; + targetProxy = AAE782010AC7E63100AEFC64 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AAF6A2F709B695BA00D5C614 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + AAF6A33109B69C7700D5C614 /* it */, + AAF6A38F09B6A2A600D5C614 /* es */, + AAF6A3AE09B6A88800D5C614 /* de */, + AAF6A3B109B6A90C00D5C614 /* en */, + AAF6A3B209B6A91000D5C614 /* ja */, + AAF6A3B309B6A91600D5C614 /* fr */, + ); + name = Localizable.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AA0AA8FE0963CF7700427F4D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LIBRARY_STYLE = Bundle; + MACOSX_DEPLOYMENT_TARGET = 10.2; + PRODUCT_NAME = version; + ZERO_LINK = NO; + }; + name = Debug; + }; + AA0AA8FF0963CF7700427F4D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_ENABLE_SSE3_EXTENSIONS = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/../src/ffmpeg/include", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(SRCROOT)/Libraries", + "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + LINKER_DISPLAYS_MANGLED_NAMES = NO; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + "-falign-loops=16", + ); + PRODUCT_NAME = "$(value)"; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + AA0AA9000963CF7700427F4D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_VARIANTS = normal; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_ALTIVEC_EXTENSIONS = YES; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_FAST_MATH = NO; + GCC_FAST_OBJC_DISPATCH = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; + GCC_STRICT_ALIASING = YES; + GCC_UNROLL_LOOPS = YES; + GCC_VERSION = 4.0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_PROTOTYPE_CONVERSION = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LINKER_DISPLAYS_MANGLED_NAMES = YES; + MACOSX_DEPLOYMENT_TARGET = 10.3; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; + ONLY_LINK_ESSENTIAL_SYMBOLS = YES; + PREBINDING = NO; + PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk; + SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; + STRIP_INSTALLED_PRODUCT = NO; + STRIP_STYLE = "non-global"; + USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../src/jsoncpp/include"; + }; + name = Debug; + }; + AA40D52809A08D650068C0D5 /* Native */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SRCROOT)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks", + ); + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + NO_MP3_SUPPORT, + WITHOUT_NETWORKING, + ); + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/Frameworks/ffmpeg.framework/Headers", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/A/Headers", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/Libraries", + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + ); + PRODUCT_NAME = "$(value)"; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = Native; + }; + AA40D52909A08D650068C0D5 /* Universal */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SRCROOT)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks", + ); + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + NO_MP3_SUPPORT, + WITHOUT_NETWORKING, + ); + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/Frameworks/ffmpeg.framework/Headers", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/A/Headers", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/Libraries", + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + ); + PRODUCT_NAME = "$(value)"; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = Universal; + }; + AA40D52A09A08D660068C0D5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SRCROOT)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks", + ); + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + NO_MP3_SUPPORT, + WITHOUT_NETWORKING, + "$(value)", + ); + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/Frameworks/ffmpeg.framework/Headers", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/A/Headers", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/Libraries", + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + ); + PRODUCT_NAME = "$(value)"; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + AA7A2B9A0AE09BA50054C5BA /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + LUA_USE_MACOSX, + "$(value)", + ); + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = lua; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Native; + }; + AA7A2B9B0AE09BA50054C5BA /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + LUA_USE_MACOSX, + "$(value)", + ); + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = lua; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; + AA7A2B9C0AE09BA50054C5BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + LUA_USE_MACOSX, + "$(value)", + ); + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = lua; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Debug; + }; + AA7A2BBA0AE09D4E0054C5BA /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = luac; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Native; + }; + AA7A2BBB0AE09D4E0054C5BA /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = luac; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; + AA7A2BBC0AE09D4E0054C5BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = luac; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Debug; + }; + AA7A2BBE0AE09D4E0054C5BA /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "all lua"; + }; + name = Native; + }; + AA7A2BBF0AE09D4E0054C5BA /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "all lua"; + }; + name = Universal; + }; + AA7A2BC00AE09D4E0054C5BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + PRODUCT_NAME = "all lua"; + }; + name = Debug; + }; + AA7C89820B67447E00FD9940 /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DYNAMIC_NO_PIC = YES; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = /usr/local/lib; + PRODUCT_NAME = tommath; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Native; + }; + AA7C89830B67447E00FD9940 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DYNAMIC_NO_PIC = YES; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = /usr/local/lib; + PRODUCT_NAME = tommath; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; + AA7C89840B67447E00FD9940 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DYNAMIC_NO_PIC = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = /usr/local/lib; + PRODUCT_NAME = tommath; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Debug; + }; + AA7C8B8F0B67464300FD9940 /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + DEAD_CODE_STRIPPING = NO; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_RTTI = NO; + GCC_NO_COMMON_BLOCKS = YES; + INSTALL_PATH = /usr/local/lib; + KEEP_PRIVATE_EXTERNS = YES; + PRODUCT_NAME = tomcrypt; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Native; + }; + AA7C8B900B67464300FD9940 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + DEAD_CODE_STRIPPING = NO; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_RTTI = NO; + GCC_NO_COMMON_BLOCKS = YES; + INSTALL_PATH = /usr/local/lib; + KEEP_PRIVATE_EXTERNS = YES; + PRODUCT_NAME = tomcrypt; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; + AA7C8B910B67464300FD9940 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + DEAD_CODE_STRIPPING = NO; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_RTTI = NO; + GCC_NO_COMMON_BLOCKS = YES; + INSTALL_PATH = /usr/local/lib; + KEEP_PRIVATE_EXTERNS = YES; + PRODUCT_NAME = tomcrypt; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Debug; + }; + AAA070AA0CE7B0E2005A3060 /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + FPM = ""; + "FPM[arch=i386]" = FPM_INTEL; + "FPM[arch=ppc]" = FPM_PPC; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PREPROCESSOR_DEFINITIONS = ( + "HAVE_ASSERT_H=1", + "HAVE_DLFCN_H=1", + "HAVE_ERRNO_H=1", + "HAVE_FORK=1", + "HAVE_INTTYPES_H=1", + "HAVE_LIMITS_H=1", + "HAVE_MEMORY_H=1", + "HAVE_WAITPID=1", + "SIZEOF_LONG=4", + "$(FPM)", + ); + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_SIGN_COMPARE = NO; + HEADER_SEARCH_PATHS = "$(SRCROOT)/../src/mad-0.15.1b"; + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRODUCT_NAME = mad; + }; + name = Native; + }; + AAA070AB0CE7B0E2005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + FPM = ""; + "FPM[arch=i386]" = FPM_INTEL; + "FPM[arch=ppc]" = FPM_PPC; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PREPROCESSOR_DEFINITIONS = ( + "HAVE_ASSERT_H=1", + "HAVE_DLFCN_H=1", + "HAVE_ERRNO_H=1", + "HAVE_FORK=1", + "HAVE_INTTYPES_H=1", + "HAVE_LIMITS_H=1", + "HAVE_MEMORY_H=1", + "HAVE_WAITPID=1", + "SIZEOF_LONG=4", + "$(FPM)", + ); + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_SIGN_COMPARE = NO; + HEADER_SEARCH_PATHS = "$(SRCROOT)/../src/mad-0.15.1b"; + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRODUCT_NAME = mad; + }; + name = PerformanceDebug; + }; + AAA070AC0CE7B0E2005A3060 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + FPM = ""; + "FPM[arch=i386]" = FPM_INTEL; + "FPM[arch=ppc]" = FPM_PPC; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PREPROCESSOR_DEFINITIONS = ( + "HAVE_ASSERT_H=1", + "HAVE_DLFCN_H=1", + "HAVE_ERRNO_H=1", + "HAVE_FORK=1", + "HAVE_INTTYPES_H=1", + "HAVE_LIMITS_H=1", + "HAVE_MEMORY_H=1", + "HAVE_WAITPID=1", + "SIZEOF_LONG=4", + "$(FPM)", + ); + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_SIGN_COMPARE = NO; + HEADER_SEARCH_PATHS = "$(SRCROOT)/../src/mad-0.15.1b"; + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRODUCT_NAME = mad; + }; + name = Universal; + }; + AAA070AD0CE7B0E2005A3060 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + COPY_PHASE_STRIP = NO; + FPM = ""; + "FPM[arch=i386]" = FPM_INTEL; + "FPM[arch=ppc]" = FPM_PPC; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "HAVE_ASSERT_H=1", + "HAVE_DLFCN_H=1", + "HAVE_ERRNO_H=1", + "HAVE_FORK=1", + "HAVE_INTTYPES_H=1", + "HAVE_LIMITS_H=1", + "HAVE_MEMORY_H=1", + "HAVE_WAITPID=1", + "SIZEOF_LONG=4", + "$(FPM)", + ); + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_SIGN_COMPARE = NO; + HEADER_SEARCH_PATHS = "$(SRCROOT)/../src/mad-0.15.1b"; + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRODUCT_NAME = mad; + }; + name = Debug; + }; + AABF4DBA0CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_VARIANTS = normal; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_ALTIVEC_EXTENSIONS = YES; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_FAST_MATH = NO; + GCC_FAST_OBJC_DISPATCH = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_STRICT_ALIASING = YES; + GCC_UNROLL_LOOPS = YES; + GCC_VERSION = 4.0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_PROTOTYPE_CONVERSION = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LINKER_DISPLAYS_MANGLED_NAMES = YES; + MACOSX_DEPLOYMENT_TARGET = 10.3; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; + ONLY_LINK_ESSENTIAL_SYMBOLS = YES; + PREBINDING = NO; + PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk; + SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; + STRIP_INSTALLED_PRODUCT = YES; + STRIP_STYLE = "non-global"; + USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../src/jsoncpp/include"; + }; + name = PerformanceDebug; + }; + AABF4DBB0CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = stabs; + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_ENABLE_SSE3_EXTENSIONS = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/../src/ffmpeg/include", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(SRCROOT)/Libraries", + "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + LINKER_DISPLAYS_MANGLED_NAMES = NO; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + "-falign-loops=16", + ); + PRODUCT_NAME = "$(value)"; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = PerformanceDebug; + }; + AABF4DBC0CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LIBRARY_STYLE = Bundle; + MACOSX_DEPLOYMENT_TARGET = 10.2; + PRODUCT_NAME = version; + ZERO_LINK = NO; + }; + name = PerformanceDebug; + }; + AABF4DBD0CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SRCROOT)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks", + ); + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + NO_MP3_SUPPORT, + WITHOUT_NETWORKING, + ); + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/Frameworks/ffmpeg.framework/Headers", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/A/Headers", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/Libraries", + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + ); + PRODUCT_NAME = "$(value)"; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = PerformanceDebug; + }; + AABF4DBE0CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(value)", + LUA_USE_MACOSX, + ); + INSTALL_PATH = /usr/local/lib; + OBJROOT = "$(SRCROOT)/build"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_NAME = "lua-5.1"; + SYMROOT = "$(SRCROOT)/build"; + }; + name = PerformanceDebug; + }; + AABF4DBF0CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + LUA_USE_MACOSX, + "$(value)", + ); + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = lua; + SYMROOT = "$(SRCROOT)/build"; + }; + name = PerformanceDebug; + }; + AABF4DC00CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = luac; + SYMROOT = "$(SRCROOT)/build"; + }; + name = PerformanceDebug; + }; + AABF4DC10CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "all lua"; + }; + name = PerformanceDebug; + }; + AABF4DC20CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DYNAMIC_NO_PIC = YES; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = /usr/local/lib; + PRODUCT_NAME = tommath; + SYMROOT = "$(SRCROOT)/build"; + }; + name = PerformanceDebug; + }; + AABF4DC30CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + DEAD_CODE_STRIPPING = NO; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_RTTI = NO; + GCC_NO_COMMON_BLOCKS = YES; + INSTALL_PATH = /usr/local/lib; + KEEP_PRIVATE_EXTERNS = YES; + PRODUCT_NAME = tomcrypt; + SYMROOT = "$(SRCROOT)/build"; + }; + name = PerformanceDebug; + }; + AAC8450D0856A19700A9FEAB /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LIBRARY_STYLE = Bundle; + MACOSX_DEPLOYMENT_TARGET = 10.2; + PRODUCT_NAME = version; + ZERO_LINK = NO; + }; + name = Native; + }; + AAC845110856A19700A9FEAB /* Native */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_ENABLE_SSE3_EXTENSIONS = NO; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/../src/ffmpeg/include", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(SRCROOT)/Libraries", + "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + LINKER_DISPLAYS_MANGLED_NAMES = NO; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + "-falign-loops=16", + ); + PRODUCT_NAME = "$(value)"; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = Native; + }; + AAC845150856A19700A9FEAB /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_VARIANTS = normal; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_ALTIVEC_EXTENSIONS = YES; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_FAST_MATH = NO; + GCC_FAST_OBJC_DISPATCH = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_STRICT_ALIASING = YES; + GCC_UNROLL_LOOPS = YES; + GCC_VERSION = 4.0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_PROTOTYPE_CONVERSION = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LINKER_DISPLAYS_MANGLED_NAMES = YES; + MACOSX_DEPLOYMENT_TARGET = 10.3; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; + ONLY_LINK_ESSENTIAL_SYMBOLS = YES; + PREBINDING = NO; + PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk; + SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; + STRIP_INSTALLED_PRODUCT = YES; + STRIP_STYLE = "non-global"; + USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../src/jsoncpp/include"; + }; + name = Native; + }; + AAE44A2B0965707500B025E5 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LIBRARY_STYLE = Bundle; + MACOSX_DEPLOYMENT_TARGET = 10.2; + PRODUCT_NAME = version; + ZERO_LINK = NO; + }; + name = Universal; + }; + AAE44A2C0965707500B025E5 /* Universal */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_ENABLE_OBJC_EXCEPTIONS = NO; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/../src/ffmpeg/include", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(SRCROOT)/Libraries", + "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + LINKER_DISPLAYS_MANGLED_NAMES = NO; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + "-falign-loops=16", + ); + PRODUCT_NAME = "$(value)"; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = Universal; + }; + AAE44A2D0965707500B025E5 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386"; + BUILD_VARIANTS = normal; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_ALTIVEC_EXTENSIONS = YES; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_FAST_MATH = NO; + GCC_FAST_OBJC_DISPATCH = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_STRICT_ALIASING = YES; + GCC_UNROLL_LOOPS = YES; + GCC_VERSION = 4.0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_PROTOTYPE_CONVERSION = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LINKER_DISPLAYS_MANGLED_NAMES = YES; + MACOSX_DEPLOYMENT_TARGET = 10.4; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; + ONLY_LINK_ESSENTIAL_SYMBOLS = YES; + PREBINDING = NO; + PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk"; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT_ppc = /Developer/SDKs/MacOSX10.4u.sdk; + SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; + STRIP_INSTALLED_PRODUCT = YES; + STRIP_STYLE = "non-global"; + USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../src/jsoncpp/include"; + }; + name = Universal; + }; + AAE781800AC7E3BF00AEFC64 /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(value)", + LUA_USE_MACOSX, + ); + INSTALL_PATH = /usr/local/lib; + OBJROOT = "$(SRCROOT)/build"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_NAME = "lua-5.1"; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Native; + }; + AAE781810AC7E3BF00AEFC64 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(value)", + LUA_USE_MACOSX, + ); + INSTALL_PATH = /usr/local/lib; + OBJROOT = "$(SRCROOT)/build"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_NAME = "lua-5.1"; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; + AAE781820AC7E3BF00AEFC64 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(value)", + LUA_USE_MACOSX, + ); + INSTALL_PATH = /usr/local/lib; + OBJROOT = "$(SRCROOT)/build"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_NAME = "lua-5.1"; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AA40D52709A08D650068C0D5 /* Build configuration list for PBXNativeTarget "stepmania-bare" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AA40D52809A08D650068C0D5 /* Native */, + AABF4DBD0CD37960005A3060 /* PerformanceDebug */, + AA40D52909A08D650068C0D5 /* Universal */, + AA40D52A09A08D660068C0D5 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AA7A2B990AE09BA50054C5BA /* Build configuration list for PBXNativeTarget "lua" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AA7A2B9A0AE09BA50054C5BA /* Native */, + AABF4DBF0CD37960005A3060 /* PerformanceDebug */, + AA7A2B9B0AE09BA50054C5BA /* Universal */, + AA7A2B9C0AE09BA50054C5BA /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AA7A2BB90AE09D4E0054C5BA /* Build configuration list for PBXNativeTarget "luac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AA7A2BBA0AE09D4E0054C5BA /* Native */, + AABF4DC00CD37960005A3060 /* PerformanceDebug */, + AA7A2BBB0AE09D4E0054C5BA /* Universal */, + AA7A2BBC0AE09D4E0054C5BA /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AA7A2BBD0AE09D4E0054C5BA /* Build configuration list for PBXAggregateTarget "all lua" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AA7A2BBE0AE09D4E0054C5BA /* Native */, + AABF4DC10CD37960005A3060 /* PerformanceDebug */, + AA7A2BBF0AE09D4E0054C5BA /* Universal */, + AA7A2BC00AE09D4E0054C5BA /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AA7C89810B67447E00FD9940 /* Build configuration list for PBXNativeTarget "tommath" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AA7C89820B67447E00FD9940 /* Native */, + AABF4DC20CD37960005A3060 /* PerformanceDebug */, + AA7C89830B67447E00FD9940 /* Universal */, + AA7C89840B67447E00FD9940 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AA7C8B8E0B67464300FD9940 /* Build configuration list for PBXNativeTarget "tomcrypt" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AA7C8B8F0B67464300FD9940 /* Native */, + AABF4DC30CD37960005A3060 /* PerformanceDebug */, + AA7C8B900B67464300FD9940 /* Universal */, + AA7C8B910B67464300FD9940 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AAA070AE0CE7B138005A3060 /* Build configuration list for PBXNativeTarget "mad" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AAA070AA0CE7B0E2005A3060 /* Native */, + AAA070AB0CE7B0E2005A3060 /* PerformanceDebug */, + AAA070AC0CE7B0E2005A3060 /* Universal */, + AAA070AD0CE7B0E2005A3060 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AAC8450B0856A19700A9FEAB /* Build configuration list for PBXLegacyTarget "version" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AAC8450D0856A19700A9FEAB /* Native */, + AABF4DBC0CD37960005A3060 /* PerformanceDebug */, + AAE44A2B0965707500B025E5 /* Universal */, + AA0AA8FE0963CF7700427F4D /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AAC8450F0856A19700A9FEAB /* Build configuration list for PBXNativeTarget "stepmania" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AAC845110856A19700A9FEAB /* Native */, + AABF4DBB0CD37960005A3060 /* PerformanceDebug */, + AAE44A2C0965707500B025E5 /* Universal */, + AA0AA8FF0963CF7700427F4D /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AAC845150856A19700A9FEAB /* Native */, + AABF4DBA0CD37960005A3060 /* PerformanceDebug */, + AAE44A2D0965707500B025E5 /* Universal */, + AA0AA9000963CF7700427F4D /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AAE7817F0AC7E3BF00AEFC64 /* Build configuration list for PBXNativeTarget "lua-5.1" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AAE781800AC7E3BF00AEFC64 /* Native */, + AABF4DBE0CD37960005A3060 /* PerformanceDebug */, + AAE781810AC7E3BF00AEFC64 /* Universal */, + AAE781820AC7E3BF00AEFC64 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; +} From dd1c713854beb4aecff1f9176e2d431c4b3e4b46 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 5 May 2011 23:35:33 -0400 Subject: [PATCH 002/106] [Xcode4] Intel only. The plist change is due to the Music Games category set. --- Xcode/Info-StepMania.plist | 2 + .../project.pbxproj | 334 +----------------- 2 files changed, 13 insertions(+), 323 deletions(-) diff --git a/Xcode/Info-StepMania.plist b/Xcode/Info-StepMania.plist index 580247540e..e95a68ff7a 100644 --- a/Xcode/Info-StepMania.plist +++ b/Xcode/Info-StepMania.plist @@ -47,6 +47,8 @@ Step CFBundleVersion PRODUCT_VER_BARE + LSApplicationCategoryType + public.app-category.music-games LSMinimumSystemVersion 10.4.10 NSHumanReadableCopyright diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 7f4bc6c9ad..644273d718 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -5641,7 +5641,7 @@ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; - buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */; + buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania_xcode4" */; compatibilityVersion = "Xcode 3.0"; developmentRegion = English; hasScannedForEncodings = 1; @@ -7101,6 +7101,7 @@ ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; + MACOSX_DEPLOYMENT_TARGET = 10.4; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( "-finline-limit=300", @@ -7139,7 +7140,7 @@ GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; GCC_STRICT_ALIASING = YES; GCC_UNROLL_LOOPS = YES; - GCC_VERSION = 4.0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; @@ -7162,14 +7163,11 @@ GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; - MACOSX_DEPLOYMENT_TARGET = 10.3; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; + MACOSX_DEPLOYMENT_TARGET = 10.4; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; - SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = NO; STRIP_STYLE = "non-global"; @@ -7225,54 +7223,6 @@ }; name = Native; }; - AA40D52909A08D650068C0D5 /* Universal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SRCROOT)/Frameworks", - "$(SYSTEM_LIBRARY_DIR)/Frameworks", - "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks", - ); - FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; - GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - NO_MP3_SUPPORT, - WITHOUT_NETWORKING, - ); - HEADER_SEARCH_PATHS = ( - "$(SRCROOT)/../src", - "$(SRCROOT)/Frameworks/ffmpeg.framework/Headers", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", - "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/A/Headers", - ); - INFOPLIST_FILE = "Info-StepMania.plist"; - INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; - INFOPLIST_PREPROCESS = YES; - INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ( - "$(SRCROOT)/Libraries", - "$(SRCROOT)/build/$(CONFIGURATION)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", - "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", - ); - LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; - OBJROOT = "$(SRCROOT)/build"; - OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", - "-fconstant-cfstrings", - "-fsingle-precision-constant", - "-fno-exceptions", - ); - PRODUCT_NAME = "$(value)"; - SYMROOT = "$(SRCROOT)/.."; - WRAPPER_EXTENSION = app; - }; - name = Universal; - }; AA40D52A09A08D660068C0D5 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; @@ -7341,24 +7291,6 @@ }; name = Native; }; - AA7A2B9B0AE09BA50054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = ( - LUA_USE_MACOSX, - "$(value)", - ); - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; - OBJROOT = "$(SRCROOT)/build"; - PRODUCT_NAME = lua; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7A2B9C0AE09BA50054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7392,21 +7324,6 @@ }; name = Native; }; - AA7A2BBB0AE09D4E0054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; - OBJROOT = "$(SRCROOT)/build"; - PRODUCT_NAME = luac; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7A2BBC0AE09D4E0054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7429,13 +7346,6 @@ }; name = Native; }; - AA7A2BBF0AE09D4E0054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "all lua"; - }; - name = Universal; - }; AA7A2BC00AE09D4E0054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7459,18 +7369,6 @@ }; name = Native; }; - AA7C89830B67447E00FD9940 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_DYNAMIC_NO_PIC = YES; - GCC_MODEL_TUNING = G5; - INSTALL_PATH = /usr/local/lib; - PRODUCT_NAME = tommath; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7C89840B67447E00FD9940 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7500,21 +7398,6 @@ }; name = Native; }; - AA7C8B900B67464300FD9940 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - DEAD_CODE_STRIPPING = NO; - GCC_DYNAMIC_NO_PIC = YES; - GCC_ENABLE_CPP_RTTI = NO; - GCC_NO_COMMON_BLOCKS = YES; - INSTALL_PATH = /usr/local/lib; - KEEP_PRIVATE_EXTERNS = YES; - PRODUCT_NAME = tomcrypt; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7C8B910B67464300FD9940 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7590,36 +7473,6 @@ }; name = PerformanceDebug; }; - AAA070AC0CE7B0E2005A3060 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - FPM = ""; - "FPM[arch=i386]" = FPM_INTEL; - "FPM[arch=ppc]" = FPM_PPC; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PREPROCESSOR_DEFINITIONS = ( - "HAVE_ASSERT_H=1", - "HAVE_DLFCN_H=1", - "HAVE_ERRNO_H=1", - "HAVE_FORK=1", - "HAVE_INTTYPES_H=1", - "HAVE_LIMITS_H=1", - "HAVE_MEMORY_H=1", - "HAVE_WAITPID=1", - "SIZEOF_LONG=4", - "$(FPM)", - ); - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_SIGN_COMPARE = NO; - HEADER_SEARCH_PATHS = "$(SRCROOT)/../src/mad-0.15.1b"; - INSTALL_PATH = /usr/local/lib; - PREBINDING = NO; - PRODUCT_NAME = mad; - }; - name = Universal; - }; AAA070AD0CE7B0E2005A3060 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7675,7 +7528,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_STRICT_ALIASING = YES; GCC_UNROLL_LOOPS = YES; - GCC_VERSION = 4.0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; @@ -7698,14 +7551,11 @@ GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; - MACOSX_DEPLOYMENT_TARGET = 10.3; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; + MACOSX_DEPLOYMENT_TARGET = 10.4; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; - SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; @@ -7745,6 +7595,7 @@ ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; + MACOSX_DEPLOYMENT_TARGET = 10.4; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( "-finline-limit=300", @@ -7974,6 +7825,7 @@ ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; + MACOSX_DEPLOYMENT_TARGET = 10.4; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( "-finline-limit=300", @@ -8010,136 +7862,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_STRICT_ALIASING = YES; GCC_UNROLL_LOOPS = YES; - GCC_VERSION = 4.0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_PROTOTYPE_CONVERSION = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_VALUE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LINKER_DISPLAYS_MANGLED_NAMES = YES; - MACOSX_DEPLOYMENT_TARGET = 10.3; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; - ONLY_LINK_ESSENTIAL_SYMBOLS = YES; - PREBINDING = NO; - PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; - SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; - SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk; - SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; - STRIP_INSTALLED_PRODUCT = YES; - STRIP_STYLE = "non-global"; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../src/jsoncpp/include"; - }; - name = Native; - }; - AAE44A2B0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_OPTIMIZATION_LEVEL = 3; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_PARAMETER = NO; - GCC_WARN_UNUSED_VALUE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LIBRARY_STYLE = Bundle; - MACOSX_DEPLOYMENT_TARGET = 10.2; - PRODUCT_NAME = version; - ZERO_LINK = NO; - }; - name = Universal; - }; - AAE44A2C0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; - FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; - GCC_ENABLE_OBJC_EXCEPTIONS = NO; - GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - HEADER_SEARCH_PATHS = ( - "$(SRCROOT)/../src", - "$(SRCROOT)/../src/ffmpeg/include", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", - ); - INFOPLIST_FILE = "Info-StepMania.plist"; - INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; - INFOPLIST_PREPROCESS = YES; - INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; - LIBRARY_SEARCH_PATHS = ( - "$(SRCROOT)/build/$(CONFIGURATION)", - "$(SRCROOT)/Libraries", - "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", - ); - LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; - LINKER_DISPLAYS_MANGLED_NAMES = NO; - OBJROOT = "$(SRCROOT)/build"; - OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", - "-fconstant-cfstrings", - "-fsingle-precision-constant", - "-fno-exceptions", - "-falign-loops=16", - ); - PRODUCT_NAME = "$(value)"; - SYMROOT = "$(SRCROOT)/.."; - WRAPPER_EXTENSION = app; - }; - name = Universal; - }; - AAE44A2D0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)"; - ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386"; - BUILD_VARIANTS = normal; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_ALTIVEC_EXTENSIONS = YES; - GCC_DEBUGGING_SYMBOLS = full; - GCC_DYNAMIC_NO_PIC = YES; - GCC_ENABLE_CPP_EXCEPTIONS = NO; - GCC_ENABLE_SYMBOL_SEPARATION = NO; - GCC_FAST_MATH = NO; - GCC_FAST_OBJC_DISPATCH = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_INLINES_ARE_PRIVATE_EXTERN = YES; - GCC_MODEL_TUNING = G5; - GCC_OPTIMIZATION_LEVEL = 3; - GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_STRICT_ALIASING = YES; - GCC_UNROLL_LOOPS = YES; - GCC_VERSION = 4.0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; @@ -8163,20 +7886,16 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.4; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk"; SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; - SDKROOT_ppc = /Developer/SDKs/MacOSX10.4u.sdk; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../src/jsoncpp/include"; }; - name = Universal; + name = Native; }; AAE781800AC7E3BF00AEFC64 /* Native */ = { isa = XCBuildConfiguration; @@ -8198,26 +7917,6 @@ }; name = Native; }; - AAE781810AC7E3BF00AEFC64 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_DEBUGGING_SYMBOLS = full; - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(value)", - LUA_USE_MACOSX, - ); - INSTALL_PATH = /usr/local/lib; - OBJROOT = "$(SRCROOT)/build"; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = "lua-5.1"; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AAE781820AC7E3BF00AEFC64 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8246,7 +7945,6 @@ buildConfigurations = ( AA40D52809A08D650068C0D5 /* Native */, AABF4DBD0CD37960005A3060 /* PerformanceDebug */, - AA40D52909A08D650068C0D5 /* Universal */, AA40D52A09A08D660068C0D5 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8257,7 +7955,6 @@ buildConfigurations = ( AA7A2B9A0AE09BA50054C5BA /* Native */, AABF4DBF0CD37960005A3060 /* PerformanceDebug */, - AA7A2B9B0AE09BA50054C5BA /* Universal */, AA7A2B9C0AE09BA50054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8268,7 +7965,6 @@ buildConfigurations = ( AA7A2BBA0AE09D4E0054C5BA /* Native */, AABF4DC00CD37960005A3060 /* PerformanceDebug */, - AA7A2BBB0AE09D4E0054C5BA /* Universal */, AA7A2BBC0AE09D4E0054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8279,7 +7975,6 @@ buildConfigurations = ( AA7A2BBE0AE09D4E0054C5BA /* Native */, AABF4DC10CD37960005A3060 /* PerformanceDebug */, - AA7A2BBF0AE09D4E0054C5BA /* Universal */, AA7A2BC00AE09D4E0054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8290,7 +7985,6 @@ buildConfigurations = ( AA7C89820B67447E00FD9940 /* Native */, AABF4DC20CD37960005A3060 /* PerformanceDebug */, - AA7C89830B67447E00FD9940 /* Universal */, AA7C89840B67447E00FD9940 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8301,7 +7995,6 @@ buildConfigurations = ( AA7C8B8F0B67464300FD9940 /* Native */, AABF4DC30CD37960005A3060 /* PerformanceDebug */, - AA7C8B900B67464300FD9940 /* Universal */, AA7C8B910B67464300FD9940 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8312,7 +8005,6 @@ buildConfigurations = ( AAA070AA0CE7B0E2005A3060 /* Native */, AAA070AB0CE7B0E2005A3060 /* PerformanceDebug */, - AAA070AC0CE7B0E2005A3060 /* Universal */, AAA070AD0CE7B0E2005A3060 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8323,7 +8015,6 @@ buildConfigurations = ( AAC8450D0856A19700A9FEAB /* Native */, AABF4DBC0CD37960005A3060 /* PerformanceDebug */, - AAE44A2B0965707500B025E5 /* Universal */, AA0AA8FE0963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8334,18 +8025,16 @@ buildConfigurations = ( AAC845110856A19700A9FEAB /* Native */, AABF4DBB0CD37960005A3060 /* PerformanceDebug */, - AAE44A2C0965707500B025E5 /* Universal */, AA0AA8FF0963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Native; }; - AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */ = { + AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania_xcode4" */ = { isa = XCConfigurationList; buildConfigurations = ( AAC845150856A19700A9FEAB /* Native */, AABF4DBA0CD37960005A3060 /* PerformanceDebug */, - AAE44A2D0965707500B025E5 /* Universal */, AA0AA9000963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8356,7 +8045,6 @@ buildConfigurations = ( AAE781800AC7E3BF00AEFC64 /* Native */, AABF4DBE0CD37960005A3060 /* PerformanceDebug */, - AAE781810AC7E3BF00AEFC64 /* Universal */, AAE781820AC7E3BF00AEFC64 /* Debug */, ); defaultConfigurationIsVisible = 0; From bd29092194df4898a4d7c3a0c3130c301cfcc42b Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 6 May 2011 00:09:16 -0400 Subject: [PATCH 003/106] [Xcode4] Force Leopard for now, comment fix. --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 6 +++--- src/ScreenPrompt.cpp | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 644273d718..d33b392475 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7163,7 +7163,7 @@ GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; - MACOSX_DEPLOYMENT_TARGET = 10.4; + MACOSX_DEPLOYMENT_TARGET = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; @@ -7551,7 +7551,7 @@ GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; - MACOSX_DEPLOYMENT_TARGET = 10.4; + MACOSX_DEPLOYMENT_TARGET = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; @@ -7885,7 +7885,7 @@ GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; - MACOSX_DEPLOYMENT_TARGET = 10.4; + MACOSX_DEPLOYMENT_TARGET = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; diff --git a/src/ScreenPrompt.cpp b/src/ScreenPrompt.cpp index 15f5455d3c..bc617679c1 100644 --- a/src/ScreenPrompt.cpp +++ b/src/ScreenPrompt.cpp @@ -251,8 +251,9 @@ void ScreenPrompt::TweenOffScreen() // lua start /* #include "LuaBinding.h" - -/** @brief Allow Lua to have access to the ScreenPrompt. + + // use proper doxygen when lua is enabled. + @brief Allow Lua to have access to the ScreenPrompt. class LunaScreenPrompt: public Luna { public: From cd9bf5383698de3b151e89c5db667e159b914dbd Mon Sep 17 00:00:00 2001 From: Thai Pangsakulyanont Date: Fri, 6 May 2011 13:57:21 +0700 Subject: [PATCH 004/106] [Xcode4] make tomcrypt build --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index d33b392475..93ea5f8550 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7391,6 +7391,7 @@ GCC_DYNAMIC_NO_PIC = YES; GCC_ENABLE_CPP_RTTI = NO; GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = LTC_NO_ROLC; INSTALL_PATH = /usr/local/lib; KEEP_PRIVATE_EXTERNS = YES; PRODUCT_NAME = tomcrypt; @@ -7406,6 +7407,10 @@ GCC_DYNAMIC_NO_PIC = YES; GCC_ENABLE_CPP_RTTI = NO; GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + LTC_NO_ROLC, + ); INSTALL_PATH = /usr/local/lib; KEEP_PRIVATE_EXTERNS = YES; PRODUCT_NAME = tomcrypt; @@ -7765,6 +7770,7 @@ GCC_DYNAMIC_NO_PIC = YES; GCC_ENABLE_CPP_RTTI = NO; GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = LTC_NO_ROLC; INSTALL_PATH = /usr/local/lib; KEEP_PRIVATE_EXTERNS = YES; PRODUCT_NAME = tomcrypt; From ae9aa82d601a1d85e5c7b8dd7a2f360e1fae7644 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 6 May 2011 13:51:45 -0400 Subject: [PATCH 005/106] [Xcode4] LowLevelWindow behaves. Well...with clang anyway. That's the compiler Apple wishes to go with, so may as well support it. Glew is the only thing left it looks like. --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 6 +++--- src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 93ea5f8550..32448ba42b 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7167,7 +7167,7 @@ ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; - SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.5.sdk; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = NO; STRIP_STYLE = "non-global"; @@ -7560,7 +7560,7 @@ ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; - SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.5.sdk; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; @@ -7895,7 +7895,7 @@ ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; - SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.5.sdk; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; diff --git a/src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h b/src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h index 499fd4d295..dd57ad7199 100644 --- a/src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h +++ b/src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h @@ -8,7 +8,11 @@ typedef const struct __CFDictionary *CFDictionaryRef; /* XXX: This was changed to a uint32_t later and its header file cannot be included * since Style conflicts. Ugh. */ +#if __APPLE_CC__ < 5621 typedef struct _CGDirectDisplayID *CGDirectDisplayID; +#else +typedef uint32_t *CGDirectDisplayID; +#endif class LowLevelWindow_MacOSX : public LowLevelWindow { From 5b0532375c74d9f229c31f8ef7e317758217b2a4 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 6 May 2011 17:33:06 -0400 Subject: [PATCH 006/106] [Xcode4] Extern header paths. --- .../project.pbxproj | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 32448ba42b..b99d7eb06a 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -25,6 +25,7 @@ 1215D7A208C6559A00B87D8B /* ScreenGameplayNormal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1215D7A008C6559A00B87D8B /* ScreenGameplayNormal.cpp */; }; 2B30D6821315EA7E00044B68 /* MouseDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */; }; 2B30D6831315EA7E00044B68 /* MouseDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B30D6811315EA7E00044B68 /* MouseDevice.h */; }; + 2B69675513749F3C000A63A2 /* glew.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B69675413749F3C000A63A2 /* glew.h */; }; 2B76698B132FF71500586512 /* NotesLoaderSMA.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B766989132FF71500586512 /* NotesLoaderSMA.h */; }; 2B76698C132FF71500586512 /* NotesLoaderSMA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B76698A132FF71500586512 /* NotesLoaderSMA.cpp */; }; 2BA7925E1304F20D002BD8E1 /* NotesLoaderSSC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA7925A1304F20D002BD8E1 /* NotesLoaderSSC.cpp */; }; @@ -1776,6 +1777,7 @@ 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MouseDevice.cpp; sourceTree = ""; }; 2B30D6811315EA7E00044B68 /* MouseDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MouseDevice.h; sourceTree = ""; }; + 2B69675413749F3C000A63A2 /* glew.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = glew.h; path = include/GL/glew.h; sourceTree = ""; }; 2B766989132FF71500586512 /* NotesLoaderSMA.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NotesLoaderSMA.h; path = ../src/NotesLoaderSMA.h; sourceTree = SOURCE_ROOT; }; 2B76698A132FF71500586512 /* NotesLoaderSMA.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderSMA.cpp; path = ../src/NotesLoaderSMA.cpp; sourceTree = SOURCE_ROOT; }; 2BA7925A1304F20D002BD8E1 /* NotesLoaderSSC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderSSC.cpp; path = ../src/NotesLoaderSSC.cpp; sourceTree = SOURCE_ROOT; }; @@ -4922,6 +4924,7 @@ EE879B8E132E06C50078FDDC /* glew-1.5.8 */ = { isa = PBXGroup; children = ( + 2B69675413749F3C000A63A2 /* glew.h */, EE879BAA132E06C50078FDDC /* glew.c */, ); name = "glew-1.5.8"; @@ -4967,6 +4970,7 @@ EE879B63132DEE720078FDDC /* RageDisplay_Legacy.h in Headers */, 2B76698B132FF71500586512 /* NotesLoaderSMA.h in Headers */, 2BD06FEE137242680018CB9F /* json_batchallocator.h in Headers */, + 2B69675513749F3C000A63A2 /* glew.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -7086,9 +7090,9 @@ HEADER_SEARCH_PATHS = ( "$(SRCROOT)/../src", "$(SRCROOT)/../src/ffmpeg/include", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", + "$(SRCROOT)/../extern/vorbis", + "$(SRCROOT)/../extern/libjpeg", + "$(SRCROOT)/../extern/libpng/include", ); INFOPLIST_FILE = "Info-StepMania.plist"; INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; @@ -7097,7 +7101,7 @@ LIBRARY_SEARCH_PATHS = ( "$(SRCROOT)/build/$(CONFIGURATION)", "$(SRCROOT)/Libraries", - "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; @@ -7585,9 +7589,9 @@ HEADER_SEARCH_PATHS = ( "$(SRCROOT)/../src", "$(SRCROOT)/../src/ffmpeg/include", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", + "$(SRCROOT)/../extern/vorbis", + "$(SRCROOT)/../extern/libjpeg", + "$(SRCROOT)/../extern/libpng/include", ); INFOPLIST_FILE = "Info-StepMania.plist"; INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; @@ -7596,7 +7600,7 @@ LIBRARY_SEARCH_PATHS = ( "$(SRCROOT)/build/$(CONFIGURATION)", "$(SRCROOT)/Libraries", - "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; @@ -7816,9 +7820,9 @@ HEADER_SEARCH_PATHS = ( "$(SRCROOT)/../src", "$(SRCROOT)/../src/ffmpeg/include", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", + "$(SRCROOT)/../extern/vorbis", + "$(SRCROOT)/../extern/libjpeg", + "$(SRCROOT)/../extern/libpng/include", ); INFOPLIST_FILE = "Info-StepMania.plist"; INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; @@ -7827,7 +7831,7 @@ LIBRARY_SEARCH_PATHS = ( "$(SRCROOT)/build/$(CONFIGURATION)", "$(SRCROOT)/Libraries", - "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; From e57b81a19bf7e34ecd529dba6a35cc45c668b5e0 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 6 May 2011 17:35:43 -0400 Subject: [PATCH 007/106] [Xcode4] I thought I forced Leopard or higher. --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index b99d7eb06a..40cd5a5449 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7105,7 +7105,7 @@ ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; - MACOSX_DEPLOYMENT_TARGET = 10.4; + MACOSX_DEPLOYMENT_TARGET = 10.5; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( "-finline-limit=300", @@ -7604,7 +7604,7 @@ ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; - MACOSX_DEPLOYMENT_TARGET = 10.4; + MACOSX_DEPLOYMENT_TARGET = 10.5; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( "-finline-limit=300", @@ -7835,7 +7835,7 @@ ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; - MACOSX_DEPLOYMENT_TARGET = 10.4; + MACOSX_DEPLOYMENT_TARGET = 10.5; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( "-finline-limit=300", From 88d5306794922a316b3f5d743f8f6977b2cf3e8b Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sat, 7 May 2011 01:15:57 -0400 Subject: [PATCH 008/106] [Xcode4] Forgot to remove *. --- src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h b/src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h index dd57ad7199..cbd1896373 100644 --- a/src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h +++ b/src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h @@ -11,7 +11,7 @@ typedef const struct __CFDictionary *CFDictionaryRef; #if __APPLE_CC__ < 5621 typedef struct _CGDirectDisplayID *CGDirectDisplayID; #else -typedef uint32_t *CGDirectDisplayID; +typedef uint32_t CGDirectDisplayID; #endif class LowLevelWindow_MacOSX : public LowLevelWindow From bab996d18d9a8312b18fd9db906ebc32303d57ad Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Mon, 6 Jun 2011 16:20:30 -0400 Subject: [PATCH 009/106] [Xcode4] Remove universal support. Again. --- .../project.pbxproj | 472 +----------------- 1 file changed, 6 insertions(+), 466 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index c7fd76247c..726a813101 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7423,50 +7423,6 @@ }; name = PerformanceDebug; }; - 2B17AB7513980FE0001AE57D /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; - GCC_WARN_ABOUT_MISSING_NEWLINE = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_ABOUT_RETURN_TYPE = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; - GCC_WARN_MISSING_PARENTHESES = NO; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = NO; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; - GCC_WARN_UNDECLARED_SELECTOR = NO; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = NO; - GCC_WARN_UNUSED_FUNCTION = NO; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_VALUE = NO; - GCC_WARN_UNUSED_VARIABLE = NO; - HEADER_SEARCH_PATHS = "../extern/libpng/**"; - INSTALL_PATH = /usr/local/lib; - OTHER_LDFLAGS = ""; - PREBINDING = NO; - PRODUCT_NAME = "png-1.5.1sm0.1"; - USER_HEADER_SEARCH_PATHS = ""; - }; - name = Universal; - }; 2B17AB7613980FE0001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7600,49 +7556,6 @@ }; name = PerformanceDebug; }; - 2B17ABC313981522001AE57D /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; - GCC_WARN_ABOUT_MISSING_NEWLINE = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_ABOUT_RETURN_TYPE = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; - GCC_WARN_MISSING_PARENTHESES = NO; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = NO; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; - GCC_WARN_UNDECLARED_SELECTOR = NO; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = NO; - GCC_WARN_UNUSED_FUNCTION = NO; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_VALUE = NO; - GCC_WARN_UNUSED_VARIABLE = NO; - HEADER_SEARCH_PATHS = "../extern/glew-1.5.8/include"; - INSTALL_PATH = /usr/local/lib; - OTHER_LDFLAGS = ""; - PREBINDING = NO; - PRODUCT_NAME = glew; - USER_HEADER_SEARCH_PATHS = ""; - }; - name = Universal; - }; 2B17ABC413981522001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7708,6 +7621,7 @@ GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; GCC_WARN_ABOUT_RETURN_TYPE = NO; GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_CHECK_SWITCH_STATEMENTS = NO; GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; GCC_WARN_MISSING_PARENTHESES = NO; @@ -7749,6 +7663,7 @@ GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; GCC_WARN_ABOUT_RETURN_TYPE = NO; GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_CHECK_SWITCH_STATEMENTS = NO; GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; GCC_WARN_MISSING_PARENTHESES = NO; @@ -7771,47 +7686,6 @@ }; name = PerformanceDebug; }; - 2B17ABE313981757001AE57D /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = ""; - GCC_PREFIX_HEADER = ""; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; - GCC_WARN_ABOUT_MISSING_NEWLINE = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_ABOUT_RETURN_TYPE = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; - GCC_WARN_MISSING_PARENTHESES = NO; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = NO; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; - GCC_WARN_UNDECLARED_SELECTOR = NO; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = NO; - GCC_WARN_UNUSED_FUNCTION = NO; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_VALUE = NO; - GCC_WARN_UNUSED_VARIABLE = NO; - INSTALL_PATH = /usr/local/lib; - OTHER_LDFLAGS = ""; - PREBINDING = NO; - PRODUCT_NAME = pcre; - }; - name = Universal; - }; 2B17ABE413981757001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7834,6 +7708,7 @@ GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; GCC_WARN_ABOUT_RETURN_TYPE = NO; GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_CHECK_SWITCH_STATEMENTS = NO; GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; GCC_WARN_MISSING_PARENTHESES = NO; @@ -7952,7 +7827,7 @@ GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; GCC_STRICT_ALIASING = YES; GCC_UNROLL_LOOPS = YES; - GCC_VERSION = 4.0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; @@ -8040,55 +7915,6 @@ }; name = Native; }; - AA40D52909A08D650068C0D5 /* Universal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SRCROOT)/Frameworks", - "$(SYSTEM_LIBRARY_DIR)/Frameworks", - "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks", - ); - FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; - GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - NO_MP3_SUPPORT, - WITHOUT_NETWORKING, - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ( - "$(SRCROOT)/../src", - "$(SRCROOT)/Frameworks/ffmpeg.framework/Headers", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", - "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/A/Headers", - ); - INFOPLIST_FILE = "Info-StepMania.plist"; - INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; - INFOPLIST_PREPROCESS = YES; - INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ( - "$(SRCROOT)/Libraries", - "$(SRCROOT)/build/$(CONFIGURATION)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", - "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", - ); - LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; - OBJROOT = "$(SRCROOT)/build"; - OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", - "-fconstant-cfstrings", - "-fsingle-precision-constant", - "-fno-exceptions", - ); - PRODUCT_NAME = "$(value)"; - SYMROOT = "$(SRCROOT)/.."; - WRAPPER_EXTENSION = app; - }; - name = Universal; - }; AA40D52A09A08D660068C0D5 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; @@ -8159,25 +7985,6 @@ }; name = Native; }; - AA7A2B9B0AE09BA50054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = ( - LUA_USE_MACOSX, - "$(value)", - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; - OBJROOT = "$(SRCROOT)/build"; - PRODUCT_NAME = lua; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7A2B9C0AE09BA50054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8213,22 +8020,6 @@ }; name = Native; }; - AA7A2BBB0AE09D4E0054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; - OBJROOT = "$(SRCROOT)/build"; - PRODUCT_NAME = luac; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7A2BBC0AE09D4E0054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8253,14 +8044,6 @@ }; name = Native; }; - AA7A2BBF0AE09D4E0054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_VERSION = 4.2; - PRODUCT_NAME = "all lua"; - }; - name = Universal; - }; AA7A2BC00AE09D4E0054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8289,22 +8072,6 @@ }; name = Native; }; - AA7C89830B67447E00FD9940 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_DYNAMIC_NO_PIC = YES; - GCC_MODEL_TUNING = G5; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - INSTALL_PATH = /usr/local/lib; - PRODUCT_NAME = tommath; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7C89840B67447E00FD9940 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8341,24 +8108,6 @@ }; name = Native; }; - AA7C8B900B67464300FD9940 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - DEAD_CODE_STRIPPING = NO; - GCC_DYNAMIC_NO_PIC = YES; - GCC_ENABLE_CPP_RTTI = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - INSTALL_PATH = /usr/local/lib; - KEEP_PRIVATE_EXTERNS = YES; - PRODUCT_NAME = tomcrypt; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7C8B910B67464300FD9940 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8451,43 +8200,6 @@ }; name = PerformanceDebug; }; - AAA070AC0CE7B0E2005A3060 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - FPM = ""; - "FPM[arch=i386]" = FPM_INTEL; - "FPM[arch=ppc]" = FPM_PPC; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PREPROCESSOR_DEFINITIONS = ( - "HAVE_ASSERT_H=1", - "HAVE_DLFCN_H=1", - "HAVE_ERRNO_H=1", - "HAVE_FORK=1", - "HAVE_INTTYPES_H=1", - "HAVE_LIMITS_H=1", - "HAVE_MEMORY_H=1", - "HAVE_WAITPID=1", - "SIZEOF_LONG=4", - "$(FPM)", - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = NO; - HEADER_SEARCH_PATHS = "$(SRCROOT)/../src/mad-0.15.1b"; - INSTALL_PATH = /usr/local/lib; - PREBINDING = NO; - PRODUCT_NAME = "mad-sm5"; - }; - name = Universal; - }; AAA070AD0CE7B0E2005A3060 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8551,7 +8263,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_STRICT_ALIASING = YES; GCC_UNROLL_LOOPS = YES; - GCC_VERSION = 4.0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; @@ -8909,7 +8621,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_STRICT_ALIASING = YES; GCC_UNROLL_LOOPS = YES; - GCC_VERSION = 4.0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; @@ -8948,138 +8660,6 @@ }; name = Native; }; - AAE44A2B0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_OPTIMIZATION_LEVEL = 3; - GCC_VERSION = 4.2; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_PARAMETER = NO; - GCC_WARN_UNUSED_VALUE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LIBRARY_STYLE = Bundle; - MACOSX_DEPLOYMENT_TARGET = 10.5; - PRODUCT_NAME = version; - ZERO_LINK = NO; - }; - name = Universal; - }; - AAE44A2C0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; - FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; - GCC_ENABLE_OBJC_EXCEPTIONS = NO; - GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ( - "$(SRCROOT)/../src", - "$(SRCROOT)/../src/ffmpeg/include", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", - ); - INFOPLIST_FILE = "Info-StepMania.plist"; - INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; - INFOPLIST_PREPROCESS = YES; - INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; - LIBRARY_SEARCH_PATHS = ( - "$(SRCROOT)/build/$(CONFIGURATION)", - "$(SRCROOT)/Libraries", - "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", - ); - LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; - LINKER_DISPLAYS_MANGLED_NAMES = NO; - OBJROOT = "$(SRCROOT)/build"; - OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", - "-fconstant-cfstrings", - "-fsingle-precision-constant", - "-fno-exceptions", - "-falign-loops=16", - ); - PRODUCT_NAME = "$(value)"; - SYMROOT = "$(SRCROOT)/.."; - WRAPPER_EXTENSION = app; - }; - name = Universal; - }; - AAE44A2D0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - BUILD_VARIANTS = normal; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = "*.nib *.lproj *.framework *.gch *.xcode* (*) CVS .svn .hg .git"; - GCC_ALTIVEC_EXTENSIONS = YES; - GCC_DEBUGGING_SYMBOLS = full; - GCC_DYNAMIC_NO_PIC = YES; - GCC_ENABLE_CPP_EXCEPTIONS = NO; - GCC_ENABLE_SYMBOL_SEPARATION = NO; - GCC_FAST_MATH = NO; - GCC_FAST_OBJC_DISPATCH = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_INLINES_ARE_PRIVATE_EXTERN = YES; - GCC_MODEL_TUNING = G5; - GCC_OPTIMIZATION_LEVEL = 3; - GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_STRICT_ALIASING = YES; - GCC_UNROLL_LOOPS = YES; - GCC_VERSION = 4.0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_PROTOTYPE_CONVERSION = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_VALUE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LINKER_DISPLAYS_MANGLED_NAMES = YES; - MACOSX_DEPLOYMENT_TARGET = 10.5; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; - ONLY_LINK_ESSENTIAL_SYMBOLS = YES; - PREBINDING = NO; - PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; - SDKROOT = macosx10.5; - SDKROOT_i386 = ""; - SDKROOT_ppc = ""; - SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; - STRIP_INSTALLED_PRODUCT = YES; - STRIP_STYLE = "non-global"; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../extern/jsoncpp/include"; - }; - name = Universal; - }; AAE781800AC7E3BF00AEFC64 /* Native */ = { isa = XCBuildConfiguration; buildSettings = { @@ -9106,32 +8686,6 @@ }; name = Native; }; - AAE781810AC7E3BF00AEFC64 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_DEBUGGING_SYMBOLS = full; - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(value)", - LUA_USE_MACOSX, - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - INSTALL_PATH = /usr/local/lib; - OBJROOT = "$(SRCROOT)/build"; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = "lua-5.1"; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AAE781820AC7E3BF00AEFC64 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -9166,7 +8720,6 @@ buildConfigurations = ( 2B17AB7313980FE0001AE57D /* Native */, 2B17AB7413980FE0001AE57D /* PerformanceDebug */, - 2B17AB7513980FE0001AE57D /* Universal */, 2B17AB7613980FE0001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9177,7 +8730,6 @@ buildConfigurations = ( 2B17ABC113981522001AE57D /* Native */, 2B17ABC213981522001AE57D /* PerformanceDebug */, - 2B17ABC313981522001AE57D /* Universal */, 2B17ABC413981522001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9188,7 +8740,6 @@ buildConfigurations = ( 2B17ABE113981757001AE57D /* Native */, 2B17ABE213981757001AE57D /* PerformanceDebug */, - 2B17ABE313981757001AE57D /* Universal */, 2B17ABE413981757001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9199,7 +8750,6 @@ buildConfigurations = ( AA40D52809A08D650068C0D5 /* Native */, AABF4DBD0CD37960005A3060 /* PerformanceDebug */, - AA40D52909A08D650068C0D5 /* Universal */, AA40D52A09A08D660068C0D5 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9210,7 +8760,6 @@ buildConfigurations = ( AA7A2B9A0AE09BA50054C5BA /* Native */, AABF4DBF0CD37960005A3060 /* PerformanceDebug */, - AA7A2B9B0AE09BA50054C5BA /* Universal */, AA7A2B9C0AE09BA50054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9221,7 +8770,6 @@ buildConfigurations = ( AA7A2BBA0AE09D4E0054C5BA /* Native */, AABF4DC00CD37960005A3060 /* PerformanceDebug */, - AA7A2BBB0AE09D4E0054C5BA /* Universal */, AA7A2BBC0AE09D4E0054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9232,7 +8780,6 @@ buildConfigurations = ( AA7A2BBE0AE09D4E0054C5BA /* Native */, AABF4DC10CD37960005A3060 /* PerformanceDebug */, - AA7A2BBF0AE09D4E0054C5BA /* Universal */, AA7A2BC00AE09D4E0054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9243,7 +8790,6 @@ buildConfigurations = ( AA7C89820B67447E00FD9940 /* Native */, AABF4DC20CD37960005A3060 /* PerformanceDebug */, - AA7C89830B67447E00FD9940 /* Universal */, AA7C89840B67447E00FD9940 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9254,7 +8800,6 @@ buildConfigurations = ( AA7C8B8F0B67464300FD9940 /* Native */, AABF4DC30CD37960005A3060 /* PerformanceDebug */, - AA7C8B900B67464300FD9940 /* Universal */, AA7C8B910B67464300FD9940 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9265,7 +8810,6 @@ buildConfigurations = ( AAA070AA0CE7B0E2005A3060 /* Native */, AAA070AB0CE7B0E2005A3060 /* PerformanceDebug */, - AAA070AC0CE7B0E2005A3060 /* Universal */, AAA070AD0CE7B0E2005A3060 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9276,7 +8820,6 @@ buildConfigurations = ( AAC8450D0856A19700A9FEAB /* Native */, AABF4DBC0CD37960005A3060 /* PerformanceDebug */, - AAE44A2B0965707500B025E5 /* Universal */, AA0AA8FE0963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9287,7 +8830,6 @@ buildConfigurations = ( AAC845110856A19700A9FEAB /* Native */, AABF4DBB0CD37960005A3060 /* PerformanceDebug */, - AAE44A2C0965707500B025E5 /* Universal */, AA0AA8FF0963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9298,7 +8840,6 @@ buildConfigurations = ( AAC845150856A19700A9FEAB /* Native */, AABF4DBA0CD37960005A3060 /* PerformanceDebug */, - AAE44A2D0965707500B025E5 /* Universal */, AA0AA9000963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9309,7 +8850,6 @@ buildConfigurations = ( AAE781800AC7E3BF00AEFC64 /* Native */, AABF4DBE0CD37960005A3060 /* PerformanceDebug */, - AAE781810AC7E3BF00AEFC64 /* Universal */, AAE781820AC7E3BF00AEFC64 /* Debug */, ); defaultConfigurationIsVisible = 0; From ad63c250a71445a932c07ed93a6d36faa3ee4be7 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Mon, 6 Jun 2011 17:36:29 -0400 Subject: [PATCH 010/106] [Xcode4] LLVM Now if only we can stop this asm constraint thing... --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 726a813101..20ef00e57c 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7739,7 +7739,7 @@ GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 3; - GCC_VERSION = 4.2; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_SHADOW = NO; GCC_WARN_SIGN_COMPARE = YES; @@ -8039,7 +8039,7 @@ AA7A2BBE0AE09D4E0054C5BA /* Native */ = { isa = XCBuildConfiguration; buildSettings = { - GCC_VERSION = 4.2; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "all lua"; }; name = Native; @@ -8051,7 +8051,7 @@ GCC_DYNAMIC_NO_PIC = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = 4.2; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "all lua"; }; name = Debug; @@ -8358,7 +8358,7 @@ GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 3; - GCC_VERSION = 4.2; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_SHADOW = NO; GCC_WARN_SIGN_COMPARE = YES; @@ -8490,7 +8490,7 @@ AABF4DC10CD37960005A3060 /* PerformanceDebug */ = { isa = XCBuildConfiguration; buildSettings = { - GCC_VERSION = 4.2; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "all lua"; }; name = PerformanceDebug; @@ -8537,7 +8537,7 @@ GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 3; - GCC_VERSION = 4.2; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_SHADOW = NO; GCC_WARN_SIGN_COMPARE = YES; From a64569417e5110e55cc0b72daccfbf7ef5e6e770 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Mon, 6 Jun 2011 18:08:51 -0400 Subject: [PATCH 011/106] [Xcode] Remove ancient options. --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 20ef00e57c..900c5444ea 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7820,7 +7820,6 @@ GCC_FAST_OBJC_DISPATCH = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; - GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -7851,14 +7850,10 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; - SDKROOT_i386 = ""; - SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = NO; STRIP_STYLE = "non-global"; @@ -8257,7 +8252,6 @@ GCC_FAST_OBJC_DISPATCH = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; - GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 3; GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -8287,14 +8281,10 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; - SDKROOT_i386 = ""; - SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; @@ -8615,7 +8605,6 @@ GCC_FAST_OBJC_DISPATCH = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; - GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 3; GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -8645,14 +8634,10 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; - SDKROOT_i386 = ""; - SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; From 1d05ee6ad3ddac5d8f1f9b0833d1c5f9c58a19db Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Mon, 6 Jun 2011 18:14:03 -0400 Subject: [PATCH 012/106] [Xcode4] Clang doesn't use these warnings. --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 900c5444ea..0fae37cc54 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7790,11 +7790,8 @@ LINKER_DISPLAYS_MANGLED_NAMES = NO; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", "-fconstant-cfstrings", - "-fsingle-precision-constant", "-fno-exceptions", - "-falign-loops=16", ); PRODUCT_NAME = "$(value)"; SYMROOT = "$(SRCROOT)/.."; @@ -8327,11 +8324,8 @@ LINKER_DISPLAYS_MANGLED_NAMES = NO; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", "-fconstant-cfstrings", - "-fsingle-precision-constant", "-fno-exceptions", - "-falign-loops=16", ); PRODUCT_NAME = "$(value)"; STRIP_INSTALLED_PRODUCT = NO; @@ -8576,11 +8570,8 @@ LINKER_DISPLAYS_MANGLED_NAMES = NO; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", "-fconstant-cfstrings", - "-fsingle-precision-constant", "-fno-exceptions", - "-falign-loops=16", ); PRODUCT_NAME = "$(value)"; SYMROOT = "$(SRCROOT)/.."; From ec7e707d391ab7d964d281965c6c8f0bf0503b05 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Mon, 6 Jun 2011 18:21:31 -0400 Subject: [PATCH 013/106] [XCode4] May as well handle some warnings. We still have to figure out libtomcrypt though. --- src/arch/InputHandler/InputHandler_MacOSX_HID.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/arch/InputHandler/InputHandler_MacOSX_HID.cpp b/src/arch/InputHandler/InputHandler_MacOSX_HID.cpp index c9e1b86243..ee7072e93e 100644 --- a/src/arch/InputHandler/InputHandler_MacOSX_HID.cpp +++ b/src/arch/InputHandler/InputHandler_MacOSX_HID.cpp @@ -347,6 +347,7 @@ RString InputHandler_MacOSX_HID::GetDeviceSpecificInputString( const DeviceInput case OTHER(48): return "non US backslash"; case OTHER(49): return "application"; case OTHER(50): return "prior"; + default: break; } #undef OTHER } @@ -365,6 +366,7 @@ RString InputHandler_MacOSX_HID::GetDeviceSpecificInputString( const DeviceInput case JOY_BUTTON_9: return "P2 MID"; case JOY_BUTTON_10: return "P2 DL"; case JOY_BUTTON_11: return "P2 DR"; + default: break; } } From 8ad3a9d4dd2dca5cd3c3df01cd7dada04860cc28 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Mon, 6 Jun 2011 18:27:52 -0400 Subject: [PATCH 014/106] [Xcode4] More warnings. --- src/ScreenEdit.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index c6905545f4..5928323256 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -241,6 +241,7 @@ void ScreenEdit::InitEditMappings() m_EditMappingsDeviceInput.hold[EDIT_BUTTON_DELETE_SHIFT_PAUSES][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL); m_EditMappingsDeviceInput.hold[EDIT_BUTTON_DELETE_SHIFT_PAUSES][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL); break; + default: break; } m_EditMappingsDeviceInput.button[EDIT_BUTTON_COLUMN_0][0] = DeviceInput(DEVICE_KEYBOARD, KEY_C1); @@ -2114,6 +2115,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) GAMESTATE->m_bIsUsingStepTiming = !GAMESTATE->m_bIsUsingStepTiming; m_soundSwitchTiming.Play(); break; + default: break; } } @@ -2221,6 +2223,7 @@ void ScreenEdit::InputRecordPaused( const InputEventPlus &input, EditButton Edit case EDIT_BUTTON_RETURN_TO_EDIT: TransitionEditState( STATE_EDITING ); break; + default: break; } } @@ -2269,6 +2272,7 @@ void ScreenEdit::InputPlay( const InputEventPlus &input, EditButton EditB ) } } break; + default: break; } } @@ -2307,6 +2311,7 @@ void ScreenEdit::InputPlay( const InputEventPlus &input, EditButton EditB ) GetAppropriateTiming().m_fBeat0OffsetInSeconds += fOffsetDelta; } break; + default: break; } } } @@ -2373,6 +2378,7 @@ void ScreenEdit::TransitionEditState( EditState em ) CheckNumberOfNotesAndUndo(); break; + default: break; } } @@ -2473,6 +2479,7 @@ void ScreenEdit::TransitionEditState( EditState em ) m_NoteFieldRecord.m_iEndMarker = m_iStopPlayingAt; break; + default: break; } // Show/hide depending on edit state (em) @@ -2499,6 +2506,7 @@ void ScreenEdit::TransitionEditState( EditState em ) { case STATE_PLAYING: case STATE_RECORDING: + { const float fStartSeconds = GetAppropriateTiming().GetElapsedTimeFromBeat( GetBeat() ); LOG->Trace( "Starting playback at %f", fStartSeconds ); @@ -2509,6 +2517,8 @@ void ScreenEdit::TransitionEditState( EditState em ) m_pSoundMusic->SetProperty( "AccurateSync", true ); m_pSoundMusic->Play( &p ); break; + } + default: break; } m_EditState = em; @@ -3886,6 +3896,7 @@ void ScreenEdit::HandleSongInformationChoice( SongInformationChoice c, const vec ssprintf("%.5f", pSong->m_fSpecifiedBPMMax), 20, ScreenTextEntry::FloatValidate, ChangeMaxBPM, NULL ); break; + default: break; }; } From cd2561ef509f463ee8ea396e1331e4c7bcba0a1e Mon Sep 17 00:00:00 2001 From: Henrik Andersson Date: Wed, 15 Jun 2011 14:59:15 +0200 Subject: [PATCH 015/106] [loading window] And we are back, now with some win 7 custom features. --- .../LoadingWindow/LoadingWindow_Win32.cpp | 41 ++++++++++++++++++- src/arch/LoadingWindow/LoadingWindow_Win32.h | 3 ++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/arch/LoadingWindow/LoadingWindow_Win32.cpp b/src/arch/LoadingWindow/LoadingWindow_Win32.cpp index f152af9b2b..d77ed07ee4 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Win32.cpp +++ b/src/arch/LoadingWindow/LoadingWindow_Win32.cpp @@ -15,6 +15,7 @@ #include "ProductInfo.h" #include "LocalizedString.h" + #include "RageSurfaceUtils_Zoom.h" static HBITMAP g_hBitmap = NULL; @@ -92,6 +93,28 @@ INT_PTR CALLBACK LoadingWindow_Win32::DlgProc( HWND hWnd, UINT msg, WPARAM wPara self=(LoadingWindow_Win32 *)GetWindowLong(hWnd,DWL_USER); } + if (self && msg == self->taskbarCreatedEvent && !self->pTaskbarList) { + HRESULT hr = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&self->pTaskbarList)); + if (SUCCEEDED(hr)) { + self->pTaskbarList->HrInit(); + if (FAILED(hr)) { + self->pTaskbarList->Release(); + self->pTaskbarList = NULL; + } else { + + + if(self->m_indeterminate) { + self->pTaskbarList->SetProgressState(hWnd, TBPF_INDETERMINATE); + } else { + self->pTaskbarList->SetProgressState(hWnd, TBPF_NORMAL); + self->pTaskbarList->SetProgressValue(hWnd, self->m_progress, self->m_totalWork); + } + } + } + + + } + switch( msg ) { case WM_INITDIALOG: @@ -116,6 +139,12 @@ INT_PTR CALLBACK LoadingWindow_Win32::DlgProc( HWND hWnd, UINT msg, WPARAM wPara return FALSE; case WM_DESTROY: + + if (self->pTaskbarList) { + self->pTaskbarList->Release(); + self->pTaskbarList = NULL; + } + DeleteObject( g_hBitmap ); g_hBitmap = NULL; self->runMessageLoop=false; @@ -144,13 +173,15 @@ void LoadingWindow_Win32::SetIcon( const RageSurface *pIcon ) SetClassLong( hwnd, GCL_HICON, (LONG) m_hIcon ); } -LoadingWindow_Win32::LoadingWindow_Win32() +LoadingWindow_Win32::LoadingWindow_Win32() : pTaskbarList(NULL) { INITCOMMONCONTROLSEX cceData; cceData.dwSize=sizeof(INITCOMMONCONTROLSEX); cceData.dwICC=ICC_PROGRESS_CLASS; InitCommonControlsEx(&cceData); + taskbarCreatedEvent=RegisterWindowMessage("TaskbarButtonCreated"); + m_hIcon = NULL; runMessageLoop=true; @@ -221,6 +252,7 @@ void LoadingWindow_Win32::SetProgress(const int progress) m_progress=progress; HWND hwndItem = ::GetDlgItem( hwnd, IDC_PROGRESS ); ::SendMessage(hwndItem,PBM_SETPOS,progress,0); + pTaskbarList->SetProgressValue(hwnd, m_progress, m_totalWork); } void LoadingWindow_Win32::SetTotalWork(const int totalWork) @@ -228,6 +260,7 @@ void LoadingWindow_Win32::SetTotalWork(const int totalWork) m_totalWork=totalWork; HWND hwndItem = ::GetDlgItem( hwnd, IDC_PROGRESS ); SendMessage(hwndItem,PBM_SETRANGE32,0,totalWork); + pTaskbarList->SetProgressValue(hwnd, m_progress, m_totalWork); } void LoadingWindow_Win32::SetIndeterminate(bool indeterminate) { @@ -236,11 +269,17 @@ void LoadingWindow_Win32::SetIndeterminate(bool indeterminate) { HWND hwndItem = ::GetDlgItem( hwnd, IDC_PROGRESS ); if(indeterminate) { + if(pTaskbarList) { + pTaskbarList->SetProgressState(hwnd, TBPF_INDETERMINATE); + } SetWindowLong(hwndItem,GWL_STYLE, PBS_MARQUEE | GetWindowLong(hwndItem,GWL_STYLE)); SendMessage(hwndItem,PBM_SETMARQUEE,1,0); } else { SendMessage(hwndItem,PBM_SETMARQUEE,0,0); SetWindowLong(hwndItem,GWL_STYLE, (~PBS_MARQUEE) & GetWindowLong(hwndItem,GWL_STYLE)); + if(pTaskbarList) { + pTaskbarList->SetProgressState(hwnd, TBPF_NORMAL); + } } } diff --git a/src/arch/LoadingWindow/LoadingWindow_Win32.h b/src/arch/LoadingWindow/LoadingWindow_Win32.h index 3c45789779..f2fb7bffa8 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Win32.h +++ b/src/arch/LoadingWindow/LoadingWindow_Win32.h @@ -6,6 +6,7 @@ #include "LoadingWindow.h" #include #include "archutils/Win32/AppInstance.h" +#include "Shobjidl.h" class LoadingWindow_Win32: public LoadingWindow { @@ -27,6 +28,8 @@ private: HANDLE pumpThread; DWORD pumpThreadId; HANDLE guiReadyEvent; + UINT taskbarCreatedEvent; + ITaskbarList3 *pTaskbarList; volatile bool runMessageLoop; From 7bf7a701ea912d3b262f0a984fa84d85813e8539 Mon Sep 17 00:00:00 2001 From: Henrik Andersson Date: Fri, 1 Jul 2011 02:27:22 +0200 Subject: [PATCH 016/106] [loading window] Now it should build with old SDKs, if you change the constant. --- .../LoadingWindow/LoadingWindow_Win32.cpp | 603 +++++++++--------- src/arch/LoadingWindow/LoadingWindow_Win32.h | 8 + src/archutils/Win32/arch_setup.h | 2 +- 3 files changed, 321 insertions(+), 292 deletions(-) diff --git a/src/arch/LoadingWindow/LoadingWindow_Win32.cpp b/src/arch/LoadingWindow/LoadingWindow_Win32.cpp index d77ed07ee4..99f79fa244 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Win32.cpp +++ b/src/arch/LoadingWindow/LoadingWindow_Win32.cpp @@ -1,99 +1,100 @@ -#include "global.h" -#include "RageUtil.h" - -#include "LoadingWindow_Win32.h" -#include "RageFileManager.h" -#include "archutils/win32/WindowsResources.h" -#include "archutils/win32/WindowIcon.h" -#include "archutils/win32/ErrorStrings.h" -#include -#include "CommCtrl.h" -#include "RageSurface_Load.h" -#include "RageSurface.h" -#include "RageSurfaceUtils.h" -#include "RageLog.h" -#include "ProductInfo.h" -#include "LocalizedString.h" - - -#include "RageSurfaceUtils_Zoom.h" -static HBITMAP g_hBitmap = NULL; - -#pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") - - -/* Load a RageSurface into a GDI surface. */ -static HBITMAP LoadWin32Surface( RageSurface *&s ) -{ - RageSurfaceUtils::ConvertSurface( s, s->w, s->h, 32, 0xFF000000, 0x00FF0000, 0x0000FF00, 0 ); - - HDC hScreen = GetDC(NULL); - ASSERT_M( hScreen, werr_ssprintf(GetLastError(), "hScreen") ); - - HBITMAP bitmap = CreateCompatibleBitmap( hScreen, s->w, s->h ); - ASSERT_M( bitmap, werr_ssprintf(GetLastError(), "CreateCompatibleBitmap") ); - - HDC BitmapDC = CreateCompatibleDC( hScreen ); - SelectObject( BitmapDC, bitmap ); - - /* This is silly, but simple. We only do this once, on a small image. */ - for( int y = 0; y < s->h; ++y ) - { - unsigned const char *line = ((unsigned char *) s->pixels) + (y * s->pitch); - for( int x = 0; x < s->w; ++x ) - { - unsigned const char *data = line + (x*s->format->BytesPerPixel); - - SetPixelV( BitmapDC, x, y, RGB( data[3], data[2], data[1] ) ); - } - } - - SelectObject( BitmapDC, NULL ); - DeleteObject( BitmapDC ); - - ReleaseDC( NULL, hScreen ); - - return bitmap; -} - -static HBITMAP LoadWin32Surface( RString sFile, HWND hWnd ) -{ - RString error; - RageSurface *pSurface = RageSurfaceUtils::LoadFile( sFile, error ); - if( pSurface == NULL ) - return NULL; - - /* Resize the splash image to fit the dialog. Stretch to fit horizontally, - * maintaining aspect ratio. */ - { - RECT r; - GetClientRect( hWnd, &r ); - - int iWidth = r.right; - float fRatio = (float) iWidth / pSurface->w; - int iHeight = lrintf( pSurface->h * fRatio ); - - RageSurfaceUtils::Zoom( pSurface, iWidth, iHeight ); - } - - HBITMAP ret = LoadWin32Surface( pSurface ); - delete pSurface; - return ret; -} - -INT_PTR CALLBACK LoadingWindow_Win32::DlgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) -{ - - LoadingWindow_Win32 *self; - - if(msg==WM_INITDIALOG) { - self=(LoadingWindow_Win32 *)lParam; - SetWindowLong(hWnd,DWL_USER,(LONG)self); - } else { - self=(LoadingWindow_Win32 *)GetWindowLong(hWnd,DWL_USER); - } - - if (self && msg == self->taskbarCreatedEvent && !self->pTaskbarList) { +#include "global.h" +#include "RageUtil.h" + +#include "LoadingWindow_Win32.h" +#include "RageFileManager.h" +#include "archutils/win32/WindowsResources.h" +#include "archutils/win32/WindowIcon.h" +#include "archutils/win32/ErrorStrings.h" +#include +#include "CommCtrl.h" +#include "RageSurface_Load.h" +#include "RageSurface.h" +#include "RageSurfaceUtils.h" +#include "RageLog.h" +#include "ProductInfo.h" +#include "LocalizedString.h" + + +#include "RageSurfaceUtils_Zoom.h" +static HBITMAP g_hBitmap = NULL; + +#pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") + + +/* Load a RageSurface into a GDI surface. */ +static HBITMAP LoadWin32Surface( RageSurface *&s ) +{ + RageSurfaceUtils::ConvertSurface( s, s->w, s->h, 32, 0xFF000000, 0x00FF0000, 0x0000FF00, 0 ); + + HDC hScreen = GetDC(NULL); + ASSERT_M( hScreen, werr_ssprintf(GetLastError(), "hScreen") ); + + HBITMAP bitmap = CreateCompatibleBitmap( hScreen, s->w, s->h ); + ASSERT_M( bitmap, werr_ssprintf(GetLastError(), "CreateCompatibleBitmap") ); + + HDC BitmapDC = CreateCompatibleDC( hScreen ); + SelectObject( BitmapDC, bitmap ); + + /* This is silly, but simple. We only do this once, on a small image. */ + for( int y = 0; y < s->h; ++y ) + { + unsigned const char *line = ((unsigned char *) s->pixels) + (y * s->pitch); + for( int x = 0; x < s->w; ++x ) + { + unsigned const char *data = line + (x*s->format->BytesPerPixel); + + SetPixelV( BitmapDC, x, y, RGB( data[3], data[2], data[1] ) ); + } + } + + SelectObject( BitmapDC, NULL ); + DeleteObject( BitmapDC ); + + ReleaseDC( NULL, hScreen ); + + return bitmap; +} + +static HBITMAP LoadWin32Surface( RString sFile, HWND hWnd ) +{ + RString error; + RageSurface *pSurface = RageSurfaceUtils::LoadFile( sFile, error ); + if( pSurface == NULL ) + return NULL; + + /* Resize the splash image to fit the dialog. Stretch to fit horizontally, + * maintaining aspect ratio. */ + { + RECT r; + GetClientRect( hWnd, &r ); + + int iWidth = r.right; + float fRatio = (float) iWidth / pSurface->w; + int iHeight = lrintf( pSurface->h * fRatio ); + + RageSurfaceUtils::Zoom( pSurface, iWidth, iHeight ); + } + + HBITMAP ret = LoadWin32Surface( pSurface ); + delete pSurface; + return ret; +} + +INT_PTR CALLBACK LoadingWindow_Win32::DlgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) +{ + + LoadingWindow_Win32 *self; + + if(msg==WM_INITDIALOG) { + self=(LoadingWindow_Win32 *)lParam; + SetWindowLong(hWnd,DWL_USER,(LONG)self); + } else { + self=(LoadingWindow_Win32 *)GetWindowLong(hWnd,DWL_USER); + } + +#if(WINVER >= 0x0601) + if (self && msg == self->taskbarCreatedEvent && !self->pTaskbarList) { HRESULT hr = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&self->pTaskbarList)); if (SUCCEEDED(hr)) { self->pTaskbarList->HrInit(); @@ -110,201 +111,221 @@ INT_PTR CALLBACK LoadingWindow_Win32::DlgProc( HWND hWnd, UINT msg, WPARAM wPara self->pTaskbarList->SetProgressValue(hWnd, self->m_progress, self->m_totalWork); } } - } - - - } - - switch( msg ) - { - case WM_INITDIALOG: - { - vector vs; - GetDirListing( "Data/splash*.png", vs, false, true ); - if( !vs.empty() ) - g_hBitmap = LoadWin32Surface( vs[0], hWnd ); - } - if( g_hBitmap == NULL ) - g_hBitmap = LoadWin32Surface( "Data/splash.bmp", hWnd ); - SendMessage( - GetDlgItem(hWnd,IDC_SPLASH), - STM_SETIMAGE, - (WPARAM) IMAGE_BITMAP, - (LPARAM) (HANDLE) g_hBitmap ); - SetWindowTextA( hWnd, PRODUCT_ID ); - - break; - - case WM_CLOSE: - return FALSE; - - case WM_DESTROY: - + } + + + } +#endif + + switch( msg ) + { + case WM_INITDIALOG: + { + vector vs; + GetDirListing( "Data/splash*.png", vs, false, true ); + if( !vs.empty() ) + g_hBitmap = LoadWin32Surface( vs[0], hWnd ); + } + if( g_hBitmap == NULL ) + g_hBitmap = LoadWin32Surface( "Data/splash.bmp", hWnd ); + SendMessage( + GetDlgItem(hWnd,IDC_SPLASH), + STM_SETIMAGE, + (WPARAM) IMAGE_BITMAP, + (LPARAM) (HANDLE) g_hBitmap ); + SetWindowTextA( hWnd, PRODUCT_ID ); + + break; + + case WM_CLOSE: + return FALSE; + + case WM_DESTROY: + +#if(WINVER >= 0x0601) if (self->pTaskbarList) { self->pTaskbarList->Release(); self->pTaskbarList = NULL; - } - - DeleteObject( g_hBitmap ); - g_hBitmap = NULL; - self->runMessageLoop=false; - self->hwnd=NULL; - return TRUE; - break; - - case WM_APP: - DestroyWindow(hWnd); - self->runMessageLoop=false; - ExitThread(0); - return TRUE; - break; - } - - return FALSE; -} - -void LoadingWindow_Win32::SetIcon( const RageSurface *pIcon ) -{ - if( m_hIcon != NULL ) - DestroyIcon( m_hIcon ); - - m_hIcon = IconFromSurface( pIcon ); - if( m_hIcon != NULL ) - SetClassLong( hwnd, GCL_HICON, (LONG) m_hIcon ); -} - -LoadingWindow_Win32::LoadingWindow_Win32() : pTaskbarList(NULL) -{ - INITCOMMONCONTROLSEX cceData; - cceData.dwSize=sizeof(INITCOMMONCONTROLSEX); - cceData.dwICC=ICC_PROGRESS_CLASS; - InitCommonControlsEx(&cceData); - - taskbarCreatedEvent=RegisterWindowMessage("TaskbarButtonCreated"); - - m_hIcon = NULL; - - runMessageLoop=true; - - guiReadyEvent=CreateEvent(NULL,FALSE,FALSE,NULL); - - pumpThread=CreateThread(NULL, NULL, MessagePump, (void *)this, 0, &pumpThreadId); - - WaitForSingleObject(guiReadyEvent,INFINITE); - - for( unsigned i = 0; i < 3; ++i ) - text[i] = "ABC"; /* always set on first call */ - SetText( "" ); -} - -LoadingWindow_Win32::~LoadingWindow_Win32() -{ - SendMessage(hwnd,WM_APP,0,0); - //SendMessage(hwnd,WM_NULL,0,0); - WaitForSingleObject(pumpThread,INFINITE); - if(guiReadyEvent) - CloseHandle(guiReadyEvent); - if( m_hIcon != NULL ) - DestroyIcon( m_hIcon ); -} - -DWORD WINAPI LoadingWindow_Win32::MessagePump(LPVOID thisAsVoidPtr) -{ - LoadingWindow_Win32 *self=(LoadingWindow_Win32 *)thisAsVoidPtr; - - self->hwnd = CreateDialogParam( self->handle.Get(), MAKEINTRESOURCE(IDD_LOADING_DIALOG), NULL, DlgProc, (LPARAM)thisAsVoidPtr); - - SetEvent(self->guiReadyEvent); - - // Run the message loop in a separate thread to keep the gui responsive during the loading - MSG msg; - while(self->runMessageLoop && GetMessage(&msg, self->hwnd, 0, 0 ) ) - { - if(IsDialogMessage(self->hwnd,&msg)) continue; - DispatchMessage( &msg ); - } - - return msg.wParam; -} - -void LoadingWindow_Win32::SetText( RString sText ) -{ - vector asMessageLines; - split( sText, "\n", asMessageLines, false ); - while( asMessageLines.size() < 3 ) - asMessageLines.push_back( "" ); - - const int msgid[] = { IDC_STATIC_MESSAGE1, IDC_STATIC_MESSAGE2, IDC_STATIC_MESSAGE3 }; - for( unsigned i = 0; i < 3; ++i ) - { - if( text[i] == asMessageLines[i] ) - continue; - text[i] = asMessageLines[i]; - - HWND hwndItem = ::GetDlgItem( hwnd, msgid[i] ); - - ::SetWindowText( hwndItem, ConvertUTF8ToACP(asMessageLines[i]).c_str() ); - } -} - -void LoadingWindow_Win32::SetProgress(const int progress) -{ - m_progress=progress; - HWND hwndItem = ::GetDlgItem( hwnd, IDC_PROGRESS ); - ::SendMessage(hwndItem,PBM_SETPOS,progress,0); - pTaskbarList->SetProgressValue(hwnd, m_progress, m_totalWork); -} - -void LoadingWindow_Win32::SetTotalWork(const int totalWork) -{ - m_totalWork=totalWork; - HWND hwndItem = ::GetDlgItem( hwnd, IDC_PROGRESS ); - SendMessage(hwndItem,PBM_SETRANGE32,0,totalWork); - pTaskbarList->SetProgressValue(hwnd, m_progress, m_totalWork); -} - -void LoadingWindow_Win32::SetIndeterminate(bool indeterminate) { - m_indeterminate=indeterminate; - - HWND hwndItem = ::GetDlgItem( hwnd, IDC_PROGRESS ); - - if(indeterminate) { - if(pTaskbarList) { - pTaskbarList->SetProgressState(hwnd, TBPF_INDETERMINATE); - } - SetWindowLong(hwndItem,GWL_STYLE, PBS_MARQUEE | GetWindowLong(hwndItem,GWL_STYLE)); - SendMessage(hwndItem,PBM_SETMARQUEE,1,0); - } else { - SendMessage(hwndItem,PBM_SETMARQUEE,0,0); - SetWindowLong(hwndItem,GWL_STYLE, (~PBS_MARQUEE) & GetWindowLong(hwndItem,GWL_STYLE)); - if(pTaskbarList) { - pTaskbarList->SetProgressState(hwnd, TBPF_NORMAL); - } - } - -} - -/* - * (c) 2001-2004 Chris Danford, Glenn Maynard - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ + } +#endif + + DeleteObject( g_hBitmap ); + g_hBitmap = NULL; + self->runMessageLoop=false; + self->hwnd=NULL; + return TRUE; + break; + + case WM_APP: + DestroyWindow(hWnd); + self->runMessageLoop=false; + ExitThread(0); + return TRUE; + break; + } + + return FALSE; +} + +void LoadingWindow_Win32::SetIcon( const RageSurface *pIcon ) +{ + if( m_hIcon != NULL ) + DestroyIcon( m_hIcon ); + + m_hIcon = IconFromSurface( pIcon ); + if( m_hIcon != NULL ) + SetClassLong( hwnd, GCL_HICON, (LONG) m_hIcon ); +} + +LoadingWindow_Win32::LoadingWindow_Win32() +{ + + INITCOMMONCONTROLSEX cceData; + cceData.dwSize=sizeof(INITCOMMONCONTROLSEX); + cceData.dwICC=ICC_PROGRESS_CLASS; + InitCommonControlsEx(&cceData); + +#if(WINVER >= 0x0601) + pTaskbarList=NULL; + + taskbarCreatedEvent=RegisterWindowMessage("TaskbarButtonCreated"); +#endif + + m_hIcon = NULL; + + runMessageLoop=true; + + guiReadyEvent=CreateEvent(NULL,FALSE,FALSE,NULL); + + pumpThread=CreateThread(NULL, NULL, MessagePump, (void *)this, 0, &pumpThreadId); + + WaitForSingleObject(guiReadyEvent,INFINITE); + + for( unsigned i = 0; i < 3; ++i ) + text[i] = "ABC"; /* always set on first call */ + SetText( "" ); +} + +LoadingWindow_Win32::~LoadingWindow_Win32() +{ + SendMessage(hwnd,WM_APP,0,0); + //SendMessage(hwnd,WM_NULL,0,0); + WaitForSingleObject(pumpThread,INFINITE); + if(guiReadyEvent) + CloseHandle(guiReadyEvent); + if( m_hIcon != NULL ) + DestroyIcon( m_hIcon ); +} + +DWORD WINAPI LoadingWindow_Win32::MessagePump(LPVOID thisAsVoidPtr) +{ + LoadingWindow_Win32 *self=(LoadingWindow_Win32 *)thisAsVoidPtr; + + self->hwnd = CreateDialogParam( self->handle.Get(), MAKEINTRESOURCE(IDD_LOADING_DIALOG), NULL, DlgProc, (LPARAM)thisAsVoidPtr); + + SetEvent(self->guiReadyEvent); + + // Run the message loop in a separate thread to keep the gui responsive during the loading + MSG msg; + while(self->runMessageLoop && GetMessage(&msg, self->hwnd, 0, 0 ) ) + { + if(IsDialogMessage(self->hwnd,&msg)) continue; + DispatchMessage( &msg ); + } + + return msg.wParam; +} + +void LoadingWindow_Win32::SetText( RString sText ) +{ + vector asMessageLines; + split( sText, "\n", asMessageLines, false ); + while( asMessageLines.size() < 3 ) + asMessageLines.push_back( "" ); + + const int msgid[] = { IDC_STATIC_MESSAGE1, IDC_STATIC_MESSAGE2, IDC_STATIC_MESSAGE3 }; + for( unsigned i = 0; i < 3; ++i ) + { + if( text[i] == asMessageLines[i] ) + continue; + text[i] = asMessageLines[i]; + + HWND hwndItem = ::GetDlgItem( hwnd, msgid[i] ); + + ::SetWindowText( hwndItem, ConvertUTF8ToACP(asMessageLines[i]).c_str() ); + } +} + +void LoadingWindow_Win32::SetProgress(const int progress) +{ + m_progress=progress; + HWND hwndItem = ::GetDlgItem( hwnd, IDC_PROGRESS ); + ::SendMessage(hwndItem,PBM_SETPOS,progress,0); +#if(WINVER >= 0x0601) + if(pTaskbarList) { + pTaskbarList->SetProgressValue(hwnd, m_progress, m_totalWork); + } +#endif +} + +void LoadingWindow_Win32::SetTotalWork(const int totalWork) +{ + m_totalWork=totalWork; + HWND hwndItem = ::GetDlgItem( hwnd, IDC_PROGRESS ); + SendMessage(hwndItem,PBM_SETRANGE32,0,totalWork); +#if(WINVER >= 0x0601) + if(pTaskbarList) { + pTaskbarList->SetProgressValue(hwnd, m_progress, m_totalWork); + } +#endif +} + +void LoadingWindow_Win32::SetIndeterminate(bool indeterminate) { + m_indeterminate=indeterminate; + + HWND hwndItem = ::GetDlgItem( hwnd, IDC_PROGRESS ); + + if(indeterminate) { +#if(WINVER >= 0x0601) + if(pTaskbarList) { + pTaskbarList->SetProgressState(hwnd, TBPF_INDETERMINATE); + } +#endif + SetWindowLong(hwndItem,GWL_STYLE, PBS_MARQUEE | GetWindowLong(hwndItem,GWL_STYLE)); + SendMessage(hwndItem,PBM_SETMARQUEE,1,0); + } else { + SendMessage(hwndItem,PBM_SETMARQUEE,0,0); + SetWindowLong(hwndItem,GWL_STYLE, (~PBS_MARQUEE) & GetWindowLong(hwndItem,GWL_STYLE)); +#if(WINVER >= 0x0601) + if(pTaskbarList) { + pTaskbarList->SetProgressState(hwnd, TBPF_NORMAL); + } +#endif + } + +} + +/* + * (c) 2001-2004 Chris Danford, Glenn Maynard + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/src/arch/LoadingWindow/LoadingWindow_Win32.h b/src/arch/LoadingWindow/LoadingWindow_Win32.h index f2fb7bffa8..f51dc28e3a 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Win32.h +++ b/src/arch/LoadingWindow/LoadingWindow_Win32.h @@ -3,10 +3,15 @@ #ifndef LOADING_WINDOW_WIN32_H #define LOADING_WINDOW_WIN32_H +#include "global.h" + #include "LoadingWindow.h" #include #include "archutils/Win32/AppInstance.h" + +#if(WINVER >= 0x0601) #include "Shobjidl.h" +#endif class LoadingWindow_Win32: public LoadingWindow { @@ -28,8 +33,11 @@ private: HANDLE pumpThread; DWORD pumpThreadId; HANDLE guiReadyEvent; + +#if(WINVER >= 0x0601) UINT taskbarCreatedEvent; ITaskbarList3 *pTaskbarList; +#endif volatile bool runMessageLoop; diff --git a/src/archutils/Win32/arch_setup.h b/src/archutils/Win32/arch_setup.h index c403f26b4c..0b81211d7e 100644 --- a/src/archutils/Win32/arch_setup.h +++ b/src/archutils/Win32/arch_setup.h @@ -66,7 +66,7 @@ C4355: 'this' : used in base member initializer list /* Pull in NT-only definitions. Note that we support Win98 and WinME; you can * make NT calls, but be sure to fall back on 9x if they're not supported. */ -#define _WIN32_WINNT 0x0501 +#define _WIN32_WINNT 0x0601 #define _WIN32_IE 0x0400 // If this isn't defined to 0, VC fails to define things like stat and alloca. From 1ee1bd384b0d87762116f352543927b56e2c181d Mon Sep 17 00:00:00 2001 From: Henrik Andersson Date: Mon, 11 Jul 2011 14:56:44 +0200 Subject: [PATCH 017/106] [loading window] Hey look, the load can be aborted now! Also, loading messages are now in the language file. --- Themes/_fallback/Languages/en.ini | 17 ++++- src/SongManager.cpp | 8 ++- src/StepMania.cpp | 70 +++++++++++++------ .../LoadingWindow/LoadingWindow_Win32.cpp | 2 + 4 files changed, 72 insertions(+), 25 deletions(-) diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini index 505e6582ca..4c4ce22126 100644 --- a/Themes/_fallback/Languages/en.ini +++ b/Themes/_fallback/Languages/en.ini @@ -1734,7 +1734,6 @@ DoubleChallengeMeter=Double Challenge Meter [StepMania] Announcer=Announcer -Couldn't open any loading windows.=Couldn't open any loading windows. Fullscreen=Fullscreen Initializing %s...=Initializing %s... No video renderers attempted.=No video renderers attempted. @@ -1751,6 +1750,22 @@ Windowed=Windowed color=color texture=texture +[LoadingWindow] +Couldn't open any loading windows.=Couldn't open any loading windows. +Starting sound subsystem...=Starting sound subsystem... +Initializing bookkeeper...=Initializing bookkeeper... +Starting lights subsystem...=Starting lights subsystem... +Loading game type...=Loading game type... +Building song cache index...=Building song cache index... +Loading banner cache...=Loading banner cache... +Initializing memory card system...=Initializing memory card system... +Initializing character system...=Initializing character system... +Initializing profile system...=Initializing profile system... +Updating popular song list...=Updating popular song list... +Updating course rankings...=Updating course rankings... +Initializing statics manager...=Initializing statics manager... +Initializing message system...=Initializing message system... + [StepsType] dance-couple=couple dance-double=double diff --git a/src/SongManager.cpp b/src/SongManager.cpp index 9550ae3c75..59bf15fc1f 100644 --- a/src/SongManager.cpp +++ b/src/SongManager.cpp @@ -1,6 +1,7 @@ #include "global.h" #include "SongManager.h" #include "arch/LoadingWindow/LoadingWindow.h" +#include "arch/ArchHooks/ArchHooks.h" #include "AnnouncerManager.h" #include "BackgroundUtil.h" #include "BannerCache.h" @@ -253,7 +254,7 @@ void SongManager::LoadStepManiaSongDir( RString sDir ) songCount = 0; FOREACH_CONST( RString, arrayGroupDirs, s ) // foreach dir in /Songs/ { - + if(HOOKS->UserQuit()) break; RString sGroupDirName = *s; SanityCheckGroupDir(sDir+sGroupDirName); @@ -291,6 +292,7 @@ void SongManager::LoadStepManiaSongDir( RString sDir ) for( unsigned j=0; j< arraySongDirs.size(); ++j ) // for each song dir { + if(HOOKS->UserQuit()) break; RString sSongDirName = arraySongDirs[j]; // this is a song directory. Load a new song. @@ -769,6 +771,7 @@ void SongManager::InitCoursesFromDisk() vector vsCourseGroupNames; FOREACH_CONST( RString, vsCourseDirs, sDir ) { + if(HOOKS->UserQuit()) break; // Find all group directories in Courses dir GetDirListing( *sDir + "*", vsCourseGroupNames, true, true ); StripCvsAndSvn( vsCourseGroupNames ); @@ -781,6 +784,7 @@ void SongManager::InitCoursesFromDisk() FOREACH_CONST( RString, vsCourseGroupNames, sCourseGroup ) // for each dir in /Courses/ { + if(HOOKS->UserQuit()) break; // Find all CRS files in this group directory vector vsCoursePaths; GetDirListing( *sCourseGroup + "/*.crs", vsCoursePaths, false, true ); @@ -819,6 +823,7 @@ void SongManager::InitAutogenCourses() Course* pCourse; for( unsigned g=0; gUserQuit()) break; RString sGroupName = saGroupNames[g]; // Generate random courses from each group. @@ -857,6 +862,7 @@ void SongManager::InitAutogenCourses() vector aSongs; unsigned i = 0; do { + if(HOOKS->UserQuit()) break; RString sArtist = i >= apSongs.size()? RString(""): apSongs[i]->GetDisplayArtist(); RString sTranslitArtist = i >= apSongs.size()? RString(""): apSongs[i]->GetTranslitArtist(); if( i < apSongs.size() && !sCurArtist.CompareNoCase(sArtist) ) diff --git a/src/StepMania.cpp b/src/StepMania.cpp index a3d4af5c6f..9c9b4f2758 100644 --- a/src/StepMania.cpp +++ b/src/StepMania.cpp @@ -932,7 +932,20 @@ static void ApplyLogPreferences() Checkpoints::LogCheckpoints( PREFSMAN->m_bLogCheckpoints ); } -static LocalizedString COULDNT_OPEN_LOADING_WINDOW( "StepMania", "Couldn't open any loading windows." ); +static LocalizedString COULDNT_OPEN_LOADING_WINDOW( "LoadingWindow", "Couldn't open any loading windows." ); +static LocalizedString STARTING_SOUND ( "LoadingWindow", "Starting sound subsystem..."); +static LocalizedString INIT_BOOKKEEPER ( "LoadingWindow", "Initializing bookkeeper..."); +static LocalizedString START_LIGHTS ( "LoadingWindow", "Starting lights subsystem..."); +static LocalizedString LOAD_GAMETYPE ( "LoadingWindow", "Loading game type..."); +static LocalizedString BUILD_SONG_CACHE_INDEX ( "LoadingWindow", "Building song cache index..."); +static LocalizedString LOAD_BANNER_CACHE ( "LoadingWindow", "Loading banner cache..."); +static LocalizedString INIT_MEMCARD ( "LoadingWindow", "Initializing memory card system..."); +static LocalizedString INIT_CHARS ( "LoadingWindow", "Initializing character system..."); +static LocalizedString INIT_PROFILES ( "LoadingWindow", "Initializing profile system..."); +static LocalizedString UPDATE_POPULAR ( "LoadingWindow", "Updating popular song list..."); +static LocalizedString UPDATE_COURSE_RANKS ( "LoadingWindow", "Updating course rankings..."); +static LocalizedString INIT_STATICS ( "LoadingWindow", "Initializing statics manager..."); +static LocalizedString INIT_MESSAGE ( "LoadingWindow", "Initializing message system..."); int main(int argc, char* argv[]) { @@ -1059,65 +1072,76 @@ int main(int argc, char* argv[]) if( PREFSMAN->m_iSoundWriteAhead ) LOG->Info( "Sound writeahead has been overridden to %i", PREFSMAN->m_iSoundWriteAhead.Get() ); - pLoadingWindow->SetText("Starting sound subsystem..."); + pLoadingWindow->SetText(STARTING_SOUND); SOUNDMAN = new RageSoundManager; SOUNDMAN->Init(); SOUNDMAN->SetMixVolume(); SOUND = new GameSoundManager; - pLoadingWindow->SetText("Initializing bookkeeper..."); + pLoadingWindow->SetText(INIT_BOOKKEEPER); BOOKKEEPER = new Bookkeeper; - pLoadingWindow->SetText("Starting lights subsystem..."); + pLoadingWindow->SetText(START_LIGHTS); LIGHTSMAN = new LightsManager; INPUTFILTER = new InputFilter; INPUTMAPPER = new InputMapper; - pLoadingWindow->SetText("Loading game type..."); + pLoadingWindow->SetText(LOAD_GAMETYPE); StepMania::ChangeCurrentGame( GAMESTATE->GetCurrentGame() ); INPUTQUEUE = new InputQueue; - pLoadingWindow->SetText("Building song cache index..."); + pLoadingWindow->SetText(BUILD_SONG_CACHE_INDEX); SONGINDEX = new SongCacheIndex; - pLoadingWindow->SetText("Loading banner cache..."); + pLoadingWindow->SetText(LOAD_BANNER_CACHE); BANNERCACHE = new BannerCache; //BACKGROUNDCACHE = new BackgroundCache; +#define earlyBail if( ArchHooks::UserQuit() ) { \ + ShutdownGame(); \ + SAFE_DELETE( pLoadingWindow ); \ + return 0; \ + } \ + // depends on SONGINDEX: SONGMAN = new SongManager; SONGMAN->InitAll(); // this takes a long time + earlyBail CRYPTMAN = new CryptManager; // need to do this before ProfileMan if( PREFSMAN->m_bSignProfileData ) CRYPTMAN->GenerateGlobalKeys(); - pLoadingWindow->SetText("Initializing memory card system..."); + earlyBail + pLoadingWindow->SetText(INIT_MEMCARD); MEMCARDMAN = new MemoryCardManager; - pLoadingWindow->SetText("Initializing character system..."); + earlyBail + pLoadingWindow->SetText(INIT_CHARS); + earlyBail CHARMAN = new CharacterManager; - pLoadingWindow->SetText("Initializing profile system..."); + pLoadingWindow->SetText(INIT_PROFILES); + earlyBail PROFILEMAN = new ProfileManager; PROFILEMAN->Init(); // must load after SONGMAN + earlyBail UNLOCKMAN = new UnlockManager; - pLoadingWindow->SetText("Updating popular song list..."); + pLoadingWindow->SetText(UPDATE_POPULAR); + earlyBail SONGMAN->UpdatePopular(); SONGMAN->UpdatePreferredSort(); + earlyBail NSMAN = new NetworkSyncManager( pLoadingWindow ); - pLoadingWindow->SetText("Initializing message system..."); + pLoadingWindow->SetText(INIT_MESSAGE); MESSAGEMAN = new MessageManager; - pLoadingWindow->SetText("Initializing statics manager..."); + pLoadingWindow->SetText(INIT_STATICS); STATSMAN = new StatsManager; + earlyBail // Initialize which courses are ranking courses here. - pLoadingWindow->SetText("Updating cource rankings..."); + pLoadingWindow->SetText(UPDATE_COURSE_RANKS); SONGMAN->UpdateRankingCourses(); + earlyBail - SAFE_DELETE( pLoadingWindow ); // destroy this before init'ing Display - - /* If the user has tried to quit during the loading, do it before creating - * the main window. This prevents going to full screen just to quit. */ - if( ArchHooks::UserQuit() ) - { - ShutdownGame(); - return 0; - } + // destroy this before init'ing Display, for now + // we will lose the rights to be focused, but that's not too important + // when we are going fullscreen + SAFE_DELETE( pLoadingWindow ); StartDisplay(); diff --git a/src/arch/LoadingWindow/LoadingWindow_Win32.cpp b/src/arch/LoadingWindow/LoadingWindow_Win32.cpp index 99f79fa244..f628d22a65 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Win32.cpp +++ b/src/arch/LoadingWindow/LoadingWindow_Win32.cpp @@ -6,6 +6,7 @@ #include "archutils/win32/WindowsResources.h" #include "archutils/win32/WindowIcon.h" #include "archutils/win32/ErrorStrings.h" +#include "arch/ArchHooks/ArchHooks.h" #include #include "CommCtrl.h" #include "RageSurface_Load.h" @@ -138,6 +139,7 @@ INT_PTR CALLBACK LoadingWindow_Win32::DlgProc( HWND hWnd, UINT msg, WPARAM wPara break; case WM_CLOSE: + HOOKS->SetUserQuit(); return FALSE; case WM_DESTROY: From 09dc94cfe837a23facd02fc411e56966bba1c85e Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 12:54:50 -0400 Subject: [PATCH 018/106] Abstract common functionality. --- src/BackgroundUtil.cpp | 19 +++++++++++++++++++ src/BackgroundUtil.h | 5 +++++ src/NotesWriterSM.cpp | 29 ++--------------------------- src/NotesWriterSSC.cpp | 29 ++--------------------------- 4 files changed, 28 insertions(+), 54 deletions(-) diff --git a/src/BackgroundUtil.cpp b/src/BackgroundUtil.cpp index 6644d1593d..d101be23e1 100644 --- a/src/BackgroundUtil.cpp +++ b/src/BackgroundUtil.cpp @@ -68,6 +68,25 @@ RString BackgroundChange::GetTextDescription() const return s; } +RString BackgroundChange::ToString() const +{ + /* TODO: Technically we need to double-escape the filename + * (because it might contain '=') and then unescape the value + * returned by the MsdFile. */ + return ssprintf("%.3f=%s=%.3f=%d=%d=%d=%s=%s=%s=%s=%s", + this->m_fStartBeat, + SmEscape(this->m_def.m_sFile1).c_str(), + this->m_fRate, + this->m_sTransition == SBT_CrossFade, // backward compat + this->m_def.m_sEffect == SBE_StretchRewind, // backward compat + this->m_def.m_sEffect != SBE_StretchNoLoop, // backward compat + this->m_def.m_sEffect.c_str(), + this->m_def.m_sFile2.c_str(), + this->m_sTransition.c_str(), + SmEscape(RageColor::NormalizeColorString(this->m_def.m_sColor1)).c_str(), + SmEscape(RageColor::NormalizeColorString(this->m_def.m_sColor2)).c_str()); +} + const RString BACKGROUND_EFFECTS_DIR = "BackgroundEffects/"; const RString BACKGROUND_TRANSITIONS_DIR = "BackgroundTransitions/"; diff --git a/src/BackgroundUtil.h b/src/BackgroundUtil.h index 80d36b8a92..c4907b590c 100644 --- a/src/BackgroundUtil.h +++ b/src/BackgroundUtil.h @@ -64,6 +64,11 @@ struct BackgroundChange RString m_sTransition; RString GetTextDescription() const; + + /** + * @brief Get the string representation of the change. + * @return the string representation. */ + RString ToString() const; }; /** @brief Shared background-related routines. */ namespace BackgroundUtil diff --git a/src/NotesWriterSM.cpp b/src/NotesWriterSM.cpp index 05863f9af0..4be321e651 100644 --- a/src/NotesWriterSM.cpp +++ b/src/NotesWriterSM.cpp @@ -19,31 +19,6 @@ ThemeMetric USE_CREDIT ( "NotesWriterSM", "DescriptionUsesCreditField" ); -/** - * @brief Turn the BackgroundChange into a string. - * @param bgc the BackgroundChange in question. - * @return the converted string. */ -static RString BackgroundChangeToString( const BackgroundChange &bgc ) -{ - // TODO: Technically we need to double-escape the filename (because it might - // contain '=') and then unescape the value returned by the MsdFile. - RString s = ssprintf( - "%.3f=%s=%.3f=%d=%d=%d=%s=%s=%s=%s=%s", - bgc.m_fStartBeat, - SmEscape(bgc.m_def.m_sFile1).c_str(), - bgc.m_fRate, - bgc.m_sTransition == SBT_CrossFade, // backward compat - bgc.m_def.m_sEffect == SBE_StretchRewind, // backward compat - bgc.m_def.m_sEffect != SBE_StretchNoLoop, // backward compat - bgc.m_def.m_sEffect.c_str(), - bgc.m_def.m_sFile2.c_str(), - bgc.m_sTransition.c_str(), - SmEscape(RageColor::NormalizeColorString(bgc.m_def.m_sColor1)).c_str(), - SmEscape(RageColor::NormalizeColorString(bgc.m_def.m_sColor2)).c_str() - ); - return s; -} - /** * @brief Write out the common tags for .SM files. * @param f the file in question. @@ -155,7 +130,7 @@ static void WriteGlobalTags( RageFile &f, Song &out ) f.Write( ssprintf("#BGCHANGES%d:", b+1) ); FOREACH_CONST( BackgroundChange, out.GetBackgroundChanges(b), bgc ) - f.PutLine( BackgroundChangeToString(*bgc)+"," ); + f.PutLine( (*bgc).ToString() +"," ); /* If there's an animation plan at all, add a dummy "-nosongbg-" tag to indicate that * this file doesn't want a song BG entry added at the end. See SMLoader::TidyUpData. @@ -171,7 +146,7 @@ static void WriteGlobalTags( RageFile &f, Song &out ) f.Write( "#FGCHANGES:" ); FOREACH_CONST( BackgroundChange, out.GetForegroundChanges(), bgc ) { - f.PutLine( BackgroundChangeToString(*bgc)+"," ); + f.PutLine( (*bgc).ToString() +"," ); } f.PutLine( ";" ); } diff --git a/src/NotesWriterSSC.cpp b/src/NotesWriterSSC.cpp index 8d9434e10f..8ca8140231 100644 --- a/src/NotesWriterSSC.cpp +++ b/src/NotesWriterSSC.cpp @@ -16,31 +16,6 @@ #include "Song.h" #include "Steps.h" -/** - * @brief Turn the BackgroundChange into a string. - * @param bgc the BackgroundChange in question. - * @return the converted string. */ -static RString BackgroundChangeToString( const BackgroundChange &bgc ) -{ - // TODO: Technically we need to double-escape the filename (because it might contain '=') and then - // unescape the value returned by the MsdFile. - RString s = ssprintf( - "%.3f=%s=%.3f=%d=%d=%d=%s=%s=%s=%s=%s", - bgc.m_fStartBeat, - SmEscape(bgc.m_def.m_sFile1).c_str(), - bgc.m_fRate, - bgc.m_sTransition == SBT_CrossFade, // backward compat - bgc.m_def.m_sEffect == SBE_StretchRewind, // backward compat - bgc.m_def.m_sEffect != SBE_StretchNoLoop, // backward compat - bgc.m_def.m_sEffect.c_str(), - bgc.m_def.m_sFile2.c_str(), - bgc.m_sTransition.c_str(), - SmEscape(RageColor::NormalizeColorString(bgc.m_def.m_sColor1)).c_str(), - SmEscape(RageColor::NormalizeColorString(bgc.m_def.m_sColor2)).c_str() - ); - return s; -} - /** * @brief Turn a vector of lines into a single line joined by newline characters. * @param lines the list of lines to join. @@ -292,7 +267,7 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) f.Write( ssprintf("#BGCHANGES%d:", b+1) ); FOREACH_CONST( BackgroundChange, out.GetBackgroundChanges(b), bgc ) - f.PutLine( BackgroundChangeToString(*bgc)+"," ); + f.PutLine( (*bgc).ToString() +"," ); /* If there's an animation plan at all, add a dummy "-nosongbg-" tag to * indicate that this file doesn't want a song BG entry added at the end. @@ -308,7 +283,7 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) f.Write( "#FGCHANGES:" ); FOREACH_CONST( BackgroundChange, out.GetForegroundChanges(), bgc ) { - f.PutLine( BackgroundChangeToString(*bgc)+"," ); + f.PutLine( (*bgc).ToString() +"," ); } f.PutLine( ";" ); } From 3c348a8ac36da161027cb40d70cb132027abb1b1 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 13:04:36 -0400 Subject: [PATCH 019/106] Consistent function placement. This will be used for later. --- src/RageUtil.cpp | 7 +++++++ src/RageUtil.h | 1 + 2 files changed, 8 insertions(+) diff --git a/src/RageUtil.cpp b/src/RageUtil.cpp index d72a4780dd..bcfadb1720 100644 --- a/src/RageUtil.cpp +++ b/src/RageUtil.cpp @@ -1731,6 +1731,13 @@ bool StringToFloat( const RString &sString, float &fOut ) return sString.size() && *endPtr == '\0' && isfinite( fOut ); } +RString FloatToString( const float &num ) +{ + stringstream ss; + ss << num; + return ss.str(); +} + const wchar_t INVALID_CHAR = 0xFFFD; /* U+FFFD REPLACEMENT CHARACTER */ wstring RStringToWstring( const RString &s ) diff --git a/src/RageUtil.h b/src/RageUtil.h index 17f4d24f0e..e3a83e576f 100644 --- a/src/RageUtil.h +++ b/src/RageUtil.h @@ -416,6 +416,7 @@ int StringToInt( const RString &sString ); * @return the string we are after. */ RString IntToString( const int &iNum ); float StringToFloat( const RString &sString ); +RString FloatToString( const float &num ); bool StringToFloat( const RString &sString, float &fOut ); RString WStringToRString( const wstring &sString ); From 186200d3c67d890e7e6596094257d16afa9c602e Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 13:15:30 -0400 Subject: [PATCH 020/106] Prep work for #NOTES-less cache. This commit should be runnable, but I still be careful. --- src/Steps.cpp | 16 +++++++++++++++- src/Steps.h | 13 +++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Steps.cpp b/src/Steps.cpp index 5961172f93..7e9e659c4a 100644 --- a/src/Steps.cpp +++ b/src/Steps.cpp @@ -24,6 +24,11 @@ #include "NoteDataUtil.h" #include "NotesLoaderSSC.h" #include "NotesLoaderSM.h" +#include "NotesLoaderSMA.h" +#include "NotesLoaderDWI.h" +#include "NotesLoaderKSF.h" +#include "NotesLoaderBMS.h" +#include "NotesLoaderPMS.h" #include @@ -78,6 +83,11 @@ unsigned Steps::GetHash() const return m_iHash; } +bool Steps::IsNoteDataEmpty() const +{ + return this->m_sNoteDataCompressed.empty(); +} + void Steps::SetNoteData( const NoteData& noteDataNew ) { ASSERT( noteDataNew.GetNumTracks() == GAMEMAN->GetStepsTypeInfo(m_StepsType).iNumTracks ); @@ -89,7 +99,6 @@ void Steps::SetNoteData( const NoteData& noteDataNew ) m_sNoteDataCompressed = RString(); m_iHash = 0; - m_sFilename = RString(); // We can no longer read from the file because it has changed in memory. } void Steps::GetNoteData( NoteData& noteDataOut ) const @@ -250,6 +259,11 @@ void Steps::CalculateRadarValues( float fMusicLengthSeconds ) } void Steps::Decompress() const +{ + const_cast(this)->Decompress(); +} + +void Steps::Decompress() { if( m_bNoteDataIsFilled ) return; // already decompressed diff --git a/src/Steps.h b/src/Steps.h index a6a4aded2e..877fa1549d 100644 --- a/src/Steps.h +++ b/src/Steps.h @@ -49,6 +49,7 @@ public: void Compress() const; void Decompress() const; + void Decompress(); /** * @brief Determine if these steps were created by the autogenerator. * @return true if they were, false otherwise. @@ -138,6 +139,18 @@ public: void SetNoteData( const NoteData& noteDataNew ); void SetSMNoteData( const RString ¬es_comp ); void GetSMNoteData( RString ¬es_comp_out ) const; + + /** + * @brief Retrieve the NoteData from the original source. + * @return true if successful, false for failure. */ + bool GetNoteDataFromSimfile(); + + /** + * @brief Determine if we are missing any note data. + * + * This takes advantage of the fact that we usually compress our data. + * @return true if our notedata is empty, false otherwise. */ + bool IsNoteDataEmpty() const; void TidyUpData(); void CalculateRadarValues( float fMusicLengthSeconds ); From bafcea2a6b71fc4178d6cb41c2637e6ba5f4c989 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 13:27:47 -0400 Subject: [PATCH 021/106] Just about all that can be done before Loading. This next commit will be the big one it seems. --- src/Song.cpp | 203 ++++++++++++++++++++++++--------------------------- src/Song.h | 23 +++++- src/Steps.h | 5 ++ 3 files changed, 121 insertions(+), 110 deletions(-) diff --git a/src/Song.cpp b/src/Song.cpp index 5a93c27078..38d93f7f96 100644 --- a/src/Song.cpp +++ b/src/Song.cpp @@ -258,7 +258,7 @@ static set BlacklistedImages; bool Song::LoadFromSongDir( RString sDir ) { // LOG->Trace( "Song::LoadFromSongDir(%s)", sDir.c_str() ); - ASSERT( sDir != "" ); + ASSERT_M( sDir != "", "Songs can't be loaded from an empty directory!" ); // make sure there is a trailing slash at the end of sDir if( sDir.Right(1) != "/" ) @@ -321,10 +321,14 @@ bool Song::LoadFromSongDir( RString sDir ) LOG->UserLog( "Song", sDir, "has no music file either. Ignoring this song directory." ); return false; } - + // Make sure we have a future filename figured out. + vector folders; + split(sDir, "/", folders); + RString songName = folders[2] + ".ssc"; + this->m_sSongFileName = sDir + songName; // Continue on with a blank Song so that people can make adjustments using the editor. } - TidyUpData(); + TidyUpData(false, true); // save a cache file so we don't have to parse it all over again next time if( !SaveToCacheFile() ) @@ -333,8 +337,6 @@ bool Song::LoadFromSongDir( RString sDir ) FOREACH( Steps*, m_vpSteps, s ) { - (*s)->SetFilename( sCacheFilePath ); - /* Compress all Steps. During initial caching, this will remove cached * NoteData; during cached loads, this will just remove cached SMData. */ (*s)->Compress(); @@ -446,7 +448,7 @@ void FixupPath( RString &path, const RString &sSongPath ) } // Songs in BlacklistImages will never be autodetected as song images. -void Song::TidyUpData( bool bFromCache ) +void Song::TidyUpData( bool fromCache, bool duringCache ) { // We need to do this before calling any of HasMusic, HasHasCDTitle, etc. ASSERT_M( m_sSongDir.Left(3) != "../", m_sSongDir ); // meaningless @@ -543,7 +545,7 @@ void Song::TidyUpData( bool bFromCache ) /* Generate these before we autogen notes, so the new notes can inherit * their source's values. */ - ReCalculateRadarValuesAndLastSecond( bFromCache ); + ReCalculateRadarValuesAndLastSecond( fromCache, true ); Trim( m_sMainTitle ); Trim( m_sSubTitle ); @@ -779,11 +781,11 @@ void Song::TidyUpData( bool bFromCache ) * music starts. */ if( arrayPossibleMovies.size() == 1 ) this->AddBackgroundChange(BACKGROUND_LAYER_1, - BackgroundChange(0, - arrayPossibleMovies[0], - "", - 1.f, - SBE_StretchNoLoop)); + BackgroundChange(0, + arrayPossibleMovies[0], + "", + 1.f, + SBE_StretchNoLoop)); } @@ -791,64 +793,6 @@ void Song::TidyUpData( bool bFromCache ) * for edits). We should be able to use difficulty names as unique * identifiers for steps. */ SongUtil::AdjustDuplicateSteps( this ); - - { - /* Generated filename; this doesn't always point to a loadable file, - * but instead points to the file we should write changed files to, - * and will always be a .SSC. - * - * This is a little tricky. We can't always use the song title directly, - * since it might contain characters we can't store in filenames. Two - * easy options: we could manually filter out invalid characters, or we - * could use the name of the directory, which is always a valid filename - * and should always be the same as the song. The former might not catch - * everything--filename restrictions are platform-specific; we might even - * be on an 8.3 filesystem, so let's do the latter. - * - * We can't rely on searching for other data filenames; it works for DWIs, - * but not KSFs and BMSs. - * - * So, let's do this (by priority): - * 1. If there's a .SSC file, use that filename. No reason to use anything - * else; it's the filename in use. - * 2. If there's an .SM, use it with a changed extension. - * 3. If there's a .DWI, use it with a changed extension. - * 4. Otherwise, use the name of the directory, since it's definitely a valid - * filename, and should always be the title of the song (unlike KSFs). */ - m_sSongFileName = m_sSongDir; - vector asFileNames; - do - { - GetDirListing( m_sSongDir+"*.ssc", asFileNames ); - if( !asFileNames.empty() ) - { - m_sSongFileName += asFileNames[0]; - break; - } - - GetDirListing( m_sSongDir+"*.sma", asFileNames ); - if (!asFileNames.empty() ) - { - m_sSongFileName += SetExtension( asFileNames[0], "ssc" ); - break; - } - - GetDirListing( m_sSongDir+"*.sm", asFileNames ); - if( !asFileNames.empty() ) - { - m_sSongFileName += SetExtension( asFileNames[0], "ssc" ); - break; - } - - GetDirListing( m_sSongDir+"*.dwi", asFileNames ); - if( !asFileNames.empty() ) { - m_sSongFileName += SetExtension( asFileNames[0], "ssc" ); - break; - } - m_sSongFileName += Basename(m_sSongDir); - m_sSongFileName += ".ssc"; - } while(0); - } } void Song::TranslateTitles() @@ -863,9 +807,9 @@ void Song::TranslateTitles() m_sMainTitleTranslit, m_sSubTitleTranslit, m_sArtistTranslit ); } -void Song::ReCalculateRadarValuesAndLastSecond( bool bFromCache ) +void Song::ReCalculateRadarValuesAndLastSecond(bool fromCache, bool duringCache) { - if( bFromCache && this->GetFirstSecond() >= 0 && this->GetLastSecond() > 0 ) + if( fromCache && this->GetFirstSecond() >= 0 && this->GetLastSecond() > 0 ) { // this is loaded from cache, then we just have to calculate the radar values. for( unsigned i=0; iCalculateRadarValues( m_fMusicLengthSeconds ); + // Must initialize before the gotos. + NoteData tempNoteData; + pSteps->GetNoteData( tempNoteData ); + // calculate lastSecond // If it's autogen, then first/last beat will come from the parent. if( pSteps->IsAutogen() ) - continue; + goto wipe_notedata; /* Don't calculate with edits unless the song only contains an edit * chart, like those in Mungyodance 3. Otherwise, edits installed on * the machine could extend the length of the song. */ if( pSteps->IsAnEdit() && m_vpSteps.size() > 1 ) - continue; + goto wipe_notedata; // Don't set first/last beat based on lights. They often start very // early and end very late. if( pSteps->m_StepsType == StepsType_lights_cabinet ) - continue; - - NoteData tempNoteData; - pSteps->GetNoteData( tempNoteData ); + continue; // no need to wipe this. /* Many songs have stray, empty song patterns. Ignore them, so they * don't force the first beat of the whole song to 0. */ - if( tempNoteData.GetLastRow() == 0 ) - continue; - - localFirst = min(localFirst, + if( tempNoteData.GetLastRow() != 0 ) + { + localFirst = min(localFirst, pSteps->m_Timing.GetElapsedTimeFromBeat(tempNoteData.GetFirstBeat())); - localLast = max(localLast, + localLast = max(localLast, pSteps->m_Timing.GetElapsedTimeFromBeat(tempNoteData.GetLastBeat())); + } + wipe_notedata: + if (duringCache) + { + // update this when at that point. + } } this->firstSecond = localFirst; @@ -1005,11 +955,15 @@ bool Song::SaveToSMFile() bool Song::SaveToSSCFile( RString sPath, bool bSavingCache ) { - LOG->Trace( "Song::SaveToSSCFile('%s')", sPath.c_str() ); + RString path = sPath; + if (!bSavingCache) + path = SetExtension(sPath, "ssc"); + + LOG->Trace( "Song::SaveToSSCFile('%s')", path.c_str() ); // If the file exists, make a backup. - if( !bSavingCache && IsAFile(sPath) ) - FileCopy( sPath, sPath + ".old" ); + if( !bSavingCache && IsAFile(path) ) + FileCopy( path, path + ".old" ); vector vpStepsToSave; FOREACH_CONST( Steps*, m_vpSteps, s ) @@ -1022,16 +976,23 @@ bool Song::SaveToSSCFile( RString sPath, bool bSavingCache ) if( pSteps->WasLoadedFromProfile() ) continue; + if (!bSavingCache) + pSteps->SetFilename(path); vpStepsToSave.push_back( pSteps ); } + + if (bSavingCache) + { + return NotesWriterSSC::Write(path, *this, vpStepsToSave, bSavingCache); + } - if( !NotesWriterSSC::Write(sPath, *this, vpStepsToSave, bSavingCache) ) + if( !NotesWriterSSC::Write(path, *this, vpStepsToSave, bSavingCache) ) return false; - if( !bSavingCache && g_BackUpAllSongSaves.Get() ) + if( g_BackUpAllSongSaves.Get() ) { - RString sExt = GetExtension( sPath ); - RString sBackupFile = SetExtension( sPath, "" ); + RString sExt = GetExtension( path ); + RString sBackupFile = SetExtension( path, "" ); time_t cur_time; time( &cur_time ); @@ -1043,18 +1004,15 @@ bool Song::SaveToSSCFile( RString sPath, bool bSavingCache ) sBackupFile = SetExtension( sBackupFile, sExt ); sBackupFile += ssprintf( ".old" ); - if( FileCopy(sPath, sBackupFile) ) - LOG->Trace( "Backed up %s to %s", sPath.c_str(), sBackupFile.c_str() ); + if( FileCopy(path, sBackupFile) ) + LOG->Trace( "Backed up %s to %s", path.c_str(), sBackupFile.c_str() ); else - LOG->Trace( "Failed to back up %s to %s", sPath.c_str(), sBackupFile.c_str() ); + LOG->Trace( "Failed to back up %s to %s", path.c_str(), sBackupFile.c_str() ); } - if( !bSavingCache ) - { - // Mark these steps saved to disk. - FOREACH( Steps*, vpStepsToSave, s ) - (*s)->SetSavedToDisk( true ); - } + // Mark these steps saved to disk. + FOREACH( Steps*, vpStepsToSave, s ) + (*s)->SetSavedToDisk( true ); return true; } @@ -1063,13 +1021,7 @@ bool Song::SaveToCacheFile() { SONGINDEX->AddCacheIndex(m_sSongDir, GetHashForDirectory(m_sSongDir)); const RString sPath = GetCacheFilePath(); - if( !SaveToSSCFile(sPath, true) ) - return false; - - FOREACH( Steps*, m_vpSteps, pSteps ) - (*pSteps)->SetFilename( sPath ); - - return true; + return SaveToSSCFile(sPath, true); } bool Song::SaveToDWIFile() @@ -1295,6 +1247,45 @@ vector &Song::GetForegroundChanges() return *m_ForegroundChanges.Get(); } +vector Song::GetChangesToVectorString(const vector & changes) const +{ + vector ret; + FOREACH_CONST( BackgroundChange, changes, bgc ) + { + ret.push_back((*bgc).ToString()); + } + return ret; +} + +vector Song::GetBGChanges1ToVectorString() const +{ + return this->GetChangesToVectorString(this->GetBackgroundChanges(BACKGROUND_LAYER_1)); +} + +vector Song::GetBGChanges2ToVectorString() const +{ + return this->GetChangesToVectorString(this->GetBackgroundChanges(BACKGROUND_LAYER_2)); +} + +vector Song::GetFGChanges1ToVectorString() const +{ + return this->GetChangesToVectorString(this->GetForegroundChanges()); +} + +vector Song::GetInstrumentTracksToVectorString() const +{ + vector ret; + FOREACH_ENUM(InstrumentTrack, it) + { + if (this->HasInstrumentTrack(it)) + { + ret.push_back(InstrumentTrackToString(it) + + "=" + + this->m_sInstrumentTrackFile[it]); + } + } + return ret; +} RString GetSongAssetPath( RString sPath, const RString &sSongPath ) { diff --git a/src/Song.h b/src/Song.h index a75b740dcd..29a53ff942 100644 --- a/src/Song.h +++ b/src/Song.h @@ -91,14 +91,17 @@ public: // This one takes the effort to reuse Steps pointers as best as it can bool ReloadFromSongDir( RString sDir ); - /** @brief Call this after loading a song to clean up invalid data. */ - void TidyUpData( bool bFromCache = false ); + /** + * @brief Call this after loading a song to clean up invalid data. + * @param fromCache was this data loaded from the cache file? + * @param duringCache was this data loaded during the cache process? */ + void TidyUpData( bool fromCache = false, bool duringCache = false ); /** * @brief Get the new radar values, and determine the last second at the same time. * * This is called by TidyUpData, after saving the Song. */ - void ReCalculateRadarValuesAndLastSecond( bool bFromCache = false ); + void ReCalculateRadarValuesAndLastSecond(bool fromCache = false, bool duringCache = false); /** * @brief Translate any titles that aren't in english. * @@ -180,7 +183,6 @@ public: RString GetDisplaySubTitle() const; RString GetDisplayArtist() const; - // Returns the transliterated titles, if any; otherwise returns the main titles. /** * @brief Retrieve the transliterated title, or the main title if there is no translit. * @return the proper title. */ @@ -315,12 +317,20 @@ private: * * This must be sorted before gameplay. */ AutoPtrCopyOnWrite m_ForegroundChanges; + + vector GetChangesToVectorString(const vector & changes) const; public: const vector &GetBackgroundChanges( BackgroundLayer bl ) const; vector &GetBackgroundChanges( BackgroundLayer bl ); const vector &GetForegroundChanges() const; vector &GetForegroundChanges(); + vector GetBGChanges1ToVectorString() const; + vector GetBGChanges2ToVectorString() const; + vector GetFGChanges1ToVectorString() const; + + vector GetInstrumentTracksToVectorString() const; + /** * @brief The list of LyricSegments. * @@ -426,6 +436,11 @@ public: CachedObject m_CachedObject; + RString GetAttackString() const + { + return join(":", this->m_sAttackString); + } + // Lua void PushSelf( lua_State *L ); diff --git a/src/Steps.h b/src/Steps.h index 877fa1549d..f954e39d32 100644 --- a/src/Steps.h +++ b/src/Steps.h @@ -213,6 +213,11 @@ public: void GetDisplayBpms( DisplayBpms &addTo) const; + RString GetAttackString() const + { + return join(":", this->m_sAttackString); + } + private: inline const Steps *Real() const { return parent ? parent : this; } void DeAutogen( bool bCopyNoteData = true ); /* If this Steps is autogenerated, make it a real Steps. */ From 0a14687cf62999f8e144d579d2a02ad71253da91 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Sun, 17 Jul 2011 12:56:16 -0500 Subject: [PATCH 022/106] change loading window design to be more consistent on Windows --- src/archutils/Win32/WindowsResources.rc | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/archutils/Win32/WindowsResources.rc b/src/archutils/Win32/WindowsResources.rc index 91007fdd3a..a9792bbfe8 100644 --- a/src/archutils/Win32/WindowsResources.rc +++ b/src/archutils/Win32/WindowsResources.rc @@ -13,11 +13,13 @@ #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -// English (United States) resources +// English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) +#endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // @@ -47,11 +49,11 @@ EXSTYLE WS_EX_APPWINDOW CAPTION "Stepmania" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN - CTEXT "line1",IDC_STATIC_MESSAGE1,0,67,310,10,SS_NOPREFIX | SS_CENTERIMAGE - CTEXT "line2",IDC_STATIC_MESSAGE2,0,76,310,10,SS_NOPREFIX | SS_CENTERIMAGE - CTEXT "line3",IDC_STATIC_MESSAGE3,0,84,310,10,SS_NOPREFIX | SS_CENTERIMAGE + CTEXT "line1",IDC_STATIC_MESSAGE1,7,43,303,10,SS_NOPREFIX | SS_CENTERIMAGE + CTEXT "line2",IDC_STATIC_MESSAGE2,7,52,303,10,SS_NOPREFIX | SS_CENTERIMAGE + CTEXT "line3",IDC_STATIC_MESSAGE3,7,61,303,10,SS_NOPREFIX | SS_CENTERIMAGE CONTROL "",IDC_SPLASH,"Static",SS_BITMAP,0,0,310,25 - CONTROL "",IDC_PROGRESS,"msctls_progress32",0x0,7,51,298,14 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0x0,7,73,303,14 END IDD_DISASM_CRASH DIALOGEX 0, 0, 332, 114 @@ -103,7 +105,7 @@ END // #ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO +GUIDELINES DESIGNINFO BEGIN IDD_LOADING_DIALOG, DIALOG BEGIN @@ -213,7 +215,7 @@ BEGIN END END -#endif // English (United States) resources +#endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// From bd9e7fa3c440377d11b788b229d981cb1730d20e Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 16:02:41 -0400 Subject: [PATCH 023/106] Better difficulty rating for 3panel easy. --- .../Mecha-Tribe Assault.ssc | 93 ++++++++----------- 1 file changed, 37 insertions(+), 56 deletions(-) diff --git a/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc b/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc index 48af730db7..366b79ad19 100644 --- a/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc +++ b/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc @@ -17,42 +17,35 @@ #SAMPLESTART:48.018002; #SAMPLELENGTH:16.040001; #SELECTABLE:YES; -#BPMS:0.000000=180.000000 -; +#BPMS:0.000000=180.000000; #STOPS:; #DELAYS:; #WARPS:; -#TIMESIGNATURES:0.000000=4=4 -; -#TICKCOUNTS:0.000000=2 -; -#COMBOS:0.000000=1 -; -#SPEEDS:0.000000=1.000000=0.000000=0 -; -#SCROLLS:0.000000=1.000000 -; -#LABELS:0.000000=Song Start -,16.000000=Verse 1A -,32.000000=Verse 1B -,48.000000=Verse 2A -,64.000000=Verse 2B -,80.000000=Verse 3A -,96.000000=Verse 3B -,112.000000=Verse 4A -,128.000000=Verse 4B -,144.000000=Verse 5A -,160.000000=Verse 5B -,176.000000=Verse 6A -,192.000000=Verse 6B -,208.000000=Verse 7A -,224.000000=Verse 7B -,240.000000=Verse 8A -,256.000000=Verse 8B -,272.000000=Verse 9A -,288.000000=Verse 9B -,304.000000=Fin -; +#TIMESIGNATURES:0.000000=4=4; +#TICKCOUNTS:0.000000=2; +#COMBOS:0.000000=1; +#SPEEDS:0.000000=1.000000=0.000000=0h; +#SCROLLS:0.000000=1.000000; +#LABELS:0.000000=Song Start, +16.000000=Verse 1A, +32.000000=Verse 1B, +48.000000=Verse 2A, +64.000000=Verse 2B, +80.000000=Verse 3A, +96.000000=Verse 3B, +112.000000=Verse 4A, +128.000000=Verse 4B, +144.000000=Verse 5A, +160.000000=Verse 5B, +176.000000=Verse 6A, +192.000000=Verse 6B, +208.000000=Verse 7A, +224.000000=Verse 7B, +240.000000=Verse 8A, +256.000000=Verse 8B, +272.000000=Verse 9A, +288.000000=Verse 9B, +304.000000=Fin; #BGCHANGES:; #KEYSOUNDS:; #ATTACKS:; @@ -105,8 +98,7 @@ ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 0000 0000 @@ -1061,8 +1053,7 @@ M000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 0000 0000 @@ -1909,8 +1900,7 @@ M100 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 0000 0000 @@ -2581,8 +2571,7 @@ M100 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 0000 0000 @@ -3165,8 +3154,7 @@ M100 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 0000 0000 @@ -3602,8 +3590,7 @@ M00M ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 000000 000000 @@ -4553,10 +4540,7 @@ MMMMMM ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -TIME=101.194664: -LEN=7.000000: -MODS=*0.2399996928003932 Reverse, Overhead; +#ATTACKS::TIME=101.194664:LEN=7.000000:MODS=*0.2399996928003932 Reverse, Overhead; #NOTES: 00000 00000 @@ -5536,8 +5520,7 @@ M0000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 00000 00000 @@ -6458,8 +6441,7 @@ M0000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 00000 00000 @@ -7062,8 +7044,7 @@ M0000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 00000000 00000000 @@ -7462,7 +7443,7 @@ M0000 #DESCRIPTION:It's a 3 panel chart.; #CHARTSTYLE:Pad; #DIFFICULTY:Easy; -#METER:1; +#METER:2; #RADARVALUES:0.144,0.214,0.105,0.000,0.000,95.000,11.000,0.000,0.000,0.000,0.000,0.000,0.000,0.144,0.214,0.105,0.000,0.000,95.000,11.000,0.000,0.000,0.000,0.000,0.000,0.000; #CREDIT:Jason Felds; #OFFSET:-0.028000; From 48226f2027d4ce972fd0d42f1cfca34d2204e136 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 16:06:40 -0400 Subject: [PATCH 024/106] No longer store #NOTES in cache. Use the #STEPFILENAME tag to access the files as appropriate. To the betting pool fans: file cache version is 192. --- Docs/Changelog_SSCformat.txt | 4 + Docs/Changelog_sm5.txt | 7 + Docs/SimfileFormats/ssc_msd5.txt | 11 +- src/NotesLoaderBMS.cpp | 82 +++++- src/NotesLoaderBMS.h | 2 + src/NotesLoaderDWI.cpp | 487 ++++++++++++++++++------------- src/NotesLoaderDWI.h | 3 + src/NotesLoaderKSF.cpp | 146 ++++----- src/NotesLoaderKSF.h | 2 + src/NotesLoaderMidi.cpp | 2 +- src/NotesLoaderPMS.cpp | 79 ++++- src/NotesLoaderPMS.h | 2 + src/NotesLoaderSM.cpp | 30 +- src/NotesLoaderSM.h | 2 +- src/NotesLoaderSMA.cpp | 5 +- src/NotesLoaderSSC.cpp | 137 ++++++++- src/NotesLoaderSSC.h | 8 + src/NotesWriterSM.cpp | 11 +- src/NotesWriterSSC.cpp | 80 ++--- src/ScreenGameplay.cpp | 24 ++ src/Song.cpp | 6 +- src/Song.h | 6 +- src/Steps.cpp | 72 +++-- src/TimingData.cpp | 148 ++-------- src/TimingData.h | 2 + src/TimingSegments.h | 78 +++++ 26 files changed, 900 insertions(+), 536 deletions(-) diff --git a/Docs/Changelog_SSCformat.txt b/Docs/Changelog_SSCformat.txt index 721673f31d..75c9fe55ec 100644 --- a/Docs/Changelog_SSCformat.txt +++ b/Docs/Changelog_SSCformat.txt @@ -9,6 +9,10 @@ change to JSON, but it is unsure if this will be done. Implement .ssc at your own risk. ________________________________________________________________________________ +[v0.77] - Wolfman2000 +* Add the cache tag #STEPFILENAME to gain access to the proper #NOTES when + required. + [v0.76] - Wolfman2000 * Expand the #COMBOS tag to allow for Miss Combos. Anyone that is crazy enough to put in a 51 miss combo in their tags should be...oh wait: it's already diff --git a/Docs/Changelog_sm5.txt b/Docs/Changelog_sm5.txt index 7f632cfb55..6887ae8504 100644 --- a/Docs/Changelog_sm5.txt +++ b/Docs/Changelog_sm5.txt @@ -8,6 +8,13 @@ ________________________________________________________________________________ StepMania 5.0 ????????? | 20110??? -------------------------------------------------------------------------------- +2011/07/17 +---------- +* [Cache] No longer store #NOTES in the cache. This should speed things up + on the first load if there is not much to write. (General note: this was + taken from another branch, but results at that point were great.) + [Wolfman2000] + 2011/07/13 ---------- * [Difficulty] Allow ALL StepsTypes to use CustomDifficulty properly. diff --git a/Docs/SimfileFormats/ssc_msd5.txt b/Docs/SimfileFormats/ssc_msd5.txt index 07ae7177ed..b8e5a2aea3 100644 --- a/Docs/SimfileFormats/ssc_msd5.txt +++ b/Docs/SimfileFormats/ssc_msd5.txt @@ -25,15 +25,15 @@ #SAMPLELENGTH:; #DISPLAYBPM:[xxx][xxx:xxx]|[*]; #SELECTABLE:; -#LASTBEATHINT:; +#LASTSECONDHINT:; #BGCHANGES:; #FGCHANGES:; #KEYSOUNDS:; #ATTACKS:; // stored in cache -#FIRSTBEAT:; // calculated -#LASTBEAT:; // calculated +#FIRSTSECOND:; // calculated +#LASTSECOND:; // calculated #SONGFILENAME:; #MUSICBYTES:; // ignored by loader #HASMUSIC:; @@ -66,5 +66,8 @@ #ATTACKS:; #DISPLAYBPM:; -// actual step data +// only in cache files +#STEPFILENAME:; + +// actual step data (not in cache files) #NOTES:; diff --git a/src/NotesLoaderBMS.cpp b/src/NotesLoaderBMS.cpp index b8edfde57e..fdaf8ea92c 100644 --- a/src/NotesLoaderBMS.cpp +++ b/src/NotesLoaderBMS.cpp @@ -459,13 +459,16 @@ static bool SearchForKeysound( const RString &sPath, RString nDataOriginal, map< * Do a search. Don't do a wildcard search; if sData is "song.wav", * we might also have "song.png", which we shouldn't match. */ RString nData = nDataOriginal; - if( !IsAFile(out.GetSongDir()+nData) ) + RString dir = out.GetSongDir(); + if (dir.empty()) + dir = Dirname(sPath); + if( !IsAFile(dir+nData) ) { const char *exts[] = { "oga", "ogg", "wav", "mp3", NULL }; // XXX: stop duplicating these everywhere for( unsigned i = 0; exts[i] != NULL; ++i ) { RString fn = SetExtension( nData, exts[i] ); - if( IsAFile(out.GetSongDir()+fn) ) + if( IsAFile(dir+fn) ) { nData = fn; break; @@ -473,9 +476,9 @@ static bool SearchForKeysound( const RString &sPath, RString nDataOriginal, map< } } - if( !IsAFile(out.GetSongDir()+nData) ) + if( !IsAFile(dir+nData) ) { - LOG->UserLog( "Song file", out.GetSongDir(), "references key \"%s\" that can't be found", nData.c_str() ); + LOG->UserLog( "Song file", dir, "references key \"%s\" that can't be found", nData.c_str() ); return false; } @@ -1067,6 +1070,75 @@ void BMSLoader::GetApplicableFiles( const RString &sPath, vector &out ) GetDirListing( sPath + RString("*.bml"), out ); } +bool BMSLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps & out ) +{ + Song dummy; + // TODO: Simplify this copy/paste from LoadFromDir. + + vector BMSData; + BMSData.push_back(NameToData_t()); + ReadBMSFile(cachePath, BMSData.back()); + + RString commonSubstring; + GetCommonTagFromMapList( BMSData, "#title", commonSubstring ); + + Steps *copy = dummy.CreateSteps(); + + copy->SetDifficulty( Difficulty_Medium ); + RString sTag; + if( GetTagFromMap( BMSData[0], "#title", sTag ) && sTag.size() != commonSubstring.size() ) + { + sTag = sTag.substr( commonSubstring.size(), sTag.size() - commonSubstring.size() ); + sTag.MakeLower(); + + if( sTag.find('l') != sTag.npos ) + { + unsigned lPos = sTag.find('l'); + if( lPos > 2 && sTag.substr(lPos-2,4) == "solo" ) + { + copy->SetDifficulty( Difficulty_Edit ); + } + else + { + copy->SetDifficulty( Difficulty_Easy ); + } + } + else if( sTag.find('a') != sTag.npos ) + copy->SetDifficulty( Difficulty_Hard ); + else if( sTag.find('b') != sTag.npos ) + copy->SetDifficulty( Difficulty_Beginner ); + } + if( commonSubstring == "" ) + { + copy->SetDifficulty(Difficulty_Medium); + RString sTag; + if (GetTagFromMap(BMSData[0], "#title#", sTag)) + SearchForDifficulty(sTag, copy); + } + ReadGlobalTags( BMSData[0], dummy ); + if( commonSubstring.size() > 2 && commonSubstring[commonSubstring.size() - 2] == ' ' ) + { + switch( commonSubstring[commonSubstring.size() - 1] ) + { + case '[': + case '(': + case '<': + commonSubstring = commonSubstring.substr(0, commonSubstring.size() - 2); + default: + break; + } + } + map mapFilenameToKeysoundIndex; + + + const bool ok = LoadFromBMSFile( cachePath, BMSData[0], *copy, dummy, mapFilenameToKeysoundIndex ); + if( ok ) + { + out.SetNoteData(copy->GetNoteData()); + } + return ok; +} + bool BMSLoader::LoadFromDir( const RString &sDir, Song &out ) { LOG->Trace( "Song::LoadFromBMSDir(%s)", sDir.c_str() ); @@ -1171,6 +1243,7 @@ bool BMSLoader::LoadFromDir( const RString &sDir, Song &out ) iMainDataIndex = i; ReadGlobalTags( aBMSData[iMainDataIndex], out ); + out.m_sSongFileName = out.GetSongDir() + arrayBMSFileNames[iMainDataIndex]; // The brackets before the difficulty are in common substring, so remove them if it's found. if( commonSubstring.size() > 2 && commonSubstring[commonSubstring.size() - 2] == ' ' ) @@ -1203,6 +1276,7 @@ bool BMSLoader::LoadFromDir( const RString &sDir, Song &out ) if( i == static_cast(iMainDataIndex) ) out.m_SongTiming = pNewNotes->m_Timing; + pNewNotes->SetFilename(out.GetSongDir() + arrayBMSFileNames[i]); out.AddSteps( pNewNotes ); } else diff --git a/src/NotesLoaderBMS.h b/src/NotesLoaderBMS.h index caf8372d64..caf124f07b 100644 --- a/src/NotesLoaderBMS.h +++ b/src/NotesLoaderBMS.h @@ -2,11 +2,13 @@ #define NOTES_LOADER_BMS_H class Song; +class Steps; /** @brief Reads a Song from a set of .BMS files. */ namespace BMSLoader { void GetApplicableFiles( const RString &sPath, vector &out ); bool LoadFromDir( const RString &sDir, Song &out ); + bool LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ); } #endif diff --git a/src/NotesLoaderDWI.cpp b/src/NotesLoaderDWI.cpp index 9d1f2fc9b6..242108bbe3 100644 --- a/src/NotesLoaderDWI.cpp +++ b/src/NotesLoaderDWI.cpp @@ -170,6 +170,238 @@ Difficulty DwiCompatibleStringToDifficulty( const RString& sDC ) else return Difficulty_Invalid; } +static StepsType GetTypeFromMode(const RString &mode) +{ + if( mode == "SINGLE" ) + return StepsType_dance_single; + else if( mode == "DOUBLE" ) + return StepsType_dance_double; + else if( mode == "COUPLE" ) + return StepsType_dance_couple; + else if( mode == "SOLO" ) + return StepsType_dance_solo; + ASSERT_M(0, "Unrecognized DWI notes format " + mode + "!"); + return StepsType_Invalid; // just in case. +} + +static NoteData ParseNoteData(RString &step1, RString &step2, + Steps &out, const RString &path) +{ + g_mapDanceNoteToNoteDataColumn.clear(); + switch( out.m_StepsType ) + { + case StepsType_dance_single: + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_LEFT] = 0; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_DOWN] = 1; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UP] = 2; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_RIGHT] = 3; + break; + case StepsType_dance_double: + case StepsType_dance_couple: + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_LEFT] = 0; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_DOWN] = 1; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UP] = 2; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_RIGHT] = 3; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD2_LEFT] = 4; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD2_DOWN] = 5; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD2_UP] = 6; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD2_RIGHT] = 7; + break; + case StepsType_dance_solo: + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_LEFT] = 0; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UPLEFT] = 1; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_DOWN] = 2; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UP] = 3; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UPRIGHT] = 4; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_RIGHT] = 5; + break; + DEFAULT_FAIL( out.m_StepsType ); + } + + NoteData newNoteData; + newNoteData.SetNumTracks( g_mapDanceNoteToNoteDataColumn.size() ); + + for( int pad=0; pad<2; pad++ ) // foreach pad + { + RString sStepData; + switch( pad ) + { + case 0: + sStepData = step1; + break; + case 1: + if( step2 == "" ) // no data + continue; // skip + sStepData = step2; + break; + DEFAULT_FAIL( pad ); + } + + sStepData.Replace("\n", ""); + sStepData.Replace("\r", ""); + sStepData.Replace("\t", ""); + sStepData.Replace(" ", ""); + + double fCurrentBeat = 0; + double fCurrentIncrementer = 1.0/8 * BEATS_PER_MEASURE; + + for( size_t i=0; i': + fCurrentIncrementer = 1.0/8 * BEATS_PER_MEASURE; + break; + + default: // this is a note character + { + if( c == '!' ) + { + LOG->UserLog( + "Song file", + path, + "has an unexpected character: '!'." ); + continue; + } + + bool jump = false; + if( c == '<' ) + { + /* Arr. Is this a jump or a 1/192 marker? */ + if( Is192( sStepData, i ) ) + { + fCurrentIncrementer = 1.0/192 * BEATS_PER_MEASURE; + break; + } + + /* It's a jump. + * We need to keep reading notes until we hit a >. */ + jump = true; + i++; + } + + const int iIndex = BeatToNoteRow( (float)fCurrentBeat ); + i--; + do { + c = sStepData[i++]; + + if( jump && c == '>' ) + break; + + int iCol1, iCol2; + DWIcharToNoteCol( + c, + (GameController)pad, + iCol1, + iCol2, + path ); + + if( iCol1 != -1 ) + newNoteData.SetTapNote(iCol1, + iIndex, + TAP_ORIGINAL_TAP); + if( iCol2 != -1 ) + newNoteData.SetTapNote(iCol2, + iIndex, + TAP_ORIGINAL_TAP); + + if(i>=sStepData.length()) + { + break; + //we ran out of data + //while looking for the ending > mark + } + + if( sStepData[i] == '!' ) + { + i++; + const char holdChar = sStepData[i++]; + + DWIcharToNoteCol(holdChar, + (GameController)pad, + iCol1, + iCol2, + path ); + + if( iCol1 != -1 ) + newNoteData.SetTapNote(iCol1, + iIndex, + TAP_ORIGINAL_HOLD_HEAD); + if( iCol2 != -1 ) + newNoteData.SetTapNote(iCol2, + iIndex, + TAP_ORIGINAL_HOLD_HEAD); + } + } + while( jump ); + fCurrentBeat += fCurrentIncrementer; + } + break; + } + } + } + + /* Fill in iDuration. */ + for( int t=0; tUserLog("Song file", + path, + "failed to close a hold note in \"%s\" on track %i", + DifficultyToString(out.GetDifficulty()).c_str(), + t); + + newNoteData.SetTapNote( t, iHeadRow, TAP_EMPTY ); + } + } + } + + ASSERT( newNoteData.GetNumTracks() > 0 ); + return newNoteData; +} + /** * @brief Look through the notes tag to extract the data. * @param sMode the steps type. @@ -192,216 +424,17 @@ static bool LoadFromDWITokens( { CHECKPOINT_M( "DWILoader::LoadFromDWITokens()" ); - out.m_StepsType = StepsType_Invalid; + out.m_StepsType = GetTypeFromMode(sMode); - if( sMode == "SINGLE" ) out.m_StepsType = StepsType_dance_single; - else if( sMode == "DOUBLE" ) out.m_StepsType = StepsType_dance_double; - else if( sMode == "COUPLE" ) out.m_StepsType = StepsType_dance_couple; - else if( sMode == "SOLO" ) out.m_StepsType = StepsType_dance_solo; - else - { - ASSERT_M(0, "Unrecognized DWI notes format " + sMode + "!"); - out.m_StepsType = StepsType_dance_single; - } + out.SetMeter(StringToInt(sNumFeet)); - - g_mapDanceNoteToNoteDataColumn.clear(); - switch( out.m_StepsType ) - { - case StepsType_dance_single: - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_LEFT] = 0; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_DOWN] = 1; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UP] = 2; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_RIGHT] = 3; - break; - case StepsType_dance_double: - case StepsType_dance_couple: - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_LEFT] = 0; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_DOWN] = 1; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UP] = 2; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_RIGHT] = 3; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD2_LEFT] = 4; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD2_DOWN] = 5; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD2_UP] = 6; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD2_RIGHT] = 7; - break; - case StepsType_dance_solo: - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_LEFT] = 0; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UPLEFT] = 1; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_DOWN] = 2; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UP] = 3; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UPRIGHT] = 4; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_RIGHT] = 5; - break; - DEFAULT_FAIL( out.m_StepsType ); - } - - int iNumFeet = StringToInt(sNumFeet); - // out.SetDescription(sDescription); // Don't put garbage in the description. - out.SetMeter(iNumFeet); out.SetDifficulty( DwiCompatibleStringToDifficulty(sDescription) ); - - NoteData newNoteData; - newNoteData.SetNumTracks( g_mapDanceNoteToNoteDataColumn.size() ); - - for( int pad=0; pad<2; pad++ ) // foreach pad - { - RString sStepData; - switch( pad ) - { - case 0: - sStepData = sStepData1; - break; - case 1: - if( sStepData2 == "" ) // no data - continue; // skip - sStepData = sStepData2; - break; - DEFAULT_FAIL( pad ); - } - - sStepData.Replace("\n", ""); - sStepData.Replace("\r", ""); - sStepData.Replace("\t", ""); - sStepData.Replace(" ", ""); - - double fCurrentBeat = 0; - double fCurrentIncrementer = 1.0/8 * BEATS_PER_MEASURE; - - for( size_t i=0; i': - fCurrentIncrementer = 1.0/8 * BEATS_PER_MEASURE; - break; - - default: // this is a note character - { - if( c == '!' ) - { - LOG->UserLog( "Song file", sPath, "has an unexpected character: '!'." ); - continue; - } - - bool jump = false; - if( c == '<' ) - { - /* Arr. Is this a jump or a 1/192 marker? */ - if( Is192( sStepData, i ) ) - { - fCurrentIncrementer = 1.0/192 * BEATS_PER_MEASURE; - break; - } - - /* It's a jump. We need to keep reading notes until we hit a >. */ - jump = true; - i++; - } - - const int iIndex = BeatToNoteRow( (float)fCurrentBeat ); - i--; - do { - c = sStepData[i++]; - - if( jump && c == '>' ) - break; - - int iCol1, iCol2; - DWIcharToNoteCol( c, (GameController)pad, iCol1, iCol2, sPath ); - - if( iCol1 != -1 ) - newNoteData.SetTapNote(iCol1, iIndex, TAP_ORIGINAL_TAP); - if( iCol2 != -1 ) - newNoteData.SetTapNote(iCol2, iIndex, TAP_ORIGINAL_TAP); - - if(i>=sStepData.length()) { - break;//we ran out of data while looking for the ending > mark - } - - if( sStepData[i] == '!' ) - { - i++; - const char holdChar = sStepData[i++]; - - DWIcharToNoteCol( holdChar, (GameController)pad, iCol1, iCol2, sPath ); - - if( iCol1 != -1 ) - newNoteData.SetTapNote(iCol1, iIndex, TAP_ORIGINAL_HOLD_HEAD); - if( iCol2 != -1 ) - newNoteData.SetTapNote(iCol2, iIndex, TAP_ORIGINAL_HOLD_HEAD); - } - } - while( jump ); - fCurrentBeat += fCurrentIncrementer; - } - break; - } - } - } - - /* Fill in iDuration. */ - for( int t=0; tUserLog( "Song file", sPath, "failed to close a hold note in \"%s\" on track %i", - sDescription.c_str(), t ); - - newNoteData.SetTapNote( t, iHeadRow, TAP_EMPTY ); - } - } - } - - ASSERT( newNoteData.GetNumTracks() > 0 ); - - out.SetNoteData( newNoteData ); + + out.SetNoteData( ParseNoteData(sStepData1, sStepData2, out, sPath) ); out.TidyUpData(); out.SetSavedToDisk( true ); // we're loading from disk, so this is by definintion already saved - return true; } @@ -444,17 +477,55 @@ void DWILoader::GetApplicableFiles( const RString &sPath, vector &out ) GetDirListing( sPath + RString("*.dwi"), out ); } +bool DWILoader::LoadNoteDataFromSimfile( const RString &path, Steps &out ) +{ + MsdFile msd; + if( !msd.ReadFile( path, false ) ) // don't unescape + { + LOG->UserLog("Song file", + path, + "couldn't be opened: %s", + msd.GetError().c_str() ); + return false; + } + + for( unsigned i=0; i &BlacklistedImages ) { vector aFileNames; GetApplicableFiles( sPath_, aFileNames ); - + if( aFileNames.size() > 1 ) { LOG->UserLog( "Song", sPath_, "has more than one DWI file. There should be only one!" ); return false; } - + /* We should have exactly one; if we had none, we shouldn't have been called to begin with. */ ASSERT( aFileNames.size() == 1 ); const RString sPath = sPath_ + aFileNames[0]; @@ -468,6 +539,8 @@ bool DWILoader::LoadFromDir( const RString &sPath_, Song &out, set &Bla return false; } + out.m_sSongFileName = sPath; + for( unsigned i=0; i &Bla sPath ); if( pNewNotes->m_StepsType != StepsType_Invalid ) + { + pNewNotes->SetFilename( sPath ); out.AddSteps( pNewNotes ); + } else delete pNewNotes; } @@ -664,7 +740,6 @@ bool DWILoader::LoadFromDir( const RString &sPath_, Song &out, set &Bla // do nothing. We don't care about this value name } } - out.TidyUpData(); return true; } diff --git a/src/NotesLoaderDWI.h b/src/NotesLoaderDWI.h index 1aa9e729c4..c121d0dc28 100644 --- a/src/NotesLoaderDWI.h +++ b/src/NotesLoaderDWI.h @@ -6,6 +6,7 @@ #include class Song; +class Steps; /** @brief The DWILoader handles parsing the .dwi file. */ namespace DWILoader @@ -24,6 +25,8 @@ namespace DWILoader * @return its success or failure. */ bool LoadFromDir( const RString &sPath, Song &out, set &BlacklistedImages ); + + bool LoadNoteDataFromSimfile( const RString &path, Steps &out ); } #endif diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index 0e078bb7ad..fdd93670c5 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -195,28 +195,43 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, out.SetDifficulty( Difficulty_Edit ); if( !out.GetMeter() ) out.SetMeter( 25 ); } - else if( sFName.find("wild") != string::npos || sFName.find("wd") != string::npos || sFName.find("crazy+") != string::npos || sFName.find("cz+") != string::npos || sFName.find("hardcore") != string::npos ) + else if(sFName.find("wild") != string::npos || + sFName.find("wd") != string::npos || + sFName.find("crazy+") != string::npos || + sFName.find("cz+") != string::npos || + sFName.find("hardcore") != string::npos ) { out.SetDifficulty( Difficulty_Challenge ); if( !out.GetMeter() ) out.SetMeter( 20 ); } - else if( sFName.find("crazy") != string::npos || sFName.find("cz") != string::npos || sFName.find("nightmare") != string::npos || sFName.find("nm") != string::npos || sFName.find("crazydouble") != string::npos ) + else if(sFName.find("crazy") != string::npos || + sFName.find("cz") != string::npos || + sFName.find("nightmare") != string::npos || + sFName.find("nm") != string::npos || + sFName.find("crazydouble") != string::npos ) { out.SetDifficulty( Difficulty_Hard ); if( !out.GetMeter() ) out.SetMeter( 14 ); // Set the meters to the Pump scale, not DDR. } - else if( sFName.find("hard") != string::npos || sFName.find("hd") != string::npos || sFName.find("freestyle") != string::npos || sFName.find("fs") != string::npos || sFName.find("double") != string::npos ) + else if(sFName.find("hard") != string::npos || + sFName.find("hd") != string::npos || + sFName.find("freestyle") != string::npos || + sFName.find("fs") != string::npos || + sFName.find("double") != string::npos ) { out.SetDifficulty( Difficulty_Medium ); if( !out.GetMeter() ) out.SetMeter( 8 ); } - else if( sFName.find("easy") != string::npos || sFName.find("ez") != string::npos || sFName.find("normal") != string::npos ) + else if(sFName.find("easy") != string::npos || + sFName.find("ez") != string::npos || + sFName.find("normal") != string::npos ) { // I wonder if I should leave easy fall into the Beginner difficulty... -DaisuMaster out.SetDifficulty( Difficulty_Easy ); if( !out.GetMeter() ) out.SetMeter( 4 ); } - else if( sFName.find("beginner") != string::npos || sFName.find("practice") != string::npos || sFName.find("pr") != string::npos ) + else if(sFName.find("beginner") != string::npos || + sFName.find("practice") != string::npos || sFName.find("pr") != string::npos ) { out.SetDifficulty( Difficulty_Beginner ); if( !out.GetMeter() ) out.SetMeter( 4 ); @@ -230,10 +245,18 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, out.m_StepsType = StepsType_pump_single; // Check for "halfdouble" before "double". - if( sFName.find("halfdouble") != string::npos || sFName.find("half-double") != string::npos || sFName.find("h_double") != string::npos || sFName.find("hdb") != string::npos ) + if(sFName.find("halfdouble") != string::npos || + sFName.find("half-double") != string::npos || + sFName.find("h_double") != string::npos || + sFName.find("hdb") != string::npos ) out.m_StepsType = StepsType_pump_halfdouble; // Handle bDoublesChart from above as well. -aj - else if( sFName.find("double") != string::npos || sFName.find("nightmare") != string::npos || sFName.find("freestyle") != string::npos || sFName.find("db") != string::npos || sFName.find("nm") != string::npos || sFName.find("fs") != string::npos || bDoublesChart ) + else if(sFName.find("double") != string::npos || + sFName.find("nightmare") != string::npos || + sFName.find("freestyle") != string::npos || + sFName.find("db") != string::npos || + sFName.find("nm") != string::npos || + sFName.find("fs") != string::npos || bDoublesChart ) out.m_StepsType = StepsType_pump_double; else if( sFName.find("_1") != string::npos ) out.m_StepsType = StepsType_pump_single; @@ -280,7 +303,10 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, if( iHoldStartRow[t] == BeatToNoteRow(prevBeat) ) notedata.SetTapNote( t, iHoldStartRow[t], TAP_ORIGINAL_TAP ); else - notedata.AddHoldNote( t, iHoldStartRow[t], BeatToNoteRow(prevBeat) , TAP_ORIGINAL_HOLD_HEAD ); + notedata.AddHoldNote(t, + iHoldStartRow[t], + BeatToNoteRow(prevBeat), + TAP_ORIGINAL_HOLD_HEAD ); } } break; @@ -307,53 +333,6 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, { // duh iTickCount = static_cast(numTemp); - //if( iTickCount > ROWS_PER_BEAT ) - - /* adapt tickcounts // - // valid tickcounts for SM: 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 64, ROWS_PER_BEAT - // put this inside the tickcount handling condition yes/no - - if( iTickCount > ROWS_PER_BEAT ) // beyond 48 - { - // clamp/scale/whatever and use scroll segments - } - else if( iTickCount > 32 || iTickCount < ROWS_PER_BEAT ) // ranging from 33 to 48, approximate to 32 - { - fScrollRatio = 32; - iTickCount = 32; - } - else if( iTickCount > 24 || iTickCount < 32 ) // ranging from 25 to 31, approximate to 24 - { - fScrollRatio = 24; - iTickCount = 24; - } - else if( iTickCount > 16 || iTickCount < 24 ) // ranging from 17 to 23, approximate to 16 - { - fScrollRatio = 16; - iTickCount = 16; - } - else if( iTickCount > 12 || iTickCount < 16 ) // ranging from 13 to 15, approximate to 12 - { - fScrollRatio = 12; - iTickCount = 12; - } - else if( iTickCount > 8 || iTickCount < 12 ) // ranging from 9 to 11, approximate to 8 - { - fScrollRatio = 8; - iTickCount = 8; - } - else if( iTickCount > 6 || iTickCount < 8 ) // 7, approximate to 6 - { - fScrollRatio = 6 / iTickCountt; - iTickCount = 6; - } - else if( iTickCount > 4 || iTickCount < 6 ) // 5, approximate to 4 - { - fScrollRatio = iTickCount / 4; - iTickCount = 4; - } - //*/ - stepsTiming.SetTickcountAtBeat( fCurBeat, clamp(iTickCount, 0, ROWS_PER_BEAT) ); } else if (BeginsWith(sRowString, "|B")) @@ -516,7 +495,21 @@ static void LoadTags( const RString &str, Song &out ) out.m_sArtist = artist; } -static bool LoadGlobalData( const RString &sPath, Song &out, bool bKIUCompliant ) +static void ProcessTickcounts( const RString & value, int & ticks, TimingData & timing ) +{ + /* TICKCOUNT will be used below if there are DM compliant BPM changes + * and stops. It will be called again in LoadFromKSFFile for the + * actual steps. */ + ticks = StringToInt( value ); + ticks = ticks > 0 ? ticks : 4; + // add a tickcount for those using the [Player] + // CheckpointsUseTimeSignatures metric. -aj + // It's not with timesigs now -DaisuMaster + TickcountSegment * tcs = new TickcountSegment(0, ticks > ROWS_PER_BEAT ? ROWS_PER_BEAT : ticks); + timing.AddSegment( SEGMENT_TICKCOUNT, tcs ); +} + +static bool LoadGlobalData( const RString &sPath, Song &out, bool &bKIUCompliant ) { MsdFile msd; if( !msd.ReadFile( sPath, false ) ) // don't unescape @@ -594,17 +587,7 @@ static bool LoadGlobalData( const RString &sPath, Song &out, bool bKIUCompliant } else if ( sValueName=="TICKCOUNT" ) { - /* TICKCOUNT will be used below if there are DM compliant BPM changes - * and stops. It will be called again in LoadFromKSFFile for the - * actual steps. */ - iTickCount = StringToInt( sParams[1] ); - iTickCount = iTickCount > 0 ? iTickCount : 4; - // add a tickcount for those using the [Player] - // CheckpointsUseTimeSignatures metric. -aj - // It's not with timesigs now -DaisuMaster - TickcountSegment * tcs = new TickcountSegment(0); - tcs->SetTicks(iTickCount > ROWS_PER_BEAT ? ROWS_PER_BEAT : iTickCount); - out.m_SongTiming.AddSegment( SEGMENT_TICKCOUNT, tcs ); + ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); } else if ( sValueName=="STEP" ) { @@ -689,7 +672,6 @@ static bool LoadGlobalData( const RString &sPath, Song &out, bool bKIUCompliant } // This is where the DMRequired test will take place. - //if (BeginsWith(NoteRowString, "|T") || BeginsWith(NoteRowString, "|B") || BeginsWith(NoteRowString, "|D") || BeginsWith(NoteRowString, "|E") ) if ( BeginsWith( NoteRowString, "|" ) ) { // have a static timing for everything @@ -723,6 +705,22 @@ void KSFLoader::GetApplicableFiles( const RString &sPath, vector &out ) GetDirListing( sPath + RString("*.ksf"), out ); } +bool KSFLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ) +{ + bool KIUCompliant = false; + Song dummy; + if (!LoadGlobalData(cachePath, dummy, KIUCompliant)) + return false; + Steps *notes = dummy.CreateSteps(); + if (LoadFromKSFFile(cachePath, *notes, dummy, KIUCompliant)) + { + KIUCompliant = true; // yeah, reusing a variable. + out.SetNoteData(notes->GetNoteData()); + } + delete notes; + return KIUCompliant; +} + bool KSFLoader::LoadFromDir( const RString &sDir, Song &out ) { LOG->Trace( "KSFLoader::LoadFromDir(%s)", sDir.c_str() ); @@ -733,7 +731,7 @@ bool KSFLoader::LoadFromDir( const RString &sDir, Song &out ) // We shouldn't have been called to begin with if there were no KSFs. ASSERT( arrayKSFFileNames.size() ); - //bool bKIUCompliant = false; + bool bKIUCompliant = false; /* With Split Timing, there has to be a backup Song Timing in case * anything goes wrong. As these files are kept in alphabetical * order (hopefully), it is best to use the LAST file for timing @@ -751,22 +749,24 @@ bool KSFLoader::LoadFromDir( const RString &sDir, Song &out ) // for directmove though, and we're just gathering basic info anyway, and // most of the time all the KSF files have the same info in the #TITLE:; section unsigned files = arrayKSFFileNames.size(); - if( !LoadGlobalData(out.GetSongDir() + arrayKSFFileNames[0], out, false) ) + RString dir = out.GetSongDir(); + if( !LoadGlobalData(dir + arrayKSFFileNames[files - 1], out, bKIUCompliant) ) return false; + out.m_sSongFileName = dir + arrayKSFFileNames[files - 1]; // load the Steps from the rest of the KSF files for( unsigned i=0; iSetFilename(dir + arrayKSFFileNames[i]); out.AddSteps( pNewNotes ); } - out.TidyUpData(); + out.TidyUpData(false, true); return true; } diff --git a/src/NotesLoaderKSF.h b/src/NotesLoaderKSF.h index b18e94a1e9..650f7aa44f 100644 --- a/src/NotesLoaderKSF.h +++ b/src/NotesLoaderKSF.h @@ -2,11 +2,13 @@ #define NOTES_LOADER_KSF_H class Song; +class Steps; /** @brief Reads a Song from a set of .KSF files. */ namespace KSFLoader { void GetApplicableFiles( const RString &sPath, vector &out ); bool LoadFromDir( const RString &sDir, Song &out ); + bool LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ); } #endif diff --git a/src/NotesLoaderMidi.cpp b/src/NotesLoaderMidi.cpp index d34e5434a6..e1cdabe15d 100644 --- a/src/NotesLoaderMidi.cpp +++ b/src/NotesLoaderMidi.cpp @@ -956,7 +956,7 @@ bool MidiLoader::LoadFromDir( const RString &sDir, Song &out ) if( !LoadFromMidi(sDir+vsFiles[0], out) ) return false; - out.TidyUpData(); + out.TidyUpData(false, true); return true; } diff --git a/src/NotesLoaderPMS.cpp b/src/NotesLoaderPMS.cpp index 301b843379..ca4c672091 100644 --- a/src/NotesLoaderPMS.cpp +++ b/src/NotesLoaderPMS.cpp @@ -573,7 +573,7 @@ static bool LoadFromPMSFile( const RString &sPath, const NameToData_t &mapNameTo return true; } -static void ReadGlobalTags( const NameToData_t &mapNameToData, Song &out, MeasureToTimeSig_t &sigAdjustmentsOut, map &idToKeySoundIndexOut ) +static void ReadGlobalTags( const RString &sPath, const NameToData_t &mapNameToData, Song &out, MeasureToTimeSig_t &sigAdjustmentsOut, map &idToKeySoundIndexOut ) { RString sData; if( GetTagFromMap(mapNameToData, "#title", sData) ) @@ -611,26 +611,29 @@ static void ReadGlobalTags( const NameToData_t &mapNameToData, Song &out, Measur // this is keysound file name. Looks like "#WAV1A" RString nData = it->second; RString sWavID = sName.Right(2); + RString dir = out.GetSongDir(); + if (dir.empty()) + dir = Dirname(sPath); /* Due to bugs in some programs, many PMS files have a "WAV" extension * on files in the PMS for files that actually have some other extension. * Do a search. Don't do a wildcard search; if sData is "song.wav", * we might also have "song.png", which we shouldn't match. */ - if( !IsAFile(out.GetSongDir()+nData) ) + if( !IsAFile(dir+nData) ) { const char *exts[] = { "oga", "ogg", "wav", "mp3", NULL }; // XXX: stop duplicating these everywhere for( unsigned i = 0; exts[i] != NULL; ++i ) { RString fn = SetExtension( nData, exts[i] ); - if( IsAFile(out.GetSongDir()+fn) ) + if( IsAFile(dir+fn) ) { nData = fn; break; } } } - if( !IsAFile(out.GetSongDir()+nData) ) - LOG->UserLog( "Song file", out.GetSongDir(), "references key \"%s\" that can't be found", nData.c_str() ); + if( !IsAFile(dir+nData) ) + LOG->UserLog( "Song file", dir, "references key \"%s\" that can't be found", nData.c_str() ); sWavID.MakeUpper(); // HACK: undo the MakeLower() out.m_vsKeysoundFile.push_back( nData ); @@ -810,6 +813,64 @@ void PMSLoader::GetApplicableFiles( const RString &sPath, vector &out ) GetDirListing( sPath + RString("*.pms"), out ); } +bool PMSLoader::LoadNoteDataFromSimfile(const RString &cachePath, Steps &out) +{ + Song dummy; + // TODO: Simplify this copy/paste from LoadFromDir. + + vector BMSData; + BMSData.push_back(NameToData_t()); + ReadPMSFile(cachePath, BMSData.back()); + + RString commonSubstring; + GetCommonTagFromMapList( BMSData, "#title", commonSubstring ); + + Steps *copy = dummy.CreateSteps(); + + copy->SetDifficulty( Difficulty_Medium ); + RString sTag; + if( GetTagFromMap( BMSData[0], "#title", sTag ) && sTag.size() != commonSubstring.size() ) + { + sTag = sTag.substr( commonSubstring.size(), sTag.size() - commonSubstring.size() ); + sTag.MakeLower(); + + if( sTag.find('l') != sTag.npos ) + { + unsigned lPos = sTag.find('l'); + if( lPos > 2 && sTag.substr(lPos-2,4) == "solo" ) + { + copy->SetDifficulty( Difficulty_Edit ); + } + else + { + copy->SetDifficulty( Difficulty_Easy ); + } + } + else if( sTag.find('a') != sTag.npos ) + copy->SetDifficulty( Difficulty_Hard ); + else if( sTag.find('b') != sTag.npos ) + copy->SetDifficulty( Difficulty_Beginner ); + } + if( commonSubstring == "" ) + { + copy->SetDifficulty(Difficulty_Medium); + RString unused; + if (GetTagFromMap(BMSData[0], "#title#", sTag)) + SearchForDifficulty(unused, copy); + } + MeasureToTimeSig_t sigAdjustments; + map idToKeysoundIndex; + ReadGlobalTags( cachePath, BMSData[0], dummy, sigAdjustments, idToKeysoundIndex ); + + const bool ok = LoadFromPMSFile( cachePath, BMSData[0], *copy, sigAdjustments, idToKeysoundIndex ); + if( ok ) + { + out.SetNoteData(copy->GetNoteData()); + } + return ok; + +} + bool PMSLoader::LoadFromDir( const RString &sDir, Song &out ) { LOG->Trace( "Song::LoadFromPMSDir(%s)", sDir.c_str() ); @@ -915,7 +976,8 @@ bool PMSLoader::LoadFromDir( const RString &sDir, Song &out ) MeasureToTimeSig_t sigAdjustments; map idToKeysoundIndex; - ReadGlobalTags( aPMSData[iMainDataIndex], out, sigAdjustments, idToKeysoundIndex ); + ReadGlobalTags( sDir, aPMSData[iMainDataIndex], out, sigAdjustments, idToKeysoundIndex ); + out.m_sSongFileName = out.GetSongDir() + arrayPMSFileNames[iMainDataIndex]; // Override what that global tag said about the title if we have a good substring. // Prevents clobbering and catches "MySong (7keys)" / "MySong (Another) (7keys)" @@ -930,7 +992,10 @@ bool PMSLoader::LoadFromDir( const RString &sDir, Song &out ) Steps* pNewNotes = apSteps[i]; const bool ok = LoadFromPMSFile( out.GetSongDir() + arrayPMSFileNames[i], aPMSData[i], *pNewNotes, sigAdjustments, idToKeysoundIndex ); if( ok ) + { + pNewNotes->SetFilename(out.GetSongDir() + arrayPMSFileNames[i]); out.AddSteps( pNewNotes ); + } else delete pNewNotes; } @@ -941,7 +1006,7 @@ bool PMSLoader::LoadFromDir( const RString &sDir, Song &out ) ConvertString( out.m_sArtist, "utf-8,japanese" ); ConvertString( out.m_sGenre, "utf-8,japanese" ); - out.TidyUpData(); + out.TidyUpData(false, true); return true; } diff --git a/src/NotesLoaderPMS.h b/src/NotesLoaderPMS.h index 0cdc0d398d..65ec7f4ecb 100644 --- a/src/NotesLoaderPMS.h +++ b/src/NotesLoaderPMS.h @@ -2,11 +2,13 @@ #define NOTES_LOADER_PMS_H class Song; +class Steps; /** @brief Reads a Song from a set of .PMS files. */ namespace PMSLoader { void GetApplicableFiles( const RString &sPath, vector &out ); bool LoadFromDir( const RString &sDir, Song &out ); + bool LoadNoteDataFromSimfile(const RString & cachePath, Steps & out); } #endif diff --git a/src/NotesLoaderSM.cpp b/src/NotesLoaderSM.cpp index ba3ea24e50..9a5f276105 100644 --- a/src/NotesLoaderSM.cpp +++ b/src/NotesLoaderSM.cpp @@ -10,6 +10,7 @@ #include "Song.h" #include "SongManager.h" #include "Steps.h" +#include "Attack.h" #include "PrefsManager.h" void SMLoader::SetSongTitle(const RString & title) @@ -95,23 +96,6 @@ void SMLoader::LoadFromTokens( } out.SetMeter( StringToInt(sMeter) ); - vector saValues; - split( sRadarValues, ",", saValues, true ); - int categories = NUM_RadarCategory - 1; // Fakes aren't counted in the radar values. - if( saValues.size() == (unsigned)categories * NUM_PLAYERS ) - { - RadarValues v[NUM_PLAYERS]; - FOREACH_PlayerNumber( pn ) - { - // Can't use the foreach anymore due to flexible radar lines. - for( RadarCategory rc = (RadarCategory)0; rc < categories; - enum_add( rc, 1 ) ) - { - v[pn][rc] = StringToFloat( saValues[pn*categories + rc] ); - } - } - out.SetCachedRadarValues( v ); - } out.SetSMNoteData( sNoteData ); @@ -645,9 +629,8 @@ bool SMLoader::LoadFromBGChangesString( BackgroundChange &change, const RString return aBGChangeValues.size() >= 2; } -bool SMLoader::LoadNotedataFromSimfile( const RString &path, Steps &out ) +bool SMLoader::LoadNoteDataFromSimfile( const RString &path, Steps &out ) { - // stub: do this later. MsdFile msd; if( !msd.ReadFile( path, true ) ) // unescape { @@ -698,7 +681,7 @@ bool SMLoader::LoadNotedataFromSimfile( const RString &path, Steps &out ) RString noteData = sParams[6]; Trim( noteData ); out.SetSMNoteData( noteData ); - + out.TidyUpData(); return true; } } @@ -717,6 +700,7 @@ bool SMLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCache } out.m_SongTiming.m_sFile = sPath; + out.m_sSongFileName = sPath; for( unsigned i=0; iSetFilename(sPath); out.AddSteps( pNewNotes ); } // XXX: Does anyone know what LEADTRACK is for? -Wolfman2000 @@ -1110,7 +1095,10 @@ void SMLoader::TidyUpData( Song &song, bool bFromCache ) bg.push_back( BackgroundChange(lastBeat,song.m_sBackgroundFile) ); } while(0); } - song.TidyUpData( bFromCache ); + if (bFromCache) + { + song.TidyUpData( bFromCache, true ); + } } /* diff --git a/src/NotesLoaderSM.h b/src/NotesLoaderSM.h index 6654c5bc62..6ba22589d6 100644 --- a/src/NotesLoaderSM.h +++ b/src/NotesLoaderSM.h @@ -46,7 +46,7 @@ struct SMLoader * @brief Retrieve the relevant notedata from the simfile. * @param path the path where the simfile lives. * @param out the Steps we are loading the data into. */ - virtual bool LoadNotedataFromSimfile(const RString &path, Steps &out ); + virtual bool LoadNoteDataFromSimfile(const RString &path, Steps &out ); /** * @brief Attempt to load the specified sm file. diff --git a/src/NotesLoaderSMA.cpp b/src/NotesLoaderSMA.cpp index 2a6198e1ff..1a3cf4ef00 100644 --- a/src/NotesLoaderSMA.cpp +++ b/src/NotesLoaderSMA.cpp @@ -164,6 +164,7 @@ bool SMALoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach } out.m_SongTiming.m_sFile = sPath; // songs still have their fallback timing. + out.m_sSongFileName = sPath; int state = SMA_GETTING_SONG_INFO; Steps* pNewNotes = NULL; @@ -450,7 +451,7 @@ bool SMALoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach sParams[5], sParams[6], *pNewNotes ); - + pNewNotes->SetFilename(sPath); out.AddSteps( pNewNotes ); } else if( sValueName=="TIMESIGNATURES" || sValueName=="LEADTRACK" ) @@ -462,7 +463,7 @@ bool SMALoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach sValueName.c_str() ); } TidyUpData(out, false); - out.TidyUpData(); + out.TidyUpData(false, true); return true; } diff --git a/src/NotesLoaderSSC.cpp b/src/NotesLoaderSSC.cpp index 2e5fc1cabf..4475916620 100644 --- a/src/NotesLoaderSSC.cpp +++ b/src/NotesLoaderSSC.cpp @@ -146,6 +146,95 @@ void SSCLoader::ProcessScrolls( TimingData &out, const RString sParam ) } } +bool SSCLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ) +{ + LOG->Trace( "Loading notes from %s", cachePath.c_str() ); + + MsdFile msd; + if (!msd.ReadFile(cachePath, true)) + { + LOG->UserLog("Unable to load any notes from", + cachePath, + "for this reason: %s", + msd.GetError().c_str()); + return false; + } + + bool tryingSteps = false; + float storedVersion; + const unsigned values = msd.GetNumValues(); + + for (unsigned i = 0; i < values; i++) + { + const MsdFile::value_t ¶ms = msd.GetValue(i); + RString valueName = params[0]; + valueName.MakeUpper(); + RString matcher = params[1]; // mainly for debugging. + Trim(matcher); + + if (valueName=="VERSION") + { + storedVersion = StringToFloat(matcher); + } + if (tryingSteps) + { + if( valueName=="STEPSTYPE" ) + { + if (out.m_StepsType != GAMEMAN->StringToStepsType(matcher)) + tryingSteps = false; + } + else if( valueName=="CHARTNAME") + { + if (storedVersion >= VERSION_CHART_NAME_TAG && out.GetChartName() != matcher) + tryingSteps = false; + } + else if( valueName=="DESCRIPTION" ) + { + if (storedVersion < VERSION_CHART_NAME_TAG) + { + if (out.GetChartName() != matcher) + tryingSteps = false; + } + else if (out.GetDescription() != matcher) + tryingSteps = false; + } + + else if( valueName=="DIFFICULTY" ) + { + if (out.GetDifficulty() != StringToDifficulty(matcher)) + tryingSteps = false; + } + + else if( valueName=="METER" ) + { + if (out.GetMeter() != StringToInt(matcher)) + tryingSteps = false; + } + + else if( valueName=="CREDIT" ) + { + if (out.GetCredit() != matcher) + tryingSteps = false; + } + + else if( valueName=="NOTES" || valueName=="NOTES2" ) + { + out.SetSMNoteData(matcher); + out.TidyUpData(); + return true; + } + } + else + { + if(valueName == "NOTEDATA") + { + tryingSteps = true; + } + } + } + return false; +} + bool SSCLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCache ) { LOG->Trace( "Song::LoadFromSSCFile(%s)", sPath.c_str() ); @@ -158,6 +247,7 @@ bool SSCLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach } out.m_SongTiming.m_sFile = sPath; // songs still have their fallback timing. + out.m_sSongFileName = sPath; int state = GETTING_SONG_INFO; const unsigned values = msd.GetNumValues(); @@ -484,27 +574,35 @@ bool SSCLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach else if( sValueName=="RADARVALUES" ) { - vector saValues; - split( sParams[1], ",", saValues, true ); - - int categories = NUM_RadarCategory; - if( out.m_fVersion < VERSION_RADAR_FAKE ) - categories -= 1; - - if( saValues.size() == (unsigned)categories * NUM_PLAYERS ) + if (bFromCache) { - RadarValues v[NUM_PLAYERS]; - FOREACH_PlayerNumber( pn ) + vector saValues; + split( sParams[1], ",", saValues, true ); + + int categories = NUM_RadarCategory; + if( out.m_fVersion < VERSION_RADAR_FAKE ) + categories -= 1; + + if( saValues.size() == (unsigned)categories * NUM_PLAYERS ) { - // Can't use the foreach anymore due to flexible radar lines. - for( RadarCategory rc = (RadarCategory)0; rc < categories; - enum_add( rc, +1 ) ) + RadarValues v[NUM_PLAYERS]; + FOREACH_PlayerNumber( pn ) { - v[pn][rc] = StringToFloat( saValues[pn*categories + rc] ); + // Can't use the foreach anymore due to flexible radar lines. + for( RadarCategory rc = (RadarCategory)0; rc < categories; + enum_add( rc, +1 ) ) + { + v[pn][rc] = StringToFloat( saValues[pn*categories + rc] ); + } } + pNewNotes->SetCachedRadarValues( v ); } - pNewNotes->SetCachedRadarValues( v ); } + else + { + // just recalc at time. + } + } else if( sValueName=="CREDIT" ) @@ -519,6 +617,7 @@ bool SSCLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach pNewNotes->m_Timing = stepsTiming; pNewNotes->SetSMNoteData( sParams[1] ); pNewNotes->TidyUpData(); + pNewNotes->SetFilename(sPath); out.AddSteps( pNewNotes ); } @@ -605,6 +704,14 @@ bool SSCLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach pNewNotes->SetMaxBPM(StringToFloat(sParams[2])); } } + else if( sValueName=="STEPFILENAME" ) + { + state = GETTING_SONG_INFO; + if( bHasOwnTiming ) + pNewNotes->m_Timing = stepsTiming; + pNewNotes->SetFilename(sParams[1]); + out.AddSteps( pNewNotes ); + } break; } } diff --git a/src/NotesLoaderSSC.h b/src/NotesLoaderSSC.h index 5b35cc5c4c..3d8f8ca634 100644 --- a/src/NotesLoaderSSC.h +++ b/src/NotesLoaderSSC.h @@ -30,6 +30,8 @@ const float VERSION_SPLIT_TIMING = 0.7f; const float VERSION_OFFSET_BEFORE_ATTACK = 0.72f; /** @brief The version that introduced the Chart Name tag. */ const float VERSION_CHART_NAME_TAG = 0.74f; +/** @brief The version that introduced the cache switch tag. */ +const float VERSION_CACHE_SWITCH_TAG = 0.77f; /** * @brief The SSCLoader handles all of the parsing needed for .ssc files. @@ -65,6 +67,12 @@ struct SSCLoader : public SMLoader */ bool LoadEditFromMsd( const MsdFile &msd, const RString &sEditFilePath, ProfileSlot slot, bool bAddStepsToSong ); + /** + * @brief Retrieve the specific NoteData from the file. + * @param cachePath the path to the cache file. + * @param out the Steps to receive just the particular notedata. + * @return true if successful, false otherwise. */ + virtual bool LoadNoteDataFromSimfile( const RString &cachePath, Steps &out ); void ProcessWarps( TimingData &, const RString, const float ); void ProcessLabels( TimingData &, const RString ); diff --git a/src/NotesWriterSM.cpp b/src/NotesWriterSM.cpp index 4be321e651..81eca70991 100644 --- a/src/NotesWriterSM.cpp +++ b/src/NotesWriterSM.cpp @@ -160,16 +160,7 @@ static void WriteGlobalTags( RageFile &f, Song &out ) } f.PutLine( ";" ); - f.Write( "#ATTACKS:" ); - for( unsigned a=0; a < out.m_sAttackString.size(); a++ ) - { - RString sData = out.m_sAttackString[a]; - f.Write( ssprintf( "%s", sData.c_str() ) ); - - if( a != (out.m_sAttackString.size() - 1) ) - f.Write( ":" ); // Not the end, so write a divider ':' - } - f.PutLine( ";" ); + f.PutLine( ssprintf("#ATTACKS:%s;", out.GetAttackString().c_str()) ); } /** diff --git a/src/NotesWriterSSC.cpp b/src/NotesWriterSSC.cpp index 8ca8140231..566905d759 100644 --- a/src/NotesWriterSSC.cpp +++ b/src/NotesWriterSSC.cpp @@ -180,12 +180,29 @@ static void GetTimingTags( vector &lines, TimingData timing, bool bIsSo static void WriteTimingTags( RageFile &f, const TimingData &timing, bool bIsSong = false ) { - - vector lines; - - GetTimingTags( lines, timing, bIsSong ); - - f.PutLine( JoinLineList( lines ) ); + f.PutLine(ssprintf("#BPMS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_BPM)).c_str())); + f.PutLine(ssprintf("#STOPS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_STOP_DELAY, false)).c_str())); + f.PutLine(ssprintf("#DELAYS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_STOP_DELAY, true)).c_str())); + f.PutLine(ssprintf("#WARPS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_WARP)).c_str())); + f.PutLine(ssprintf("#TIMESIGNATURES:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_TIME_SIG)).c_str())); + f.PutLine(ssprintf("#TICKCOUNTS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_TICKCOUNT)).c_str())); + f.PutLine(ssprintf("#COMBOS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_COMBO)).c_str())); + f.PutLine(ssprintf("#SPEEDS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_SPEED)).c_str())); + f.PutLine(ssprintf("#SCROLLS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_SCROLL)).c_str())); + if (!bIsSong) + f.PutLine(ssprintf("#FAKES:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_FAKE)).c_str())); + f.PutLine(ssprintf("#LABELS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_LABEL)).c_str())); } @@ -212,10 +229,7 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) f.PutLine( ssprintf( "#MUSIC:%s;", SmEscape(out.m_sMusicFile).c_str() ) ); { - vector vs; - FOREACH_ENUM( InstrumentTrack, it ) - if( out.HasInstrumentTrack(it) ) - vs.push_back( InstrumentTrackToString(it) + "=" + out.m_sInstrumentTrackFile[it] ); + vector vs = out.GetInstrumentTracksToVectorString(); if( !vs.empty() ) { RString s = join( ",", vs ); @@ -229,7 +243,7 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) f.Write( "#SELECTABLE:" ); switch(out.m_SelectionDisplay) { - default: ASSERT(0); // fall through + default: ASSERT_M(0, "An invalid selectable value was found for this song!"); // fall through case Song::SHOW_ALWAYS: f.Write( "YES" ); break; //case Song::SHOW_NONSTOP: f.Write( "NONSTOP" ); break; case Song::SHOW_NEVER: f.Write( "NO" ); break; @@ -297,16 +311,7 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) } f.PutLine( ";" ); - f.Write( "#ATTACKS:" ); - for( unsigned a=0; a < out.m_sAttackString.size(); a++ ) - { - RString sData = out.m_sAttackString[a]; - f.Write( ssprintf( "%s", sData.c_str() ) ); - - if( a != (out.m_sAttackString.size() - 1) ) - f.Write( ":" ); // Not the end, so write a divider ':' - } - f.PutLine( ";" ); + f.PutLine( ssprintf("#ATTACKS:%s;", out.GetAttackString().c_str()) ); } /** @@ -345,17 +350,7 @@ static RString GetSSCNoteData( const Song &song, const Steps &in, bool bSavingCa GetTimingTags( lines, in.m_Timing ); - RString attacks = ""; - for( unsigned a=0; a < in.m_sAttackString.size(); a++ ) - { - RString sData = in.m_sAttackString[a]; - attacks += sData; - - if( a != (in.m_sAttackString.size() - 1) ) - attacks += ":\r\n"; // Not the end, so write a divider ':' - } - Trim(attacks, ":"); // just in case something screwy happens. - lines.push_back( ssprintf( "#ATTACKS:%s;", attacks.c_str())); + lines.push_back( ssprintf("#ATTACKS:%s;", in.GetAttackString().c_str())); switch( in.GetDisplayBPM() ) { @@ -376,16 +371,21 @@ static RString GetSSCNoteData( const Song &song, const Steps &in, bool bSavingCa lines.push_back( ssprintf( "#DISPLAYBPM:*;" ) ); break; } - - RString sNoteData; - in.GetSMNoteData( sNoteData ); + if (bSavingCache) + { + lines.push_back(ssprintf("#STEPFILENAME:%s;", in.GetFilename().c_str())); + } + else + { + RString sNoteData; + in.GetSMNoteData( sNoteData ); - lines.push_back( song.m_vsKeysoundFile.empty() ? "#NOTES:" : "#NOTES2:" ); - - TrimLeft(sNoteData); - split( sNoteData, "\n", lines, true ); - lines.push_back( ";" ); + lines.push_back( song.m_vsKeysoundFile.empty() ? "#NOTES:" : "#NOTES2:" ); + TrimLeft(sNoteData); + split( sNoteData, "\n", lines, true ); + lines.push_back( ";" ); + } return JoinLineList( lines ); } diff --git a/src/ScreenGameplay.cpp b/src/ScreenGameplay.cpp index 650c9c3a3f..d0ac5a1cfd 100644 --- a/src/ScreenGameplay.cpp +++ b/src/ScreenGameplay.cpp @@ -393,9 +393,33 @@ void ScreenGameplay::Init() /* Called once per stage (single song or single course). */ GAMESTATE->BeginStage(); + int player = 1; + FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi ) + { + unsigned int count = pi->m_vpStepsQueue.size(); + + for (unsigned int i = 0; i < count; i++) + { + Steps *curSteps = pi->m_vpStepsQueue[i]; + if (curSteps->IsNoteDataEmpty()) + { + if (curSteps->GetNoteDataFromSimfile()) + { + LOG->Trace("Notes should be loaded for player %d", player); + } + else + { + LOG->Trace("Error loading notes for player %d", player); + } + } + } + player++; + } + if(!GAMESTATE->IsCourseMode() && !GAMESTATE->m_bDemonstrationOrJukebox) { // fill in difficulty of CPU players with that of the first human player + // this should not need to worry about step content. FOREACH_PotentialCpuPlayer(p) GAMESTATE->m_pCurSteps[p].Set( GAMESTATE->m_pCurSteps[ GAMESTATE->GetFirstHumanPlayer() ] ); diff --git a/src/Song.cpp b/src/Song.cpp index 38d93f7f96..afdddd4c4e 100644 --- a/src/Song.cpp +++ b/src/Song.cpp @@ -41,7 +41,7 @@ * @brief The internal version of the cache for StepMania. * * Increment this value to invalidate the current cache. */ -const int FILE_CACHE_VERSION = 191; +const int FILE_CACHE_VERSION = 192; /** @brief How long does a song sample last by default? */ const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f; @@ -860,7 +860,9 @@ void Song::ReCalculateRadarValuesAndLastSecond(bool fromCache, bool duringCache) wipe_notedata: if (duringCache) { - // update this when at that point. + NoteData dummy; + dummy.SetNumTracks(tempNoteData.GetNumTracks()); + pSteps->SetNoteData(dummy); } } diff --git a/src/Song.h b/src/Song.h index 29a53ff942..5f17ad8969 100644 --- a/src/Song.h +++ b/src/Song.h @@ -20,7 +20,7 @@ void FixupPath( RString &path, const RString &sSongPath ); RString GetSongAssetPath( RString sPath, const RString &sSongPath ); /** @brief The version of the .ssc file format. */ -const static float STEPFILE_VERSION_NUMBER = 0.76f; +const static float STEPFILE_VERSION_NUMBER = 0.77f; /** @brief How many edits for this song can each profile have? */ const int MAX_EDITS_PER_SONG_PER_PROFILE = 15; @@ -100,7 +100,9 @@ public: /** * @brief Get the new radar values, and determine the last second at the same time. * - * This is called by TidyUpData, after saving the Song. */ + * This is called by TidyUpData, after saving the Song. + * @param fromCache was this data loaded from the cache file? + * @param duringCache was this data loaded during the cache process? */ void ReCalculateRadarValuesAndLastSecond(bool fromCache = false, bool duringCache = false); /** * @brief Translate any titles that aren't in english. diff --git a/src/Steps.cpp b/src/Steps.cpp index 7e9e659c4a..9700de9a1b 100644 --- a/src/Steps.cpp +++ b/src/Steps.cpp @@ -88,6 +88,45 @@ bool Steps::IsNoteDataEmpty() const return this->m_sNoteDataCompressed.empty(); } +bool Steps::GetNoteDataFromSimfile() +{ + // Replace the line below with the Steps' cache file. + RString stepFile = this->GetFilename(); + RString extension = GetExtension(stepFile); + if (extension.empty() || extension == "ssc") // remember cache files. + { + SSCLoader loader; + return loader.LoadNoteDataFromSimfile(stepFile, *this); + } + else if (extension == "sm") + { + SMLoader loader; + return loader.LoadNoteDataFromSimfile(stepFile, *this); + } + else if (extension == "sma") + { + SMALoader loader; + return loader.LoadNoteDataFromSimfile(stepFile, *this); + } + else if (extension == "dwi") + { + return DWILoader::LoadNoteDataFromSimfile(stepFile, *this); + } + else if (extension == "ksf") + { + return KSFLoader::LoadNoteDataFromSimfile(stepFile, *this); + } + else if (extension == "bms" || extension == "bml" || extension == "bme") + { + return BMSLoader::LoadNoteDataFromSimfile(stepFile, *this); + } + else if (extension == "pms") + { + return PMSLoader::LoadNoteDataFromSimfile(stepFile, *this); + } + return false; +} + void Steps::SetNoteData( const NoteData& noteDataNew ) { ASSERT( noteDataNew.GetNumTracks() == GAMEMAN->GetStepsTypeInfo(m_StepsType).iNumTracks ); @@ -130,7 +169,6 @@ void Steps::SetSMNoteData( const RString ¬es_comp_ ) m_sNoteDataCompressed = notes_comp_; m_iHash = 0; - m_sFilename = RString(); // We can no longer read from the file because it has changed in memory. } /* XXX: this function should pull data from m_sFilename, like Decompress() */ @@ -293,38 +331,14 @@ void Steps::Decompress() if( !m_sFilename.empty() && m_sNoteDataCompressed.empty() ) { - // We have data on disk and not in memory. Load it. - Song s; - SSCLoader loaderSSC; - bool bLoadedFromSSC = loaderSSC.LoadFromSimfile(m_sFilename, s, true); - if( !bLoadedFromSSC ) + // We have NoteData on disk and not in memory. Load it. + if (!this->GetNoteDataFromSimfile()) { - // try reading from .sm instead - SMLoader loaderSM; - if( !loaderSM.LoadFromSimfile(m_sFilename, s, true) ) - { - LOG->Warn( "Couldn't load \"%s\"", m_sFilename.c_str() ); - return; - } - } - - /* Find the steps. */ - StepsID ID; - ID.FromSteps( this ); - - /* We're using a StepsID to search in a different copy of a Song than - * the one it was created with. Clear the cache before doing this, - * or search results will come from cache and point to the original - * copy. */ - CachedObject::ClearCacheAll(); - Steps *pSteps = ID.ToSteps( &s, true ); - if( pSteps == NULL ) - { - LOG->Warn( "Couldn't find %s in \"%s\"", ID.ToString().c_str(), m_sFilename.c_str() ); + LOG->Warn("Couldn't load \"%s\"", m_sFilename.c_str()); return; } - pSteps->GetSMNoteData( m_sNoteDataCompressed ); + this->GetSMNoteData( m_sNoteDataCompressed ); } if( m_sNoteDataCompressed.empty() ) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index fd3db33b47..6097c69489 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -1299,6 +1299,24 @@ void TimingData::NoteRowToMeasureAndBeat( int iNoteRow, int &iMeasureIndexOut, i return; } +vector TimingData::ToVectorString(TimingSegmentType tst, + bool isDelay, int dec) const +{ + const vector segs = this->allTimingSegments[tst]; + vector ret; + + for (unsigned i = 0; i < segs.size(); i++) + { + if (tst == SEGMENT_STOP_DELAY) + { + StopSegment *seg = static_cast(segs[i]); + if (seg->GetDelay() == isDelay) + continue; + } + ret.push_back(segs[i]->ToString(dec)); + } + return ret; +} // lua start #include "LuaBinding.h" @@ -1315,136 +1333,47 @@ public: static int HasScrollChanges( T* p, lua_State *L ) { lua_pushboolean(L, p->HasScrollChanges()); return 1; } static int GetWarps( T* p, lua_State *L ) { - vector vWarps; - vector &warps = p->allTimingSegments[SEGMENT_WARP]; - for (unsigned i = 0; i < warps.size(); i++) - { - WarpSegment *seg = static_cast(warps[i]); - const float length = seg->GetLength(); - const float beat = seg->GetBeat(); - vWarps.push_back( ssprintf("%f=%f", beat, length) ); - } - LuaHelpers::CreateTableFromArray(vWarps, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_WARP), L); return 1; } static int GetFakes( T* p, lua_State *L ) { - vector vFakes; - vector &fakes = p->allTimingSegments[SEGMENT_FAKE]; - for (unsigned i = 0; i < fakes.size(); i++) - { - FakeSegment *seg = static_cast(fakes[i]); - const float length = seg->GetLength(); - const float beat = seg->GetBeat(); - vFakes.push_back( ssprintf("%f=%f", beat, length) ); - } - LuaHelpers::CreateTableFromArray(vFakes, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_FAKE), L); return 1; } static int GetScrolls( T* p, lua_State *L ) { - vector vScrolls; - vector &scrolls = p->allTimingSegments[SEGMENT_SCROLL]; - for (unsigned i = 0; i < scrolls.size(); i++) - { - ScrollSegment *seg = static_cast(scrolls[i]); - const float ratio = seg->GetRatio(); - const float beat = seg->GetBeat(); - vScrolls.push_back( ssprintf("%f=%f", beat, ratio) ); - } - LuaHelpers::CreateTableFromArray(vScrolls, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_SCROLL), L); return 1; } static int GetSpeeds( T* p, lua_State *L ) { - vector vSpeeds; - vector &speeds = p->allTimingSegments[SEGMENT_SPEED]; - for (unsigned i = 0; i < speeds.size(); i++) - { - SpeedSegment *seg = static_cast(speeds[i]); - const float length = seg->GetLength(); - const float ratio = seg->GetRatio(); - const unsigned short unit = seg->GetUnit(); - const float beat = seg->GetBeat(); - vSpeeds.push_back( ssprintf("%f=%f=%f=%uh", beat, ratio, length, unit) ); - } - LuaHelpers::CreateTableFromArray(vSpeeds, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_SPEED), L); return 1; } static int GetTimeSignatures( T* p, lua_State *L ) { - vector vTimes; - vector &tSigs = p->allTimingSegments[SEGMENT_TIME_SIG]; - for (unsigned i = 0; i < tSigs.size(); i++) - { - TimeSignatureSegment *seg = static_cast(tSigs[i]); - const int numerator = seg->GetNum(); - const int denominator = seg->GetDen(); - const float beat = seg->GetBeat(); - vTimes.push_back( ssprintf("%f=%d=%d", beat, numerator, denominator) ); - } - LuaHelpers::CreateTableFromArray(vTimes, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_TIME_SIG), L); return 1; } static int GetCombos( T* p, lua_State *L ) { - vector vCombos; - vector &combos = p->allTimingSegments[SEGMENT_COMBO]; - for (unsigned i = 0; i < combos.size(); i++) - { - ComboSegment *seg = static_cast(combos[i]); - const int combo = seg->GetCombo(); - const int miss = seg->GetMissCombo(); - const float beat = seg->GetBeat(); - vCombos.push_back( ssprintf("%f=%d=%d", beat, combo, miss) ); - } - LuaHelpers::CreateTableFromArray(vCombos, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_COMBO), L); return 1; } static int GetTickcounts( T* p, lua_State *L ) { - vector vTicks; - vector &ticks = p->allTimingSegments[SEGMENT_TICKCOUNT]; - for (unsigned i = 0; i < ticks.size(); i++) - { - TickcountSegment *seg = static_cast(ticks[i]); - const int tick = seg->GetTicks(); - const float beat = seg->GetBeat(); - vTicks.push_back( ssprintf("%f=%d", beat, tick) ); - } - LuaHelpers::CreateTableFromArray(vTicks, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_TICKCOUNT), L); return 1; } static int GetStops( T* p, lua_State *L ) { - vector vStops; - vector &stops = p->allTimingSegments[SEGMENT_STOP_DELAY]; - for (unsigned i = 0; i < stops.size(); i++) - { - StopSegment *seg = static_cast(stops[i]); - const float fStartBeat = seg->GetBeat(); - const float fStopLength = seg->GetPause(); - if(!seg->GetDelay()) - vStops.push_back( ssprintf("%f=%f", fStartBeat, fStopLength) ); - } - - LuaHelpers::CreateTableFromArray(vStops, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_STOP_DELAY, false), L); return 1; } static int GetDelays( T* p, lua_State *L ) { - vector vDelays; - vector &stops = p->allTimingSegments[SEGMENT_STOP_DELAY]; - for (unsigned i = 0; i < stops.size(); i++) - { - StopSegment *seg = static_cast(stops[i]); - const float fStartBeat = seg->GetBeat(); - const float fStopLength = seg->GetPause(); - if(seg->GetDelay()) - vDelays.push_back( ssprintf("%f=%f", fStartBeat, fStopLength) ); - } - - LuaHelpers::CreateTableFromArray(vDelays, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_STOP_DELAY, true), L); return 1; } static int GetBPMs( T* p, lua_State *L ) @@ -1463,31 +1392,12 @@ public: } static int GetLabels( T* p, lua_State *L ) { - vector vLabels; - vector &labels = p->allTimingSegments[SEGMENT_LABEL]; - for (unsigned i = 0; i < labels.size(); i++) - { - LabelSegment *seg = static_cast(labels[i]); - const float fStartRow = seg->GetBeat(); - const RString sLabel = seg->GetLabel(); - vLabels.push_back( ssprintf("%f=%s", fStartRow, sLabel.c_str()) ); - } - LuaHelpers::CreateTableFromArray(vLabels, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_LABEL), L); return 1; } static int GetBPMsAndTimes( T* p, lua_State *L ) { - vector vBPMs; - vector &bpms = p->allTimingSegments[SEGMENT_BPM]; - for (unsigned i = 0; i < bpms.size(); i++) - { - BPMSegment *seg = static_cast(bpms[i]); - const float fStartRow = seg->GetBeat(); - const float fBPM = seg->GetBPM(); - vBPMs.push_back( ssprintf("%f=%f", fStartRow, fBPM) ); - } - - LuaHelpers::CreateTableFromArray(vBPMs, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_BPM), L); return 1; } static int GetActualBPM( T* p, lua_State *L ) diff --git a/src/TimingData.h b/src/TimingData.h index 5249559dcf..2486ff5701 100644 --- a/src/TimingData.h +++ b/src/TimingData.h @@ -825,6 +825,8 @@ public: * @brief The initial offset of a song. */ float m_fBeat0OffsetInSeconds; + + vector ToVectorString(TimingSegmentType tst, bool isDelay = false, int dec = 6) const; }; #undef COMPARE diff --git a/src/TimingSegments.h b/src/TimingSegments.h index 09ea2782f1..2b0eed4d3d 100644 --- a/src/TimingSegments.h +++ b/src/TimingSegments.h @@ -81,6 +81,11 @@ struct TimingSegment { return TimingSegmentType_Invalid; } + // TODO: Remove isDelay optional param and split Stops and Delays. + virtual RString ToString(int dec) const + { + return FloatToString(this->GetBeat()); + } /** * @brief Compares two DrivedSegments to see if one is less than the other. @@ -206,6 +211,13 @@ struct FakeSegment : public TimingSegment TimingSegmentType GetType() const { return SEGMENT_FAKE; } + virtual RString ToString(int dec) const + { + RString str = "%.0" + IntToString(dec) + + "f=%.0" + IntToString(dec) + "f"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetLength()); + } + private: /** * @brief The number of beats the FakeSegment is alive for. @@ -260,6 +272,13 @@ struct WarpSegment : public TimingSegment void Scale( int start, int length, int newLength ); + virtual RString ToString(int dec) const + { + RString str = "%.0" + IntToString(dec) + + "f=%.0" + IntToString(dec) + "f"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetLength()); + } + /* * @brief Compares two WarpSegments to see if one is less than the other. * @param other the other WarpSegment to compare to. @@ -326,6 +345,12 @@ struct TickcountSegment : public TimingSegment * @param i the tickcount. */ void SetTicks(const int i); + virtual RString ToString(int dec) const + { + const RString str = "%.0" + IntToString(dec) + "f=%i"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetTicks()); + } + /** * @brief Compares two TickcountSegments to see if one is less than the other. * @param other the other TickcountSegment to compare to. @@ -404,6 +429,17 @@ struct ComboSegment : public TimingSegment * @param i the miss combo. */ void SetMissCombo(const int i); + virtual RString ToString(int dec) const + { + RString str = "%.0" + IntToString(dec) + "f=%i"; + if (this->GetCombo() == this->GetMissCombo()) + { + return ssprintf(str.c_str(), this->GetBeat(), this->GetCombo()); + } + str += "=%i"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetCombo(), this->GetMissCombo()); + } + /** * @brief Compares two ComboSegments to see if one is less than the other. * @param other the other ComboSegment to compare to. @@ -462,6 +498,12 @@ struct LabelSegment : public TimingSegment * @param l the label. */ void SetLabel(const RString l); + virtual RString ToString(int dec) const + { + const RString str = "%.0" + IntToString(dec) + "f=%s"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetLabel().c_str()); + } + /** * @brief Compares two LabelSegments to see if one is less than the other. * @param other the other LabelSegment to compare to. @@ -526,6 +568,13 @@ struct BPMSegment : public TimingSegment * @param l the label. */ void SetBPS(const float newBPS); + virtual RString ToString(int dec) const + { + const RString str = "%.0" + IntToString(dec) + + "f=%.0" + IntToString(dec) + "f"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetBPM()); + } + /** * @brief Compares two LabelSegments to see if one is less than the other. * @param other the other LabelSegment to compare to. @@ -604,6 +653,12 @@ struct TimeSignatureSegment : public TimingSegment * @param i the denominator. */ void SetDen(const int i); + virtual RString ToString(int dec) const + { + const RString str = "%.0" + IntToString(dec) + "f=%i=%i"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetNum(), this->GetDen()); + } + /** * @brief Retrieve the number of note rows per measure within the TimeSignatureSegment. * @@ -727,6 +782,15 @@ struct SpeedSegment : public TimingSegment void SetUnit(const int i); void Scale( int start, int length, int newLength ); + + virtual RString ToString(int dec) const + { + const RString str = "%.0" + IntToString(dec) + + "f=%.0" + IntToString(dec) + "f=%.0" + + IntToString(dec) + "f=%uh"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetRatio(), + this->GetLength(), this->GetUnit()); + } /** * @brief Compares two SpeedSegments to see if one is less than the other. @@ -792,6 +856,13 @@ struct ScrollSegment : public TimingSegment * @param i the ratio. */ void SetRatio(const float i); + virtual RString ToString(int dec) const + { + const RString str = "%.0" + IntToString(dec) + + "f=%.0" + IntToString(dec) + "f"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetRatio()); + } + /** * @brief Compares two ScrollSegment to see if one is less than the other. * @param other the other ScrollSegment to compare to. @@ -867,6 +938,13 @@ struct StopSegment : public TimingSegment * @brief Set the behavior in this StopSegment. * @param i the behavior. */ void SetDelay(const bool i); + + virtual RString ToString(int dec) const + { + const RString str = "%.0" + IntToString(dec) + + "f=%.0" + IntToString(dec) + "f"; + return ssprintf(str.c_str(), this->GetPause()); + } /** * @brief Compares two StopSegments to see if one is less than the other. From 20817bde34cca0754c1355d21241e3a0cc5ddd9f Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 16:10:18 -0400 Subject: [PATCH 025/106] Revert Mac individually named builds. We need to find a better way without forcing an hg commit request every time we switch Native to Debug to Universal. --- Xcode/stepmania.xcodeproj/project.pbxproj | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Xcode/stepmania.xcodeproj/project.pbxproj b/Xcode/stepmania.xcodeproj/project.pbxproj index a2fac07ad9..36f73f5a4b 100644 --- a/Xcode/stepmania.xcodeproj/project.pbxproj +++ b/Xcode/stepmania.xcodeproj/project.pbxproj @@ -2019,7 +2019,7 @@ AA28B47A058F2F5D0097C109 /* MemoryCardManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MemoryCardManager.cpp; path = ../src/MemoryCardManager.cpp; sourceTree = ""; }; AA28B47B058F2F5D0097C109 /* MemoryCardManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MemoryCardManager.h; path = ../src/MemoryCardManager.h; sourceTree = ""; }; AA29CE570558741A00961A51 /* Info-StepMania.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; path = "Info-StepMania.plist"; sourceTree = SOURCE_ROOT; }; - AA29CE580558741A00961A51 /* StepMania-debug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "StepMania-debug.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + AA29CE580558741A00961A51 /* StepMania.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StepMania.app; sourceTree = BUILT_PRODUCTS_DIR; }; AA2C9C9F0BAD6F54002441E9 /* CodeSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CodeSet.cpp; path = ../src/CodeSet.cpp; sourceTree = ""; }; AA2C9CA00BAD6F54002441E9 /* CodeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CodeSet.h; path = ../src/CodeSet.h; sourceTree = ""; }; AA2CA89D0BB745BD002441E9 /* ScreenContinue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenContinue.cpp; path = ../src/ScreenContinue.cpp; sourceTree = ""; }; @@ -3232,7 +3232,7 @@ 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( - AA29CE580558741A00961A51 /* StepMania-debug.app */, + AA29CE580558741A00961A51 /* StepMania.app */, AA40D52B09A08D660068C0D5 /* sm-ssc.app */, AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */, AA7A2B940AE09B520054C5BA /* lua */, @@ -5736,7 +5736,7 @@ name = stepmania; productInstallPath = "$(HOME)/Applications"; productName = "SDL App"; - productReference = AA29CE580558741A00961A51 /* StepMania-debug.app */; + productReference = AA29CE580558741A00961A51 /* StepMania.app */; productType = "com.apple.product-type.application"; }; AA40D1B409A08D650068C0D5 /* stepmania-bare */ = { @@ -7918,7 +7918,7 @@ "-fno-exceptions", "-falign-loops=16", ); - PRODUCT_NAME = "StepMania-debug"; + PRODUCT_NAME = StepMania; SYMROOT = "$(SRCROOT)/.."; WRAPPER_EXTENSION = app; }; @@ -8629,7 +8629,7 @@ "-fno-exceptions", "-falign-loops=16", ); - PRODUCT_NAME = "StepMania-FastDebug"; + PRODUCT_NAME = StepMania; STRIP_INSTALLED_PRODUCT = NO; SYMROOT = "$(SRCROOT)/.."; WRAPPER_EXTENSION = app; From f8446ac3ca7df405d6c572f53609d8450b69b176 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 16:18:22 -0400 Subject: [PATCH 026/106] That "h" wasn't behaving right. Remove. --- src/Song.cpp | 2 +- src/TimingSegments.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Song.cpp b/src/Song.cpp index afdddd4c4e..2ceff1d54c 100644 --- a/src/Song.cpp +++ b/src/Song.cpp @@ -41,7 +41,7 @@ * @brief The internal version of the cache for StepMania. * * Increment this value to invalidate the current cache. */ -const int FILE_CACHE_VERSION = 192; +const int FILE_CACHE_VERSION = 193; /** @brief How long does a song sample last by default? */ const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f; diff --git a/src/TimingSegments.h b/src/TimingSegments.h index 2b0eed4d3d..bb07e2f7c7 100644 --- a/src/TimingSegments.h +++ b/src/TimingSegments.h @@ -787,7 +787,7 @@ struct SpeedSegment : public TimingSegment { const RString str = "%.0" + IntToString(dec) + "f=%.0" + IntToString(dec) + "f=%.0" - + IntToString(dec) + "f=%uh"; + + IntToString(dec) + "f=%u"; return ssprintf(str.c_str(), this->GetBeat(), this->GetRatio(), this->GetLength(), this->GetUnit()); } From 92bab49a16f9f3bb3c15d6be3f4564660c9a643a Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 22:21:16 -0400 Subject: [PATCH 027/106] Hurp-a-durp. ...never let me say that again. Cache increased. --- src/NotesWriterSSC.cpp | 2 +- src/Song.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NotesWriterSSC.cpp b/src/NotesWriterSSC.cpp index 566905d759..0a47768f41 100644 --- a/src/NotesWriterSSC.cpp +++ b/src/NotesWriterSSC.cpp @@ -329,7 +329,7 @@ static RString GetSSCNoteData( const Song &song, const Steps &in, bool bSavingCa lines.push_back( ssprintf("//---------------%s - %s----------------", GAMEMAN->GetStepsTypeInfo(in.m_StepsType).szName, SmEscape(in.GetDescription()).c_str()) ); lines.push_back( "#NOTEDATA:;" ); // our new separator. - lines.push_back( ssprintf( "#CHARTNAME:%s:", SmEscape(in.GetChartName()).c_str())); + lines.push_back( ssprintf( "#CHARTNAME:%s;", SmEscape(in.GetChartName()).c_str())); lines.push_back( ssprintf( "#STEPSTYPE:%s;", GAMEMAN->GetStepsTypeInfo(in.m_StepsType).szName ) ); lines.push_back( ssprintf( "#DESCRIPTION:%s;", SmEscape(in.GetDescription()).c_str() ) ); lines.push_back( ssprintf( "#CHARTSTYLE:%s;", SmEscape(in.GetChartStyle()).c_str() ) ); diff --git a/src/Song.cpp b/src/Song.cpp index 2ceff1d54c..49b5f2bac4 100644 --- a/src/Song.cpp +++ b/src/Song.cpp @@ -41,7 +41,7 @@ * @brief The internal version of the cache for StepMania. * * Increment this value to invalidate the current cache. */ -const int FILE_CACHE_VERSION = 193; +const int FILE_CACHE_VERSION = 194; /** @brief How long does a song sample last by default? */ const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f; From acbf2e9aa786b9db0f95ffa90be4fcea00554bde Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 23:42:38 -0400 Subject: [PATCH 028/106] Another syntax bug, another cache force. ...alright, even I'm getting annoyed with this. --- src/NotesLoaderSM.cpp | 3 ++- src/Song.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/NotesLoaderSM.cpp b/src/NotesLoaderSM.cpp index 9a5f276105..c74e867a18 100644 --- a/src/NotesLoaderSM.cpp +++ b/src/NotesLoaderSM.cpp @@ -133,7 +133,8 @@ void SMLoader::ProcessAttackString( vector & attacks, MsdFile::value_t { RString tmp = params[s]; Trim(tmp); - attacks.push_back( tmp ); + if (tmp.size() > 0) + attacks.push_back( tmp ); } } diff --git a/src/Song.cpp b/src/Song.cpp index 49b5f2bac4..da0b73bcfc 100644 --- a/src/Song.cpp +++ b/src/Song.cpp @@ -41,7 +41,7 @@ * @brief The internal version of the cache for StepMania. * * Increment this value to invalidate the current cache. */ -const int FILE_CACHE_VERSION = 194; +const int FILE_CACHE_VERSION = 195; /** @brief How long does a song sample last by default? */ const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f; From 0944948cadd6d6795001d9bb96517682fe01e922 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 23:58:22 -0400 Subject: [PATCH 029/106] Fix Stops and Delays on the timing bar. --- src/TimingData.cpp | 2 +- src/TimingSegments.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 6097c69489..6802d7b474 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -1310,7 +1310,7 @@ vector TimingData::ToVectorString(TimingSegmentType tst, if (tst == SEGMENT_STOP_DELAY) { StopSegment *seg = static_cast(segs[i]); - if (seg->GetDelay() == isDelay) + if (seg->GetDelay() != isDelay) continue; } ret.push_back(segs[i]->ToString(dec)); diff --git a/src/TimingSegments.h b/src/TimingSegments.h index bb07e2f7c7..b8f954d467 100644 --- a/src/TimingSegments.h +++ b/src/TimingSegments.h @@ -943,7 +943,7 @@ struct StopSegment : public TimingSegment { const RString str = "%.0" + IntToString(dec) + "f=%.0" + IntToString(dec) + "f"; - return ssprintf(str.c_str(), this->GetPause()); + return ssprintf(str.c_str(), this->GetBeat(), this->GetPause()); } /** From a612d6eb93a2c5dbe0503ed57c03c8941c6b482b Mon Sep 17 00:00:00 2001 From: Alberto Ramos Date: Mon, 18 Jul 2011 11:27:28 -0600 Subject: [PATCH 030/106] fix warnings retrieving placeholders (will work with those later I promise) --- src/NotesLoaderKSF.cpp | 47 ++++++++++++++++++++++++++++++++++++++++- src/NotesLoaderMidi.cpp | 2 +- src/NotesLoaderSSC.cpp | 2 +- 3 files changed, 48 insertions(+), 3 deletions(-) diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index fdd93670c5..e920e53974 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -496,7 +496,52 @@ static void LoadTags( const RString &str, Song &out ) } static void ProcessTickcounts( const RString & value, int & ticks, TimingData & timing ) -{ +{ + /* adapt tickcounts // + // valid tickcounts for SM: 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 64, ROWS_PER_BEAT + // put this inside the tickcount handling condition yes/no + + if( iTickCount > ROWS_PER_BEAT ) // beyond 48 + { + // clamp/scale/whatever and use scroll segments + } + else if( iTickCount > 32 || iTickCount < ROWS_PER_BEAT ) // ranging from 33 to 48, approximate to 32 + { + fScrollRatio = 32; + iTickCount = 32; + } + else if( iTickCount > 24 || iTickCount < 32 ) // ranging from 25 to 31, approximate to 24 + { + fScrollRatio = 24; + iTickCount = 24; + } + else if( iTickCount > 16 || iTickCount < 24 ) // ranging from 17 to 23, approximate to 16 + { + fScrollRatio = 16; + iTickCount = 16; + } + else if( iTickCount > 12 || iTickCount < 16 ) // ranging from 13 to 15, approximate to 12 + { + fScrollRatio = 12; + iTickCount = 12; + } + else if( iTickCount > 8 || iTickCount < 12 ) // ranging from 9 to 11, approximate to 8 + { + fScrollRatio = 8; + iTickCount = 8; + } + else if( iTickCount > 6 || iTickCount < 8 ) // 7, approximate to 6 + { + fScrollRatio = 6 / iTickCountt; + iTickCount = 6; + } + else if( iTickCount > 4 || iTickCount < 6 ) // 5, approximate to 4 + { + fScrollRatio = iTickCount / 4; + iTickCount = 4; + } + //*/ + /* TICKCOUNT will be used below if there are DM compliant BPM changes * and stops. It will be called again in LoadFromKSFFile for the * actual steps. */ diff --git a/src/NotesLoaderMidi.cpp b/src/NotesLoaderMidi.cpp index e1cdabe15d..f356cdb3d6 100644 --- a/src/NotesLoaderMidi.cpp +++ b/src/NotesLoaderMidi.cpp @@ -677,7 +677,7 @@ static bool LoadFromMidi( const RString &sPath, Song &songOut ) FOREACH_CONST( MidiFileIn::TempoChange, midi.tempoEvents_, iter ) { - BPMSegment * bpmSeg; + BPMSegment * bpmSeg = NULL; bpmSeg->SetRow( MidiCountToNoteRow( iter->count ) ); double fSecondsPerBeat = (iter->tickSeconds * GUITAR_MIDI_COUNTS_PER_BEAT); bpmSeg->SetBPS( float( 1. / fSecondsPerBeat ) ); diff --git a/src/NotesLoaderSSC.cpp b/src/NotesLoaderSSC.cpp index 4475916620..bcefb97fad 100644 --- a/src/NotesLoaderSSC.cpp +++ b/src/NotesLoaderSSC.cpp @@ -161,7 +161,7 @@ bool SSCLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ) } bool tryingSteps = false; - float storedVersion; + float storedVersion = 0; const unsigned values = msd.GetNumValues(); for (unsigned i = 0; i < values; i++) From 09ec4bee646f03f53db263219610f261849eb262 Mon Sep 17 00:00:00 2001 From: Colby Klein Date: Mon, 18 Jul 2011 11:33:44 -0700 Subject: [PATCH 031/106] ARB_fragment_program is not the correct ext: we need ARB_fragment_shader instead. I didn't notice as I don't have any hardware which does not support frag shaders. --- src/RageDisplay_Legacy.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/RageDisplay_Legacy.cpp b/src/RageDisplay_Legacy.cpp index 4247510dc7..2b664f2f5b 100644 --- a/src/RageDisplay_Legacy.cpp +++ b/src/RageDisplay_Legacy.cpp @@ -340,7 +340,7 @@ GLhandleARB CompileShader( GLenum ShaderType, RString sFile, vector asD GLhandleARB LoadShader( GLenum ShaderType, RString sFile, vector asDefines ) { // Don't do anything here if not the hardware/driver can't do it! - if (!GLEW_ARB_fragment_program && GLEW_ARB_shading_language_100 && ShaderType == GL_FRAGMENT_SHADER_ARB) + if (!GLEW_ARB_fragment_shader && ShaderType == GL_FRAGMENT_SHADER_ARB) return 0; if (!GLEW_ARB_vertex_shader && ShaderType == GL_VERTEX_SHADER_ARB) return 0; @@ -1662,7 +1662,7 @@ void RageDisplay_Legacy::SetTextureFiltering( TextureUnit tu, bool b ) void RageDisplay_Legacy::SetEffectMode( EffectMode effect ) { - if (!GLEW_ARB_fragment_program && !GLEW_ARB_shading_language_100) + if (!GLEW_ARB_fragment_shader) return; GLhandleARB hShader = 0; @@ -2648,11 +2648,9 @@ void RageDisplay_Legacy::SetSphereEnvironmentMapping(TextureUnit tu, bool b) } } -GLint iCelTexture1, iCelTexture2 = 0; - void RageDisplay_Legacy::SetCelShaded( int stage ) { - if (!GLEW_ARB_fragment_program && !GL_ARB_shading_language_100) + if (!GLEW_ARB_fragment_shader) return; // not supported switch (stage) From ab7c163f52e7aa660878e1f41ac6eea948d17aec Mon Sep 17 00:00:00 2001 From: Alberto Ramos Date: Mon, 18 Jul 2011 20:06:40 -0600 Subject: [PATCH 032/106] is broken... --- src/NotesLoaderKSF.cpp | 1596 ++++++++++++++++++++-------------------- 1 file changed, 798 insertions(+), 798 deletions(-) diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index e920e53974..e55c6aac1e 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -1,501 +1,501 @@ -#include "global.h" -#include "NotesLoaderKSF.h" -#include "RageUtil_CharConversions.h" -#include "MsdFile.h" -#include "RageLog.h" -#include "RageUtil.h" -#include "NoteData.h" -#include "NoteTypes.h" -#include "Song.h" -#include "Steps.h" - -static void HandleBunki( TimingData &timing, const float fEarlyBPM, - const float fCurBPM, const float fGap, - const float fPos ) -{ - const float BeatsPerSecond = fEarlyBPM / 60.0f; - const float beat = (fPos + fGap) * BeatsPerSecond; - LOG->Trace( "BPM %f, BPS %f, BPMPos %f, beat %f", - fEarlyBPM, BeatsPerSecond, fPos, beat ); - timing.AddSegment( SEGMENT_BPM, new BPMSegment(beat, fCurBPM) ); -} - -static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, bool bKIUCompliant ) -{ - LOG->Trace( "Steps::LoadFromKSFFile( '%s' )", sPath.c_str() ); - - MsdFile msd; - if( !msd.ReadFile( sPath, false ) ) // don't unescape - { - LOG->UserLog( "Song file", sPath, "couldn't be opened: %s", msd.GetError().c_str() ); - return false; - } - - // this is the value we read for TICKCOUNT - int iTickCount = -1; - // used to adapt weird tickcounts - //float fScrollRatio = 1.0f; -- uncomment when ready to use. - vector vNoteRows; - - // According to Aldo_MX, there is a default BPM and it's 60. -aj - bool bDoublesChart = false; - - TimingData stepsTiming; - float SMGap1 = 0, SMGap2 = 0, BPM1 = -1, BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1; - - for( unsigned i=0; iUserLog( "Song file", sPath, "has an invalid tick count: %d.", iTickCount ); - return false; - } - stepsTiming.AddSegment( SEGMENT_TICKCOUNT, new TickcountSegment(0, iTickCount)); - } - - else if( sValueName=="DIFFICULTY" ) - { - out.SetMeter( max(StringToInt(sParams[1]), 0) ); - } - // new cases from Aldo_MX's fork: - else if( sValueName=="PLAYER" ) - { - RString sPlayer = sParams[1]; - sPlayer.MakeLower(); - if( sPlayer.find( "double" ) != string::npos ) - bDoublesChart = true; - } - // This should always be last. - else if( sValueName=="STEP" ) - { - RString theSteps = sParams[1]; - TrimLeft( theSteps ); - split( theSteps, "\n", vNoteRows, true ); - } - } - - if( iTickCount == -1 ) - { - iTickCount = 4; - LOG->UserLog( "Song file", sPath, "doesn't have a TICKCOUNT. Defaulting to %i.", iTickCount ); - } - - // Prepare BPM stuff already if the file uses KSF syntax. - if( bKIUCompliant ) - { - if( BPM2 > 0 && BPMPos2 > 0 ) - { - HandleBunki( stepsTiming, BPM1, BPM2, SMGap1, BPMPos2 ); - } - - if( BPM3 > 0 && BPMPos3 > 0 ) - { - HandleBunki( stepsTiming, BPM2, BPM3, SMGap2, BPMPos3 ); - } - } - - NoteData notedata; // read it into here - - { - RString sDir, sFName, sExt; - splitpath( sPath, sDir, sFName, sExt ); - sFName.MakeLower(); - - out.SetDescription(sFName); - // Check another before anything else... is this okay? -DaisuMaster - if( sFName.find("another") != string::npos ) - { - out.SetDifficulty( Difficulty_Edit ); - if( !out.GetMeter() ) out.SetMeter( 25 ); - } - else if(sFName.find("wild") != string::npos || - sFName.find("wd") != string::npos || - sFName.find("crazy+") != string::npos || - sFName.find("cz+") != string::npos || - sFName.find("hardcore") != string::npos ) - { - out.SetDifficulty( Difficulty_Challenge ); - if( !out.GetMeter() ) out.SetMeter( 20 ); - } - else if(sFName.find("crazy") != string::npos || - sFName.find("cz") != string::npos || - sFName.find("nightmare") != string::npos || - sFName.find("nm") != string::npos || - sFName.find("crazydouble") != string::npos ) - { - out.SetDifficulty( Difficulty_Hard ); - if( !out.GetMeter() ) out.SetMeter( 14 ); // Set the meters to the Pump scale, not DDR. - } - else if(sFName.find("hard") != string::npos || - sFName.find("hd") != string::npos || - sFName.find("freestyle") != string::npos || - sFName.find("fs") != string::npos || - sFName.find("double") != string::npos ) - { - out.SetDifficulty( Difficulty_Medium ); - if( !out.GetMeter() ) out.SetMeter( 8 ); - } - else if(sFName.find("easy") != string::npos || - sFName.find("ez") != string::npos || - sFName.find("normal") != string::npos ) - { - // I wonder if I should leave easy fall into the Beginner difficulty... -DaisuMaster - out.SetDifficulty( Difficulty_Easy ); - if( !out.GetMeter() ) out.SetMeter( 4 ); - } - else if(sFName.find("beginner") != string::npos || - sFName.find("practice") != string::npos || sFName.find("pr") != string::npos ) - { - out.SetDifficulty( Difficulty_Beginner ); - if( !out.GetMeter() ) out.SetMeter( 4 ); - } - else - { - out.SetDifficulty( Difficulty_Hard ); - if( !out.GetMeter() ) out.SetMeter( 10 ); - } - - out.m_StepsType = StepsType_pump_single; - - // Check for "halfdouble" before "double". - if(sFName.find("halfdouble") != string::npos || - sFName.find("half-double") != string::npos || - sFName.find("h_double") != string::npos || - sFName.find("hdb") != string::npos ) - out.m_StepsType = StepsType_pump_halfdouble; - // Handle bDoublesChart from above as well. -aj - else if(sFName.find("double") != string::npos || - sFName.find("nightmare") != string::npos || - sFName.find("freestyle") != string::npos || - sFName.find("db") != string::npos || - sFName.find("nm") != string::npos || - sFName.find("fs") != string::npos || bDoublesChart ) - out.m_StepsType = StepsType_pump_double; - else if( sFName.find("_1") != string::npos ) - out.m_StepsType = StepsType_pump_single; - else if( sFName.find("_2") != string::npos ) - out.m_StepsType = StepsType_pump_couple; - } - - switch( out.m_StepsType ) - { - case StepsType_pump_single: notedata.SetNumTracks( 5 ); break; - case StepsType_pump_couple: notedata.SetNumTracks( 10 ); break; - case StepsType_pump_double: notedata.SetNumTracks( 10 ); break; - case StepsType_pump_routine: notedata.SetNumTracks( 10 ); break; // future files may have this? - case StepsType_pump_halfdouble: notedata.SetNumTracks( 6 ); break; - default: FAIL_M( ssprintf("%i", out.m_StepsType) ); - } - - int t = 0; - int iHoldStartRow[13]; - for( t=0; t<13; t++ ) - iHoldStartRow[t] = -1; - - bool bTickChangeNeeded = false; - int newTick = -1; - float fCurBeat = 0.0f; - float prevBeat = 0.0f; // Used for hold tails. - - for( unsigned r=0; r(numTemp); - stepsTiming.SetTickcountAtBeat( fCurBeat, clamp(iTickCount, 0, ROWS_PER_BEAT) ); - } - else if (BeginsWith(sRowString, "|B")) - { - // BPM - stepsTiming.SetBPMAtBeat( fCurBeat, numTemp ); - } - else if (BeginsWith(sRowString, "|E")) - { - // DelayBeat - float fCurDelay = 60 / stepsTiming.GetBPMAtBeat(fCurBeat) * numTemp / iTickCount; - fCurDelay += stepsTiming.GetDelayAtRow(BeatToNoteRow(fCurBeat) ); - stepsTiming.SetStopAtBeat( fCurBeat, fCurDelay, true ); - } - else if (BeginsWith(sRowString, "|D")) - { - // Delays - float fCurDelay = stepsTiming.GetStopAtRow(BeatToNoteRow(fCurBeat) ); - fCurDelay += numTemp / 1000; - stepsTiming.SetStopAtBeat( fCurBeat, fCurDelay, true ); - } - else if (BeginsWith(sRowString, "|M") || BeginsWith(sRowString, "|C")) - { - // multipliers/combo - stepsTiming.SetHitComboAtBeat( fCurBeat, static_cast(numTemp) ); - } - else if (BeginsWith(sRowString, "|S")) - { - // speed segments - } - else if (BeginsWith(sRowString, "|F")) - { - // fakes - } - else if (BeginsWith(sRowString, "|X")) - { - // scroll segments - stepsTiming.SetScrollAtBeat( fCurBeat, numTemp ); - return true; - } - - continue; - } - - // Half-doubles is offset; "0011111100000". - if( out.m_StepsType == StepsType_pump_halfdouble ) - sRowString.erase( 0, 2 ); - - // Update TICKCOUNT for Direct Move files. - if( bTickChangeNeeded ) - { - iTickCount = newTick; - bTickChangeNeeded = false; - } - - for( t=0; t < notedata.GetNumTracks(); t++ ) - { - if( sRowString[t] == '4' ) - { - /* Remember when each hold starts; ignore the middle. */ - if( iHoldStartRow[t] == -1 ) - iHoldStartRow[t] = BeatToNoteRow(fCurBeat); - continue; - } - - if( iHoldStartRow[t] != -1 ) // this ends the hold - { - int iEndRow = BeatToNoteRow(prevBeat); - if( iHoldStartRow[t] == iEndRow ) - notedata.SetTapNote( t, iHoldStartRow[t], TAP_ORIGINAL_TAP ); - else - { - //notedata.AddHoldNote( t, iHoldStartRow[t], iEndRow , TAP_ORIGINAL_PUMP_HEAD ); - notedata.AddHoldNote( t, iHoldStartRow[t], iEndRow , TAP_ORIGINAL_HOLD_HEAD ); - } - iHoldStartRow[t] = -1; - } - - TapNote tap; - switch( sRowString[t] ) - { - case '0': tap = TAP_EMPTY; break; - case '1': tap = TAP_ORIGINAL_TAP; break; - //allow setting more notetypes on ksf files, this may come in handy (it should) -DaisuMaster - case 'M': - case 'm': - tap = TAP_ORIGINAL_MINE; - break; - case 'F': - case 'f': - tap = TAP_ORIGINAL_FAKE; - break; - case 'L': - case 'l': - tap = TAP_ORIGINAL_LIFT; - break; - default: - LOG->UserLog( "Song file", sPath, "has an invalid row \"%s\"; corrupt notes ignored.", - sRowString.c_str() ); - //return false; - tap = TAP_EMPTY; - break; - } - - notedata.SetTapNote(t, BeatToNoteRow(fCurBeat), tap); - } - prevBeat = fCurBeat; - fCurBeat = prevBeat + 1.0f / iTickCount; - } - - out.SetNoteData( notedata ); - out.m_Timing = stepsTiming; - - out.TidyUpData(); - - out.SetSavedToDisk( true ); // we're loading from disk, so this is by definintion already saved - - return true; -} - -static void LoadTags( const RString &str, Song &out ) -{ - /* str is either a #TITLE or a directory component. Fill in missing information. - * str is either "title", "artist - title", or "artist - title - difficulty". */ - vector asBits; - split( str, " - ", asBits, false ); - // Ignore the difficulty, since we get that elsewhere. - if( asBits.size() == 3 && ( - asBits[2].EqualsNoCase("double") || - asBits[2].EqualsNoCase("easy") || - asBits[2].EqualsNoCase("normal") || - asBits[2].EqualsNoCase("hard") || - asBits[2].EqualsNoCase("crazy") || - asBits[2].EqualsNoCase("nightmare")) - ) - { - asBits.erase( asBits.begin()+2, asBits.begin()+3 ); - } - - RString title, artist; - if( asBits.size() == 2 ) - { - artist = asBits[0]; - title = asBits[1]; - } - else if( asBits.size() == 1 ) - { - title = asBits[0]; - } - - // Convert, if possible. Most KSFs are in Korean encodings (CP942/EUC-KR). - if( !ConvertString( title, "korean" ) ) - title = ""; - if( !ConvertString( artist, "korean" ) ) - artist = ""; - - if( out.m_sMainTitle == "" ) - out.m_sMainTitle = title; - if( out.m_sArtist == "" ) - out.m_sArtist = artist; -} - -static void ProcessTickcounts( const RString & value, int & ticks, TimingData & timing ) +#include "global.h" +#include "NotesLoaderKSF.h" +#include "RageUtil_CharConversions.h" +#include "MsdFile.h" +#include "RageLog.h" +#include "RageUtil.h" +#include "NoteData.h" +#include "NoteTypes.h" +#include "Song.h" +#include "Steps.h" + +static void HandleBunki( TimingData &timing, const float fEarlyBPM, + const float fCurBPM, const float fGap, + const float fPos ) +{ + const float BeatsPerSecond = fEarlyBPM / 60.0f; + const float beat = (fPos + fGap) * BeatsPerSecond; + LOG->Trace( "BPM %f, BPS %f, BPMPos %f, beat %f", + fEarlyBPM, BeatsPerSecond, fPos, beat ); + timing.AddSegment( SEGMENT_BPM, new BPMSegment(beat, fCurBPM) ); +} + +static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, bool bKIUCompliant ) +{ + LOG->Trace( "Steps::LoadFromKSFFile( '%s' )", sPath.c_str() ); + + MsdFile msd; + if( !msd.ReadFile( sPath, false ) ) // don't unescape + { + LOG->UserLog( "Song file", sPath, "couldn't be opened: %s", msd.GetError().c_str() ); + return false; + } + + // this is the value we read for TICKCOUNT + int iTickCount = -1; + // used to adapt weird tickcounts + //float fScrollRatio = 1.0f; -- uncomment when ready to use. + vector vNoteRows; + + // According to Aldo_MX, there is a default BPM and it's 60. -aj + bool bDoublesChart = false; + + TimingData stepsTiming; + float SMGap1 = 0, SMGap2 = 0, BPM1 = -1, BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1; + + for( unsigned i=0; iUserLog( "Song file", sPath, "has an invalid tick count: %d.", iTickCount ); + return false; + } + stepsTiming.AddSegment( SEGMENT_TICKCOUNT, new TickcountSegment(0, iTickCount)); + } + + else if( sValueName=="DIFFICULTY" ) + { + out.SetMeter( max(StringToInt(sParams[1]), 0) ); + } + // new cases from Aldo_MX's fork: + else if( sValueName=="PLAYER" ) + { + RString sPlayer = sParams[1]; + sPlayer.MakeLower(); + if( sPlayer.find( "double" ) != string::npos ) + bDoublesChart = true; + } + // This should always be last. + else if( sValueName=="STEP" ) + { + RString theSteps = sParams[1]; + TrimLeft( theSteps ); + split( theSteps, "\n", vNoteRows, true ); + } + } + + if( iTickCount == -1 ) + { + iTickCount = 4; + LOG->UserLog( "Song file", sPath, "doesn't have a TICKCOUNT. Defaulting to %i.", iTickCount ); + } + + // Prepare BPM stuff already if the file uses KSF syntax. + if( bKIUCompliant ) + { + if( BPM2 > 0 && BPMPos2 > 0 ) + { + HandleBunki( stepsTiming, BPM1, BPM2, SMGap1, BPMPos2 ); + } + + if( BPM3 > 0 && BPMPos3 > 0 ) + { + HandleBunki( stepsTiming, BPM2, BPM3, SMGap2, BPMPos3 ); + } + } + + NoteData notedata; // read it into here + + { + RString sDir, sFName, sExt; + splitpath( sPath, sDir, sFName, sExt ); + sFName.MakeLower(); + + out.SetDescription(sFName); + // Check another before anything else... is this okay? -DaisuMaster + if( sFName.find("another") != string::npos ) + { + out.SetDifficulty( Difficulty_Edit ); + if( !out.GetMeter() ) out.SetMeter( 25 ); + } + else if(sFName.find("wild") != string::npos || + sFName.find("wd") != string::npos || + sFName.find("crazy+") != string::npos || + sFName.find("cz+") != string::npos || + sFName.find("hardcore") != string::npos ) + { + out.SetDifficulty( Difficulty_Challenge ); + if( !out.GetMeter() ) out.SetMeter( 20 ); + } + else if(sFName.find("crazy") != string::npos || + sFName.find("cz") != string::npos || + sFName.find("nightmare") != string::npos || + sFName.find("nm") != string::npos || + sFName.find("crazydouble") != string::npos ) + { + out.SetDifficulty( Difficulty_Hard ); + if( !out.GetMeter() ) out.SetMeter( 14 ); // Set the meters to the Pump scale, not DDR. + } + else if(sFName.find("hard") != string::npos || + sFName.find("hd") != string::npos || + sFName.find("freestyle") != string::npos || + sFName.find("fs") != string::npos || + sFName.find("double") != string::npos ) + { + out.SetDifficulty( Difficulty_Medium ); + if( !out.GetMeter() ) out.SetMeter( 8 ); + } + else if(sFName.find("easy") != string::npos || + sFName.find("ez") != string::npos || + sFName.find("normal") != string::npos ) + { + // I wonder if I should leave easy fall into the Beginner difficulty... -DaisuMaster + out.SetDifficulty( Difficulty_Easy ); + if( !out.GetMeter() ) out.SetMeter( 4 ); + } + else if(sFName.find("beginner") != string::npos || + sFName.find("practice") != string::npos || sFName.find("pr") != string::npos ) + { + out.SetDifficulty( Difficulty_Beginner ); + if( !out.GetMeter() ) out.SetMeter( 4 ); + } + else + { + out.SetDifficulty( Difficulty_Hard ); + if( !out.GetMeter() ) out.SetMeter( 10 ); + } + + out.m_StepsType = StepsType_pump_single; + + // Check for "halfdouble" before "double". + if(sFName.find("halfdouble") != string::npos || + sFName.find("half-double") != string::npos || + sFName.find("h_double") != string::npos || + sFName.find("hdb") != string::npos ) + out.m_StepsType = StepsType_pump_halfdouble; + // Handle bDoublesChart from above as well. -aj + else if(sFName.find("double") != string::npos || + sFName.find("nightmare") != string::npos || + sFName.find("freestyle") != string::npos || + sFName.find("db") != string::npos || + sFName.find("nm") != string::npos || + sFName.find("fs") != string::npos || bDoublesChart ) + out.m_StepsType = StepsType_pump_double; + else if( sFName.find("_1") != string::npos ) + out.m_StepsType = StepsType_pump_single; + else if( sFName.find("_2") != string::npos ) + out.m_StepsType = StepsType_pump_couple; + } + + switch( out.m_StepsType ) + { + case StepsType_pump_single: notedata.SetNumTracks( 5 ); break; + case StepsType_pump_couple: notedata.SetNumTracks( 10 ); break; + case StepsType_pump_double: notedata.SetNumTracks( 10 ); break; + case StepsType_pump_routine: notedata.SetNumTracks( 10 ); break; // future files may have this? + case StepsType_pump_halfdouble: notedata.SetNumTracks( 6 ); break; + default: FAIL_M( ssprintf("%i", out.m_StepsType) ); + } + + int t = 0; + int iHoldStartRow[13]; + for( t=0; t<13; t++ ) + iHoldStartRow[t] = -1; + + bool bTickChangeNeeded = false; + int newTick = -1; + float fCurBeat = 0.0f; + float prevBeat = 0.0f; // Used for hold tails. + + for( unsigned r=0; r(numTemp); + // I have been owned by the man -DaisuMaster + stepsTiming.SetTickcountAtBeat( fCurBeat, clamp(iTickCount, 0, ROWS_PER_BEAT) ); + } + else if (BeginsWith(sRowString, "|B")) + { + // BPM + stepsTiming.SetBPMAtBeat( fCurBeat, numTemp ); + } + else if (BeginsWith(sRowString, "|E")) + { + // DelayBeat + float fCurDelay = 60 / stepsTiming.GetBPMAtBeat(fCurBeat) * numTemp / iTickCount; + fCurDelay += stepsTiming.GetDelayAtRow(BeatToNoteRow(fCurBeat) ); + stepsTiming.SetStopAtBeat( fCurBeat, fCurDelay, true ); + } + else if (BeginsWith(sRowString, "|D")) + { + // Delays + float fCurDelay = stepsTiming.GetStopAtRow(BeatToNoteRow(fCurBeat) ); + fCurDelay += numTemp / 1000; + stepsTiming.SetStopAtBeat( fCurBeat, fCurDelay, true ); + } + else if (BeginsWith(sRowString, "|M") || BeginsWith(sRowString, "|C")) + { + // multipliers/combo + stepsTiming.SetHitComboAtBeat( fCurBeat, static_cast(numTemp) ); + } + else if (BeginsWith(sRowString, "|S")) + { + // speed segments + } + else if (BeginsWith(sRowString, "|F")) + { + // fakes + } + else if (BeginsWith(sRowString, "|X")) + { + // scroll segments + stepsTiming.SetScrollAtBeat( fCurBeat, numTemp ); + //return true; + } + + continue; + } + + // Half-doubles is offset; "0011111100000". + if( out.m_StepsType == StepsType_pump_halfdouble ) + sRowString.erase( 0, 2 ); + + // Update TICKCOUNT for Direct Move files. + if( bTickChangeNeeded ) + { + iTickCount = newTick; + bTickChangeNeeded = false; + } + + for( t=0; t < notedata.GetNumTracks(); t++ ) + { + if( sRowString[t] == '4' ) + { + /* Remember when each hold starts; ignore the middle. */ + if( iHoldStartRow[t] == -1 ) + iHoldStartRow[t] = BeatToNoteRow(fCurBeat); + continue; + } + + if( iHoldStartRow[t] != -1 ) // this ends the hold + { + int iEndRow = BeatToNoteRow(prevBeat); + if( iHoldStartRow[t] == iEndRow ) + notedata.SetTapNote( t, iHoldStartRow[t], TAP_ORIGINAL_TAP ); + else + { + //notedata.AddHoldNote( t, iHoldStartRow[t], iEndRow , TAP_ORIGINAL_PUMP_HEAD ); + notedata.AddHoldNote( t, iHoldStartRow[t], iEndRow , TAP_ORIGINAL_HOLD_HEAD ); + } + iHoldStartRow[t] = -1; + } + + TapNote tap; + switch( sRowString[t] ) + { + case '0': tap = TAP_EMPTY; break; + case '1': tap = TAP_ORIGINAL_TAP; break; + //allow setting more notetypes on ksf files, this may come in handy (it should) -DaisuMaster + case 'M': + case 'm': + tap = TAP_ORIGINAL_MINE; + break; + case 'F': + case 'f': + tap = TAP_ORIGINAL_FAKE; + break; + case 'L': + case 'l': + tap = TAP_ORIGINAL_LIFT; + break; + default: + LOG->UserLog( "Song file", sPath, "has an invalid row \"%s\"; corrupt notes ignored.", + sRowString.c_str() ); + //return false; + tap = TAP_EMPTY; + break; + } + + notedata.SetTapNote(t, BeatToNoteRow(fCurBeat), tap); + } + prevBeat = fCurBeat; + fCurBeat = prevBeat + 1.0f / iTickCount; + } + + out.SetNoteData( notedata ); + out.m_Timing = stepsTiming; + + out.TidyUpData(); + + out.SetSavedToDisk( true ); // we're loading from disk, so this is by definintion already saved + + return true; +} + +static void LoadTags( const RString &str, Song &out ) +{ + /* str is either a #TITLE or a directory component. Fill in missing information. + * str is either "title", "artist - title", or "artist - title - difficulty". */ + vector asBits; + split( str, " - ", asBits, false ); + // Ignore the difficulty, since we get that elsewhere. + if( asBits.size() == 3 && ( + asBits[2].EqualsNoCase("double") || + asBits[2].EqualsNoCase("easy") || + asBits[2].EqualsNoCase("normal") || + asBits[2].EqualsNoCase("hard") || + asBits[2].EqualsNoCase("crazy") || + asBits[2].EqualsNoCase("nightmare")) + ) + { + asBits.erase( asBits.begin()+2, asBits.begin()+3 ); + } + + RString title, artist; + if( asBits.size() == 2 ) + { + artist = asBits[0]; + title = asBits[1]; + } + else if( asBits.size() == 1 ) + { + title = asBits[0]; + } + + // Convert, if possible. Most KSFs are in Korean encodings (CP942/EUC-KR). + if( !ConvertString( title, "korean" ) ) + title = ""; + if( !ConvertString( artist, "korean" ) ) + artist = ""; + + if( out.m_sMainTitle == "" ) + out.m_sMainTitle = title; + if( out.m_sArtist == "" ) + out.m_sArtist = artist; +} + +static void ProcessTickcounts( const RString & tempValue, int & ticks, TimingData & timing ) { /* adapt tickcounts // // valid tickcounts for SM: 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 64, ROWS_PER_BEAT @@ -540,303 +540,303 @@ static void ProcessTickcounts( const RString & value, int & ticks, TimingData & fScrollRatio = iTickCount / 4; iTickCount = 4; } - //*/ - - /* TICKCOUNT will be used below if there are DM compliant BPM changes - * and stops. It will be called again in LoadFromKSFFile for the - * actual steps. */ - ticks = StringToInt( value ); - ticks = ticks > 0 ? ticks : 4; - // add a tickcount for those using the [Player] - // CheckpointsUseTimeSignatures metric. -aj - // It's not with timesigs now -DaisuMaster - TickcountSegment * tcs = new TickcountSegment(0, ticks > ROWS_PER_BEAT ? ROWS_PER_BEAT : ticks); - timing.AddSegment( SEGMENT_TICKCOUNT, tcs ); -} - -static bool LoadGlobalData( const RString &sPath, Song &out, bool &bKIUCompliant ) -{ - MsdFile msd; - if( !msd.ReadFile( sPath, false ) ) // don't unescape - { - LOG->UserLog( "Song file", sPath, "couldn't be opened: %s", msd.GetError().c_str() ); - return false; - } - - // changed up there in case of something is found inside the SONGFILE tag in the head ksf -DaisuMaster - // search for music with song in the file name - vector arrayPossibleMusic; - GetDirListing( out.GetSongDir() + RString("song.mp3"), arrayPossibleMusic ); - GetDirListing( out.GetSongDir() + RString("song.oga"), arrayPossibleMusic ); - GetDirListing( out.GetSongDir() + RString("song.ogg"), arrayPossibleMusic ); - GetDirListing( out.GetSongDir() + RString("song.wav"), arrayPossibleMusic ); - - if( !arrayPossibleMusic.empty() ) // we found a match - out.m_sMusicFile = arrayPossibleMusic[0]; - // ^this was below, at the end - - float SMGap1 = 0, SMGap2 = 0, BPM1 = -1, BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1; - int iTickCount = -1; - bKIUCompliant = false; - vector vNoteRows; - - for( unsigned i=0; i < msd.GetNumValues(); i++ ) - { - const MsdFile::value_t &sParams = msd.GetValue(i); - RString sValueName = sParams[0]; - sValueName.MakeUpper(); - - // handle the data - if( sValueName=="TITLE" ) - LoadTags(sParams[1], out); - else if( sValueName=="BPM" ) - { - BPM1 = StringToFloat(sParams[1]); - out.m_SongTiming.AddSegment( SEGMENT_BPM, new BPMSegment(0, BPM1) ); - } - else if( sValueName=="BPM2" ) - { - bKIUCompliant = true; - BPM2 = StringToFloat( sParams[1] ); - } - else if( sValueName=="BPM3" ) - { - bKIUCompliant = true; - BPM3 = StringToFloat( sParams[1] ); - } - else if( sValueName=="BUNKI" ) - { - bKIUCompliant = true; - BPMPos2 = StringToFloat( sParams[1] ) / 100.0f; - } - else if( sValueName=="BUNKI2" ) - { - bKIUCompliant = true; - BPMPos3 = StringToFloat( sParams[1] ) / 100.0f; - } - else if( sValueName=="STARTTIME" ) - { - SMGap1 = -StringToFloat( sParams[1] )/100; - out.m_SongTiming.m_fBeat0OffsetInSeconds = SMGap1; - } - // This is currently required for more accurate KIU BPM changes. - else if( sValueName=="STARTTIME2" ) - { - bKIUCompliant = true; - SMGap2 = -StringToFloat( sParams[1] )/100; - } - else if ( sValueName=="STARTTIME3" ) - { - // STARTTIME3 only ensures this is a KIU compliant simfile. - bKIUCompliant = true; - } - else if ( sValueName=="TICKCOUNT" ) - { - ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); - } - else if ( sValueName=="STEP" ) - { - /* STEP will always be the last header in a KSF file by design. Due to - * the Direct Move syntax, it is best to get the rows of notes here. */ - RString theSteps = sParams[1]; - TrimLeft( theSteps ); - split( theSteps, "\n", vNoteRows, true ); - } - - else if( sValueName=="DIFFICULTY" ) - { - /* DIFFICULTY is handled only in LoadFromKSFFile. Ignore it here. */ - continue; - } - // New cases noted in Aldo_MX's code: - else if( sValueName=="MUSICINTRO" || sValueName=="INTRO" ) - { - out.m_fMusicSampleStartSeconds = HHMMSSToSeconds( sParams[1] ); - } - else if( sValueName=="TITLEFILE" ) - { - out.m_sBackgroundFile = sParams[1]; - } - else if( sValueName=="DISCFILE" ) - { - out.m_sBannerFile = sParams[1]; - } - else if( sValueName=="SONGFILE" ) - { - out.m_sMusicFile = sParams[1]; - } - //else if( sValueName=="INTROFILE" ) - //{ - // nothing to add... - //} - // end new cases - else - { - LOG->UserLog( "Song file", sPath, "has an unexpected value named \"%s\".", - sValueName.c_str() ); - } - } - - //intro length in piu mixes is generally 7 seconds - out.m_fMusicSampleLengthSeconds = 7.0f; - - /* BPM Change checks are done here. If bKIUCompliant, it's short and sweet. - * Otherwise, the whole file has to be processed. Right now, this is only - * called once, for the initial file (often the Crazy steps). Hopefully that - * will end up changing soon. */ - if( bKIUCompliant ) - { - if( BPM2 > 0 && BPMPos2 > 0 ) - { - HandleBunki( out.m_SongTiming, BPM1, BPM2, SMGap1, BPMPos2 ); - } - - if( BPM3 > 0 && BPMPos3 > 0 ) - { - HandleBunki( out.m_SongTiming, BPM2, BPM3, SMGap2, BPMPos3 ); - } - } - else - { - float fCurBeat = 0.0f; - bool bDMRequired = false; - - for( unsigned i=0; i < vNoteRows.size(); ++i ) - { - RString& NoteRowString = vNoteRows[i]; - StripCrnl( NoteRowString ); - - if( NoteRowString == "" ) - continue; // ignore empty rows. - - if( NoteRowString == "2222222222222" ) // Row of 2s = end. Confirm KIUCompliency here. - { - if (!bDMRequired) - bKIUCompliant = true; - break; - } - - // This is where the DMRequired test will take place. - if ( BeginsWith( NoteRowString, "|" ) ) - { - // have a static timing for everything - bDMRequired = true; - continue; - } - else - { - // ignore whatever else... - //continue; - } - - fCurBeat += 1.0f / iTickCount; - } - } - - // Try to fill in missing bits of information from the pathname. - { - vector asBits; - split( sPath, "/", asBits, true); - - ASSERT( asBits.size() > 1 ); - LoadTags( asBits[asBits.size()-2], out ); - } - - return true; -} - -void KSFLoader::GetApplicableFiles( const RString &sPath, vector &out ) -{ - GetDirListing( sPath + RString("*.ksf"), out ); -} - -bool KSFLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ) -{ - bool KIUCompliant = false; - Song dummy; - if (!LoadGlobalData(cachePath, dummy, KIUCompliant)) - return false; - Steps *notes = dummy.CreateSteps(); - if (LoadFromKSFFile(cachePath, *notes, dummy, KIUCompliant)) - { - KIUCompliant = true; // yeah, reusing a variable. - out.SetNoteData(notes->GetNoteData()); - } - delete notes; - return KIUCompliant; -} - -bool KSFLoader::LoadFromDir( const RString &sDir, Song &out ) -{ - LOG->Trace( "KSFLoader::LoadFromDir(%s)", sDir.c_str() ); - - vector arrayKSFFileNames; - GetDirListing( sDir + RString("*.ksf"), arrayKSFFileNames ); - - // We shouldn't have been called to begin with if there were no KSFs. - ASSERT( arrayKSFFileNames.size() ); - - bool bKIUCompliant = false; - /* With Split Timing, there has to be a backup Song Timing in case - * anything goes wrong. As these files are kept in alphabetical - * order (hopefully), it is best to use the LAST file for timing - * purposes, for that is the "normal", or easiest difficulty. - * Usually. */ - // Nevermind, kiu compilancy is screwing things up: - // IE, I have two simfiles, oh wich each have four ksf files, the first one has - // the first ksf with directmove timing changes, and the rest are not, everything - // goes fine. In the other hand I have my second simfile with the first ksf file - // without directmove timing changes and the rest have changes, changes are not - // loaded due to kiucompilancy in the first ksf file. - // About the "normal" thing, my simfiles' ksfs uses non-standard naming so - // the last chart is usually nightmare or normal, I use easy and normal - // indistinctly for SM so it shouldn't matter, I use piu fiesta/ex naming - // for directmove though, and we're just gathering basic info anyway, and - // most of the time all the KSF files have the same info in the #TITLE:; section - unsigned files = arrayKSFFileNames.size(); - RString dir = out.GetSongDir(); - if( !LoadGlobalData(dir + arrayKSFFileNames[files - 1], out, bKIUCompliant) ) - return false; - - out.m_sSongFileName = dir + arrayKSFFileNames[files - 1]; - // load the Steps from the rest of the KSF files - for( unsigned i=0; iSetFilename(dir + arrayKSFFileNames[i]); - out.AddSteps( pNewNotes ); - } - out.TidyUpData(false, true); - - return true; -} - -/* - * (c) 2001-2006 Chris Danford, Glenn Maynard, Jason Felds - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ + //*/ + + /* TICKCOUNT will be used below if there are DM compliant BPM changes + * and stops. It will be called again in LoadFromKSFFile for the + * actual steps. */ + ticks = StringToInt( tempValue ); + ticks = ticks > 0 ? ticks : 4; + // add a tickcount for those using the [Player] + // CheckpointsUseTimeSignatures metric. -aj + // It's not with timesigs now -DaisuMaster + TickcountSegment * tcs = new TickcountSegment(0, ticks > ROWS_PER_BEAT ? ROWS_PER_BEAT : ticks); + timing.AddSegment( SEGMENT_TICKCOUNT, tcs ); +} + +static bool LoadGlobalData( const RString &sPath, Song &out, bool &bKIUCompliant ) +{ + MsdFile msd; + if( !msd.ReadFile( sPath, false ) ) // don't unescape + { + LOG->UserLog( "Song file", sPath, "couldn't be opened: %s", msd.GetError().c_str() ); + return false; + } + + // changed up there in case of something is found inside the SONGFILE tag in the head ksf -DaisuMaster + // search for music with song in the file name + vector arrayPossibleMusic; + GetDirListing( out.GetSongDir() + RString("song.mp3"), arrayPossibleMusic ); + GetDirListing( out.GetSongDir() + RString("song.oga"), arrayPossibleMusic ); + GetDirListing( out.GetSongDir() + RString("song.ogg"), arrayPossibleMusic ); + GetDirListing( out.GetSongDir() + RString("song.wav"), arrayPossibleMusic ); + + if( !arrayPossibleMusic.empty() ) // we found a match + out.m_sMusicFile = arrayPossibleMusic[0]; + // ^this was below, at the end + + float SMGap1 = 0, SMGap2 = 0, BPM1 = -1, BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1; + int iTickCount = -1; + bKIUCompliant = false; + vector vNoteRows; + + for( unsigned i=0; i < msd.GetNumValues(); i++ ) + { + const MsdFile::value_t &sParams = msd.GetValue(i); + RString sValueName = sParams[0]; + sValueName.MakeUpper(); + + // handle the data + if( sValueName=="TITLE" ) + LoadTags(sParams[1], out); + else if( sValueName=="BPM" ) + { + BPM1 = StringToFloat(sParams[1]); + out.m_SongTiming.AddSegment( SEGMENT_BPM, new BPMSegment(0, BPM1) ); + } + else if( sValueName=="BPM2" ) + { + bKIUCompliant = true; + BPM2 = StringToFloat( sParams[1] ); + } + else if( sValueName=="BPM3" ) + { + bKIUCompliant = true; + BPM3 = StringToFloat( sParams[1] ); + } + else if( sValueName=="BUNKI" ) + { + bKIUCompliant = true; + BPMPos2 = StringToFloat( sParams[1] ) / 100.0f; + } + else if( sValueName=="BUNKI2" ) + { + bKIUCompliant = true; + BPMPos3 = StringToFloat( sParams[1] ) / 100.0f; + } + else if( sValueName=="STARTTIME" ) + { + SMGap1 = -StringToFloat( sParams[1] )/100; + out.m_SongTiming.m_fBeat0OffsetInSeconds = SMGap1; + } + // This is currently required for more accurate KIU BPM changes. + else if( sValueName=="STARTTIME2" ) + { + bKIUCompliant = true; + SMGap2 = -StringToFloat( sParams[1] )/100; + } + else if ( sValueName=="STARTTIME3" ) + { + // STARTTIME3 only ensures this is a KIU compliant simfile. + bKIUCompliant = true; + } + else if ( sValueName=="TICKCOUNT" ) + { + ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); + } + else if ( sValueName=="STEP" ) + { + /* STEP will always be the last header in a KSF file by design. Due to + * the Direct Move syntax, it is best to get the rows of notes here. */ + RString theSteps = sParams[1]; + TrimLeft( theSteps ); + split( theSteps, "\n", vNoteRows, true ); + } + else if( sValueName=="DIFFICULTY" || sValueName=="PLAYER" ) + { + /* DIFFICULTY and PLAYER are handled only in LoadFromKSFFile. + Ignore those here. */ + continue; + } + // New cases noted in Aldo_MX's code: + else if( sValueName=="MUSICINTRO" || sValueName=="INTRO" ) + { + out.m_fMusicSampleStartSeconds = HHMMSSToSeconds( sParams[1] ); + } + else if( sValueName=="TITLEFILE" ) + { + out.m_sBackgroundFile = sParams[1]; + } + else if( sValueName=="DISCFILE" ) + { + out.m_sBannerFile = sParams[1]; + } + else if( sValueName=="SONGFILE" ) + { + out.m_sMusicFile = sParams[1]; + } + //else if( sValueName=="INTROFILE" ) + //{ + // nothing to add... + //} + // end new cases + else + { + LOG->UserLog( "Song file", sPath, "has an unexpected value named \"%s\".", + sValueName.c_str() ); + } + } + + //intro length in piu mixes is generally 7 seconds + out.m_fMusicSampleLengthSeconds = 7.0f; + + /* BPM Change checks are done here. If bKIUCompliant, it's short and sweet. + * Otherwise, the whole file has to be processed. Right now, this is only + * called once, for the initial file (often the Crazy steps). Hopefully that + * will end up changing soon. */ + if( bKIUCompliant ) + { + if( BPM2 > 0 && BPMPos2 > 0 ) + { + HandleBunki( out.m_SongTiming, BPM1, BPM2, SMGap1, BPMPos2 ); + } + + if( BPM3 > 0 && BPMPos3 > 0 ) + { + HandleBunki( out.m_SongTiming, BPM2, BPM3, SMGap2, BPMPos3 ); + } + } + else + { + float fCurBeat = 0.0f; + bool bDMRequired = false; + + for( unsigned i=0; i < vNoteRows.size(); ++i ) + { + RString& NoteRowString = vNoteRows[i]; + StripCrnl( NoteRowString ); + + if( NoteRowString == "" ) + continue; // ignore empty rows. + + if( NoteRowString == "2222222222222" ) // Row of 2s = end. Confirm KIUCompliency here. + { + if (!bDMRequired) + bKIUCompliant = true; + break; + } + + // This is where the DMRequired test will take place. + if ( BeginsWith( NoteRowString, "|" ) ) + { + // have a static timing for everything + bDMRequired = true; + continue; + } + else + { + // ignore whatever else... + //continue; + } + + fCurBeat += 1.0f / iTickCount; + } + } + + // Try to fill in missing bits of information from the pathname. + { + vector asBits; + split( sPath, "/", asBits, true); + + ASSERT( asBits.size() > 1 ); + LoadTags( asBits[asBits.size()-2], out ); + } + + return true; +} + +void KSFLoader::GetApplicableFiles( const RString &sPath, vector &out ) +{ + GetDirListing( sPath + RString("*.ksf"), out ); +} + +bool KSFLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ) +{ + bool KIUCompliant = false; + Song dummy; + if (!LoadGlobalData(cachePath, dummy, KIUCompliant)) + return false; + Steps *notes = dummy.CreateSteps(); + if (LoadFromKSFFile(cachePath, *notes, dummy, KIUCompliant)) + { + KIUCompliant = true; // yeah, reusing a variable. + out.SetNoteData(notes->GetNoteData()); + } + delete notes; + return KIUCompliant; +} + +bool KSFLoader::LoadFromDir( const RString &sDir, Song &out ) +{ + LOG->Trace( "KSFLoader::LoadFromDir(%s)", sDir.c_str() ); + + vector arrayKSFFileNames; + GetDirListing( sDir + RString("*.ksf"), arrayKSFFileNames ); + + // We shouldn't have been called to begin with if there were no KSFs. + ASSERT( arrayKSFFileNames.size() ); + + bool bKIUCompliant = false; + /* With Split Timing, there has to be a backup Song Timing in case + * anything goes wrong. As these files are kept in alphabetical + * order (hopefully), it is best to use the LAST file for timing + * purposes, for that is the "normal", or easiest difficulty. + * Usually. */ + // Nevermind, kiu compilancy is screwing things up: + // IE, I have two simfiles, oh wich each have four ksf files, the first one has + // the first ksf with directmove timing changes, and the rest are not, everything + // goes fine. In the other hand I have my second simfile with the first ksf file + // without directmove timing changes and the rest have changes, changes are not + // loaded due to kiucompilancy in the first ksf file. + // About the "normal" thing, my simfiles' ksfs uses non-standard naming so + // the last chart is usually nightmare or normal, I use easy and normal + // indistinctly for SM so it shouldn't matter, I use piu fiesta/ex naming + // for directmove though, and we're just gathering basic info anyway, and + // most of the time all the KSF files have the same info in the #TITLE:; section + unsigned files = arrayKSFFileNames.size(); + RString dir = out.GetSongDir(); + if( !LoadGlobalData(dir + arrayKSFFileNames[files - 1], out, bKIUCompliant) ) + return false; + + out.m_sSongFileName = dir + arrayKSFFileNames[files - 1]; + // load the Steps from the rest of the KSF files + for( unsigned i=0; iSetFilename(dir + arrayKSFFileNames[i]); + out.AddSteps( pNewNotes ); + } + out.TidyUpData(false, true); + + return true; +} + +/* + * (c) 2001-2006 Chris Danford, Glenn Maynard, Jason Felds + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ From 9c826b7e271a884716cba649f3872a58ea6e8a4f Mon Sep 17 00:00:00 2001 From: Alberto Ramos Date: Mon, 18 Jul 2011 20:12:53 -0600 Subject: [PATCH 033/106] bleh --- src/NotesLoaderKSF.cpp | 49 ++---------------------------------------- 1 file changed, 2 insertions(+), 47 deletions(-) diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index e55c6aac1e..254524dfa0 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -495,57 +495,12 @@ static void LoadTags( const RString &str, Song &out ) out.m_sArtist = artist; } -static void ProcessTickcounts( const RString & tempValue, int & ticks, TimingData & timing ) +static void ProcessTickcounts( const RString & value, int & ticks, TimingData & timing ) { - /* adapt tickcounts // - // valid tickcounts for SM: 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 64, ROWS_PER_BEAT - // put this inside the tickcount handling condition yes/no - - if( iTickCount > ROWS_PER_BEAT ) // beyond 48 - { - // clamp/scale/whatever and use scroll segments - } - else if( iTickCount > 32 || iTickCount < ROWS_PER_BEAT ) // ranging from 33 to 48, approximate to 32 - { - fScrollRatio = 32; - iTickCount = 32; - } - else if( iTickCount > 24 || iTickCount < 32 ) // ranging from 25 to 31, approximate to 24 - { - fScrollRatio = 24; - iTickCount = 24; - } - else if( iTickCount > 16 || iTickCount < 24 ) // ranging from 17 to 23, approximate to 16 - { - fScrollRatio = 16; - iTickCount = 16; - } - else if( iTickCount > 12 || iTickCount < 16 ) // ranging from 13 to 15, approximate to 12 - { - fScrollRatio = 12; - iTickCount = 12; - } - else if( iTickCount > 8 || iTickCount < 12 ) // ranging from 9 to 11, approximate to 8 - { - fScrollRatio = 8; - iTickCount = 8; - } - else if( iTickCount > 6 || iTickCount < 8 ) // 7, approximate to 6 - { - fScrollRatio = 6 / iTickCountt; - iTickCount = 6; - } - else if( iTickCount > 4 || iTickCount < 6 ) // 5, approximate to 4 - { - fScrollRatio = iTickCount / 4; - iTickCount = 4; - } - //*/ - /* TICKCOUNT will be used below if there are DM compliant BPM changes * and stops. It will be called again in LoadFromKSFFile for the * actual steps. */ - ticks = StringToInt( tempValue ); + ticks = StringToInt( value ); ticks = ticks > 0 ? ticks : 4; // add a tickcount for those using the [Player] // CheckpointsUseTimeSignatures metric. -aj From 7014edbe265831407058fecd7f98f8aa6bd95a2b Mon Sep 17 00:00:00 2001 From: Aldo Fregoso Date: Mon, 18 Jul 2011 22:17:55 -0500 Subject: [PATCH 034/106] Fixed VS2010 project --- src/StepMania-net2010.vcxproj | 12 ++++++------ src/archutils/Win32/mapconv.exe | Bin 65536 -> 105472 bytes src/archutils/Win32/verinc.exe | Bin 49152 -> 67072 bytes 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/StepMania-net2010.vcxproj b/src/StepMania-net2010.vcxproj index 2af10e5a07..3b712c40e3 100644 --- a/src/StepMania-net2010.vcxproj +++ b/src/StepMania-net2010.vcxproj @@ -67,15 +67,15 @@ <_ProjectFileVersion>10.0.30319.1 - $(TargetDir) - $(SolutionDir)/build-$(SolutionName)/$(ProjectName)/$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\ true true - $(TargetDir) - $(SolutionDir)/build-$(SolutionName)/$(ProjectName)/$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\ false - $(TargetDir) - $(SolutionDir)/build-$(SolutionName)/$(ProjectName)/$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\ true true $(SolutionDir)$(Configuration)\ diff --git a/src/archutils/Win32/mapconv.exe b/src/archutils/Win32/mapconv.exe index 5d30c815fa3371ea371d40eb118dbe8689fbe133..8b23d80115af64158ca137b1664a426bd0be7719 100644 GIT binary patch literal 105472 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 O0u-PC1t{>p75EPY=FJEI literal 65536 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 bH(TIl3*2mhn=Np&1#Y&$%@+7?wZQ)Yicn=D diff --git a/src/archutils/Win32/verinc.exe b/src/archutils/Win32/verinc.exe index 545ffec5dbc6e8ca57b7e37c674124cdabba4135..d17008756afecc646edc7661d738cdd2c075af5b 100644 GIT binary patch literal 67072 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 XYW)53{89qHl)x_~@Jk6?RRaG9Hp@6K literal 49152 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 TYoM%wvIfc;C~M%o(ZIg}`Tco^ From c14dfd767c7c1a006589a6cb2b1da96424933f38 Mon Sep 17 00:00:00 2001 From: Aldo Fregoso Date: Mon, 18 Jul 2011 22:41:13 -0500 Subject: [PATCH 035/106] Shared change with SMA, Low Level Hooks to disable Window's system shortcuts, try to press Windows Key when SM has focus :D --- src/StepMania.cpp | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/src/StepMania.cpp b/src/StepMania.cpp index 955fa1466e..68bf9010ed 100644 --- a/src/StepMania.cpp +++ b/src/StepMania.cpp @@ -69,7 +69,8 @@ #include "Profile.h" #if defined(WIN32) -#include +#include +#include "archutils/Win32/AppInstance.h" // used by SetWindowsHookEx -Aldo #endif void ShutdownGame(); @@ -934,6 +935,32 @@ static void ApplyLogPreferences() static LocalizedString COULDNT_OPEN_LOADING_WINDOW( "StepMania", "Couldn't open any loading windows." ); +#if defined(WIN32) +// Low Level hooks go here, I only added Windows Key, but letting the player choose which system shortcuts +// wants to get disabled via PREFSMAN would be nice -Aldo +LRESULT CALLBACK SpecialKeysHook(int code,WPARAM wparam,LPARAM lparam) +{ + if( HOOKS->AppHasFocus() ) // only disable system shortcuts when the game has focus + { + PKBDLLHOOKSTRUCT key = (PKBDLLHOOKSTRUCT)lparam; + + switch(wparam) + { + case WM_KEYDOWN: + case WM_KEYUP: + case WM_SYSKEYDOWN: + case WM_SYSKEYUP: + if(key->vkCode==VK_LWIN || key->vkCode==VK_RWIN) + { + return 1; + } + } + } + + return CallNextHookEx(0,code,wparam,lparam); +} +#endif + int main(int argc, char* argv[]) { RageThreadRegister thread( "Main thread" ); @@ -1124,6 +1151,23 @@ int main(int argc, char* argv[]) StoreActualGraphicOptions(); LOG->Info( "%s", GetActualGraphicOptionsString().c_str() ); +#if defined(WIN32) + // Apply Low Level hooks just after creating the display, so we have a valid + // HINSTANCE, rather than a NULL one -Aldo + AppInstance inst; + HHOOK hook; + hook = SetWindowsHookEx( + WH_KEYBOARD_LL, + SpecialKeysHook, + inst.Get(), + 0 + ); + if(!hook) + { + LOG->Warn("SetWindowsHookEx: Could not create hook (Error %d).", GetLastError()); + } +#endif + SONGMAN->PreloadSongImages(); /* Input handlers can have dependences on the video system so From 1d557bf968b39e547ac345b67e40f4d83dd35f1e Mon Sep 17 00:00:00 2001 From: Jonathan Payne Date: Tue, 19 Jul 2011 17:09:43 -0700 Subject: [PATCH 036/106] more theme tidying. hopefully get this better running for saner people. --- .../ScreenGameplay background.lua | 1 + .../ScreenGameplay background.redir | 1 - .../default.lua | 21 ++++++++++++------- .../keyboard.lua | 14 +++++++++---- Themes/_fallback/Scripts/02 Colors.lua | 9 ++++---- Themes/default-dev-midi/metrics.ini | 5 ++++- .../ScreenCredits background/default.lua | 2 +- .../ScreenGameplay background.lua | 1 + .../default.lua | 2 +- .../ScreenPlayerOptions background.lua | 2 +- .../default.lua | 2 +- .../Graphics/Player toasty/default.lua | 4 ++-- .../Graphics/ScreenGameplay StageDisplay.lua | 1 + .../ScreenTitleMenu TimingDifficulty.lua | 2 +- .../ScreenWithMenuElements StageDisplay.lua | 2 +- Themes/default/metrics.ini | 13 ++++++------ 16 files changed, 50 insertions(+), 32 deletions(-) create mode 100644 Themes/_fallback/BGAnimations/ScreenGameplay background.lua delete mode 100644 Themes/_fallback/BGAnimations/ScreenGameplay background.redir create mode 100644 Themes/default/BGAnimations/ScreenGameplay background.lua diff --git a/Themes/_fallback/BGAnimations/ScreenGameplay background.lua b/Themes/_fallback/BGAnimations/ScreenGameplay background.lua new file mode 100644 index 0000000000..989e15f73d --- /dev/null +++ b/Themes/_fallback/BGAnimations/ScreenGameplay background.lua @@ -0,0 +1 @@ +return Def.ActorFrame { Name="YOU_WISH_YOU_WERE_PLAYING_BEATMANIA_RIGHT_NOW" }; \ No newline at end of file diff --git a/Themes/_fallback/BGAnimations/ScreenGameplay background.redir b/Themes/_fallback/BGAnimations/ScreenGameplay background.redir deleted file mode 100644 index 04b2ead777..0000000000 --- a/Themes/_fallback/BGAnimations/ScreenGameplay background.redir +++ /dev/null @@ -1 +0,0 @@ -_blank \ No newline at end of file diff --git a/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/default.lua b/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/default.lua index 994e3caf01..66e7d7daa7 100644 --- a/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/default.lua +++ b/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/default.lua @@ -46,26 +46,30 @@ function MakeScoreList(StagesAgo) OffCommand=cmd(linear,0.3;addx,150;diffusealpha,0); }; - LoadFont( "_regra bold 30px" ) .. { + LoadFont( "Common Normal" ) .. { +-- LoadFont( "_regra bold 30px" ) .. { Name="PlayerScoreP1"; InitCommand=cmd(x,-135;diffuse,color("#fdf991");shadowlength,0;zoom,0.6); OnCommand=cmd(x,-135;addx,50;zoom,0;diffusealpha,0;sleep,0.1;accelerate,0.3;addx,-50;diffusealpha,1;zoom,0.6); OffCommand=cmd(linear,0.3;diffusealpha,0); }; - LoadFont( "_regra bold 30px" ) .. { + LoadFont( "Common Normal" ) .. { +-- LoadFont( "_regra bold 30px" ) .. { Name="PlayerScoreP2"; InitCommand=cmd(x,135;diffuse,color("#abfe8e");shadowlength,0;zoom,0.6); OnCommand=cmd(x,135;addx,-50;zoom,0;diffusealpha,0;sleep,0.1;accelerate,0.3;addx,50;diffusealpha,1;zoom,0.6); OffCommand=cmd(linear,0.3;diffusealpha,0); }; - LoadFont( "_regra bold 30px" ) .. { + LoadFont( "Common Normal" ) .. { +-- LoadFont( "_regra bold 30px" ) .. { Name="MachineBestP1"; InitCommand=cmd(diffuse,color("#ffffff");shadowlength,0;zoom,0.5); OnCommand=cmd(x,-250;addx,-250;diffusealpha,1;decelerate,0.3;addx,250); OffCommand=cmd(linear,0.3;addx,-150;diffusealpha,0); }; - LoadFont( "_regra bold 30px" ) .. { + LoadFont( "Common Normal" ) .. { +-- LoadFont( "_regra bold 30px" ) .. { Name="MachineBestP2"; InitCommand=cmd(diffuse,color("#ffffff");shadowlength,0;zoom,0.5); OnCommand=cmd(x,250;addx,250;diffusealpha,1;decelerate,0.3;addx,-250); @@ -130,7 +134,7 @@ function MakeScoreList(StagesAgo) if visible then assert(CurrentPart[pn]); - c.Difficulty[pn]:SetDifficultyAndStepsTypeFrame( CurrentPart[pn] ); +-- c.Difficulty[pn]:SetDifficultyAndStepsTypeFrame( CurrentPart[pn] ); local hsl = MachineProfile:GetHighScoreList( Current, CurrentPart[pn] ); assert( hsl ); @@ -198,8 +202,8 @@ for i = 1,5 do }; end -children[#children+1] = - LoadActor( THEME:GetPathB("","_shared underlay") ) .. { OnCommand=cmd(); }; +--[[ children[#children+1] = + LoadActor( THEME:GetPathB("","_shared underlay") ) .. { OnCommand=cmd(); }; --]] children[#children+1] = LoadActor( "keyboard" ) .. { InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y+80); @@ -217,7 +221,8 @@ for pn in ivalues(PlayerNumber) do OffCommand=cmd(stoptweening;bouncebegin,0.3;zoom,0;addx,-200*P1); }; - children[#children+1] = LoadFont( "_regra bold 30px" ) .. { + children[#children+1] = LoadFont( "Common Normal" ) .. { +-- children[#children+1] = LoadFont( "_regra bold 30px" ) .. { Name="PlayerText"; InitCommand=cmd(x,pn == PLAYER_1 and (SCREEN_CENTER_X-WideScale(310,330)) or (SCREEN_CENTER_X+WideScale(198,204)); halign,0; diff --git a/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/keyboard.lua b/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/keyboard.lua index 052c378720..08852dbaba 100644 --- a/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/keyboard.lua +++ b/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/keyboard.lua @@ -19,7 +19,8 @@ end local MapNameToLetter = {}; local MapLetterToName = {}; -local letter = LoadFont( "_regra bold 30px" ) .. { +local letter = LoadFont( "Common Normal" ) .. { +-- local letter = LoadFont( "_regra bold 30px" ) .. { InitCommand=cmd(zoom,0.8;shadowlength,0); PulseCommand = function(self) self:finishtweening(); @@ -37,13 +38,18 @@ for l in ivalues(Letters) do Text = l; }; if l == "BACK" or l == "ENTER" then - children[#children].File = THEME:GetPathF("", "_venacti 26px normal"); + children[#children].File = THEME:GetPathF("", "Common Normal"); +-- children[#children].File = THEME:GetPathF("", "_venacti 26px normal"); end; end; -children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "type key") ) .. { Name = "Type"; SupportPan = true; } +--[[ children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "type key") ) .. { Name = "Type"; SupportPan = true; } children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "back") ) .. { Name = "Back"; SupportPan = true; } children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "enter") ) .. { Name = "Enter"; SupportPan = true; } -children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "move cursor") ) .. { Name = "Move"; SupportPan = true; } +children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "move cursor") ) .. { Name = "Move"; SupportPan = true; } --]] +children[#children+1] = LoadActor( THEME:GetPathS("Common", "value") ) .. { Name = "Type"; SupportPan = true; } +children[#children+1] = LoadActor( THEME:GetPathS("Common", "cancel") ) .. { Name = "Back"; SupportPan = true; } +children[#children+1] = LoadActor( THEME:GetPathS("Common", "start") ).. { Name = "Enter"; SupportPan = true; } +children[#children+1] = LoadActor( THEME:GetPathS("MusicWheel", "change") ) .. { Name = "Move"; SupportPan = true; } local CursorFiles = { [PLAYER_1] = "Cursor P1", diff --git a/Themes/_fallback/Scripts/02 Colors.lua b/Themes/_fallback/Scripts/02 Colors.lua index 9cfe09c54c..4e4a852f60 100644 --- a/Themes/_fallback/Scripts/02 Colors.lua +++ b/Themes/_fallback/Scripts/02 Colors.lua @@ -6,6 +6,7 @@ Color = { -- These colors are pure swatch colors and are here purely to be used -- on demand without having to type color("stuff") or dig through -- a palette to get the color you want. + __call(_color) = function(self, _color) return self[_color] end, Black = color("0,0,0,1"), White = color("1,1,1,1"), Red = color("#ed1c24"), @@ -31,7 +32,7 @@ Color = { end } -- Remapped Color Module, since some themes are crazy -Colors = Color; +-- Colors = Color; GameColor = { PlayerColors = { @@ -95,9 +96,9 @@ GameColor.Difficulty["Nightmare"] = GameColor.Difficulty["Challenge"]; GameColor.Difficulty["HalfDouble"] = GameColor.Difficulty["Medium"]; --[[ Fallbacks ]] -function Color(c) - return Colors[c] -end +function Color( in_c ) + return __call(in_c) +end --]] function BoostColor( cColor, fBoost ) local c = cColor diff --git a/Themes/default-dev-midi/metrics.ini b/Themes/default-dev-midi/metrics.ini index 72b1cbe014..2f0e2571a5 100644 --- a/Themes/default-dev-midi/metrics.ini +++ b/Themes/default-dev-midi/metrics.ini @@ -1,5 +1,8 @@ [Global] FallbackTheme=default +[ScreenTitleMenu] +ChoiceNames="1,4,5,6,PopScreen,7" +ChoicePopScreen="name,Boobs;text,Boobs"; [ScreenGameplay] # LifeP1OnCommand=visible,false -# LifeP2OnCommand=visible,false \ No newline at end of file +# LifeP2OnCommand=visible,false diff --git a/Themes/default/BGAnimations/ScreenCredits background/default.lua b/Themes/default/BGAnimations/ScreenCredits background/default.lua index 47e9237339..8cd4a8ea35 100644 --- a/Themes/default/BGAnimations/ScreenCredits background/default.lua +++ b/Themes/default/BGAnimations/ScreenCredits background/default.lua @@ -13,7 +13,7 @@ local t = Def.ActorFrame { LoadActor("_grid")..{ InitCommand=cmd(customtexturerect,0,0,(SCREEN_WIDTH+1)/4,SCREEN_HEIGHT/4;SetTextureFiltering,true); OnCommand=cmd(zoomto,SCREEN_WIDTH+1,SCREEN_HEIGHT;diffuse,Color("Black");diffuseshift;effecttiming,(1/8)*4,0,(7/8)*4,0;effectclock,'beatnooffset'; - effectcolor2,Color("Black");effectcolor1,Colors.Alpha(Color("Black"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480;diffusealpha,0.345); + effectcolor2,Color("Black");effectcolor1,Color.Alpha(Color("Black"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480;diffusealpha,0.345); }; }; diff --git a/Themes/default/BGAnimations/ScreenGameplay background.lua b/Themes/default/BGAnimations/ScreenGameplay background.lua new file mode 100644 index 0000000000..989e15f73d --- /dev/null +++ b/Themes/default/BGAnimations/ScreenGameplay background.lua @@ -0,0 +1 @@ +return Def.ActorFrame { Name="YOU_WISH_YOU_WERE_PLAYING_BEATMANIA_RIGHT_NOW" }; \ No newline at end of file diff --git a/Themes/default/BGAnimations/ScreenGameplay next course song/default.lua b/Themes/default/BGAnimations/ScreenGameplay next course song/default.lua index de7cf0b949..732b6a912d 100644 --- a/Themes/default/BGAnimations/ScreenGameplay next course song/default.lua +++ b/Themes/default/BGAnimations/ScreenGameplay next course song/default.lua @@ -7,7 +7,7 @@ t[#t+1] = Def.Sprite { BeforeLoadingNextCourseSongMessageCommand=function(self) self:LoadFromSongBackground( SCREENMAN:GetTopScreen():GetNextCourseSong() ) end; ChangeCourseSongInMessageCommand=cmd(scaletoclipped,SCREEN_WIDTH,SCREEN_HEIGHT); StartCommand=cmd(diffusealpha,0;decelerate,0.5;diffusealpha,1;); - FinishCommand=cmd(linear,0.1;glow,Colors.Alpha(Color("White"),0.5);decelerate,0.4;glow,Color("Invisible");diffusealpha,0); + FinishCommand=cmd(linear,0.1;glow,Color.Alpha(Color("White"),0.5);decelerate,0.4;glow,Color("Invisible");diffusealpha,0); }; t[#t+1] = Def.ActorFrame { diff --git a/Themes/default/BGAnimations/ScreenPlayerOptions background.lua b/Themes/default/BGAnimations/ScreenPlayerOptions background.lua index e7cafc1283..f06580a070 100644 --- a/Themes/default/BGAnimations/ScreenPlayerOptions background.lua +++ b/Themes/default/BGAnimations/ScreenPlayerOptions background.lua @@ -24,7 +24,7 @@ t[#t+1] = Def.ActorFrame { --[[ LoadActor(THEME:GetPathB("ScreenWithMenuElements","background/_grid")).. { InitCommand=cmd(customtexturerect,0,0,(SCREEN_WIDTH+1)/4,SCREEN_HEIGHT/4;SetTextureFiltering,true); OnCommand=cmd(zoomto,SCREEN_WIDTH+1,SCREEN_HEIGHT;diffuse,Color("Black");diffuseshift;effecttiming,(1/8)*4,0,(7/8)*4,0;effectclock,'beatnooffset'; - effectcolor2,Color("Black");effectcolor1,Colors.Alpha(Color("Black"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480;diffusealpha,0.345); + effectcolor2,Color("Black");effectcolor1,Color.Alpha(Color("Black"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480;diffusealpha,0.345); }; --]] LoadActor(THEME:GetPathB("ScreenWithMenuElements","background/_bg top")) .. { InitCommand=cmd(scaletoclipped,SCREEN_WIDTH+1,SCREEN_HEIGHT); diff --git a/Themes/default/BGAnimations/ScreenWithMenuElements background/default.lua b/Themes/default/BGAnimations/ScreenWithMenuElements background/default.lua index 2a5ef20e90..73c5519edb 100644 --- a/Themes/default/BGAnimations/ScreenWithMenuElements background/default.lua +++ b/Themes/default/BGAnimations/ScreenWithMenuElements background/default.lua @@ -33,7 +33,7 @@ t[#t+1] = Def.ActorFrame { --[[ LoadActor("_grid") .. { InitCommand=cmd(customtexturerect,0,0,(SCREEN_WIDTH+1)/4,SCREEN_HEIGHT/4;SetTextureFiltering,true); OnCommand=cmd(zoomto,SCREEN_WIDTH+1,SCREEN_HEIGHT;diffuse,Color("Orange");diffuseshift;effecttiming,(1/8)*2,0,(7/8)*2,0;effectclock,'beatnooffset'; - effectcolor2,Color("Orange");effectcolor1,Colors.Alpha(Color("Orange"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480); + effectcolor2,Color("Orange");effectcolor1,Color.Alpha(Color("Orange"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480); }; --]] LoadActor("_bg top") .. { InitCommand=cmd(scaletoclipped,SCREEN_WIDTH+1,SCREEN_HEIGHT); diff --git a/Themes/default/Graphics/Player toasty/default.lua b/Themes/default/Graphics/Player toasty/default.lua index bbc4c72c04..206e223510 100644 --- a/Themes/default/Graphics/Player toasty/default.lua +++ b/Themes/default/Graphics/Player toasty/default.lua @@ -13,7 +13,7 @@ return Def.ActorFrame { InitCommand=cmd(zoomto,fWidth,SCREEN_HEIGHT;diffuse,PlayerColor(Player);diffusealpha,0;fadeleft,32/(256+16);faderight,32/(256+16)); ToastyAchievedMessageCommand=function(self,params) if params.PlayerNumber == Player then - (cmd(stoptweening;linear,2.125;diffuse,Colors.Alpha( PlayerColor(Player), 0.345 );glow,color("1,1,1,0.5");decelerate,3;glow,Colors.Alpha( ColorDarkTone( PlayerColor(Player) ), 0 );diffuseramp; + (cmd(stoptweening;linear,2.125;diffuse,Color.Alpha( PlayerColor(Player), 0.345 );glow,color("1,1,1,0.5");decelerate,3;glow,Color.Alpha( ColorDarkTone( PlayerColor(Player) ), 0 );diffuseramp; effectcolor1,ColorLightTone( PlayerColor(Player) );effectcolor2,PlayerColor(Player); effectclock,'beat';effectperiod,2; ))(self); @@ -23,7 +23,7 @@ return Def.ActorFrame { ToastyDroppedMessageCommand=function(self,params) if params.PlayerNumber == Player then if HasToasty then - (cmd(finishtweening;stopeffect;glow,color("1,1,1,0.5");decelerate,0.35;diffuse,Colors.Alpha( Color("Black"), 0.25 );glow,color("1,1,1,0");linear,0.35*0.25;diffusealpha,0))(self); + (cmd(finishtweening;stopeffect;glow,color("1,1,1,0.5");decelerate,0.35;diffuse,Color.Alpha( Color("Black"), 0.25 );glow,color("1,1,1,0");linear,0.35*0.25;diffusealpha,0))(self); HasToasty = false; else return diff --git a/Themes/default/Graphics/ScreenGameplay StageDisplay.lua b/Themes/default/Graphics/ScreenGameplay StageDisplay.lua index a20a1c542f..81761ccc77 100644 --- a/Themes/default/Graphics/ScreenGameplay StageDisplay.lua +++ b/Themes/default/Graphics/ScreenGameplay StageDisplay.lua @@ -13,6 +13,7 @@ end for s in ivalues(Stage) do stages[#stages+1] = MakeBitmapTest() .. { + InitCommand=cmd(shadowlength,2); SetCommand=function(self, params) local Stage = GAMESTATE:GetCurrentStage(); local StageIndex = GAMESTATE:GetCurrentStageIndex(); diff --git a/Themes/default/Graphics/ScreenTitleMenu TimingDifficulty.lua b/Themes/default/Graphics/ScreenTitleMenu TimingDifficulty.lua index 0437d83b4d..1be2c9961f 100644 --- a/Themes/default/Graphics/ScreenTitleMenu TimingDifficulty.lua +++ b/Themes/default/Graphics/ScreenTitleMenu TimingDifficulty.lua @@ -2,7 +2,7 @@ return Def.ActorFrame { --[[ LoadActor(THEME:GetPathG("ScreenTitleMenu","PreferenceFrame")) .. { OnCommand=function(self) if GetTimingDifficulty() == 7 then - (cmd(glowshift;diffuse,Color("Yellow");diffuserightedge,Color("Red");effectcolor1,Colors.Alpha( Color("Red"), 0.5 );effectcolor2,Color("Invisible");effectperiod,1.25/2))(self); + (cmd(glowshift;diffuse,Color("Yellow");diffuserightedge,Color("Red");effectcolor1,Color.Alpha( Color("Red"), 0.5 );effectcolor2,Color("Invisible");effectperiod,1.25/2))(self); elseif GetTimingDifficulty() < 4 then (cmd(diffuseshift;effectcolor1,Color("Blue");effectcolor2,ColorDarkTone(Color("Blue"));effectperiod,1.25))(self); elseif GetTimingDifficulty() > 4 and GetTimingDifficulty < 6 then diff --git a/Themes/default/Graphics/ScreenWithMenuElements StageDisplay.lua b/Themes/default/Graphics/ScreenWithMenuElements StageDisplay.lua index abc1409fa6..9853636553 100644 --- a/Themes/default/Graphics/ScreenWithMenuElements StageDisplay.lua +++ b/Themes/default/Graphics/ScreenWithMenuElements StageDisplay.lua @@ -69,7 +69,7 @@ else self:settextf( "Stage %03i", RealStage); self:diffuse( StageToColor('Stage_1st') ); self:diffusebottomedge( ColorMidTone(StageToColor('Stage_1st')) ); - self:strokecolor( Colors.Alpha( ColorDarkTone(StageToColor('Stage_1st')), 0.75) ); + self:strokecolor( Color.Alpha( ColorDarkTone(StageToColor('Stage_1st')), 0.75) ); end; end; } diff --git a/Themes/default/metrics.ini b/Themes/default/metrics.ini index 5b83cf0ef7..11e368b4e4 100644 --- a/Themes/default/metrics.ini +++ b/Themes/default/metrics.ini @@ -110,7 +110,7 @@ ItemsSpacingY=24 NumShownItems=8 [FadingBanner] -BannerFadeFromCachedCommand=diffusealpha,1;stoptweening;accelerate,0.05;glow,Colors.Alpha( Color("White"), 0.45 );decelerate,0.175;diffusealpha,0;glow,Color("Invisible"); +BannerFadeFromCachedCommand=diffusealpha,1;stoptweening;accelerate,0.05;glow,Color.Alpha( Color("White"), 0.45 );decelerate,0.175;diffusealpha,0;glow,Color("Invisible"); [Gameplay] @@ -422,7 +422,7 @@ end; ShowAutogen=true AutogenX=0 AutogenY=0 -#AutogenOnCommand=diffuseshift;effectcolor1,Colors.Alpha( Color("Green") , 0.5 );effectcolor2,ColorLightTone( Color("Green") ); +#AutogenOnCommand=diffuseshift;effectcolor1,Color.Alpha( Color("Green") , 0.5 );effectcolor2,ColorLightTone( Color("Green") ); AutogenOnCommand=blend,Blend.Add;diffuseshift;effectcolor1,color("#FFCC00FF");effectcolor2,color("#FFCC0088"); # ShowStepsType=GetUserPrefB("UserPrefAutoSetStyle") @@ -479,6 +479,7 @@ Fallback="StepsDisplay" # end; PillTransformFunction=function(self,offsetFromCenter,itemIndex,numItems) \ local fItemWidth = ( 256 / numItems ) \ + self:x( ((itemIndex-(numItems/2))*fItemWidth) + ( numItems / 2 ) ); \ self:zoomtowidth(fItemWidth); \ end; # PillTransformFunction=function(self,offsetFromCenter,itemIndex,numItems) \ @@ -489,8 +490,8 @@ end; # self:effecttiming(1,0.01875*itemIndex,1,1-(0.01875*itemIndex)); \ # self:effectclock('beatnooffset'); \ # end; -TextureCoordScaleX=1 -NumPills=1 +TextureCoordScaleX=256/16 +NumPills=16 [TextBanner] TitleOnCommand=horizalign,left;shadowlength,1; @@ -1333,10 +1334,10 @@ BPMDisplayY=SCREEN_BOTTOM-16 BPMDisplayOnCommand=draworder,101 BPMDisplayOffCommand=bounceend,0.25;zoom,0 # -ShowStageDisplay=false +ShowStageDisplay=true StageDisplayX=SCREEN_CENTER_X StageDisplayY=SCREEN_TOP+24 -StageDisplayOnCommand=zoom,0.5; +StageDisplayOnCommand=zoom,0.675; StageDisplayOffCommand=bounceend,0.25;zoom,0 # ShowScoreFrame=GetUserPrefB("GameplayFooter"); From 1f3eaf6d20a1d8518eb563c3cd4c822ee5c8f58a Mon Sep 17 00:00:00 2001 From: Colby Klein Date: Tue, 19 Jul 2011 17:24:07 -0700 Subject: [PATCH 037/106] Fix Color metatable --- Themes/_fallback/Scripts/02 Colors.lua | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Themes/_fallback/Scripts/02 Colors.lua b/Themes/_fallback/Scripts/02 Colors.lua index 4e4a852f60..b46d9c5fe5 100644 --- a/Themes/_fallback/Scripts/02 Colors.lua +++ b/Themes/_fallback/Scripts/02 Colors.lua @@ -1,12 +1,11 @@ -- SSC Color Module and Library -local nilColor = color("0,0,0,0") + -- Original Color Module. Color = { -- Color Library -- These colors are pure swatch colors and are here purely to be used -- on demand without having to type color("stuff") or dig through -- a palette to get the color you want. - __call(_color) = function(self, _color) return self[_color] end, Black = color("0,0,0,1"), White = color("1,1,1,1"), Red = color("#ed1c24"), @@ -17,7 +16,7 @@ Color = { Purple = color("#92278f"), Outline = color("0,0,0,0.5"), Invisible = color("1,1,1,0"), - Stealth = nilColor, + Stealth = color("0,0,0,0"), -- Color Functions -- These functions alter colors in a certain way so that you can make -- new ones without having to copy a color or find a new one. @@ -31,6 +30,9 @@ Color = { return { c[1],c[2],c[3],fAlpha }; end } + +setmetatable(Color, { __call = function(self, c) return self[c] end }) + -- Remapped Color Module, since some themes are crazy -- Colors = Color; @@ -96,10 +98,6 @@ GameColor.Difficulty["Nightmare"] = GameColor.Difficulty["Challenge"]; GameColor.Difficulty["HalfDouble"] = GameColor.Difficulty["Medium"]; --[[ Fallbacks ]] -function Color( in_c ) - return __call(in_c) -end --]] - function BoostColor( cColor, fBoost ) local c = cColor return { c[1]*fBoost, c[2]*fBoost, c[3]*fBoost, c[4] } From 0c1a33cbe36aa5e75ada401f4c714f9593700172 Mon Sep 17 00:00:00 2001 From: Alberto Ramos Date: Tue, 19 Jul 2011 18:35:29 -0600 Subject: [PATCH 038/106] things ksfs are still broken --- Songs/StepMania 5/ksf/easy.ksf | 383 +++++++++++++++++++++++++++++++++ Songs/StepMania 5/ksf/song.ogg | Bin 0 -> 220298 bytes src/NotesLoaderKSF.cpp | 7 +- src/TimingData.cpp | 2 + 4 files changed, 390 insertions(+), 2 deletions(-) create mode 100644 Songs/StepMania 5/ksf/easy.ksf create mode 100644 Songs/StepMania 5/ksf/song.ogg diff --git a/Songs/StepMania 5/ksf/easy.ksf b/Songs/StepMania 5/ksf/easy.ksf new file mode 100644 index 0000000000..d4353e9f65 --- /dev/null +++ b/Songs/StepMania 5/ksf/easy.ksf @@ -0,0 +1,383 @@ +#TITLE:?; +#BPM:150; +#STARTTIME:0; +#PLAYER:SINGLE; +#TICKCOUNT:4; +#SONGFILE:song.ogg; +#STEP: +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0100100000000 +0000000000000 +0000000000000 +0000000000000 +0010000000000 +0000000000000 +0000000000000 +0000000000000 +0010000000000 +0000000000000 +0000000000000 +0000000000000 +0010000000000 +0000000000000 +0000000000000 +0000000000000 +|T2| +1001000000000 +0000000000000 +0010000000000 +0000000000000 +0010000000000 +0000000000000 +0010000000000 +0000000000000 +|T1| +0100100000000 +0010000000000 +0010000000000 +0010000000000 +|T4| +1001000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +2222222222222 \ No newline at end of file diff --git a/Songs/StepMania 5/ksf/song.ogg b/Songs/StepMania 5/ksf/song.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e8b8af412f2fe0182848fb6e23ebd0a3e01e4a6a GIT binary patch literal 220298 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

  • %kq5 zF7M{;Q;L9D@p!@RbF&guaPHO%-b5O2BlcchQRnU|c{eIs}cwvE+y`M4_ z5z#12b(Z1(o44pSUF3?NWw?~0nBA6D+M0)T5!Px-*N?p^gG@)}!B0yXLz}+le>BAK zX(LxGWi#<3R0~X|#Zbz*#KvI3_(E{2>m@+JKsr^&K>T492cVOG&*f|TwOfz5=G&{1 z9`FzuUlj3#b!gGzeE1w;;OAibL48T4O^>ziB^Gt373tNKV=^zlPp{}xoR4_rjyi*Q zH3O>C=a|U8zYr&XNbQt_5C3Jxe~wK9w_rSr-6F6Zk68{hWml2r2ad%j-yZAhfafd^4Y zj}ihj5kQW6cDm@o03p81qm@$W%Q(Pdtnj@fuboco=Apg^((Ik2VVL%Gm@~0d)*6*Q zqkl{l&Xhi#aiUvRo7IB#ekxQ_>Q)Y0P*@Sivb;xDW%>M%H^^#~b{Ho!zwl7C7CYz? zYNv7{wylLZCzoF~h?mq7zTeIIn1QjX3eDq9ux;vNN{4Oj9njl?`l-pkx93Z)-b&+Y zo|>4-=}hxnKzOZ^G5#kH(GIy>y!Vr-i-dLsC!hKW3wWJuDN>@)LGu4@9Q9Q)MX}Z8 zS_7te@_ojo=bstKBkvs1Ug5{N#|4zz6giX&cp0bk3o&{hr+EeKi8K5XuAB>LwVwYv zm*CN#Ic0R`ZMpj(r=)J$+;8SnEnaJ66y5IYOVzc*pH2eT1ov95X|%kQaE_RoQK=}M z&BRVOU2+eS(1T1Qt{mL0Q6$9_toY)Spm>B_qI#+y{>+_(-htibz;%s`h;Q=d462B- zlz*cGHU3zotUhI0Z7Js`^hbl(oAq=YHnnu$Z!`?_rErUK%;*#ybv~uDaXLeVJCa{O zozd2;3tvUEpoIuCwI(moESJ%kd#?s@$*@CrO^PsXA%}c3>(Kq;gZhHU)6cj}<}^NU z*$ZZ(g9rb!-q=L!ZVP%<^`eE>@Rv8e<+^}-khvk*{&F>GvcagmU44&yCPO6r3HmmV z^1PdYwV|y;-T9IyHC~66`q(Rarz%xFZ@ct`kq8HYPxTB)^F2yQTmj-Rz~A&iu0Ni0v9#ZuVbW+h%Fmkbza`G@Xb$9o5G<6KLcQ^P{wgs6F9HE{f`|znj?}CRTB@E- z7cJEp=JA~m4Vy$~%iCk8j9-t)!g6k$1yyzhpo?T%V1q>&)dR7ey(lJ#Qwjb3NN4EdQwMc&E@3RS>otF>VN6S}syD#)1P3GvsQY`5+) z{)PrpFcgKuWi)BRAIA&etk5&jN%APWlqVkj9f9{k>{38vk5_DJO1y$PKoZ2uWTe?P zJ2I%gyr44FM`Gbl!1wk{A>Fw+f&5!K*! zeG94**m!gN7IG@PzPaKPN7x!|bQ0A2L{_af?hcDIKB-fMZbFQH$9qhKJ`%e|!1MKzM1Nx0w;>K9D4ntu8b0=OwhTral*CcF1*UQj#1@hTA zirzGbt9r!ftogTvld@~SMzTbtauWSL2Ti0Mdrg4!l`5Gu7oGP$L@$RG`;1h1XuB6?6V(VMIh=?1 zoPU8)tRC!?$P z_8RyR%yrPhcDRd$VARF@9pPnvF}1{ylll;+(Vq@$-|v!P#^Z2;g?)^J`<&-+WUZrshR8ZzyyjlD_y?+h&E&*w7p`yh&OY#NjWBO3*hOn#xvM zrs$m-_(IND#tBa2&*!7g=PQmNm9|KVNW?g8;$M~U;c$}by5(k_nM9;`-4z@Azg{xU zBsAI5-KCe2S9zWt2l?FQiJrTD7#p|PTkH~j5B{!6QS|h7*LzJh#OUX6oa>Y$InZC} z>Q#{kse~d4taFSgLs7~wCVd_ybo~r3=J}1<_n4w4`Le*}+gVmm^1^6x^SyJDw|^){ z?KgyDVI3vBwQ7`sd>86Xxw{8{gbVU_?`Gb0!9_d@@E zcBodlM+R8J$o6PJ^7%TmO-YJ)vF$V*GupywJWa61rqa+;Q$vGJOahnp@m`b$47|Yg zdq@mOFw8X(q}JiJC&{Z1 zl$+p6lfU28PKWYEs;Y&QY5zM_1?Ep$_uP!J;NXIL0_4f`ms11{itn+zM>g1!O^xp6 zqJvJ*>nQ6hyEclsq_xdI-L1~%dnN87ig#;{O(>RSII<0TvejmD<;?yHdo3y^m|m+; zx@xS?3)^zJKXUDcl4rlA{Qoia&e3sxU%c?dcG5VF)7VL4+qP}nw#~*?W81dT#!h23 z$vf%yckg|(X07@6%#-u%v-d|QnIcq%SazA!BONC}1ywVL|C^1=cpBy`49EbA9Cb^lV?_^g%3f@2z7`7=1MjsnXNP{;kj#oUUgyXsN^J!iJ;fvtpAk$7Sg{)V@|w2j&sQ56;qWYNJo&@ z$^wX*%;qJIV31U8Qk8RWz}00?`yJL0tnT}}>{ksz>g*!jz46{)-hD!ds#K71!YTEs z?;SE9Id@3TT)rIG2a?c{Dv4|co(ZZpAI z@yjKwKwThG?QW}=Oz(?XSJ82;dzw4nIjzZ}zpm=UsUhg)j09(Wjq?{|DuL)YAovsT zdOUo>-Hgkx=I&EFT9QI_B}dW=ji@6x2yoc#>cgkxz~cvcj1t)|;3Po#3h5mE*f1aG z$SjfT)&2S+bl_O`hInI5hegVNHyc6R&t6{1R5^Ypmu@rrZ1}cM|M8vml~k5T(W>aZ zzkaCMrK-N3w;)>ChS~}!pD2M&IR{fHR9F7!0!c7G@$-JB(kGEn2&oP?kAbzkwn#Tp zZWF}r5GkbiT|`5Nv0#s#81BUofyWz{(ffyZ7s<2{Q5kh8qjN)zAoJ}qWaY0qrvCr} zu^A`gMb9DkZ?!FIuF~pYNCEF|1_&^@!yM%q9;8>6HP_D2e7b#9xUW*eMAtlb5KgYa z^p!LVyU|Mo2q2!i{q{s9t}r_6zc?PHAfI z*Pl{L+KL$XKK+EUWSgrtT7v{M|0orJx>H&!nU`6M6%?&k;F*Wh*`#&gErh zRP+(D|Ci00YC=<8ppS7{+6caHmEAH{LPyz7!TEWWvz5Wwpx;l9qV6s;F4|N+@>T8- zneUvg!?3!N2*#QvdFlxxayydvNc8F34v2W^{7vo9SGE;g9Dr z(_t3(4P1Qu)VT>)g>AAwFvxMP){(yg!Ex^F0iiNV)nED&QZz=4!w=uh!;yOTvFt6H01Xi+@ zWO0K>8tF~JFX~=TlHncrzx4wxaw2)@@$?~p@$OwQ2VKTj!bDV*UhcOUQl&_&rb$y( z{0lzsu64stX+_2PN7d8G{|mmuuy=Ei7kHn`qT=hwNubnLlWW@4;oL8wFxcEgWx^>n z@z?ahUoE9<{<-1UX)2NCh}8B7(3L#Lm0zWFnwpk-ax}(ql68{*gBsdDxwyRMYDv^K z??Os||C>{WXe{o+&l3+z!*eQ~uRMCFleGNkLo)Wiq!P2&d|C?A9D`FN5opihck}JB zHG7!|3G&e(b?`f73QxWn*!p{3%o8#y6$uGRpVL?4?%0HJ-qu77cXI&!Cd8%>vIKUU z(fHe=CE9&CdBdU5?l)w2jc{vq`i+`o#2+bkNEK#dtmIFZ*?F>0_ZDUyyK*PS=ql>jJ zxz$(q!wUSey2JE+Uu#q794++d=3wa`ZAgJ!6pVE3Z2t0$Ml@;GK+RB??%(N(vZ#+j zt|K`d9jR0uoWyf&TK(j}oPOpU8w{hZl{2cYH3ZF$uy1ukAkfx*cMNKpaXCWh6Cf022~Vz2vnhZ4DiyZLko9T}cvpIy!SF*Ko5eU4pH7j2!$D%lgAy(KMD4AV;n(rA2=UrD$kpAR(aOtfa3k$$Q&mNqsw zZzNB~o+@c~gui*F8O8rLI1t;}RhJN1TbcGi@0IoWmC5)(-)c0I>m;llJi7)^$YGE- zp53f0@8Mr7rYrt=l=cI$FGRfQ<(g(+6#gLZF%bW`NscT8w&<4N$~=OT!=bopg9|Rt z#y1ovuYtq@y}H);0j`!_z1Ne7HBw{zz&)d1-7-PO__vBad7aYXkXh)-T=pYed|0}` zW~3kyb0h^>be?&nQd1Mjz?m5I_WbFVZS54=;}g<*U4gU|8~J~y4^XrcVOeS1BW{Kd zHaWRP2VGYH7g;MXp*q}&%sDfZA7E&Xb1&8`BqyvM?!XeZ&=QKY!5P*BKHh)O0$HcL zt#8nS6+6cj@OSR%N;F&5s4SsHoI7g>NA-3o(N=8@#~cp>^*D zijyNs`rp3(bWs9p$r;5o{T_!5$SR|+908%NuJZ^2l-T2*|1zql|k z)J;6%r5=AsqR8>Az)d7CW9R1@p2C!{t$@B@-##Csq5-%k`QOsUh3CDK$=Q8S?8%I) zT0+G)RNw4Q-BxMLohA&obiupO=`cnEI_JJM{!Y~sXalIzf~ZF(s=$jF7D|Ey2{M=d#tTk0(X;%^}=Oke6^8ttH=mHE1h z8M&TmtF9p&bnZ)PZ z@}gCw|L3TN(VRkJWV{!9o^riuCU;W%4;L8%t2a_I%-T#mDTlS%jTy{Cp&pL)aq;f}>O-YuAHIr?_bx;;Hhe{xK~A^_}q zV4Md2_q@N9{)d;8oNEMyV$a6r@uXMS!1a8%x^VjbK6p?}d?K`PW^zPY{DlI9OA#|Z z*~hXQFb&Ynd$k{}{t>VVz(+z6&p7OmYE|-Zd9;;9F=T3}`*S^8y9W3gkZ1tdhgZ56 z%lKk{rGmIxa^yNR+8{D^v?vNk*T9<9F*4)7(DJ%@)(u1($3c>H`_LBwaG_Iy_D5=R zypty#4HiebdmHp+n;Tue__F7iwbph_E2_utF?K!t&iY{gVGO<1{|{q;1Y!*L^Y%By zWVp;+UCk}^eQj-Zz@&)wy0)%nBEqjk^bEMTOpM)a-L3z0e6|PTKpmfhs^xdsw;jFG zS+p(o$lh>My9ZUXHMUs{088waSPfCCA}~*434Gh$6JqIL8YFyx38}+kOyX1dmd z{HyZQvZcpueX;-pxl!mY9y??y((BOnGzJJGg3`k}at!$-Tyw<6*B!l@9U-E$TP_#{ zJcP)!#D6doe$%eL$57XcxlnbOeLrZ_BBbgoeCX#R{}aEdH2ahiB!&Ott+vW~p6+2IIA`d!TIeIV*Y3N=eMR7?LqyN6kFF|=OCr6KdM+)3xJY!u9_vxDc-ve9UDvb zm1{)DH&`8By3!(sEM;Gukk(RFN|MmAhF{Je-A21~q{E$LarcMl%qzdfdDc!n!HVL? z6m!b``CmhmIniJf*;Dn;03>13DdwvH0oI6#tX z3*>4vPeH*RU2gL-!i;pmed%p%~*+ne5a)q zvd&Db_JrQ6a9Q8@>9Hb5qK>Q#l`;AAkPV&ki|Yc1bsltP#sZ{_--DwfmW6^)I!@nI z^wQ##F-?JRJg#oTVKjzsNJ~L7$_Zz$0EeKoymen!tHjR|B6~`BfyS(>t*PRB;{#*; z<-YB#91Ue%&qsIb5Z7)Yk_bxD=ItYd*@I-|?ioW|%Jcwo)AQyuN6QtP6LoS*Y9X)E zXvBkmTm(?@_qkJSo+FN4bsGag>s0l=j&uAJFlFaBUeK<{UV88#A~VR$@0mK-&JAgN zUADv0;CBq0!aea%ktC}|U@MuvG^RV30KXZR)4GdssHfT1>}qxX(IV78^dReLc^RED z&4@K5^WpRR78xRUk*VR9&~oAe?8^V^E=4_Af%Zx@6%6&g%S5{)Q9PQ_dH8AqZEM7M zW#f<8SW?alrEj4ZesePTAB3l3#2EyiC+t5i7GUtZ!cnE3QV8U`sYTPc%rx>9p$l~} z6tZlXSQ$ROvxV^r@r=$Om;T(dtsT3Nd`a<}FCH&Pb}4#VFEg?|%1kAsGxv66;`%)Z|B z2qXu#0`P(R8~DiW0siVXDk;?X7-050D6wqhYL`8D{oSqc^9~0s1FvN1_Xv;64@O7) zhq^a9aL5wlZf6lmAjX8v+cqBH)MjX@6@7|7DKjX8U(@qmBM7eTQIbXOw&TeCX_@y+ z2aVv6F{Y9m*+o}vwsct48aB`1wOCv{E}D)rf~j!+2F8fP2J8mDSWu(xBB7<@)VwR^ ztA*6N?s%?|&SoQ^S$RUPyxxp1ppE+BjaIUIX!nJ{;C{ZCzyyHL19z$M;Mt^*4c*`5 zmFIV7p*4q_!o|E9UEMai`PQHtDT2d@s~LGfQ#}4hlcP zWW3?b{^0&kwq*8PB-I(&-XOYB(R`upLkT zuCgJ(21)&BxTcoOKUSku{?V+SW7Qcuhqb%f(kCq9vh_>G7;^~*ib#u$=j-1rU6wMK zil?lR*f=RI+RrTm7lRpj4TUD36P^v@3Q^64!C;CUck_srz3B9_cGQ zJGSTTq89ECM_!jVWnR_f_9~jnM~okh!6=}uB!m+wc-^~_9r(4fS%Rdn|Ng!w(GxrdJH8CV>sKr)`m$MIOlYnr0P@wUD`#+-X zSqC@fA;kz5V14^>iW#NIJ}so??-pA6E;|3y@+&hg`S)hKLbYuzVY*;E)1y+^w62;) z5B`^}G(tz}l)T>8Ajom8&^OkLXx`(UL@BtJy*JC*)9#sMLq4<=h6#|F@v=uqUf0aj zhh~~f^Uy#2x>>7}{r4_GuEk*@3tVTST_tt+FbD{&-Rt@4JHIXjb@&Dd&xWKDqqwuA^+DvVI z+H+ML~asO3)z1a#vBQ^*(M5_d1=h-}{Lrh~TWVk-N%m{vczc zx?1LMsGI3ZexnxJS8AMaM12L3#_u#Di^!THS*lb4F|A9_fUhtWaF5LEkflTYUy?$) zrrd6znR4}g!}xs+U=B!aUdaXNs|_T1EHs>qYw8nl!+p#%rlvLGJ|9UTFY;m*_p4rL4e*w(Gw9rEcfg1L(i0) z1x?{8_6nvcO3Y1$6uT8R-aB6SiHsUG5HpmCQJ;J=6@^|&~}smsW?bXKBBA!%AYq?Z#!VP8L!jga#Av4Dk_Pq znvi}GdPb`|_nfH2Syxpd@gS1LbmyBm#wn1!&(!0QKmz?QkD8~U)M(!A!WYc3{TZrJG(z=&V;2SC>D=CEWb*h%;=|ZME8XcG5 zAtl&<=SyA-qL&=RNn^4hN?zVPT1|r0SJMY-a_3I{#C)o=#n$X-3HKaC9 z(C~t?{kEbqZY(~4q0)i=Z6p|^4Fv^}Xr?q-)_kVcYwQ;FvJ4c+DgmFmfj9tJHAP%S z+E6(VG>1pt^5B%?d9SSTh@a$$UYYOj7K ztU```{lz**f;n5vK$vU@whO4WdQUd$yJUg6)psV_FlGCyl0cmF8MO| zrXd@iWrw7g#=b%$R!s&)MC=w$ccoiqa)|eZf_}vjEo1Kx`$EXw0q%)Hv2CC2^znyL ztpZ9-vaEs!z*UIRD)IFwO@3$hXUD>(?GwRm)f@VFEk(FzTJ|rSog0S+b_3UIVJM!t zDLVDz>m-E7i>(rF1)&b}W&xDo88TPJpAoMpN+P-O(zI>eZu?ZU=VrFTbn*@G9xWMj zHDR&dpPkibzycu{&>xILoq$&0i0;qs-pIDs1QEAWePM+wfSX=`)Tbfh3sos!Nq(I> z`YKKOIBX<>q)Q(k#Sv(!Qb%2$C?76es_CSqY1>p6-hk|tPV}XVe-Je~KYV2babc0i zHk_*PN`1}#=Y}5gtajEyh1jU2Zu^_1go*7)-yLcixF0wXnbbzxQ|oKWfLW=jh9<7E zH$gP~^L(A_@4I~wkNmSad?*cO+lO`K(a=+0(y#?=%YJ*q2kU;1`k^7(X9K_0Bfn|ttQy3I;ME};Peo)vC!P_55%!r^1&RcuK~q%7tLB6&lSnRx&^Io%Iu8 zj8JQ7^Es->t#VA$Bqed7#)J>Z&@3#@fo6eHNa{E*liA0`BIv$0DdN#LMAlsHT4{$4 zjtN7A%NK5h1Q>K)i5>W>y#06niA>Q3w6NO?>fP9f{4AyasU>& ztw;tY>-HABRK^BIjX!W8kBzLicT%bm32dqwqrzTFvzn>qrYfuZZ?|95Gt8C@2|41T z*fZG_H43;h(&h)O*W@Ic;=^KUUzr~`{UH(#T^GkvQ$3MVIz&Z^EzuDhlX}xqZ%eya zHs)DCd#{VZfM?nN#_QjfH@?aef=poHT1`yu1w}<~#VzHcf|INn$zJ=O?WM(tA#$`v z2dc|v%d8v51g+$*xn`r(&&z?1y2alFyZW}Wo{?1|a+Q)%GF%p$S$->tUJBHB<)L^^ z^fOw96BIvE%^%TN8dcJ`Eby~93}k%ch+M+tU5|1K;>mmFkIc^dPP-(`8LPafDzwGF z6+~Hk-hFcLCS|14(4g`owEF3+JGCUvRJTG@Z6gol{}LYl`|3X{B$w-f&BGEwPJ07^ zLbaO6)d)V^1^UXU7AV5jkW?0zm%BeMU42o04NRpV@$FnE#AHF@_#skSC%JoY$D>yN zEt#;`)LxP&Fsf`2a}Ukhts|(&Xi!Q~=K%61tt-r!J4u=WJuf&{Q)OG`smBue;KY&} zb6RIRcQe&aV*>ojg##jtUt3dXlqR2%yusGbsGpA*jr?}kIxaXC!SE^>WE*jG#%f@S z&Kd2$=lvU)%CV%{_H81!1i;VvgZBfMd|_m4n6Y!?dF{`h33ZwHV_H+!mpEhhFdEx$ zPOoT*D4;+u9b#bayEAfU^){MNfC}tVM;de#`Gn@ym{5p0bzg`0MaN-RR$0RauZx3T zJhdM~&@AljEgvK<4DYmK_4G+KvFog-jE~N??DvzbE*qhvy~QkeeTSb3=a;Xj=;E_a zMRsf6$Z8>M2l->3_(BDu8n0N{-%T#sUbsuB55Ycr`u||zz14A*2s!~pfSn%gnm%5y zA??@;tqxg9sxW1QkPi0u9E0G?zq@v52hi+hCjLU|D09bepkmZ*K~1s1ba>vtjR#|t z*-VJyz#;OP(wJ{PJO^mard|4C({%v%M)ZVwFGm9pBv&L6iI!0!>a8J>0Z`Hz+PByexZBZN<7}Mkc&ET-`h#h892C?~7$;QUgr_0-J0j1J1w(IIu zl5X5#1le66wj0{*5R(Eha-}K^F?P}R9v~VuZd>X_Bm{3re>u!FJw0}hul6VvfY+5P zUE6)bRlg<|g-<_eQZw}@CZtO~(^%y8u3=9!_;_Hu`BLZC-bx-5#^QZQym0@suFji= z0}Hw6+=M?(*Vjo%;3>5F;`R?n@>Fz`P9!D$#=rAXjCwvM)gJP*LTFKR1x@|e&B>*@ z{#`(mSu8@Vmy^ib@wgMLv54E1YCtyI5VTUdwX7%xsFTM+;Q(e1>=}>Zi%A`P2gxWC z4aVOd4Fe69=+1yb$OOK?U&A?Y?;|*@Lw~Vy*2^IKrgNG~9d}*f2+HOl{G7c0_+Q6h z7Zv&X5ht3Ce_e}EZ|1VI`0C-(BrkfH=_~AfW$6be&|;4O%gpv4kR%73sD#xHCUh<2 ztRQ=>N@|Z^NehD?z6ZTz?ISi?YjDw_#wT9uRBc0C(-R-3_DAv$B#S|@$qYaPt*lDWYycx z+GIr;H2#nnafQyLPZ{V4cjIp?V>>k<*o`3T(tp5?9Mz|`M=ad35v4s{=DDm&>!N5ue<&Nuvu>*tEoTdY+yt+N4=`r(1rv?$LZTG4 zcd9?4HexjGEt9zOd9OHcjtA^RGsDA7Ax*FPOYJ&g8lfzQVGh6#?cCw9+q_El$r@ln zEW(4q35=sveyUj$FORrD8(y}}U%EuHaF!l@HT zGhsVsh75Di7Q%m2aMl6{gU*?50I)kL5qt4F#?TI1E!cEhSe1IjZe3$XK9G%u&B*UH zRG)c7i*pLi7Vxtj`w{`Y2vMd|yVD%ldNyOR%%1&F?emE}n_Zz4FL!cAb;EORkCkO~ zelW@)!m(#sH6zjJ2EeHa0FAu5KgCEB78_u;?eZ^YFI>9-9c{RkOb!4N*e0g62$o9f z{0(3%3nwE80A$9XvES%;>Fc*Ll~UcuK#(w<4xYlOlV%;P$j~4pmAp#lHA}i>C0*3 zCqT0k4W$-NT+A1{nc!Bn=Y@4~ytTEDKf)4hvQ%7=oDOCFnd!g+Zl$p*C#>cyW+jp7 zxpS5ar5qIy8`HK*p{p#Ag<#NUIW$7*_$ObyvRrb{wmLj<`zyHz# zWrW@mX;={Mb`T4dy2B=+7J=hRwjNmu?$nI@f9DWTKQK#LPAaOQWdyW5UFBPCg6gI# zADU!q+HB$#Nz0iXKAX48MC>lP3}VEPaKQ?hk@_mf-ySGREF8hK=p+hWmE`c^WR;WR zvshjrFdM0<>hi4rb-D13B)3Fynl67TNO-+uA=W0~p6aVF&35BN2uYh4Or16SVq8Kl z` zWv&vOyy~s?efSvE#Aj+Wo+RPI=R%V%9mQ@X42gY+l!;)}OZ8i%x&31grLo)W3~=ZO z*Z)QqO*nov9v7RN^)@&Y?GKd<&7UK#++t8=)=x{TiG`K94e(jtYE|2(zGT$MyOqy+4S?}-17bROF zPfc$v%}_wMu)4iWgS+BRjy$`v#{~+Uo98UPKApms+c0(&@f(m~@4+&F9#6FH65enH zlqsYSsbtiSl<0i{^)}7W*?j}4u2X%fEAbB+W+c;yah5MF*U)aL5+O#lR>x=?nm;5Y z$k|mpVr4HzWMZAIzd<}rS}@uHNF>r3jO~B z$CNdzl?w{!DFQ(OW&7AG8l){Za>0TjU0MhqU=Ax@`ZRj4vd<+{W%a$bex~leq!DaB zifXMto$F7_E?a6hk#~zZ-C>icr?6lRSv1=b%s+wi6f!BjUt)Xx`hacKZ6F6%tXVaZa@0pWexTGne^H6 zW+S5v@1^_G3KDJO^c;)j39gEaP|qZe%dWCt3h6gQSR%x>K8}^1-hHC?t0ftcSFM=k zq!twX?WR_q?2~p9MF$D-UTyB0`Sse!Aq2h^vS`_6ED}mn(VaBAtqbqV63R>W&iyaH zc=vv@>|zGuZek)zjg(7?!jLscsEU+Ym4s7=l&PXKN7b0Ik5u4Eui^YVH~;lmdClYO zSa?H!^yM0dUP-7`J z6&Yofa5eQdoDv!ekBoa5uA^-%A$}TuTsQa%80}--M0#QMHW)s~HkNr3=O3!I292$R z6vYS8^~F@wD0xpl##ZI&UTUPa0ES`heHmO-_qn%T|DO zoyT4NA#gcZn(&X6a7*tm`~O9`Q`s!Y-=UGQK&)=aQxt-b_Fz5|Y)ciW=31)Ogq2+{ z{LE>L7<6DBtLoCP3NO9ngZ>E@W?p*2Qj@N;!>ph_+jTH$vL$PJer1NE{{I7;Fx&JXH zg^D(3>_AnD&JVLYTD#7}BHi((>$Xgp=2ssELPm$%*g|(M@={N!*NCJCnb_lM$*apU zkut1iFW(7#zgs)8C!8SsoNf=Pxua61G62rAyGxN z=3Ph0ogsfPHio6cjbcX<=y*d&;2kw{d+vM;} z(AoHv8W;(;w)j%KMfqQPxes%KtG6ce{g&GCp&RY)c(oUav{Kc=BVYGpYt+SkmxD4J zo}PKBly3{lT*F+FVlN4a0=*cPbKwk<&J%x=bq3;Wv0L#6Wc>8Qp`*&+s$pz?yB`f7 zLeYCwLM~6{yjhR4?XwEQG9W`bijGRe^tfy&tk#cKYxv!nxzfJh@$=fAc;d)T!BNe` z33e>su&TKd@sotg{4eWhT&_`j*aB9*v6X9da-~G4`KyxZ>6@4C00{9JkJz|%&hTgy zMS#4T;sWCbF8`oYae^>s5nbuu+d8<7`zK+iB`Z&FH73%BDF);773-EvMM1R%d_+GK zBD1TxrbXzz_SG`zXS9W&vDlx(Vp8;4Bi*w74t8+IDT;YX;;r`@$Q4>S(Fk`>Gjd#b zUptot9zZh4WWZ@C^S;i6pI}8;1r`0p5GZou2rpp;t{PbSfrl20zr~n}N#{2_2pn7C zV=!1#Rw(_>lL36{(O>hK=2e)c>gms^C2$2i6SFwZA7OICBek&3kw=}jzH}PK62CVi zgjsHG0}A-0dif3II+H#;~}8w5N87{bvCEd39qzbxT;T9!@e zH6Y|ZFBA&KK*RBwIm`T+GmBl?TxziRrtY}1Q1k2M(rd>;ok61MT)+-`n7}9?tn@}_65eZ=VoFb%4apJ+K1B5Lc0+HpxE*L+ zU?yFNiIW{Ghkenb`j|1TVv;`dBDy`CH=+_=?3Kb;m8a->WGO&}}un;)Of#`?^om3suuBH zHL|ERHU$X`+XG&!^GOc3;!oV_EUp7}*KdvmrZ}yBz6~MdEc$+C5{kqP+Mct(ntF_R zMuIb`nMSwBe7iy>12z9vND$IuQ2!>o+8D;EVY9CsTbM(~sWW~4cj+F_)bJ4gSgmn(h|B5a`jpi@b$=e^0wq+4k_+nkx zuDN$@8&p`CR5qGW4QNi$H{^gL z4HW%xxiSaB>q=tC)ck!V6#k<7TEMiWqBgZg&Jx6wrq>U$4^9103awx;=TDx$om(Ou z19MR1=-RXUg`&NR9n=QB17OS~W!3=_ZxCsx3>G`W`9sUcm`MwmA@T9?_V(}VqwC@G z+wX(@qvt~p3a}WU*M;#L!4#C>mfGW&yLDR<8{4U8dp-QtR##E8ncoBO1Dh-@BO{ZN zyr{}F1OVRC3wJ$IR;)@;RQqw zyagftIySrUWOg}@?|$k<6pOPxx%HTgBgL`6S%goz-8DV~M&Sl%eX)2Ikm7F5t`6h; zQ>N|aHWcv@yS>HuBlEblb2?xV8UP%q{<|JwR$Zn0hp-t7gnv-}o``F+DVoH7m$pSb z?Bf%(Qcz3da)B=7$bsaIxjR2!ZUC4#;snDjB7v*34Qb}dLJRhcH9VSPbxO_|<(v4{ zBZ%tT=^O7m^16uU4Z%@VbGCWW&?(gv%6(F6n&5{2eoX`EtrTCP=r@`kIaVY!EMCK> zyq=1n{o*EE0=q8$>i?b5`iVb+z3pbsW*3+wu9a6FBTz6Bi5!EPxTtfy)4jC z$|rKca0yLGKO1LzWt7;3Vt<$fDys&f)Zajan8yb&Ix-4m2Wkx->2Hn>xUS~sWJ;2Q z3q`!?SAZO7}j7>QB-$Xm5}0rae;7 zn2iY+8t<$v6tfUH`HHWS7)y!?F`wj~ls%u%6n6BFck|JVuQq^AM?SK<-Z2}B9)hoB z=+38bIN;^VvuQ@y5KB}^6rr5_5-VPe6LLx+Ghl*2*g8OdYHf--T^DjJ{x$E|Fz3aI zkSij_W~0NE)|o>m%+JxIQ4IHO5;b0!xgN99bfmlfa|HZc@u$T=dI&Znkrn~~nMSlB zRimNgbj?yNrLk$N8K`BANnv0M*Pr1CrM$ZRTOIOwVACoUeeI>uqy9dph#*}w4HXXW`2O0Ly6>xoQW+GFz@ z(Gnn^x}SDA;7#EMMmQ5I2e=pC{JYKcbU}sJ9u}$DYFMCNj_J8kN~=VFiTt$4c4?|l za&z;VX@#-mgG(1}5`>cTWm*br^IkH{w|S611Y2=AM^<3hVcX8`s&HimYv7JB(Mr8g zW*-WkPb73~VDI~~FFiv^7~LrFC-YlYfA<7@|L?uqYW73<_rMJBAnc_w&8H zw2Xm@;MsQp#8Kl1$}a{(yORacbEC3%P5i-IDKBW)82IjuX?8&Z3Dr0^i=3I%Jrm!K z>&4Lh+TvsQApyW<5s2!c0GmY>36XhZpii%^wD^r2lQy=B{4osmEv%brLNm+VMyuyONsF9?6f#o|lg;iQSOAm`1-O7pY z#+&MmyKV~4ZLwe&BSMpH8dl@46@@eD{6NC&AUDDG7JpcUE?4ZjKsA+8%WH&V@W0cf zjM-1Rn3QaafVpwIl z6Z2@HvZbInz^wvoUcLj6%`2tJROS}Y0rHQ*Hzi1d($KuJl&|YcB;JH#JiTwxB^zF^ z-wFgX*gJVi9AC^U(EiZOIs5@Xv)1)AU&PiqNQ>@i9g9WF_&9c}9M|;d?+|UgsK&qZ zS2TcS(lgvO*RhMnI2klIG1ReJI;m+nIl-fy0w+CnS|>Mg7{$}esHYQ!wTz-hDKB@6 zER-fu6Vk;EmBd7G`%~=6P2XL(Ty=r-MyB@0@&spNrRR1C0=%%K`#)L1ziby29{i>P zKwj*ru~RX3_Yk>0XVaQ+hdq8Ld8Nb58a)moIqQ`-rs@8@;(po8KIbN<3d^mzOEiSR zbQh1IU3xDLgqN30js>wAa&NETAen;qnzjH@9{~hKxNRKCg*iU+W9OX$$F$z#F7-2N ziEjRr@Pg&)REO`N)H=2?t34un$KA3cWf85vfuKY6Mq(vK2_^4hBSqAD_~Nc4e2|CY zNTM@|AY#As!9Or;6zD=lR{kC7AqO{=37WT>0d&C5b(%NqAq3p#9;xGs2(Dqb^VUDR zBocB29kl5BH?ch=XqhQl-68-WJ7CG?33si-$Ac0igLr=jzeuaIRA&8d+ws}|Q&X)h z;vVD-s3zg;GUD~^dR&wOy-+9G*w=4*)oL=jjnAv<@QYC&?J#u>+26+R)+0QSVMO6!2JQ%Yo<+U3^FfJR;v92{=3+iz(Ku65&uYTKz3Or27 zm?DCB(%H%QKu9e^2u|OP9yqYqj)KceA)H(G{$JtWW4j-Vr5{;5}a77_Rw=E@(y=7|s0{`1#VBl&=> zcH}{H_3~ZfRM6NKKk^YDHB83T@l-+WVbvc2y;9}keQ;nMH!RL=v%iuexWphQsyNli%(AU03kIfSMCW@>_X{ zI0rW8eDvG8Sts*)h*eq(rT~i=`_R-LpQEPeeQjmAf9k3i7wI^TpU}am8)LQYPgj|{ z)ZW3L**_`@7ZM+4r@k_yBm@%Bg$t+aHqiH!I$qx`jp!1|DU*vhW`h10B`jLSPYd4k$1EJgEA=@Xz&<-L76qJEv@yf^-cZt)vXQf zEyN^5lnm5ZtZX#@?K+^%tf$|mYISto92n`mbUyvvT??g;{15vrT4>}!E&Em%dGQ0c zd0oNZ@yQ$Zyedg*oLqd0b;?Phv&SWrPz~w}G`O5XbgwgwdOW?(btsewM+8>q>T zrsSAnv|lvvx^6O(M0OfxJS zc!5LYSGcR*@csTn+<5P0s;DlZST1PjI2%$j4xexEx9{g>tJNv(b|7>6HLE|u^-YAx z55whu8|R%(!@+vS1al{LL#jx~m(+8>WE51p4s{l=%=WYKd5||MhQA~k$VtvWQhT($ zq8KZ94m?Zg6*VkUS7y9mQ6;#C4SaYp!%+Lx3zodGWY)IYUO{M^!P(VR%3;aDoK%hE z7-RJ4B-ft50?q*YfS8DY^PDeA3lNQ3EZfX$+AbcZY^sgbo?=Yzcm44#FpJP&k0ksd zPDOCN@4wKzPMN8iPygo1MKbTIdyIbRpnApK2Xx%Da7Fs3)5U;yE?zCpmb!GOiDk6G z=A`3gn4-9=aITUMdy{ zIP`GC-_`|eoK?(8KW@jNO`^u&jq=ExwY*$&$`+bNZb}|mc%YZ#6UdR3r#Mhe$=dX7 z=`q=6vdd_h1V+LK-II_e97r~mMF%dGD)XxUpeq@{zjl-Uj?W(I6l&+JL$1;Pbj8 zos#mb?M_Dv$&>d0={3D}Fw)%;f#nqoV^MEX-)%d#`1aW4jjn9TZ(m=OVtCG=c3WfE z5?$Hv?4W@yW78(*dNJ*a4!k8ZH0bBEiK>rGjg6K+1KX%>n5L`r3LLHVLmHF9v6 zaW`RFHR9&mBn$Q-Ox{{!DkUSV?=uo_Y=3NRPNx(FY%$CPLdXUY@7W#S4n)V|05*rB zjMeonaOD=|jfVy7Mn1eOoC2KB%xzntmf<~jQZ1HnU|R5VkInGLp*w;xV}Sq5^#ENI zD!S2{sii6ij1G4X?7M=LcO6E3Z%#9W34Ep)mFh4k@4Fglq?~<^ z-~_jnUHopfDdxo6%O5I=cn~j3J7KlhF8ts#^%GJU&v3+hf**AEOZahOTvi?!2GIv4 zc2p1Wd)E1O0TVdjah_|>onIFWizj>Hd7=!HnFrdnBfbkiKj(KF(g%dB=uEQYgYm$p z{(nS$V{~27*7k|f*tXf&ww*L?Y&&Uewz1Qov2EM7+1TcH(tGdwjb!BfIDgjIS$nNH zA5DMs(6rgo#u-`q4<=tbO2|gg{iQsZi zM2z!QT}=mRBS(Yczx%lRFeqtee-Bn{mu(S%Le-pgSEVG$NK1y>v?X9u3?td69fhYt zf}~JGaaIcFr2a#h;IYX4BIcCEV&}#40*lTq{1=ptkcnqCcrgE4UJa`Gf>}~}4<(Zv z=gR_g*^#$1t*Vkl6oD&g0If{Wku-Nw(C+{v)R+MYiC(#u<_23`W|n``DS*oc%H%bq zXhz8;@__vyfC4oBqTq7feYh%z$T6pttoL1bDn)WI;QYW&e!XY#uG28inMI5Cxz63o zXwc%SBYFnfGR%=LG7^Wp=15R_%p^zPRxcgARfN<2J_tQghmUsjOE}(jJBDAltrXc| zP(*JB&^v-0V6G zUztip$T~#(X$7^{5>m)VIMv%7(+RU&F8GdjvVGl^O1e-nQ683Wkwu>VPoe6G(`(0E zFps=Ntz5Rn#(kzs%IJg|OQS?K`8?|76IwM@6okw%N|soAX`O>aTInP?92?RZ)mYC) zc?IKGxfl9A&^FDcHojU~*Ske)G@CLT0LB#mm*l;Efs`Enf9QsvXg&HH6(s|3ycw;> z-#woDcp>8&mINMw1yAQc(Amjn%aF71*hD~GH35l=!5Uv-UShzz01yP zHr7)+Gb>5j417>>=U0N<%Tc1MrUMArl; z-BXRc%!ZpgW-+|-tA*dBMJSVSU_Md1iy=a^*5^@q;E^n7?yOV=g@!3ReZ0E9T| z+4Sv!(sJOG;g+^OB>>JUR7}yx&JWf_vq+2x!6GwZ_FMLx#qtP+ zwBn9kG>h!&SN?k6s@Q1-gSb}$EcC_N2=8YGv-!Szy$(Fdguf9W;zCY#nbeZUrCrO2<{8r{evF=XJrxASkdZ+o1DU86ij!t~k z8G9qK%^Nc^i)C~MeW&f`muPauCvLL^Yy-nZDL0Za+16OXcZMu%5DlC}sAMv+vtG4k zNnXCr=~roLAkOz%s1WTeez&LqvCtF2Il9jKjuip7;24sk1GA4}Dnh6jdLZ99NunZ2 z(D6?p_U~pa;8vP8FU0a&#vjLuxLuP+%Pm9O-Qq&VQ}7s#!nrceM*S##yv)+`bLipI z-rPh_3?$H(Qd|!7Mz!er6NiOO#lJmJ?#-FYx@!J`9g#ZQd)&cfZbtAm^jp9r1cbnp zsW#>aBzN=aoWe_~On$1F(Lh~RX8x1b19j=3&(B{tKHn;NCLCUvS24n{ zu%gU$UvLKGu!uBx|M45Z6E6pdCV3aw7^%qu=Lpd?*VVI1v7<+}Af@WnTG%+~nMH@g zIX-yYB;Gejdf{}MCV&A6c%|x;6?S{bNAtO0ANpkQ%VsUNr<_MBUM7cPcc`^w? zWGH2>ES5GP>~ua^4aa&^jmdWB{1X}e=mM(oaU_}Urpvtgjhx^U)m>_F3kN_D6=^NA zP)Oy@zyX4$iU-(ZQRI5EGl-AK-x%pG@_%PagNaOyC%xTyU^N+AW7{Hf)s4=U;;2SskD{rU!8#@JkB{7 zShp9ee;6)4fxG{zHUt${lXPm5u_hG(msbTKlvo2)?KOSkL(o4RlYSw#&ZoTak6piO zCI2BXsY^qT{z;w{fS^{w9hfF{Mu89Wniz`kJ>_FI{p?15;G$+9ajG}8N}ar!>G)Sf zJs|Y}V67`n3KIuK@1avG?2nC_`h_F8#>b0*_%uB~Rdw?lJ8e)rZxta$XZMB6)z)-V z-BS>jWNn=)Oej<>bw<>}pjSa}*{xiSGo_C0%`v@AkT(L#!sm{*LxqGDB(k}YLP1S7 zmjEGZn($zgKG=3GZj0y1OWAU;0;9jidh%jcOAXJw%2HmgS+Csd$Qr=vOd}2(BX<^) z5E)4fy+3+>E2E=(0#z)wg$@pOrTR{mt#F-$ z_K|mSufF_av+<(K{az}b`0QvRjFYcu0~@@Yk(qpvHO`g#UJUB;C zLwZ#3u5T)43z$hB9gzZyJ^&d-wtLrqn0FtA#p7s!}re>FiPMN?-05b_0my%j6nCmGhrOIzUIdYJ}V;E4Y(OTeEk5sdOMNk z%A1Hs}4wlZ9h086*? zH-*(=u>d+tZw8H!uh0f{Z(sJ8o(8J7FT1`!y*h4Wa;IZN_6zSmzFzOoWfzK3gth)% zdT5kVe|~3i=Jp;y$SFxk#Y(qOn-T#W2Poxe1JAaV$l~xS{a80KPJ?{5LApNH1oq`$}v zHvNAGZoq;8fdjz5S)s7NPo#rLbb^+in(B_;rnZKb`etCDMH3k*=~pIfY&PbquGYrJ z|MW}1%fLZ)ZG(HZ zt-o7rz4qCnGi&7U<0$R34(ysfZh42nx4vS-ynEv^8)i{Gj}E@o`+FoQ^i8^ZAmq zkc`9$IDerOnDxr`SN81_nD0pEn+Ky@ZvJKK{9mVc3`?em!Ux-hxDi8%QJmi7c*sUy zt?n~1+&63K1hO6@}0MNK5|C)#Tbq=WAzBL6I3g5Y|OlxJ0vri41dx} zU%x`GSPApUDgEwrpXcg`uYHt9d=^FO%Gq-r7m#}M#U0I?(&i?J&IZ!4w>vF-M}*+4 za-+2O7%{|O|Hb0*$RcL>m$qrpHxbNk|Bg{|5-4N^Iw`Vq0&O*W^Q)sv*ta|SBXrFSvQQY}EI{8rCQ;6PZ#$MQDL&;eHOmB<>9sE8lPpz00rdaFo9M_}vNd3d+9r%{37y<8ECD7bhc^E++yMEctH9f_9nOVm5PC9S5-cx~#>33)e@ zSeAl*&~1I~`Mc^?rYCr~DK@P38-TU>3Yt?;W!F4N1U3sd-0(im0L9Gi3ii3+f8q{c zphe;-In(sOSHES?enk>|f-SGz5hoQqO&Xz&S?Qw<%@T<@l77UH0;hr1^ulVgJR`zn z6pqBp(;Ag*yKeW?+0+c428L1&zRW&em2w&}6&90F){~U{#Y45+0q0z2rLQ*)eGBcE zKS<+FwSI_o;6@HpGIKi;QlDCV+49EntDXuny!HuQ@O-}p!DOhDxexhetKs>}XHI6U zf{9_`Fy_0=X4PPuqec>cz_F$->@4aAu$1`c>i+Z^!xlQKaU(}jZzwg{VB2rE>x}y&> zokspfle;*9lW==@?4~yu6-40Cn6H?t`(war9>llE-RNT|?I&bCTp=vIU|Ra6 z9~>=tKDS3&QF;l(0``F0En_`oaT70(rFU&=U8LRx^BH_WV5U29VhPt;`)LuOTFV{l z>4m-_&3Zr~;2-JmX~sSXgYp7! z&sEs;-K2^@WKECYDw~G}>6Si4&kyxAL3Aps2$pfQP=62*>4S|gN4fA!ux~OnIteqg z3_=bl;m-<Qu=NBkctWb zKyBTW+1i#)a7Ilqjs>&tfT0i-^k+0SpALu-Z*DQq5r1+-fHMV=zvOcBo3Rml;Tl&zUkbx*UF>O z5#W?|ddU-f6}}=9iDpP2Rvba0Jf~Rm=$54VyZ_GMmaQj-g%g3E_ex3hHFSa*y=^jven)T2W|hNT&xaw;BNu9&iT@xX&__f4p%USn_MEb`LZDVq0=yQ)iIT%;6jqvoOIpE44-%@;{pbIg`RCc@M!fP^Iv9w;O6@bZ{t z2u9?a`j}C$t~)&I5Va2XMY_<)6r&6~d1x{=bw&IN&$s#-v4Za(wT6wk6F%yHq@@+& zLIW^x5+;TtFP#uZtr3cFlo|puqYcG_&CiPg7;aLe|0gg2!UfXupy;|VkX6kT?WVVw zaD~4H4us>{?^5%4^lw3(7l+RYhrt(vzq%W*oOG97A&YA|@0ISWwM>Z=d;^b}DSGy6 z(KREl15bXeIFvmRyteFW%jEe$zvS<8k`TE z%@08vB$1?*`!=-r=CaU&$`bR%1urIBsl&r0nKK+_+Ixh2TnBQyhkDx_sXk8&aS_K^ zkLWiz8gO@i222B=wwj|@b1ow}6`*w=;P`%U}xfg9#1mEBI{AJF(7YfcemMg z*Njt7}okXW#-9V@EY)SY#WQY@(HLSV}zZGx_EAsunb|IjG47g2H)B6tV7SOs}{dR}g zXJYuq1V`d?wX1@7CKF9T(svRJpWeFVn>UjMFiz2HZnvgrJ)D<%Hhz%BD>wF!{bn(| z$Z=OVrMbXfL@_9zGCU0>U>tMKLL7`n`MEVT;Dyg))V60MEFL9cu9Q_^NH;+kp_2Ly z89C-wKhqziOnrXavvz;s6%R_S{u&n@uW(vth*I{oAmQSUGG~c|6K!Dhq_6=z`++2V zR$g_~2?}@(0qc}ck1beIwrw9>&(%=UO zLu&#liv9Da*h1XeBda6s!IY3s)(E%U@+1 zZS~nNYtiMyGFqEW!r-EqFSb zOh9y*|LW}5FEm6TL-`~k_~Ul}+XDM1rv%&~pATAh*hZN+KQkMkhpQWdeZ|VI@2y@J zlB=xZqS2AZTd$~J?8; z$-JR2$)QzL9LZ)thi721%#Y8QQG?CbL@kFjLB(lH$6oC$;Y715#sr}<69&b zUE!(>EcM?qU3X*WqF2!*sYk63Ch4O_xEk@Tp59*~2|YoHEAvd-P$orO0nVnyTn+%J z1C}$udB*qFqHue-pBr~9OYS*@&VavV9*gP4BB8ha8=mubQzvFvlECacVEYt?m$38o zpIr%B30Db~Z%WD#p#>C zj=NNS-aj%5q24k-eqKqLzy9|5Sz4!$7<+j4R_QtId!F+XgqMMDtQHxNU5UW3e>1;k z;=_;kqp9b`Q||rr%~#@N`Swk1+W6RqpkTp?zkhNi;T7~#bN8wC6;vEvK_oA~=LL>` zoIurk&N2F0Pal6E(s%##)xW8LL#Wx^jRSgfUZgfEP;}PU&mVR=WMoCbTftHasq+=2 zl~HchgJ$jAT1L3FGyth66@unM%pb+GPt>WoMEyuARLl7RU94*M%2RF3NYTOa*Eeii zE@&Z63urlLO-WrJn^|jhzo(7N%c^>miH>y@xrhWkYCg5sga~=QPWHAmc*y2M@&ROW zi2s~+K$Az2hMH8O!+;WC$u^f{ZkSB#yfC)0xCl+XGX-(t^hPjdEj@;M!V_m1zvS>q z`qh!AFpqv><5}ipNT`7J3Y)!X&@NCCN_T#gZ?SvFh*IEMY`j=!4a~kz$DYDsN~?NS zc}wQ}hZ?MPWC&Ox83$C06!@!N9Ci{_<1H^~z|eB{59@_o-sd1+G}A~NJ;%yz{}ltB zRe~R3RiP)>w`OUH;@?d&rYr1|B%%9nRz;V6%hO~~tlfckV{-~n?JHPjp+@c_TbB)h z(@}9CmQwKht1k4@OZpT+E902wu%K^|vXUb}J;Q&|coyr2X?eNXfroW0UVzyuCf!36 zi1RWp^83Ia&h6HF3cpO)5z|!HV*CO+e4IX+^2{r~zreXXEu^)3S`^6)mHsS6go{o$!A=G&4YC;L zp7R&6bjKV#9^@>035Or~7+7v>aMz0~yFL89%5mME(h7f`rm*=O9lUg>P$|Dun%8F8 zfrlUPCX5~Iv-R8S>hcNxGClTRImWZ#2@uv+MEk2ZsjU(7jw6zme5>@W`5v%HT!7RPX!w4#PzhcR&d3K#bw6aLjd^RiadpMt3;jibg0J zsBEJFaw2SQQlXCXlNCx2MIslMyx>|@y$Vgb3@$flV>ss5Zn_Ami zKCK>~w-b;yT`@-y7*XO80cqkHS6g3le{+vW%aSJ@xPA;pN<@j*aF=%oa)~A!;Q_1Q z-Os*UV6SjOZ6A9JIfiJ(giV1Z$7yydam6#uFwojj;ss~LDa#0 zb{EZu99W-I0h9%vvtrUfyB>+{w(&h~&05;7L>F|@8VRRwY@f}%EGZ5t*BzYY{**Tf z38}GNhuW=%Z}!PX|3%oA+AAB7C&9@7uIa`g{K#);{#NUfz?xlm`<}&WM{PpaUR#E=Cf1Us6Gqa`|vBR(3XC7G0z&^Ia95vx4H(STzog?Zl2ymu9)Ko20%l zm4>BVZhps*pc-yS{}3%2TqDcKj;T7NGgK<_;=|65&srVmQIP@zKwHg5Na6C~^T7(1 z>XK`vhOK0YdQ$TIJ}b?lxRYs@)(ZdCE^(46)pRT0X3)vo%3-Fiaoq~J5Ob>Fh@YMcYN5TBhK0AjH8ys=s4g?Q2{yRV7TPRu$5N*Lmh-hd3f(l zEbt&zFfyzd>~ov{+cSpRiRu>dKnXLF0M-<3aSG-jUP?HF!I|-1X7GVP}Dhd^9ZCF8AaV*BqHQj4;H9may+^)A3y1Q_jFqMM=N*uJf|6Dsw z=q0kCLRsuvX*5Ntt-tgl=(Ka}+MORpjW$nj?V|>XUSCO9aO#~d|naz`( zgB|B@w4h?DQWxDimAt>1QRGqS&Fo4)P&f@}ZjK9ws0EIwc&6iCOzhd_va^61jDM1R zV5z&a)Ie^86%c+(cUypIS7ASUuQv=1)*? zXK!{s!eho-o7Txy@T&?vF$p_cP82z~Cwal#DhecokwTy$_hD2UKW4YRx7ijQMR16> z$L|9F4&QruYkK#*&ZmelBiuoAfC}~U|1W(w{GyTE>N5Zvz}}N55UdjWBwv`0&wv|e z7xwTT<>QLXCUAZ6iupFb?7YcvN-T1{a)}-OW*K$70drG@GuH5}`(65-xvYgphTHF~ znfQC13Oy-GUqF%TbXbg0Nhq;$uKFotnpe?p{>IG%o5Yvph|}=YGf?lVrakeb z79t@2SRKQ1-8Nk#o-4amDn4R7hY;aq85E+3rLh#?uyYtC9r56)?$+AT>NDYHOZA0T z;q1j8mODv$6{^XOp)q}&g_9F6~!i%7X4 zLgIJwt`BlQ(wE>i!q@scAlANvMfhRNiXFp|mRh$S{{RDKYDZNBjiNc2vN`NJ@P`f< z^7q}R>-c_*vo-8iOJ9dy9p+@8ldZfbRY7aCA0bk8=klwC>Ak!E6D@3wgz7l2&Ac{f zc%Ri(mbegY5MiD(egIE!Yjksy_BypFH-iBIowu7ueWmFtPsH7U2u@diNWBV^t#2yV z%H~oRH~?sAYX0Qk1=ywTWq#<-vpCoCJx~qIv%q)ml1dR0HYDz-VG#$Cuz5 z{qDZWiY{%|KP0YfsN3`YBLLfY(h|)E9)i@IX4$^uJmCY2jkCNS{hr?!B%TJPj28esc?J0+W{~%8w(f)Ki zF)m}J4*RrZM@x1>M9ZGj%^X{YG1_yr;qlO;(inpSUI8p$kfSDmtc_s2;ETH#R-YT* zqDp$ z$Vdf%f>1{$75JC5J~H^2$_<;fR8tmbF_ zwTKr`cvVw37o$?aZrOez$aCR~iUSLT-p7xvs-}*&>h-#r)i+GFrLWu^Kg1oxHV%?l z(CxfWW+K!8YalY^Ks$kH@0PgFdy46Oa1NJmS7=7_(B3M)2PNkg*BdsQ%7VUU(rxFgT~~VFKonz0ukIXSA~t7&OuY-KU478n=G-uh zmfDwxt>is!ZLuMajA`6up_c)o=x1QOF)y1|lZJX2yADjUEcTQplJB7PVN~&We{Q?$ z1Pt}v-(<>BELir{uG3kXI-_t+DEU}+@`@N+Ld<{Q^gqEcXOh0M&yGeNnqO;aTe&uy z1E1nDm9%T^y0$soCY(i=Qp~s(^CT0p(jkq;Qr!EG8CV|>@c7{!ocOxS^33=i?CFLd3MssN(uZE@MMf)8lWxZT;ZWw6xXUm03u5rJ&Q^X{TE#l&% zM0O3Oky&OioR1P0;!MWswWTWUcc3+)Yih?!zs1)^N$t;})5ZT@(+bUf!1*iB>Yol{ z5#~qP;I?JtXTLjUt3@n=V7(@7p=H+=AL4}+NyYbFuFfScv}8_g1`zO0;Jb<94^~(# zArKWqGFyuzt?GC*dOMCpw_*KielSh)ctow=_vM5R83gGcZx2jh4$B7j2l}zD>ZXAr zyg$8vpLUfmRyxY5z1P)Xk62eWNSDP&Ir1@J`=Z#+i^vd4ZwYI^XZ?n+A!&8|^@GDY zkiw=?MB}-NeHZn#_^(XBgeR`D9ZdCDUK^HJ^&0tXEw;;+8NB@HeZ^&PuuQ&~huu7e znP9(x=Ob!r{mlD-@q~J$UN=Doqv%G#ZULO7)%Yw~@NZbFl&=sYg?3c$r_BX)$2194 zGr(cK{~T|hJrz@VL?YRW1#H(+R$c;}ilzR_6g=jFgNPj-9vPOsk{YIIsbzIqY>2$T zfN-DQF;Ac<3R`Za!!df1jE~$3y$(cP=gvg}#04lC!W*zm)Oz!`$8kk_ODbEHjt z(2&Nsl1fvP!8Yf_-q$bP&cju_yPzv*C_kw`Z>Y~CNgxu&MlnCq!J?!BIM5Uz<2qq% z&J2)u>kwK%pDnH)TH$U**H@OziWvm~CBR|x*0f}8k4&$DLth~SyS3kNz0E~I`+8lc zHf8#XX6U?wvfjNW70QD%<|i?Z;{gdS+*?U7DzCcFFuc%UAFL{=jCnpufW<%)B(>Iy z^mYxg5wKk`Imo0Z5`CaB8r7%bAD5+JnNX9Z0+8U@L+iS8AZlAaXR`W!EvI^#Gr;E< z9RS<*Nx*!X$pyioab}s4^eJ#eKma9CSlt4yM9s#O$u*FjoRq2XqyrTX%#!EV_Et;% zBJ#ipW8>p5U3m>M7@IXm{qg+^6o;TTyg8Z+EPq6twI=A9P06a8A|{18DJ{^5*$Tpr z@!6L3iI3{{s|fJh(=n-GLHYKY0F^H~l+zW{Vg3qr&mz5HB&Isir-dPb9+H_o;M=-^ z#v!}Pxk#@UJEWvj{FyftIMRuN7}XOEQZrnw!m_L7`;h2@q>i*L66K8x*&qNJ>e|@E_*-&}LT+ALmD?K`Cd5$BFS$WmOQDRI z{Vl%}d$_QFFO6fNQgAZ)XDceBEJwVm_~N*g75gBRaK7@?CnIw*B8q9bl>Sv|c%Fgm zU5Aw9C$8;R!^}d@Yw*=;Wfn11%pGNWwN`Pw_<~ za%x7YNy+zmUY0P}#PJ@S8@!b({!s<8;8>JdP<0Myo5YyAd%C=5nJNNW<~)xZhYNHd zUv+X2G0i&r1Ie-2D-4B(}Sm`4z(qQ-I+q?~xvH?L=1suAT?DwJFi z)ZabNH<~WSOW2=GyKwsmb~iJ8Ee!oqCeOv>*J@`XG@wNqD=wkx<{Pbr4*f)PC!BcY zn)MGz_-_uTk=Ar%4T~1={WdqrK`iH>Z7e*_-$)@HWQtNYwGnam#EGIi$x2c9+-#)^z3}4|__|fSIm#Wh6m0xZ zM6@jl6p2B8{D!E#$nG_wG?(D?`1ajVPRG-zk|+#?#~>|WVOyns*b9Z~M6XEA?e-za z6u~!p7FO?2JlJhW?pK!OwHF_eI}w@w*d7yAJc7`AhNTvaMz;Oo*J^|;lOMm|*MWxr zDpiKf8|SDMC4kc${2;sr2pE*Jn<4TEy3v_tV5uIC?2%gE;+Rc`cfrGe`wgp1M}U#s z;a}=i41TrQh6|>sa=l)KTzjJ&y;Z5bR7frHmcE1o*{ErP%v~u@U3^n##p#k6guz{H z^$nIiI3*(S?_bvJ_%QYB7=teOMyRA?AidJQl!>K644-;WMC6@2)Y%QIV67>dKmX|B z6kTV0&$61eObLb919*XEnY?noeWn8ym0Q;96B~g;09+plh7w6DYQ9HSxoH~EugZj) zOvFAIlV3VzbgLEqHXzv@A%Ax)QxRZ|;Vj}PVG8!Blpu7mUecQr(tUR23n|!bd6yeh5w%!{_&~V~SGuA0-$oV&48|`- zp_E2^H#Z+}kl|Kp1)nM%m%pN2q1iDqomTv-P=bjFEyyWiQJ42 zprPH3Tq`~Vzjz#S#YgDA%yHGFH}v(Wd*<3C6;TDAL~oHpma7MX5oP0at#3ASf%Jfb zD3F|?#)%c0g9MKOv$^|hp~Vvw^p0cW^pzD=%A%LqgufL|2F*!VgA|>O{G6yz3S4MI z?V&o=E!rjc{oK?G^pkV?7h))wO(TV}IXeNI)UDIi9*qKB5jOTipJ1Gi%C+Z(UaT&K zaQE+BWs1nG^j$6N8h`tNB>G{G_lO1<3Gtgd>zsfNDCzp( zG4tGUh!<=9=*0BA16B3xjw{W>b%wzCx$G6}*wOUEfSW+J{O6$Al_$Nm9)m_wjQ884 zH9qPqcK+7>CViB22-rXB$#zfD#v&^HmR8Vj%D%Z;BeCY;iW@v;Ui;mAPZG7DY5!^6 z53qf7;A9uC%zi4uh$<={Da!yr0?5X)*i*knIS93zaXV>T9K-8;JTG>>=lRV2d{#;( z;Pbpaq>9J|{vMt!GOodyol;OY&tN2a?mXBzFq3C)lrf%nJ0j3rCToY!Hp{l{-)61d zxO&300I#37)+i8wkec4GTFqY)0D$Ai+2uBk^hm}-vA6=FbEe3n&!4DU$ph(^OgvXJ zgJW;CT3b#FZ3`O>bC0}Eoj=h9tRlEK*`3b}saM(7$Q@c zKkPlH77J>w5|95ic@m+v%UqYNi)rbow5XR(n&G1Y4Xkng)9+=M&@ev#nE}pa%6_}5 z1#v1gJv>869j77_hrElX;8uLQlH_38Jd=}HU_QG3#SVrzmUl%&D3!&&D5B#KG_yj0 ziY*ECH}mUaYicz&K5L#`ECZVkg&ljvK@8GxG~tcV7T3FNX}hW@`m(m+@CrF|zyznK zr2Sfhj_Aa#vyKUkYSoBs-@sj~)$Cn=g{ns($NV)6l;C$4#EtRECJuJYP+WgiS_@sTIg{C@)c)>nB*w88YZ z)p)4qO~6~HDZBYMvC~r9$`S5r@2UtW>xC6%cbH5>ZaQ5A`>UuiWKB6OH}+4nB+H!K z)MTwGvH93phz$rAkl&fON~QO_8fQ4GssS!(l45no@ntzJu+jv}u!tjR>eTsnNcl!) zq1ydRJ+d4P#*+jtw5jbZM*O1a&@G=$D)$|b%?1X~&;Vr-!MwomWpgLiyzYYPBAii% zqGgT+`QwNpHe$#WO{ZUP7>JqULHW8kl6|#}+yaD{D%2wPXU}`pSfNY_J%WT^Q#8Nk zR6U_-7f8&LJ&^=mhzn`Kc$PNF+PSj4DT5hv4K0g1lt}BPlhgy#+HkPOv_eaBB#o7_f`L(gbE#uhyF7WV(fE!j}~)0X_lL7bQr z8!w%^fF}5}nqS9DxNesKohYJaux;4|Qh+NPnXy5v+;oNFsQ|N(mJ_;5hA*#OMGm93 z_^gNhqypG7mCo}x7&}wpIh8SKYU4AyCuC1a^rFMFJ+0JPDWL^|IyF{?-&6H|g{C+0 zFgN268gO#-6>Ty9U zHWk;`1Wk|Dg73oybax8 zk6;b~+crY0vNdnLI%zc5mN2iKkFS4Xir8VkgvY?Kbxauc&vST6e;cMV(>_6NH}%Yi-Dm;0Wh>#j?>I4IBVy}w40f<1Mn;MfX$5>*!mWR2 zbM5YVb^>FC;_)?blI=NYq%;1DrO!YFp+YJr+pLTZgWFU!$%Kd<*fp1j3Y%ChU+ z*VuR#DCfmI?^ks%oQ1tx_$Oak3Sqv-4BJ;=oG4KX+N@E=m#$Win^Ap}yFEg`jYo4+ z{55FSc;)Fiqm?1D#W0y+9#?>3q=M6Its?pt=V%Zb%y;mD7Jfo#8qXkOuzzSWomazSP1~WB#ALEL*UdqE zo~5mDvrX$mJP+_fHl}n*FwcbV^N6HlD&3D=^rva?6$*INB4=kVE_1KHFiq_})$qxi zaga|Nci+uL9ftKM7U8b62aA-OIT3cL&22}{8v4UxlQO7Ak>+d$kXa$)WvI@r4IUFJ zcAk+I`z_;w*1tOq(#lZqzV5UPC}sy|mQ-F5HQZKJ2B9@=+^7`rS)M+hXeplX(QAL1xJC()av|ByD`k zJ_Wpa2^_53;JRte`t+R`i&FQ7G_Xb}T`}hwXNn?@3~}q>ka$h!{Mk}$$BZdB*B~V{ zCtcXJ>)iF-B&WwTKeeTvi=d1>#L~fJE?{WiAr!OvspVVzOY8d8g%fnx zY1;F|eA5lqF7|qGCF9>XJz%>7oQy$OT1qpYgo*}OI%A0)6Oa^rKVZu$KjWyjk+7Wg z%(fV&Rn{)>_%=AP5XrOM8`PIyYfJN|+h15Kdt%)kcz(KVvGKyC#KmBpYS>m}DIsSIU@4Wk96V?PqZy_(_MQUCky*+@v(dY~Y0^M6xAJ|RYk zl4#~>ta2(qHkN2_hnAFyJ%&>8jDH`*H9D$XbR$Z1ItQJbr{df1xqGL{4ZiY}dp_#i zx|2)%X1NzCxX=r(MMB&f!=7`|qr{iFwq5VMZ)cZ@bs%ceUKrQ|Bin! z6vN|OoOx|_H}x>VP&OlIf)o1$mrdkN@IdT7=|*)4mUC~=K!D8DW!xhtFk$mE);1~$ z!K;w4M0Lng{d*^yfXNkGjTZIc`ZcjYf%*ni);L5`y_b}y%CnWBP`+;UwtfenY8>5< z!dB*z)5w8g10LkmlBs+nPs>sF=qf=pwCkt5AKE!EC$eRcNU;?bp-@zJ*fd55je+qP zvQ0=kMH`DLi^Wux7{^?eC2$V@3JoM_l)6?*7!776k-|%8vCgSXhoK+Z*o&RnLdL6@ z4UIgS@)H(TJI@t3`d{tX@D$vH0lA6+F5$nON-?;~YHy8$nskmot8idz`6;3@!llw* zSkaUN!Kx(SoDtpDQh?@04~%P6RSel^x?M;m4rE%r*A_7b~}4_*MK%#yR8LIvv&k zMa|tjo?!3sZ?uBcGnh2?iLEj5V>fxDsnutS_GlK@C%X=QOp*v1@WIZLVO0`o{a+%n z4aamtCk-`1VJKrVLX~~o_*jE;N3cpT%^Y@Q>fK=-F8@U@0C35Jq{BqO;bgEeRpe9U43g)XKht$GchSC4HE+{BMU9CwE6eX@)K1{?_=JV z7zdO^#-n&bDxPRhreB{lLgor(znneh6gl7TU}awV);Xy*{aV7>`P&lG$AKlhZ^3Eh zAjloVgI@Vd^*FOJU?CRc7Vj0Z{~S*y{!pxu5?ztk=#1p$T2zmf!Z>(@bmr&kSQ2jq z)0H@X64~_?oWjWR<``*r_eK&WE9L3Dl>yqUn4-bbTG`ilB2u#;qHA}7fnV8zQ@@Z` z=kQ72YrjWnZl~_FS+q|te`b<@4%89^g&wh`O)4`<#)1X>(#XrMuTDbx@i9_O59?6f zj)i8_!pO?m@toOmi&ju0lbQ;#^L&Kb81E6KHHG|a(R6<%VlYu5_Bf!7Uf3PY{R+yg z6a6ZebNIXpL@V2>r9!AYu(2`OwJN6H*dYj%(4jHNgjjVRyu#}W$Luvif}~674A5fi z{<^5}vq(w)!cWeS!b7Ae4P$f>t|EY~(%}*?=|&j}ZS-5%Q9_Vd{*wYY1!P9}k4QzV zLPmk_xiJV~oK6M11@JY}AH}t8sv${R1LMeHK%6-ZkICQ*H7qh4Cmf7#e;IAPUoi3i zIFcZ?4hNqDM|~hhqiKT2!mE0f9+t*5yf7obV2x8RM`0lM+=d4_q0+A;a758F*rTMO zaFF{?5*0(@1&C$+UAg1LTzIBekY-hxmlsm?PEGp#6y|!XPN8$ zoeekr?d_WDztTb(RZ{+Ou@nbR7PId4Zn-B(ZxN+^4+@R+To0zfUR~qAL_p?wly(9l zixuMoa&B$2j2|wRUp&;PvGEM$g=f||v&xqjhkI+Irnzgu67e$}xWvcQwj7H{pk z4wNYDxJlt*_2F`CXJnD@G(tQPWR+Gqj&!(F&Kd~=(ZqV1`MI7W@0Dgxh(_#xd&}on zbbDlE%KUj%{98A`ATLAVwa)@rO>{Z>((6#hR+yK48KoY4qJj+CU_(l~?3olsm|jg{ zxcq4i9gt^=JbZy zK^K9uyt}__>?^`=lhIT*yj&ZT1s+g)nTi8^#|pVSlw>IhAyHIE@6N}7M&^4arioT| zxOil8U5qbXD7lFlE8-Rzf|fhKS0t@I+?v2fg!MvGkfXmda2v`hE*O*|mT&r;m1TXD z^Dp9=#0hJAA&EmjO;Hch)j~iovqKWD5YLb1_{`xYFzF2)pJ&R=LuLNsLjI#0H&S~- zk1m6NxQyxikUxP?bEA@%!JokGn#^v}v)u~EVdLo=jTDW_bc3KA^$&>Wh+T0^ZDN9* zGl&$)9BKAcOxj9rSw)vjERR#yf%F7=R*hE>bO%57P;iOIMPNZAk*0WzBv2of1T`3y zJp$}u;VT#9Bfzd-2(`A`#z9PU9H2H+$Wnvyt~uN&>H_Mx!??>>I49^qHk4!!pkeLM zO-x2Bt~*H37<50I5}*wQD7I=m<2*3gHC|Q*2&=3--F5d!e)X-dYq*P=_ZM&3e5^QF zc{d5NwTg9rX?M_;mQ`PWGYWL}bYVlVBMSqqp^9A?{}MZoe`{fxbwAPgR&&HEKb+O) zuzGfhSdizTd5;{Me^D)7HYx5ab>K|*_<{5j`u{QYR#9<9ThnM`!QFxr+}$l`aCdii zcPAkb+&#EEG%ms2-QAtwdYhbc{_nyA{lr+k$J%Sns##UjzJc2eABYmAM*Y6Xx$Nfk zU|3S25We%^4!va6wR-7+%y6qUFk&F1;AVy`)ZjEkGdj8@c_JjMbY0pY8>IF1(#lSS z3>WkT{&O8OMkXel4)juke2ITlI_oq@dU(IdgzxWXY9~9M-IDrNW}okg-;A8xuuR~P zw}(@sg?Za+0bS#!CL*85&hs)cTkK@awzA7hiV`Z4HWvu_hJ|9cghlDKCx7YwDjx2+ z&Ct7QT~ukqF4#hV0Ztl3D#C~Mi?kUtR@%UQYyABsGAKZzJM;2UjWPTE)Y$Krp2mcQ zt_bgpslz#2pAE&f9VOwS;k}yU*oa&S6f|j=n-aZ^q>Z^S3`-@<1=0!4DWyY7~ zNFQL8kRirzHEBd<&J4Z?eAug!zE4CgRdbONQWap4R(BBRTY+nAc+QL*?o#&}CR-&F zP;96N=$?;#<1k%MTG28!l3Kr|GkFn>uUdJqnB(@C_ZO_x~qTK**)w6+fJmm4&dadC|$g^Bo-UwAn+ZjOxi1D?TO&N z*2Uzyk=&C5xb|J=)#~iqDHS=%N^g-nEVvlYx5GgLpNH(-+gjC|v=$>W%gg0=r;)wn zon?}0AMs_V!WG)ot~kJXzB7(QPQYLQwv_yl;6}#$2Kms5J<{ zZh3SHx|^CU5hu2gP_yo~729~3PEJyORBa!O0SHW)M*Q}u1zBkRXuk|*ARZM_f_&S- zIf*J;`LPlE8P;K8!&`%^2Re}~UK`BUi5ou$OuM#6WU+c7B{TJ2I1zoP~jyDM!PPl z9WpMo@~%WXZB2|#yZgn8p}WE#6(jBFI7xPl$$QhI=CF-0o%D%pq`tKFLv)z>*zdH4 z1Ofy#v~9^NhsDIe9NL4O5r`4224yp3S>G9~jJHyCQyldM79CXiGpY~;Q|rD(Z?L5D z9*Y<$t+%^ry-FqQ^PFG?GpJBNKxeO>0>7(IIV>BkgFCC_hCtHxGp|+qb8jN0rTW}p z*Fl|eo?Pl$Hyk+bVgvjG8NH|Q@LMB zzF&Rb7H_rS{KG1%Zs@g91xF0n8vXX+f!Ej!$ zHgBi{KJ+uL#F3_#40`?${*%yPDuicY{Ft22pXBi@%`gW`&geFn{A9Xvi3#)Y(@bQx zm_yn6AseD&177nt8S4dY>Z@I(9=AykV20M|5_84Yo@iA^X;@Zj|$p3hP(G+fvyq(={1|vOK+QyUct1zhsck&BWa= z?taB0Z;^Br9SP7$+lrVOu?w(3jgBNXGJr}frXlf zcScpHhqCp!_xKX`SG$@__p^KD07fu`7pO-;;BZy{`2-WS__*Fz;S#%5?c5HzStq2z zmu@=*)=x|2BFY=2chrd8kR2d6QRw}lt!~NRl`=|@RsiUvio=(cE7iL+-?LQelDnH+ z-Jlq#OCoBGZO$axYZdE#Dq>r8=2e+0(iR3yoJ=mo`$@3_WAv8AC5o?L^Oc45aIMQW z(lz(V<~;nBLAl}1itum-{Obg$NOtYoG~lO0 zctUoDqpQ^vruKa0uDIOILp{k=26Xp-D8cX7%qj)1ZO*|p|29LSvRyp?^mp3Qi1;a) zUQJR7{||UH3@1|J3F!=VQR|TL>CwYBVmvFu(dIivoS3aC&wjA*=?DXZDRvx>vlSIy zHgG|>E9TC~Ir9j=(_4X_b}j+b4BZ8_l6nB&sUra=+XMK(7pAeUFm}S&+mm&UQ$c%R z1K2JA9U)f7<%>onwPP>&<|0z9>&kppH^F;EY^k4cv8yQ==zp;OCB1U6z_JmHj+>i9 zV4Y-ihNJ3mN#P)Xu(sRryGwzbMXCF1nD2FXu6iVTl1ZYal(68cQ9k8Yv3JFU;9mTK z+{NDbC2vI91}#KsDz+MoLPi-M+M(#1kB!`*&GlJgqrm0aTYL}A^;z_eOrP;f&NWBG z_*s^s&Q}P&s3m@XVu|;j!X=e1M82CpJ*^yRe_e-nllg8Tq1&RqD$>T=d*3@27B5lB zQ(#1$f%-*z67l^_1)bOm-I4=7$pDt7v5s(Fw=4LOY6iP`%A70z zDfwycgM1mAyOzX8{iBlJx?JVP_ZWbWfGb@w0B~d59hu>L*-87?>GD!ayUJLbp_MYN z;%{`Bzu<=YG}^Id`tt9;CC{Fhoq!vZP!}|VKI5q_p5$J)30G&Qjtibpas79SPp~j33M{4Yfhbj&WR4JBGkumD2tquKF!>W%_Kd@5z@uaP4-HHgkqCxcay_M6CG zbS~>)1F&6mb4O=Rf*OPXH^iY zJj`*Oh9Boa(&cU1&QY|_zISf7ce!e~4o5(O8%g5V&_=6D<{Cv9QKAMe8c9rF+-zW~ zQR}>93~U$9Ijrt_wb6dAGE?Sw4@-pPc*KdVvz!rVscZUW8}y+a0^JfHC~*0tw#?`2 zw?4qSfQK(4y-jH9yJJK{Jo;-R;&rek#){^*?3p$b)~1R#9=c{#m7#T-6IO^%1h5>| zv^Ra2UJpOXx>u~b%PZ0uXxY#)!D@e!%5o*}d9{C;^loRs+P3>OUujJqeOWls}Et^U-6_0t`O5iqB(4IJ*iRQ=wn_j;c!I2run65la3pLpefbriN?w^Tg_^+uxl4Ufwi^ja0F*c9#mYiYupHtb6 zo^+0eq3)l-VJ0b|a31#H@(-~cYmvFGbUMP_gkvm*>pZ%c&d}5tR7sH)YE$?x`_HUJ z;o73kedP4LS-bP6$S|DDaZfY!;%=5k)8uQ!>c-H_K3#do<+3ocRgGk*G^}=eB{2RB za6ZUeQF=-*KcN^TIypo3cNrWy3YZ-y#|EhzNi4Fc4~z2V>ChdsZWBagO=rP*gv zRBQZ=FLPT_Ic#sfrqI>fdihs9+x~ZhN2yViP6<@{O6*DC)@}IDd-j7q1AFf+toenF z>41nSz2ocH@1nZ0y(n_LJZI$Jy^96wmQ3wn&?)A_-*Ko4l*!j;19gaYf`X!9hJ9Oi z{}g3I!!h8fFQfkchGs2p#s^*n_Vc6KUkB+|L6t>4BBfIV505MuG22{+N5eH%h8dL_ zTU%4&Vo~rP3grD-)W+7X-`#DzqiMOoWIc%mQDd!@I+AjeCf(9L4ufuD4LJZ!O0MyTLcXMQ@4UJpleMsMvhavSYYf1(;CpOE$m3e;l1{tXz;f{);-H^|BT zU#3_T za}!s6Rv2!lTbsvd|M;-NaY>U!)}l#p0xn8(Jmf;NKIWHn=mjHg?J^8b4VYQIcBUTF z&8Prz@RebpxkUEc@xorZ4j#0OiLu${?I_AO9Vyk|XU4a7Is8h=Ki?S}!hEGU zrJ;3Dqf*2v8OcsPYi<6#gXt;isAbXVvo?GgZ{>bE66+^?-9b_X6lm|CqAz#QT?%aEu39*A>bMj`ZH=nO<^P->0j~ofl&f>E#s1O z_N*&D1Bl}qG~}EMwY40WY$q};5A|jw#$``|BSLiFKtT)ZCU3G2Kt zy_QVGEZQmxcaijsj{i{j?GSDLoKAhB5xPeicmZY#UQnsMOyT?#Yjqx2_;bMVNJ%#1 zIgW%oTKtP4)L}ikcK+5voifrtSQh5SH`S zw!c6>l3RO|540$hD4st3qg*BI>lX6@t^6G!)1D z1ajQ9`M2_yDmJt~hcg*JG}lsvKyyFgEC}e9wmZ*8VoGf(R%*G)w2&9RO@P-1P6|SU zmM^f@XbkGk%EqyUkz1ov1A50RtYqx?F3LH{zn(hjkD}YC5^#CaCs)3hcPky4BU7kZ z;-*u>@UVTQ;>5Lr|C_$H580vDk&l_21R)l zV44f>N>2jB@0EGM{-()4Cz($xP6V+8Ga()FbO-u;`Pe!j76eq3Zl@%i8j(<{0Rj?T zO_>#)J7fFnm+R!JXuo8}G+nKqBRwEHFOn6q|h&Eae{i&_D&PXmZ9-YKxX?4LwV|W&#`8us+wa^vI=TM9w1C3DmvoM|re^ z13hlgv>O9}ATeJ<*afAQG$^+PKkM%n-NMDV(+yQTkSj9kJHFmI*9g?_JiZ3wP(I5T zi3)gD8f+)QsH^bT9}mA{R(OVX&*S?e5t#QZd?bxCoNH4FjaOG?wV_`koa}rf7NyN3 zieJyg@bi_DEGILFR^P_O(-pqS3-ggrPYukl1#{7D-yv@S=VVWbSGVu+6bL!^lq>no znZYwO4}V1dN-w;SABlFSLy$BkuGI$=m9)H1LKTAl_dNx*39}tkp`?<4r&NH=C;Kq+ z<(zfG6EH;~XXXQIH{EvEkgt=j)U}E@BDC?_?Bkmlyry1Yztv~M+9M?9i`=`t!3=&_ z>~`?G_UPy+cT&n4;?bgk-S+qTpQ_^;s>e5@R}tLm8fVB*HE3jZtS&yWfCyOk8|bWS*%2mkRKgJy$OJ zic*h%vWb6c&VUWI6UzRXEKutz$6yHi@O$``gKqMpzqEF2LUP&YSo58ZB~=H`vFMUJ zr&E6NgtM)E`v&veVlGQw>mg&~-YV^G>oAhYjf-9LS`=-OOh0x7>vnHU&mqIDo-s5R zRRK1YA3X6%i|kjjOL}g@J{Cg*3sWd|1t@)Joldd(S&l@Mj*ms+RBT~z9Q^r3cEh*hC_@O3zy*JwlyjFU)qWsu| zVnVkm-V$g(}@@7MTTu&bt zJ!pHBHh|h^Pf_5LxbxjaoN=pS?6xJXe`R?o)Godx+xlEq!==^lEUJ*+bG4>RgLd;q zi-2$b+cF;7p<~3B$~cRZFxYP9C|5+*$8J@kq*n_LQF~8+d{! zxS6cN@fqxnk%^|7@C|QkAGjb!oZxMyqu< zP4o-zSQZaThFdubNacZL$7*zuJ_?aU`@RYWn1u|!DjMX92utp5Qr;H5kzKHE*lg8i zz#m)&JhH&f17kn|5P4ULHa&(?;vutB9ZRv;W~a>31j?BQWg(9K6qGEpkg2do2#M`1 zk&wGYDh*7V8NVRi(|cGX%2+eA(D!1YcQIQ3+FG$?PVUwQ0|gQDsYjgr)>~p1tM0$? z4_M}%G!V1Nwl$z?*t_fkOw2}z`Z>D5-)91G&lkH^xpQ>!ROz_)k*zrTfYU_x&W>08 zCy?DqGU9>RE-V2P5a2|offPyrVdCWO;&hT!;>3S@v|8c`?tbd3qflTew=e1c@G&{+ zkkWUWGV$RSG((C=={FmC@7Vi04*-LuN=<%8318spI8R5*kDp69nd9+#%c)uCM|0Iz z!rv9}9XbL!nm+_yZ!Z`l!jY4<^(Q7K*iykk@;p#;a?1c9p>k^^R*|WO5rBqizA*Qj z-@2`6(pfA%P@^XL-OAt8)hseEGC4)}wBTl`ZP;Hu$r8_;1ik&TOh5cCh9<|Z1x*O9 zUIn`Zi?~ImDHTaQr&2xfRIEjo@k3Dp>X4J(twYaAK5bY5{@#KwWxj3Kp zsQatNfamx9LKX<>Dhk1qcH9k9jB}62zk!>^;1IQ4$benU$TG%jxl$#xF?1q4p^J0bBoPC5nr13n+J<$&sjGb1f0a!{F~vr@V0ZY<`S zP(M}KNPe-S8D112BWKT<3Mu|V|4rzz5^i}c5XlgGsYc$^73;UA6!mUpiQ%}3Us`Lo z!$74JnhfqR9TL+_sY7;SO_QRb^du}!f5IWm;?_n`dKcjtgOH&D3X(2YA^p*H`^>@w zevbWjg+jq0wn%ZsZRIu+y)jo56=Bj=TN)0D8B zB;fGlj{i7UK&E~g%_RP%cy_32ZT(iYCVQV^-t;7PRX6pwXfT~JwS!3M-a;l%I5&FQ zTn^p*eCv!UESsL>jjoI4CIYr{nNBxK=xqSIO43@XrxflKt!Q+~K&%|}uvbPl@ z@JkjlmKui*-%>oc=5qYhV9IyFL7RbM`^N)=3KP(xX>g>Y3ZyZhHlLT7K*M(n-1se} zSzTBiDZc2>(P3|%wAatNnJ6HL4F&z8a^{}+fShYe)pY{$x8RkxVc;@X!U*+8L-7usbr$e>%W_=t0(;hVC}=-%@Dtjc z-1~Bu4mn=m-Ya+4Gewoa&_KkIK@!zqRTaI+CSHd0jYwjCCk&(z&l}sqU7nmZe68yh-4qF3EN zzH+In6N&f)2%^gDuc1UuWjQu(=l7&f($|sy&Dz{lhs9s$oSv{&^bfFMxN;kJYY35d zj&hHEDzBzMJ)dyzT1*vCEbm~WLE7s+_LwA%jHE$b2xixh^E_V+j1 zLds%!#TTW>)>)*V)qYSPZ-v0vzZ5+Wt%4ExTxlx6<=}cz)2BvFbN%Gyo`zjGiIf8w z*VaGIBX;TZNQ1<3H>4DGxfKK@j8JmB-fs3ln{LEO@tjZo%f~XK{iLLCJDIvl-YEftab`pK67$rJxxF4(RCkuAX3KOg6M8;!9H1AXS1xqQ)ZJmQnwL*) zxxxeapEu+m`|bDGQV&Xwpz?lIKwzs(BoQ?OWj;#MjQT@m25++H;Yy_^Oa)Bwe|h{l z|J{9nF-jx9`l>f+OOG)UdS-!|L^$?l-LB7VtsbYC$pgb(&BGDO$MwFxUHrN%2TU)2 zplFkobd^Po3%aV)_;W<6YQ-$^p=g&V=E)gli_EV&=Tn{fHQ4;?R%iw}TgiaSV2S#W zCp{x+2)f_CP*bZN#iCYb=vB1JntKoD`A^dqdMsZyxm^Z_8Sw`pn z)hX`*A2%rEn5v_T^9Q>7SU*P<(87BL@j4cGA}FgH`lp`&>@2c>5VgqM|K8| zR^u7Mh1xDucfkRdSV``Y$4*=DPg<_m5H@)CS4>IQ^?vEV694-I<;?;nhT>ug4f*## zqU9f^+gD=|^lwG=_=r?;d}B#eb7?BH5)wC8rtmD^z?g9D2g94`Fu5M$QZ+V^YEbhH z^5c2&L{<=mO$#t|BK?cxS0F!ZmLR+02kT`u5Qp9zF@q7{G^fT2CY^)8)K0l%agMHg zi@9`C&i%EOT`sv8-*%jS94;V($l~{SCK+GyiV(s~j}mi+wkFdLR@axTrkjl0W|AJr z-M1$qii^3?OUh$Q(edXv?;D$Kl=X# z(nEE-X<3Xsa5e{<(w9bdZW+ZmDWq14J!wEZik560@r_0=LlG^+SrYesCx+|x1<*7ERNIFd zHkJG+5cEV`4Hl(ZeNg!NVIy+=NH|K3ZsP09;(Ok>1O1twAtxbEGA;cv-9p0oAX}a6 z$9u7YoR9S2$Xsfyc)qmS@DDSe)?KBgcvslW8&(UWl5OsuL+g2oxDKB{m})5e{x45z z_#xUxqh;0u&3P7NGQtvTuqZ)GMz3x#(Bxe`xNO6}ceo~V6#JwoNPa)!Hd@LH6%~VJ zIPbiopF%{1EL!W)_MPQq#?jMfsTD7w9*^RQyaI9SsY-zovyv>yEPaZ6hF$;9U#Dyv zzM7MzgzbdzqcVH^rL~)i3l47gm9mxv?SYb4OpTIJM5j1zRp#0>y5}}Z03P%Pq1cTM?2QJVBks-Y+&e}Cb1i^SkGU?4P@9Pd9mIpQO!}uj`WflXjaTQt z5zQ78g>btVO;7M?^!PJk_g<2}p2gN)pxBj+(E~F5+8j$K=9H%d&?Brymv^wUtTq5( zAK4NAJs9WA2Bya!!*T<@fi%b-9a&^?edIbC+Cs0&+a%T%RP$<|VYEB`KqHC>~(p z%3`nFpPabC@V?;bmY&Vx(sX@hDD6Ie_oT!coP^C>EF8ZquSUMiU`}{^GPv-J%}(z` z!Frv`!*&0r14Augue!uuo@|M+mD%ik0azuB;ZxUgNQ&*5=4z1E3N6s6{#larYt&EO zS{;%osXQr2NLP$G*DA|*NtFyVz?S|mV``35`_CPK3$NtXXIEcK{Nv#`^|==zXI*Vf zJisgr>s@TN>gO>$ArumoZPgWpLLP&xLm2!}5odZ_(`TjoJ`nyQ_!~$@gMi2MGhoZD zWqey|jNI?y1*pYmB-~7sV1}^^X$t3U+Kq$zXCuG~cJMvDKmug~nq}GEJbqt>L=>7K z(hO?$m9Neapz^s$;t#=!|JSGlGalW#Ys{mv(K#vm`-nS&m5rn}k_pOGb+6Wws1C3Q zyD4_m0El0OY6F=?#yBPW-aDxueb`r_WajYAUjibIuAI=1f~7PuqT1uzgam85Pp6Bi{X{4P7F{{`enNffPrL7 zq_N9iTaWMM;grdE-Fg4};O`&g?{(_$*t6l*Y8_F-=+)q=mdv6H`pv|^$9f&E1Ou?a z|B3X0XGEJBp&(jY)an_n{SjWiRlK?>!I@FrVBEL2%kCM;_l=M=I+g&0s9c9R=fMD9 z2}a1exiqam0SpeQ=d zg?*16X@+_H4R}NLE>_uj_WAg}2Uu3BAG{xVk~TWl$58&5$IDMfh3yO4*GdPMc;NqC zQ27T&yxLNrP#6{pluY}t2>56zmo5v)SBm0EgMH30AFDNm_I+%JwC)-}_vu7tmJuV? zpsG833J%tFzOWN7X(FUhrO4Z2NoGu`G}Hzjz`VAb%DsR&ex-~@;n24wN%sDkNl8N{Lf?cAV#a z!;G!$La&TNF;MGm8_%5D2!2TTeWrcnVBZg@?D0Jm7pDAt1d5i>?cdTtpyXreG*9H# z1V(UzH*=(`YZ@KoKU;Ta&u%3Nm$a4pM2bqS8gC>=+x-OLjhu5lJ*dA(hvnC$mQWXr zA&CFTg>{ml%r-7XH!a7jO32_U(5m%xjYg_+pQ&a_sBUWxJ(LVYAZT`eTEwl1wg>k= z)J?>^#f`q_zNK4adV@j;%kC{D=)f`}&03c+@2yDcJnrUK9g>ZM@{G|N*T>l?UNm+* zoeBOoS(tAOQ~(fLlxxU&M-_)*05(0~%^?>;`>Zouc8ZcIl1A*PGFiE;SAEFi7TaKbSN_1T@pTu{Ryz-~&7k_9uMO zD`IbOgH5ZD;hMdxx!~Y#0LG#m|FafBR zOU5E9M8u|uQ~eq->HG~&-`PvsuNRqC=>fZ4_9iI^c&N?9-#>MYRbZKy3&uT@VM^*& zST9_%lpI+!{3~_FEjkJ*QDkzV{x98oCJ*NQE?snEZDPc?9exrR7M1mBr@!#cd_^VyvaJ)enQUXG~2C{)AB*bdq)NcV!;Y?DV-IXo!RbAqu{o zRwfkYplk#)lD|H3a6i1d?pfU8Zx+U9*N@yahXKK;+Dq`BWBR6?p zBB&68JtL^g*=S4|?e1`qMp9Bd%TO=uPhlD6u#R{Qh${r(1$TJf?h=?6b!xL49J5Xg z6BajAg@0u!mjpYf+qkR zkh&^KQDo|ju`3Ow`D5L-A}NMFwpVH>5v48XTmR#D(>`$Pkg8-v7<-l+D4+YyeW6Tu z8UE<=;drthd~*_wL5hOdtldacs(pdGBnwLv{Y=<(SE6kghn`AlDCo|%8XfWx7#5L_ zA8#YbfhYo^9^a7Jd*SQQta57#ik%{3h~#*H zg7Y!iejuPdGi<-zFvwG685hSrSA30)I3t%yoVrB4naxe2oyM?gA zH#F}j-$a`tdj+Cqf!)b{d!L8v+WAx=(vT!)hEr%nOZ~Tkc#4*EG`RlD&;{#{=Jo>u zVnuh1I>ePedkuI{FcWXN%woiY%v(0jYGNyk904^ivLAH1Wa6>)jSQAx1qAMY%PWuo zpjU&PB8($z3IlMje+vwmfAzI|RDpUn?U`M~P3^BFm);hB%;M~os&R;4Q0-snl>iDz z-y>cz5nCt1>FHqc?Ys0MkB%z>FYbrT!1)Rk>+{G=auknPq(*cCj&`khaG!3+D)T5H zZsktvp*DP`FFo(-VOg)|tFy+TlA~;CX2Mv4cOAa=v{x^9bXKNcuC4BDgFzv>A4W?2 zAl~?4pi}vCb-iK*(b&8K{J%DkKOiI7$4?jmXn+UkFO|jXAyG|Z3$U??y8*3~T-`;u>s_ z*^y*FvvaJ35NdLB|5L8HU*w42B%R<}S<~IpCtobG{cGm)icofDz7|Ke&Dl4SpAAEC zkk;gop{KFvyT*|d+Jtv7R-kMz)3=g!;nLHYByL@2m;cQo&MD4@3{llmt;ujs17k9a z{id#PH9K!9A4V;w*;i8TU?qMq+4;Fspews@Ya<17WMh~z?aLIYCAYu4dzyKsgCa57 z;{-C&;c#nY0@QZRsRccqr|^9@jJ8Sn=720luKpaaV9)(%nd^Q)iVL<if4NDVm`9FdEZe^PZgj zOlf8Smw)>TbnJjc0&KQrGP$OC)PU3a3_OfI&+FV!wZ6Lbw4VEMqeneNS}k!OIqKXq z;z{Y%--Vg}Nad6lE!;<0vpx4JFgVe5>y@=fc8~5?#t5IPH2b5zCqP;Ra_jC1O9X`l zkZp3VnTg@tO#E`~d~&o3$e;FXt>oG(n@XQsNtSUrJKS2OK-eB~BaROUXRH zDrhN7!Tj$j4b&14aYIW)oA*_&U2QfwsKYG$uIVQ*`aD3+|o8f;ap) zCJj})`u<40-!doMd1NtKPZs#J&AODP+laHQRpm81h@KgtgRksAv;VHQ+QySXhKH-GU(d0~Gy@ov{Sca2p!h zlPMX9;@tZ)7G0=u3}M1NqXU7DFH=;6OsZzodakdMyDeGsEI& z(R64N;U%SitUGGC7HHO%jUYZSmN?ovGo)Q!fH>rFqEVkH9=RrCvn_IGxRuIkg~|*V zX#5i*n91cd`Q*vHY72W8hgA11G}C`>CpJwU zwfTf5Be)givb@s$yVzIB4ep@1WBiPSura@bT9**FuDEId1D9FdSP(B!^*G#FH-#rh zn!oAqsdsn9iFN;OLEANSvlAb;+(!oh$jhYtCOI5S5#cD^34nx|>)zC(3-2%pf~AY< z@&3R@P!thenW_rH+kL06gic=q`{fWpDG;g*06>ZnL{qHh9WP?j^3w`Y=Wu&j^#1Dm z{J)QDaJqWN8{n<}@mCz)w)gfd>j1vT@CvYi;LKL|CS!3Z_0ZIqsoz5dQefE5e`;)dgIzb*2?TK->Pmo7Q8+gH&TMZ z_~saWBUMP-E520lgsm#{edwVl8#m#3}B&$q}u0BI&071M;a7p#gIx zuWi|&S%4yPnl0^&7H+e;+WGzIIK5OTaJh_CdK~xAxdQ_NN&dDP9)sp9)PIW`5Y#YQ zQ5!07olOIearD@C7|*F(GB%fLJr;3f%98Po%{D1Zh!XU5%+}qZ=BvNU%upRXG4Wfm zjm9QPc}G1)X(oM+RY&?`Md{G!SypGc71g%^;gg!WGpCKtk1knoqxz)pQ>^ie$?&FQo@Vuw-Q_V* zKdVJrx07Lg^$<_yM#f(-l$>4HvJMX)q1VoQa(NVuiYNI=&}eVvprVg5)RopaE(wWS zqtIW?LN0rdk0@QWyy3S{#BX*^*m~K&J?cMIH}_~9MB6AKCHYMUlq?X`1-Yc~BX{9) zGy3_KmqG8^Qu$5FiK_(4ptrmMEVL4v(P=*c?wV{3TU?v1ZVwD1*N!kXnsJ=~!?J^UMSfA&A$zan7W8 z^{&vl;N>-(aLNCLdTJ)C%)Nv*^zW^PIA0a(XGb~%XOBbA9QOqEn~+cRrg>#=vyYyR zGeP6{Wqa~DC+%xPR~d81dvqgIZm*C*bS|7tJ&uiZ2ibKP_s)haliG5|mxMLj{(les zKkgb^*S(j+fnFs*lve3yn4#vQ5fVD|I-IHHyPUX=LzdegU#*kkaN<=j#+PpDu0%?=WcDh`^$Hh6rmv%VV5&=>JeS_{H+97MQ(-BFko} zRkkWi<`Sk5imzCT`aR*{eD794@$X+ZHm$3W@P^n(W8=0Au&!=&^JEUu)E`exDTYU< zFjOK?r?2LxS_V-N2}8Q{w#6#pfu7P}|BCtB4|<(T4Y)kyWLXHP-?^iR1Ac!~8q!E| z#HjCfR?J{r9^^g}e=3ee(nN`g$UX99I-|%h9&~AtaO80fj&A`Mfho+H_H^G+8Y{?z z#f(`x-&FOox(ApeB&;<#NF=ZTJ#j0>)shJg;616?VL8%>mAwM91=!YAl!)hgwDOgt zt_#ijON6$_1xj4e#39GTh@}&%L$e7O?tIhFwM&vm*Ji!K*35cWKi12A%Ucf0hKN_Q z%VSZr1|cV34^vp1h{7UfqQD8Mt3#wEqwXx2FOSuF<0Q`|aw!1_cD`o|?8s0Y&=vzL zQY7(HH~W;R)Pr$<$C>Bq{e1;QE5?uGRt+9mN6q0bg7__%tTKz_&`IK$4D{N|JqWy{ z#}@9=7>b3I6N%RBqviy5R$N?BRbWh{ho@WuGq#{iFQL!BvX@?Rqi=O<`-tenWzgy0 zKGxobPReVvYY$YD!T;l=|I@;T8(@odl~|DgvyfIN&5(dEGAlEv%myQpGk$liP(^Yh z@Xl1QFZ)Z=oN#OvSaHP9j-G+&9G8xnh*oRjFX(go@b)&U+5uvo%}!^3;N(0JQ@HOh z$Z*5LD{9@050Bp~)#O$VW!@S$-_ktrCVMSaUv7J7J4ep8%jD^g$_^XybY)>lotLUh zt;t*w#6J;-?cP9nW`;NyBxUXFs?Un;D!}-A9Kt_6+k_W~{>Sh3uh&(fvvr+Y9%%+B z%-f#_8>`C1k1v9HIflx6hxx2^bc6xsBoUOO|AvF@hX(v9u%1Zm8L~9TJj655^Ol8* zuS&W&xL|hh#TIP?>n?1)!2t0mSw}2KYJ4NHWsky)S};^n8pHOvYs4h~>D=owrn8MY zc8Y`W!X<>^!Fp*t3JGgM8}c;JaNz1USvgMj_ahGhjJ8?Cim`q>ihs{dz0~JYI{d^xWwOQrc0#&c`Xvu=<0W3bA$6 zELr0>lKDm>nlSu0zf2UVO@FS^6doO&3!KJM10NkcZavK_kd={FJ(&WF?~vcOnsq3c z#aRFAxGS-cX{4h#SWypzq{9?kTVM%$WJuYfV7HCb+x$@O{>Sx}9f?WHW1CP2ARd6i zVzgaFwO#&-%!XbIkvdgwANw?6Wa?OeV6Uy}bx+s{N)w z&}}*{+KFK-)B{c)wp^i2P#(0s@4HySR=Y%P#XYP{8Nxl1SXN~8m_9e?Mw@#_tl_vt|amBchv`l%PIH)H{+1G$q0eGQSg zA}Z!nO22>XoTl;5M_fNgfLF(hjLYH;6RqrUW2RTzdaQc_6PxjyKxi#0epvrQS`j_ZM$i z@Iv|QS>k=`G9lodJFNd7g<)PO^;8857nr4w>%C6~%yu@m3y zjiQ_tY$g(h`~6*{`%|RFGPxGTAswio+FPbU8uGmhW zWo%TKaR0UGgAMsmjxFM6RWhvz&8FD)oShgq=?!nSRTJu3=h9G?+{FVpg&~c0@YG;p zCq@lyCsIyC(2G5AEpyq56Ik@}W8A_>MtXsCzM+)v+Y#J)IYJ}$LRL&wY=t!dG2}76 zriEytuX+PES4$_WY#;Ktr)8;9z(1%20#PIpU2Ez>0Vo|!OSdubVTH!-Y(btA>|jkw z5jD8XQ0Kdi&iFl6C-(Y}cn*&%1a7UaxAqk}&5oJV>YDW<6D#S4us%}06fmH$aUdG! zb?sgmc`VOYo*P-7_n4@Mxc1*eGRQ{(bC}PluU_;5@^Mq^JLdVGqhPxzy!Y19HP8fu zZPq3*8UivDC%VEmRUW%?kD853^$$g-Fa6CwP2nGm-?;%GHxr0<1??$+CFZ2lVUIL$ zz%%8=N%!CO+YRNXKE}bU;wGS4vnQ$LCb-wwwd_&OTe6RHp6y1E%ow-`-Nb4a5{IG? zy=C%iybzFFLsHXalZG!Q;kL?^ER=YeHkxh^y(L z^lKIs?yWNrOE*zLnAo^Wq?Ga1iYp2c*LTC5=N|mx;`^798S+^pr1(-f-cN9ndQKVn z=Qh<-{DcarXdqa^^D$Ns6#O>)u-sdW2nCoH^+{7~%lfhwyxtFOqk-u`PBh>~Bu!~* z6*AhZrNos*tez7Z7O}sL;?ks<(qmXTi8eQLF7g&ouoL1}w#Y!n-O>30* ziXt>0^8sEz#CsrOuT+X=sundIJV4ut{1;{LH+cPTc?@9?{d`OJh>3sf1b^ZB{iu&% zRr{Lkz7Iw!P$2G(Z>Sbh-ggPz=oTqUHX-pzx(e5^5# z4XwURb{f`@nY;2{_ueVCab7mn%%2CVE{tj>c4^EDnT5A6YZ`4U`E}B?X)KmrrtL|; zAoRjQL8?U6lzts+jrwZ)8rh6rOG~^kC+cpOfJw4y`2O5{ zONS@9iI*Cal_G$T20cw?Wh;!w5U^O2P{=MXq^juUa3C zj8*7hcl*D&zc1uR5~aV%lm!slrnE7_$PCQ!6JY-c`d z0&Z)&y^RS@PG2ouYj&rW-#6lz(tUAlvh^(gR~Ccd-eK{x6v1EA^Y^(;apFGCwen%J zz#-O)-sHfk8|`}anUYEh8=Cf%`Ej{f%TzUW zq1i^{0t!Uom3_(=K2SI*vtpi##A27eXwx;#2l)HQDgtej8rfXN=c$=5{~uA`7@S$x zbRAD@+qN;Wt%+@06Ki7Iwryi#b7ET)JNd56{e1PNPSv@7p4!=aclYYGRzm~rAKLs* zr9&|3DfIr^$UbL|Hd@f%$jP>I=%u8;?VOhsHseez791wjW*EgVE~Rql<30+dIump5 z9oc&xcTR_zBAa-hwlhki?VQqG!xt#c71V~_z@#Nq-A?^}E#K3`v>?}?#r}vykZp~? z);hsW3=QtVL>4@W2GFyotnF(`6iHM_;!9EFNHGm47{y?UXkMQtL4r4vOhU(rKLtl# zK}e@}05n%$W19f%9>S1$>V%geX;yGQQ-jZ|qzNM0N1K|BV`t9p!+OOWbzBzMm8ch<=LWlkm&ZZIjS ze2-UxouH<>aJE?*t#3jhj?b`g$0O}h^1>`xPA4t(qtPm50k9L>g;swnDV7FP>`c=B zD$A{-(5}wAIycG81}(338A{|DL7v*ycAK}1Nu@E*LF@r{u=I66omCBj`S&{u8F_(% zAd{B~JW!qKzI^IImnWqoGt(2L@7^N14qTbTRp+;_ z#>mN4>&QfM;K#hka`Rtk>)Ag{(5@oFwLjj5N#?=lT8^bU5OrAeY(WkBU-a3}>d75~ zp?;c-H!jgcXZE?T@^#5eV;?S^#|?_R>4?)*)KH9aGV1?L*X?%~878rEUG1OD`$&+e z<$Pt0@-icmO&Jy7&%)a5CN1c0xt8f@S}Bb z=16804*-Z2yVgo8@)C*ejxY%$iz8|O;6kJ+c(W%DOzrA z>LpW1R$Mz=EIy*aFYRNDgNP%%`LaZfLKDiP__-P{$75*8(vJg9J1i3%!Yzv(JcHvj zU()mgN%>cL^hB)$J^C<@v3{wRpc7?_mX}n$C#{0I1pPlWkLT zqrPb&a5^;1<;mR!3eR6AwabuJo@#9q0d1O?`zS!}(6f%v%H%e|eE`;m+;i3ILS${< zGORK8fM&^$F^-Oi>KKK!kU-NCMw&^6p<}x_HfpDbWI(M{8R;?v4tBE%?{W#Ed*f7H zTBNwABrst`MJBD>k7QcO{sV5vdAg?_Lx_|PBgu3#dnbF&E|}~eY5-`+1Gtaa73Iig z0GC%&T@y3gXG* zU~l@2r=3dKhKThD zW^gHsg3v-4+st+NdXcT7G#fGQXDaAmpIC7YWRO&Uam$Xj9S-id04?>|WP18`%?`Y- z*(cPRO5KZU{$T2}^NK>gIU9n8p69+;^x?%j!pN#k$I=|@5vqM9q>q;Z$t)rTB-3y6 z4_x70;gRj9rdv(Au2^kXD(Z);Z=_rPT!Xn*RGW^0&GMIVXXH@ZcCbVf~Jh zbKSMqyB{3nlt*_Gh!QQ0^gJmZR7nk=bl`|W_eYU?0j%Mg=ns)H<-LsnMV?ahRiU)& zcboI811s$FN6xl+-vJG( zswl>(*diGtPzWOXk*S6a*^MWP-xy;3
    rJPKGV< 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

    B@$&cv!Eg5<-^2-&gNgV}hjSh6Ua{_r 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�kxW3R!%e6?yaXS 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

    l9vr1SZt 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 O5WTzpR`T)#kpCZ4z?mfg literal 0 HcmV?d00001 diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index 254524dfa0..d950ea6220 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -313,11 +313,13 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, else if( BeginsWith(sRowString, "|") ) { + /* if (bKIUCompliant) { // Log an error, ignore the line. continue; } + */ // gotta do something tricky here: if the bpm is below one then a couple of calculations // for scrollsegments will be made, example, bpm 0.2, tick 4000, the scrollsegment will // be 0. if the tickcount is non a stepmania standard then it will be adapted, a scroll @@ -325,6 +327,7 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, // eh better do it considering the tickcount (high tickcounts) // I'm making some experiments, please spare me... + //continue; RString temp = sRowString.substr(2,sRowString.size()-3); float numTemp = StringToFloat(temp); @@ -583,11 +586,11 @@ static bool LoadGlobalData( const RString &sPath, Song &out, bool &bKIUCompliant else if ( sValueName=="STARTTIME3" ) { // STARTTIME3 only ensures this is a KIU compliant simfile. - bKIUCompliant = true; + //bKIUCompliant = true; } else if ( sValueName=="TICKCOUNT" ) { - ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); + //ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); } else if ( sValueName=="STEP" ) { diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 6802d7b474..0c8fbd69c5 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -235,6 +235,8 @@ void TimingData::SetWarpAtRow( int iRow, float fNew ) /* Change an existing Tickcount segment, merge identical segments together or insert a new one. */ void TimingData::SetTickcountAtRow( int iRow, int iTicks ) { + LOG->Trace( "TimingData::SetTickcountAtRow( '%i' , '%i' )", iRow, iTicks ); + unsigned i; vector &ticks = this->allTimingSegments[SEGMENT_TICKCOUNT]; for( i=0; i Date: Tue, 19 Jul 2011 18:40:27 -0600 Subject: [PATCH 039/106] oh --- src/NotesLoaderKSF.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index d950ea6220..82b20fdfff 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -590,7 +590,7 @@ static bool LoadGlobalData( const RString &sPath, Song &out, bool &bKIUCompliant } else if ( sValueName=="TICKCOUNT" ) { - //ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); + ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); } else if ( sValueName=="STEP" ) { From b1f4bb151dc3f524560c88088203e970863b956e Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Tue, 19 Jul 2011 19:40:44 -0500 Subject: [PATCH 040/106] [LoadingWindow] Added the ability for themes to have custom splash banners. (Currently Windows-only.) --- Docs/Changelog_sm5.txt | 5 ++ Themes/_fallback/Graphics/Common splash.png | Bin 0 -> 32208 bytes src/StepMania.cpp | 51 ++---------------- src/arch/LoadingWindow/LoadingWindow.h | 1 + src/arch/LoadingWindow/LoadingWindow_Gtk.h | 1 + src/arch/LoadingWindow/LoadingWindow_MacOSX.h | 1 + src/arch/LoadingWindow/LoadingWindow_Null.h | 1 + .../LoadingWindow/LoadingWindow_Win32.cpp | 34 +++++++++--- src/arch/LoadingWindow/LoadingWindow_Win32.h | 1 + 9 files changed, 40 insertions(+), 55 deletions(-) create mode 100644 Themes/_fallback/Graphics/Common splash.png diff --git a/Docs/Changelog_sm5.txt b/Docs/Changelog_sm5.txt index 6887ae8504..ce445d891e 100644 --- a/Docs/Changelog_sm5.txt +++ b/Docs/Changelog_sm5.txt @@ -8,6 +8,11 @@ ________________________________________________________________________________ StepMania 5.0 ????????? | 20110??? -------------------------------------------------------------------------------- +2011/07/19 +---------- +* [LoadingWindow] Added the ability for themes to have custom splash banners. + (Currently Windows-only.) [AJ] + 2011/07/17 ---------- * [Cache] No longer store #NOTES in the cache. This should speed things up diff --git a/Themes/_fallback/Graphics/Common splash.png b/Themes/_fallback/Graphics/Common splash.png new file mode 100644 index 0000000000000000000000000000000000000000..2c365a3306655f6d06aeca283456ba4cef7f7a84 GIT binary patch literal 32208 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 -#include "archutils/Win32/AppInstance.h" // used by SetWindowsHookEx -Aldo +#include #endif void ShutdownGame(); @@ -935,32 +934,6 @@ static void ApplyLogPreferences() static LocalizedString COULDNT_OPEN_LOADING_WINDOW( "StepMania", "Couldn't open any loading windows." ); -#if defined(WIN32) -// Low Level hooks go here, I only added Windows Key, but letting the player choose which system shortcuts -// wants to get disabled via PREFSMAN would be nice -Aldo -LRESULT CALLBACK SpecialKeysHook(int code,WPARAM wparam,LPARAM lparam) -{ - if( HOOKS->AppHasFocus() ) // only disable system shortcuts when the game has focus - { - PKBDLLHOOKSTRUCT key = (PKBDLLHOOKSTRUCT)lparam; - - switch(wparam) - { - case WM_KEYDOWN: - case WM_KEYUP: - case WM_SYSKEYDOWN: - case WM_SYSKEYUP: - if(key->vkCode==VK_LWIN || key->vkCode==VK_RWIN) - { - return 1; - } - } - } - - return CallNextHookEx(0,code,wparam,lparam); -} -#endif - int main(int argc, char* argv[]) { RageThreadRegister thread( "Main thread" ); @@ -1074,13 +1047,14 @@ int main(int argc, char* argv[]) GAMESTATE->m_bDopefish = true; { - /* Now that THEME is loaded, load the icon for the current theme into - * the loading window. */ + /* Now that THEME is loaded, load the icon and splash for the current + * theme into the loading window. */ RString sError; RageSurface *pIcon = RageSurfaceUtils::LoadFile( THEME->GetPathG( "Common", "window icon" ), sError ); if( pIcon ) pLoadingWindow->SetIcon( pIcon ); delete pIcon; + pLoadingWindow->SetSplash( THEME->GetPathG("Common","splash") ); } if( PREFSMAN->m_iSoundWriteAhead ) @@ -1151,23 +1125,6 @@ int main(int argc, char* argv[]) StoreActualGraphicOptions(); LOG->Info( "%s", GetActualGraphicOptionsString().c_str() ); -#if defined(WIN32) - // Apply Low Level hooks just after creating the display, so we have a valid - // HINSTANCE, rather than a NULL one -Aldo - AppInstance inst; - HHOOK hook; - hook = SetWindowsHookEx( - WH_KEYBOARD_LL, - SpecialKeysHook, - inst.Get(), - 0 - ); - if(!hook) - { - LOG->Warn("SetWindowsHookEx: Could not create hook (Error %d).", GetLastError()); - } -#endif - SONGMAN->PreloadSongImages(); /* Input handlers can have dependences on the video system so diff --git a/src/arch/LoadingWindow/LoadingWindow.h b/src/arch/LoadingWindow/LoadingWindow.h index 4cc23cd097..ec92728e1f 100644 --- a/src/arch/LoadingWindow/LoadingWindow.h +++ b/src/arch/LoadingWindow/LoadingWindow.h @@ -13,6 +13,7 @@ public: virtual void SetText( RString str ) = 0; virtual void SetIcon( const RageSurface *pIcon ) { } + virtual void SetSplash( const RString sPath ) { } virtual void SetProgress( const int progress ) { m_progress=progress; } virtual void SetTotalWork( const int totalWork ) { m_totalWork=totalWork; } virtual void SetIndeterminate( bool indeterminate ) { m_indeterminate=indeterminate; } diff --git a/src/arch/LoadingWindow/LoadingWindow_Gtk.h b/src/arch/LoadingWindow/LoadingWindow_Gtk.h index 6abeb87b4d..3ccca35841 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Gtk.h +++ b/src/arch/LoadingWindow/LoadingWindow_Gtk.h @@ -12,6 +12,7 @@ public: RString Init(); ~LoadingWindow_Gtk(); void SetText( RString str ); + void SetSplash( const RString str ) {} void SetProgress( const int progress ); void SetTotalWork( const int totalWork ); void SetIndeterminate( bool indeterminate ); diff --git a/src/arch/LoadingWindow/LoadingWindow_MacOSX.h b/src/arch/LoadingWindow/LoadingWindow_MacOSX.h index 3a521a3170..37694a9a93 100644 --- a/src/arch/LoadingWindow/LoadingWindow_MacOSX.h +++ b/src/arch/LoadingWindow/LoadingWindow_MacOSX.h @@ -9,6 +9,7 @@ public: LoadingWindow_MacOSX(); ~LoadingWindow_MacOSX(); void SetText( RString str ); + void SetSplash( const RString path ) {} void SetProgress( const int progress ); void SetTotalWork( const int totalWork ); void SetIndeterminate( bool indeterminate ); diff --git a/src/arch/LoadingWindow/LoadingWindow_Null.h b/src/arch/LoadingWindow/LoadingWindow_Null.h index 1ca5d89341..4b470f80b2 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Null.h +++ b/src/arch/LoadingWindow/LoadingWindow_Null.h @@ -7,6 +7,7 @@ class LoadingWindow_Null: public LoadingWindow { public: void SetText( RString str ) { } + void SetSplash( RString str ) { } }; #define USE_LOADING_WINDOW_NULL diff --git a/src/arch/LoadingWindow/LoadingWindow_Win32.cpp b/src/arch/LoadingWindow/LoadingWindow_Win32.cpp index f152af9b2b..8412965205 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Win32.cpp +++ b/src/arch/LoadingWindow/LoadingWindow_Win32.cpp @@ -20,8 +20,7 @@ static HBITMAP g_hBitmap = NULL; #pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") - -/* Load a RageSurface into a GDI surface. */ +// Load a RageSurface into a GDI surface. static HBITMAP LoadWin32Surface( RageSurface *&s ) { RageSurfaceUtils::ConvertSurface( s, s->w, s->h, 32, 0xFF000000, 0x00FF0000, 0x0000FF00, 0 ); @@ -35,14 +34,14 @@ static HBITMAP LoadWin32Surface( RageSurface *&s ) HDC BitmapDC = CreateCompatibleDC( hScreen ); SelectObject( BitmapDC, bitmap ); - /* This is silly, but simple. We only do this once, on a small image. */ + // This is silly, but simple. We only do this once, on a small image. for( int y = 0; y < s->h; ++y ) { unsigned const char *line = ((unsigned char *) s->pixels) + (y * s->pitch); for( int x = 0; x < s->w; ++x ) { unsigned const char *data = line + (x*s->format->BytesPerPixel); - + SetPixelV( BitmapDC, x, y, RGB( data[3], data[2], data[1] ) ); } } @@ -62,7 +61,7 @@ static HBITMAP LoadWin32Surface( RString sFile, HWND hWnd ) if( pSurface == NULL ) return NULL; - /* Resize the splash image to fit the dialog. Stretch to fit horizontally, + /* Resize the splash image to fit the dialog. Stretch to fit horizontally, * maintaining aspect ratio. */ { RECT r; @@ -82,7 +81,6 @@ static HBITMAP LoadWin32Surface( RString sFile, HWND hWnd ) INT_PTR CALLBACK LoadingWindow_Win32::DlgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { - LoadingWindow_Win32 *self; if(msg==WM_INITDIALOG) { @@ -136,7 +134,7 @@ INT_PTR CALLBACK LoadingWindow_Win32::DlgProc( HWND hWnd, UINT msg, WPARAM wPara void LoadingWindow_Win32::SetIcon( const RageSurface *pIcon ) { - if( m_hIcon != NULL ) + if( g_hBitmap != NULL ) DestroyIcon( m_hIcon ); m_hIcon = IconFromSurface( pIcon ); @@ -144,6 +142,26 @@ void LoadingWindow_Win32::SetIcon( const RageSurface *pIcon ) SetClassLong( hwnd, GCL_HICON, (LONG) m_hIcon ); } +void LoadingWindow_Win32::SetSplash( const RString sPath ) +{ + if( g_hBitmap != NULL ) + { + DeleteObject( g_hBitmap ); + g_hBitmap = NULL; + } + + g_hBitmap = LoadWin32Surface( sPath, hwnd ); + if( g_hBitmap != NULL ) + { + SendDlgItemMessage( + hwnd, IDC_SPLASH, + STM_SETIMAGE, + (WPARAM) IMAGE_BITMAP, + (LPARAM) (HANDLE) g_hBitmap + ); + } +} + LoadingWindow_Win32::LoadingWindow_Win32() { INITCOMMONCONTROLSEX cceData; @@ -152,7 +170,7 @@ LoadingWindow_Win32::LoadingWindow_Win32() InitCommonControlsEx(&cceData); m_hIcon = NULL; - + runMessageLoop=true; guiReadyEvent=CreateEvent(NULL,FALSE,FALSE,NULL); diff --git a/src/arch/LoadingWindow/LoadingWindow_Win32.h b/src/arch/LoadingWindow/LoadingWindow_Win32.h index 3c45789779..3780c85178 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Win32.h +++ b/src/arch/LoadingWindow/LoadingWindow_Win32.h @@ -15,6 +15,7 @@ public: void SetText( RString sText ); void SetIcon( const RageSurface *pIcon ); + void SetSplash( const RString sPath ); void SetProgress( const int progress ); void SetTotalWork( const int totalWork ); void SetIndeterminate( bool indeterminate ); From d421211da4dac8726258d7e509d0a4beb0537d87 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Tue, 19 Jul 2011 19:42:56 -0500 Subject: [PATCH 041/106] remove hardcoded bpmdisplay from net select music --- src/ScreenNetSelectMusic.cpp | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/src/ScreenNetSelectMusic.cpp b/src/ScreenNetSelectMusic.cpp index 3397ae997b..fe76ec4108 100644 --- a/src/ScreenNetSelectMusic.cpp +++ b/src/ScreenNetSelectMusic.cpp @@ -54,7 +54,7 @@ void ScreenNetSelectMusic::Init() m_StepsDisplays[p].SetName( ssprintf("StepsDisplayP%d",p+1) ); m_StepsDisplays[p].Load( "StepsDisplayNet", NULL ); - LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_StepsDisplays[p] ); + LOAD_ALL_COMMANDS_AND_SET_XY( m_StepsDisplays[p] ); this->AddChild( &m_StepsDisplays[p] ); } @@ -66,20 +66,13 @@ void ScreenNetSelectMusic::Init() this->AddChild( &m_MusicWheel ); this->MoveToHead( &m_MusicWheel ); - // todo: handle me theme-side -aj - m_BPMDisplay.SetName( "BPMDisplay" ); - m_BPMDisplay.LoadFromFont( THEME->GetPathF("BPMDisplay","bpm") ); - m_BPMDisplay.Load(); - LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_BPMDisplay ); - this->AddChild( &m_BPMDisplay ); - // todo: handle me theme-side -aj FOREACH_EnabledPlayer( p ) { m_ModIconRow[p].SetName( ssprintf("ModIconsP%d",p+1) ); m_ModIconRow[p].Load( "ModIconRowSelectMusic", p ); m_ModIconRow[p].SetFromGameState(); - LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_ModIconRow[p] ); + LOAD_ALL_COMMANDS_AND_SET_XY( m_ModIconRow[p] ); this->AddChild( &m_ModIconRow[p] ); } @@ -435,8 +428,6 @@ void ScreenNetSelectMusic::TweenOffScreen() OFF_COMMAND( m_MusicWheel ); - OFF_COMMAND( m_BPMDisplay ); - FOREACH_EnabledPlayer (pn) { OFF_COMMAND( m_StepsDisplays[pn] ); @@ -495,7 +486,6 @@ void ScreenNetSelectMusic::MusicChanged() { if( GAMESTATE->m_pCurSong == NULL ) { - m_BPMDisplay.NoBPM(); FOREACH_EnabledPlayer (pn) UpdateDifficulties( pn ); @@ -504,7 +494,6 @@ void ScreenNetSelectMusic::MusicChanged() // SOUND->PlayMusic( m_sSectionMusicPath, NULL, true, 0, -1 ); return; } - m_BPMDisplay.SetBpmFromSong( GAMESTATE->m_pCurSong ); FOREACH_EnabledPlayer (pn) { From 9f3a35cd6cab64f7c2c41b863b0736df23070c85 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Tue, 19 Jul 2011 19:44:38 -0500 Subject: [PATCH 042/106] i hate this sometimes --- src/NotesLoaderKSF.cpp | 1600 ++++++++++++++++++++-------------------- 1 file changed, 800 insertions(+), 800 deletions(-) diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index d950ea6220..c03538d661 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -1,800 +1,800 @@ -#include "global.h" -#include "NotesLoaderKSF.h" -#include "RageUtil_CharConversions.h" -#include "MsdFile.h" -#include "RageLog.h" -#include "RageUtil.h" -#include "NoteData.h" -#include "NoteTypes.h" -#include "Song.h" -#include "Steps.h" - -static void HandleBunki( TimingData &timing, const float fEarlyBPM, - const float fCurBPM, const float fGap, - const float fPos ) -{ - const float BeatsPerSecond = fEarlyBPM / 60.0f; - const float beat = (fPos + fGap) * BeatsPerSecond; - LOG->Trace( "BPM %f, BPS %f, BPMPos %f, beat %f", - fEarlyBPM, BeatsPerSecond, fPos, beat ); - timing.AddSegment( SEGMENT_BPM, new BPMSegment(beat, fCurBPM) ); -} - -static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, bool bKIUCompliant ) -{ - LOG->Trace( "Steps::LoadFromKSFFile( '%s' )", sPath.c_str() ); - - MsdFile msd; - if( !msd.ReadFile( sPath, false ) ) // don't unescape - { - LOG->UserLog( "Song file", sPath, "couldn't be opened: %s", msd.GetError().c_str() ); - return false; - } - - // this is the value we read for TICKCOUNT - int iTickCount = -1; - // used to adapt weird tickcounts - //float fScrollRatio = 1.0f; -- uncomment when ready to use. - vector vNoteRows; - - // According to Aldo_MX, there is a default BPM and it's 60. -aj - bool bDoublesChart = false; - - TimingData stepsTiming; - float SMGap1 = 0, SMGap2 = 0, BPM1 = -1, BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1; - - for( unsigned i=0; iUserLog( "Song file", sPath, "has an invalid tick count: %d.", iTickCount ); - return false; - } - stepsTiming.AddSegment( SEGMENT_TICKCOUNT, new TickcountSegment(0, iTickCount)); - } - - else if( sValueName=="DIFFICULTY" ) - { - out.SetMeter( max(StringToInt(sParams[1]), 0) ); - } - // new cases from Aldo_MX's fork: - else if( sValueName=="PLAYER" ) - { - RString sPlayer = sParams[1]; - sPlayer.MakeLower(); - if( sPlayer.find( "double" ) != string::npos ) - bDoublesChart = true; - } - // This should always be last. - else if( sValueName=="STEP" ) - { - RString theSteps = sParams[1]; - TrimLeft( theSteps ); - split( theSteps, "\n", vNoteRows, true ); - } - } - - if( iTickCount == -1 ) - { - iTickCount = 4; - LOG->UserLog( "Song file", sPath, "doesn't have a TICKCOUNT. Defaulting to %i.", iTickCount ); - } - - // Prepare BPM stuff already if the file uses KSF syntax. - if( bKIUCompliant ) - { - if( BPM2 > 0 && BPMPos2 > 0 ) - { - HandleBunki( stepsTiming, BPM1, BPM2, SMGap1, BPMPos2 ); - } - - if( BPM3 > 0 && BPMPos3 > 0 ) - { - HandleBunki( stepsTiming, BPM2, BPM3, SMGap2, BPMPos3 ); - } - } - - NoteData notedata; // read it into here - - { - RString sDir, sFName, sExt; - splitpath( sPath, sDir, sFName, sExt ); - sFName.MakeLower(); - - out.SetDescription(sFName); - // Check another before anything else... is this okay? -DaisuMaster - if( sFName.find("another") != string::npos ) - { - out.SetDifficulty( Difficulty_Edit ); - if( !out.GetMeter() ) out.SetMeter( 25 ); - } - else if(sFName.find("wild") != string::npos || - sFName.find("wd") != string::npos || - sFName.find("crazy+") != string::npos || - sFName.find("cz+") != string::npos || - sFName.find("hardcore") != string::npos ) - { - out.SetDifficulty( Difficulty_Challenge ); - if( !out.GetMeter() ) out.SetMeter( 20 ); - } - else if(sFName.find("crazy") != string::npos || - sFName.find("cz") != string::npos || - sFName.find("nightmare") != string::npos || - sFName.find("nm") != string::npos || - sFName.find("crazydouble") != string::npos ) - { - out.SetDifficulty( Difficulty_Hard ); - if( !out.GetMeter() ) out.SetMeter( 14 ); // Set the meters to the Pump scale, not DDR. - } - else if(sFName.find("hard") != string::npos || - sFName.find("hd") != string::npos || - sFName.find("freestyle") != string::npos || - sFName.find("fs") != string::npos || - sFName.find("double") != string::npos ) - { - out.SetDifficulty( Difficulty_Medium ); - if( !out.GetMeter() ) out.SetMeter( 8 ); - } - else if(sFName.find("easy") != string::npos || - sFName.find("ez") != string::npos || - sFName.find("normal") != string::npos ) - { - // I wonder if I should leave easy fall into the Beginner difficulty... -DaisuMaster - out.SetDifficulty( Difficulty_Easy ); - if( !out.GetMeter() ) out.SetMeter( 4 ); - } - else if(sFName.find("beginner") != string::npos || - sFName.find("practice") != string::npos || sFName.find("pr") != string::npos ) - { - out.SetDifficulty( Difficulty_Beginner ); - if( !out.GetMeter() ) out.SetMeter( 4 ); - } - else - { - out.SetDifficulty( Difficulty_Hard ); - if( !out.GetMeter() ) out.SetMeter( 10 ); - } - - out.m_StepsType = StepsType_pump_single; - - // Check for "halfdouble" before "double". - if(sFName.find("halfdouble") != string::npos || - sFName.find("half-double") != string::npos || - sFName.find("h_double") != string::npos || - sFName.find("hdb") != string::npos ) - out.m_StepsType = StepsType_pump_halfdouble; - // Handle bDoublesChart from above as well. -aj - else if(sFName.find("double") != string::npos || - sFName.find("nightmare") != string::npos || - sFName.find("freestyle") != string::npos || - sFName.find("db") != string::npos || - sFName.find("nm") != string::npos || - sFName.find("fs") != string::npos || bDoublesChart ) - out.m_StepsType = StepsType_pump_double; - else if( sFName.find("_1") != string::npos ) - out.m_StepsType = StepsType_pump_single; - else if( sFName.find("_2") != string::npos ) - out.m_StepsType = StepsType_pump_couple; - } - - switch( out.m_StepsType ) - { - case StepsType_pump_single: notedata.SetNumTracks( 5 ); break; - case StepsType_pump_couple: notedata.SetNumTracks( 10 ); break; - case StepsType_pump_double: notedata.SetNumTracks( 10 ); break; - case StepsType_pump_routine: notedata.SetNumTracks( 10 ); break; // future files may have this? - case StepsType_pump_halfdouble: notedata.SetNumTracks( 6 ); break; - default: FAIL_M( ssprintf("%i", out.m_StepsType) ); - } - - int t = 0; - int iHoldStartRow[13]; - for( t=0; t<13; t++ ) - iHoldStartRow[t] = -1; - - bool bTickChangeNeeded = false; - int newTick = -1; - float fCurBeat = 0.0f; - float prevBeat = 0.0f; // Used for hold tails. - - for( unsigned r=0; r(numTemp); - // I have been owned by the man -DaisuMaster - stepsTiming.SetTickcountAtBeat( fCurBeat, clamp(iTickCount, 0, ROWS_PER_BEAT) ); - } - else if (BeginsWith(sRowString, "|B")) - { - // BPM - stepsTiming.SetBPMAtBeat( fCurBeat, numTemp ); - } - else if (BeginsWith(sRowString, "|E")) - { - // DelayBeat - float fCurDelay = 60 / stepsTiming.GetBPMAtBeat(fCurBeat) * numTemp / iTickCount; - fCurDelay += stepsTiming.GetDelayAtRow(BeatToNoteRow(fCurBeat) ); - stepsTiming.SetStopAtBeat( fCurBeat, fCurDelay, true ); - } - else if (BeginsWith(sRowString, "|D")) - { - // Delays - float fCurDelay = stepsTiming.GetStopAtRow(BeatToNoteRow(fCurBeat) ); - fCurDelay += numTemp / 1000; - stepsTiming.SetStopAtBeat( fCurBeat, fCurDelay, true ); - } - else if (BeginsWith(sRowString, "|M") || BeginsWith(sRowString, "|C")) - { - // multipliers/combo - stepsTiming.SetHitComboAtBeat( fCurBeat, static_cast(numTemp) ); - } - else if (BeginsWith(sRowString, "|S")) - { - // speed segments - } - else if (BeginsWith(sRowString, "|F")) - { - // fakes - } - else if (BeginsWith(sRowString, "|X")) - { - // scroll segments - stepsTiming.SetScrollAtBeat( fCurBeat, numTemp ); - //return true; - } - - continue; - } - - // Half-doubles is offset; "0011111100000". - if( out.m_StepsType == StepsType_pump_halfdouble ) - sRowString.erase( 0, 2 ); - - // Update TICKCOUNT for Direct Move files. - if( bTickChangeNeeded ) - { - iTickCount = newTick; - bTickChangeNeeded = false; - } - - for( t=0; t < notedata.GetNumTracks(); t++ ) - { - if( sRowString[t] == '4' ) - { - /* Remember when each hold starts; ignore the middle. */ - if( iHoldStartRow[t] == -1 ) - iHoldStartRow[t] = BeatToNoteRow(fCurBeat); - continue; - } - - if( iHoldStartRow[t] != -1 ) // this ends the hold - { - int iEndRow = BeatToNoteRow(prevBeat); - if( iHoldStartRow[t] == iEndRow ) - notedata.SetTapNote( t, iHoldStartRow[t], TAP_ORIGINAL_TAP ); - else - { - //notedata.AddHoldNote( t, iHoldStartRow[t], iEndRow , TAP_ORIGINAL_PUMP_HEAD ); - notedata.AddHoldNote( t, iHoldStartRow[t], iEndRow , TAP_ORIGINAL_HOLD_HEAD ); - } - iHoldStartRow[t] = -1; - } - - TapNote tap; - switch( sRowString[t] ) - { - case '0': tap = TAP_EMPTY; break; - case '1': tap = TAP_ORIGINAL_TAP; break; - //allow setting more notetypes on ksf files, this may come in handy (it should) -DaisuMaster - case 'M': - case 'm': - tap = TAP_ORIGINAL_MINE; - break; - case 'F': - case 'f': - tap = TAP_ORIGINAL_FAKE; - break; - case 'L': - case 'l': - tap = TAP_ORIGINAL_LIFT; - break; - default: - LOG->UserLog( "Song file", sPath, "has an invalid row \"%s\"; corrupt notes ignored.", - sRowString.c_str() ); - //return false; - tap = TAP_EMPTY; - break; - } - - notedata.SetTapNote(t, BeatToNoteRow(fCurBeat), tap); - } - prevBeat = fCurBeat; - fCurBeat = prevBeat + 1.0f / iTickCount; - } - - out.SetNoteData( notedata ); - out.m_Timing = stepsTiming; - - out.TidyUpData(); - - out.SetSavedToDisk( true ); // we're loading from disk, so this is by definintion already saved - - return true; -} - -static void LoadTags( const RString &str, Song &out ) -{ - /* str is either a #TITLE or a directory component. Fill in missing information. - * str is either "title", "artist - title", or "artist - title - difficulty". */ - vector asBits; - split( str, " - ", asBits, false ); - // Ignore the difficulty, since we get that elsewhere. - if( asBits.size() == 3 && ( - asBits[2].EqualsNoCase("double") || - asBits[2].EqualsNoCase("easy") || - asBits[2].EqualsNoCase("normal") || - asBits[2].EqualsNoCase("hard") || - asBits[2].EqualsNoCase("crazy") || - asBits[2].EqualsNoCase("nightmare")) - ) - { - asBits.erase( asBits.begin()+2, asBits.begin()+3 ); - } - - RString title, artist; - if( asBits.size() == 2 ) - { - artist = asBits[0]; - title = asBits[1]; - } - else if( asBits.size() == 1 ) - { - title = asBits[0]; - } - - // Convert, if possible. Most KSFs are in Korean encodings (CP942/EUC-KR). - if( !ConvertString( title, "korean" ) ) - title = ""; - if( !ConvertString( artist, "korean" ) ) - artist = ""; - - if( out.m_sMainTitle == "" ) - out.m_sMainTitle = title; - if( out.m_sArtist == "" ) - out.m_sArtist = artist; -} - -static void ProcessTickcounts( const RString & value, int & ticks, TimingData & timing ) -{ - /* TICKCOUNT will be used below if there are DM compliant BPM changes - * and stops. It will be called again in LoadFromKSFFile for the - * actual steps. */ - ticks = StringToInt( value ); - ticks = ticks > 0 ? ticks : 4; - // add a tickcount for those using the [Player] - // CheckpointsUseTimeSignatures metric. -aj - // It's not with timesigs now -DaisuMaster - TickcountSegment * tcs = new TickcountSegment(0, ticks > ROWS_PER_BEAT ? ROWS_PER_BEAT : ticks); - timing.AddSegment( SEGMENT_TICKCOUNT, tcs ); -} - -static bool LoadGlobalData( const RString &sPath, Song &out, bool &bKIUCompliant ) -{ - MsdFile msd; - if( !msd.ReadFile( sPath, false ) ) // don't unescape - { - LOG->UserLog( "Song file", sPath, "couldn't be opened: %s", msd.GetError().c_str() ); - return false; - } - - // changed up there in case of something is found inside the SONGFILE tag in the head ksf -DaisuMaster - // search for music with song in the file name - vector arrayPossibleMusic; - GetDirListing( out.GetSongDir() + RString("song.mp3"), arrayPossibleMusic ); - GetDirListing( out.GetSongDir() + RString("song.oga"), arrayPossibleMusic ); - GetDirListing( out.GetSongDir() + RString("song.ogg"), arrayPossibleMusic ); - GetDirListing( out.GetSongDir() + RString("song.wav"), arrayPossibleMusic ); - - if( !arrayPossibleMusic.empty() ) // we found a match - out.m_sMusicFile = arrayPossibleMusic[0]; - // ^this was below, at the end - - float SMGap1 = 0, SMGap2 = 0, BPM1 = -1, BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1; - int iTickCount = -1; - bKIUCompliant = false; - vector vNoteRows; - - for( unsigned i=0; i < msd.GetNumValues(); i++ ) - { - const MsdFile::value_t &sParams = msd.GetValue(i); - RString sValueName = sParams[0]; - sValueName.MakeUpper(); - - // handle the data - if( sValueName=="TITLE" ) - LoadTags(sParams[1], out); - else if( sValueName=="BPM" ) - { - BPM1 = StringToFloat(sParams[1]); - out.m_SongTiming.AddSegment( SEGMENT_BPM, new BPMSegment(0, BPM1) ); - } - else if( sValueName=="BPM2" ) - { - bKIUCompliant = true; - BPM2 = StringToFloat( sParams[1] ); - } - else if( sValueName=="BPM3" ) - { - bKIUCompliant = true; - BPM3 = StringToFloat( sParams[1] ); - } - else if( sValueName=="BUNKI" ) - { - bKIUCompliant = true; - BPMPos2 = StringToFloat( sParams[1] ) / 100.0f; - } - else if( sValueName=="BUNKI2" ) - { - bKIUCompliant = true; - BPMPos3 = StringToFloat( sParams[1] ) / 100.0f; - } - else if( sValueName=="STARTTIME" ) - { - SMGap1 = -StringToFloat( sParams[1] )/100; - out.m_SongTiming.m_fBeat0OffsetInSeconds = SMGap1; - } - // This is currently required for more accurate KIU BPM changes. - else if( sValueName=="STARTTIME2" ) - { - bKIUCompliant = true; - SMGap2 = -StringToFloat( sParams[1] )/100; - } - else if ( sValueName=="STARTTIME3" ) - { - // STARTTIME3 only ensures this is a KIU compliant simfile. - //bKIUCompliant = true; - } - else if ( sValueName=="TICKCOUNT" ) - { - //ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); - } - else if ( sValueName=="STEP" ) - { - /* STEP will always be the last header in a KSF file by design. Due to - * the Direct Move syntax, it is best to get the rows of notes here. */ - RString theSteps = sParams[1]; - TrimLeft( theSteps ); - split( theSteps, "\n", vNoteRows, true ); - } - else if( sValueName=="DIFFICULTY" || sValueName=="PLAYER" ) - { - /* DIFFICULTY and PLAYER are handled only in LoadFromKSFFile. - Ignore those here. */ - continue; - } - // New cases noted in Aldo_MX's code: - else if( sValueName=="MUSICINTRO" || sValueName=="INTRO" ) - { - out.m_fMusicSampleStartSeconds = HHMMSSToSeconds( sParams[1] ); - } - else if( sValueName=="TITLEFILE" ) - { - out.m_sBackgroundFile = sParams[1]; - } - else if( sValueName=="DISCFILE" ) - { - out.m_sBannerFile = sParams[1]; - } - else if( sValueName=="SONGFILE" ) - { - out.m_sMusicFile = sParams[1]; - } - //else if( sValueName=="INTROFILE" ) - //{ - // nothing to add... - //} - // end new cases - else - { - LOG->UserLog( "Song file", sPath, "has an unexpected value named \"%s\".", - sValueName.c_str() ); - } - } - - //intro length in piu mixes is generally 7 seconds - out.m_fMusicSampleLengthSeconds = 7.0f; - - /* BPM Change checks are done here. If bKIUCompliant, it's short and sweet. - * Otherwise, the whole file has to be processed. Right now, this is only - * called once, for the initial file (often the Crazy steps). Hopefully that - * will end up changing soon. */ - if( bKIUCompliant ) - { - if( BPM2 > 0 && BPMPos2 > 0 ) - { - HandleBunki( out.m_SongTiming, BPM1, BPM2, SMGap1, BPMPos2 ); - } - - if( BPM3 > 0 && BPMPos3 > 0 ) - { - HandleBunki( out.m_SongTiming, BPM2, BPM3, SMGap2, BPMPos3 ); - } - } - else - { - float fCurBeat = 0.0f; - bool bDMRequired = false; - - for( unsigned i=0; i < vNoteRows.size(); ++i ) - { - RString& NoteRowString = vNoteRows[i]; - StripCrnl( NoteRowString ); - - if( NoteRowString == "" ) - continue; // ignore empty rows. - - if( NoteRowString == "2222222222222" ) // Row of 2s = end. Confirm KIUCompliency here. - { - if (!bDMRequired) - bKIUCompliant = true; - break; - } - - // This is where the DMRequired test will take place. - if ( BeginsWith( NoteRowString, "|" ) ) - { - // have a static timing for everything - bDMRequired = true; - continue; - } - else - { - // ignore whatever else... - //continue; - } - - fCurBeat += 1.0f / iTickCount; - } - } - - // Try to fill in missing bits of information from the pathname. - { - vector asBits; - split( sPath, "/", asBits, true); - - ASSERT( asBits.size() > 1 ); - LoadTags( asBits[asBits.size()-2], out ); - } - - return true; -} - -void KSFLoader::GetApplicableFiles( const RString &sPath, vector &out ) -{ - GetDirListing( sPath + RString("*.ksf"), out ); -} - -bool KSFLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ) -{ - bool KIUCompliant = false; - Song dummy; - if (!LoadGlobalData(cachePath, dummy, KIUCompliant)) - return false; - Steps *notes = dummy.CreateSteps(); - if (LoadFromKSFFile(cachePath, *notes, dummy, KIUCompliant)) - { - KIUCompliant = true; // yeah, reusing a variable. - out.SetNoteData(notes->GetNoteData()); - } - delete notes; - return KIUCompliant; -} - -bool KSFLoader::LoadFromDir( const RString &sDir, Song &out ) -{ - LOG->Trace( "KSFLoader::LoadFromDir(%s)", sDir.c_str() ); - - vector arrayKSFFileNames; - GetDirListing( sDir + RString("*.ksf"), arrayKSFFileNames ); - - // We shouldn't have been called to begin with if there were no KSFs. - ASSERT( arrayKSFFileNames.size() ); - - bool bKIUCompliant = false; - /* With Split Timing, there has to be a backup Song Timing in case - * anything goes wrong. As these files are kept in alphabetical - * order (hopefully), it is best to use the LAST file for timing - * purposes, for that is the "normal", or easiest difficulty. - * Usually. */ - // Nevermind, kiu compilancy is screwing things up: - // IE, I have two simfiles, oh wich each have four ksf files, the first one has - // the first ksf with directmove timing changes, and the rest are not, everything - // goes fine. In the other hand I have my second simfile with the first ksf file - // without directmove timing changes and the rest have changes, changes are not - // loaded due to kiucompilancy in the first ksf file. - // About the "normal" thing, my simfiles' ksfs uses non-standard naming so - // the last chart is usually nightmare or normal, I use easy and normal - // indistinctly for SM so it shouldn't matter, I use piu fiesta/ex naming - // for directmove though, and we're just gathering basic info anyway, and - // most of the time all the KSF files have the same info in the #TITLE:; section - unsigned files = arrayKSFFileNames.size(); - RString dir = out.GetSongDir(); - if( !LoadGlobalData(dir + arrayKSFFileNames[files - 1], out, bKIUCompliant) ) - return false; - - out.m_sSongFileName = dir + arrayKSFFileNames[files - 1]; - // load the Steps from the rest of the KSF files - for( unsigned i=0; iSetFilename(dir + arrayKSFFileNames[i]); - out.AddSteps( pNewNotes ); - } - out.TidyUpData(false, true); - - return true; -} - -/* - * (c) 2001-2006 Chris Danford, Glenn Maynard, Jason Felds - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ +#include "global.h" +#include "NotesLoaderKSF.h" +#include "RageUtil_CharConversions.h" +#include "MsdFile.h" +#include "RageLog.h" +#include "RageUtil.h" +#include "NoteData.h" +#include "NoteTypes.h" +#include "Song.h" +#include "Steps.h" + +static void HandleBunki( TimingData &timing, const float fEarlyBPM, + const float fCurBPM, const float fGap, + const float fPos ) +{ + const float BeatsPerSecond = fEarlyBPM / 60.0f; + const float beat = (fPos + fGap) * BeatsPerSecond; + LOG->Trace( "BPM %f, BPS %f, BPMPos %f, beat %f", + fEarlyBPM, BeatsPerSecond, fPos, beat ); + timing.AddSegment( SEGMENT_BPM, new BPMSegment(beat, fCurBPM) ); +} + +static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, bool bKIUCompliant ) +{ + LOG->Trace( "Steps::LoadFromKSFFile( '%s' )", sPath.c_str() ); + + MsdFile msd; + if( !msd.ReadFile( sPath, false ) ) // don't unescape + { + LOG->UserLog( "Song file", sPath, "couldn't be opened: %s", msd.GetError().c_str() ); + return false; + } + + // this is the value we read for TICKCOUNT + int iTickCount = -1; + // used to adapt weird tickcounts + //float fScrollRatio = 1.0f; -- uncomment when ready to use. + vector vNoteRows; + + // According to Aldo_MX, there is a default BPM and it's 60. -aj + bool bDoublesChart = false; + + TimingData stepsTiming; + float SMGap1 = 0, SMGap2 = 0, BPM1 = -1, BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1; + + for( unsigned i=0; iUserLog( "Song file", sPath, "has an invalid tick count: %d.", iTickCount ); + return false; + } + stepsTiming.AddSegment( SEGMENT_TICKCOUNT, new TickcountSegment(0, iTickCount)); + } + + else if( sValueName=="DIFFICULTY" ) + { + out.SetMeter( max(StringToInt(sParams[1]), 0) ); + } + // new cases from Aldo_MX's fork: + else if( sValueName=="PLAYER" ) + { + RString sPlayer = sParams[1]; + sPlayer.MakeLower(); + if( sPlayer.find( "double" ) != string::npos ) + bDoublesChart = true; + } + // This should always be last. + else if( sValueName=="STEP" ) + { + RString theSteps = sParams[1]; + TrimLeft( theSteps ); + split( theSteps, "\n", vNoteRows, true ); + } + } + + if( iTickCount == -1 ) + { + iTickCount = 4; + LOG->UserLog( "Song file", sPath, "doesn't have a TICKCOUNT. Defaulting to %i.", iTickCount ); + } + + // Prepare BPM stuff already if the file uses KSF syntax. + if( bKIUCompliant ) + { + if( BPM2 > 0 && BPMPos2 > 0 ) + { + HandleBunki( stepsTiming, BPM1, BPM2, SMGap1, BPMPos2 ); + } + + if( BPM3 > 0 && BPMPos3 > 0 ) + { + HandleBunki( stepsTiming, BPM2, BPM3, SMGap2, BPMPos3 ); + } + } + + NoteData notedata; // read it into here + + { + RString sDir, sFName, sExt; + splitpath( sPath, sDir, sFName, sExt ); + sFName.MakeLower(); + + out.SetDescription(sFName); + // Check another before anything else... is this okay? -DaisuMaster + if( sFName.find("another") != string::npos ) + { + out.SetDifficulty( Difficulty_Edit ); + if( !out.GetMeter() ) out.SetMeter( 25 ); + } + else if(sFName.find("wild") != string::npos || + sFName.find("wd") != string::npos || + sFName.find("crazy+") != string::npos || + sFName.find("cz+") != string::npos || + sFName.find("hardcore") != string::npos ) + { + out.SetDifficulty( Difficulty_Challenge ); + if( !out.GetMeter() ) out.SetMeter( 20 ); + } + else if(sFName.find("crazy") != string::npos || + sFName.find("cz") != string::npos || + sFName.find("nightmare") != string::npos || + sFName.find("nm") != string::npos || + sFName.find("crazydouble") != string::npos ) + { + out.SetDifficulty( Difficulty_Hard ); + if( !out.GetMeter() ) out.SetMeter( 14 ); // Set the meters to the Pump scale, not DDR. + } + else if(sFName.find("hard") != string::npos || + sFName.find("hd") != string::npos || + sFName.find("freestyle") != string::npos || + sFName.find("fs") != string::npos || + sFName.find("double") != string::npos ) + { + out.SetDifficulty( Difficulty_Medium ); + if( !out.GetMeter() ) out.SetMeter( 8 ); + } + else if(sFName.find("easy") != string::npos || + sFName.find("ez") != string::npos || + sFName.find("normal") != string::npos ) + { + // I wonder if I should leave easy fall into the Beginner difficulty... -DaisuMaster + out.SetDifficulty( Difficulty_Easy ); + if( !out.GetMeter() ) out.SetMeter( 4 ); + } + else if(sFName.find("beginner") != string::npos || + sFName.find("practice") != string::npos || sFName.find("pr") != string::npos ) + { + out.SetDifficulty( Difficulty_Beginner ); + if( !out.GetMeter() ) out.SetMeter( 4 ); + } + else + { + out.SetDifficulty( Difficulty_Hard ); + if( !out.GetMeter() ) out.SetMeter( 10 ); + } + + out.m_StepsType = StepsType_pump_single; + + // Check for "halfdouble" before "double". + if(sFName.find("halfdouble") != string::npos || + sFName.find("half-double") != string::npos || + sFName.find("h_double") != string::npos || + sFName.find("hdb") != string::npos ) + out.m_StepsType = StepsType_pump_halfdouble; + // Handle bDoublesChart from above as well. -aj + else if(sFName.find("double") != string::npos || + sFName.find("nightmare") != string::npos || + sFName.find("freestyle") != string::npos || + sFName.find("db") != string::npos || + sFName.find("nm") != string::npos || + sFName.find("fs") != string::npos || bDoublesChart ) + out.m_StepsType = StepsType_pump_double; + else if( sFName.find("_1") != string::npos ) + out.m_StepsType = StepsType_pump_single; + else if( sFName.find("_2") != string::npos ) + out.m_StepsType = StepsType_pump_couple; + } + + switch( out.m_StepsType ) + { + case StepsType_pump_single: notedata.SetNumTracks( 5 ); break; + case StepsType_pump_couple: notedata.SetNumTracks( 10 ); break; + case StepsType_pump_double: notedata.SetNumTracks( 10 ); break; + case StepsType_pump_routine: notedata.SetNumTracks( 10 ); break; // future files may have this? + case StepsType_pump_halfdouble: notedata.SetNumTracks( 6 ); break; + default: FAIL_M( ssprintf("%i", out.m_StepsType) ); + } + + int t = 0; + int iHoldStartRow[13]; + for( t=0; t<13; t++ ) + iHoldStartRow[t] = -1; + + bool bTickChangeNeeded = false; + int newTick = -1; + float fCurBeat = 0.0f; + float prevBeat = 0.0f; // Used for hold tails. + + for( unsigned r=0; r(numTemp); + // I have been owned by the man -DaisuMaster + stepsTiming.SetTickcountAtBeat( fCurBeat, clamp(iTickCount, 0, ROWS_PER_BEAT) ); + } + else if (BeginsWith(sRowString, "|B")) + { + // BPM + stepsTiming.SetBPMAtBeat( fCurBeat, numTemp ); + } + else if (BeginsWith(sRowString, "|E")) + { + // DelayBeat + float fCurDelay = 60 / stepsTiming.GetBPMAtBeat(fCurBeat) * numTemp / iTickCount; + fCurDelay += stepsTiming.GetDelayAtRow(BeatToNoteRow(fCurBeat) ); + stepsTiming.SetStopAtBeat( fCurBeat, fCurDelay, true ); + } + else if (BeginsWith(sRowString, "|D")) + { + // Delays + float fCurDelay = stepsTiming.GetStopAtRow(BeatToNoteRow(fCurBeat) ); + fCurDelay += numTemp / 1000; + stepsTiming.SetStopAtBeat( fCurBeat, fCurDelay, true ); + } + else if (BeginsWith(sRowString, "|M") || BeginsWith(sRowString, "|C")) + { + // multipliers/combo + stepsTiming.SetHitComboAtBeat( fCurBeat, static_cast(numTemp) ); + } + else if (BeginsWith(sRowString, "|S")) + { + // speed segments + } + else if (BeginsWith(sRowString, "|F")) + { + // fakes + } + else if (BeginsWith(sRowString, "|X")) + { + // scroll segments + stepsTiming.SetScrollAtBeat( fCurBeat, numTemp ); + //return true; + } + + continue; + } + + // Half-doubles is offset; "0011111100000". + if( out.m_StepsType == StepsType_pump_halfdouble ) + sRowString.erase( 0, 2 ); + + // Update TICKCOUNT for Direct Move files. + if( bTickChangeNeeded ) + { + iTickCount = newTick; + bTickChangeNeeded = false; + } + + for( t=0; t < notedata.GetNumTracks(); t++ ) + { + if( sRowString[t] == '4' ) + { + /* Remember when each hold starts; ignore the middle. */ + if( iHoldStartRow[t] == -1 ) + iHoldStartRow[t] = BeatToNoteRow(fCurBeat); + continue; + } + + if( iHoldStartRow[t] != -1 ) // this ends the hold + { + int iEndRow = BeatToNoteRow(prevBeat); + if( iHoldStartRow[t] == iEndRow ) + notedata.SetTapNote( t, iHoldStartRow[t], TAP_ORIGINAL_TAP ); + else + { + //notedata.AddHoldNote( t, iHoldStartRow[t], iEndRow , TAP_ORIGINAL_PUMP_HEAD ); + notedata.AddHoldNote( t, iHoldStartRow[t], iEndRow , TAP_ORIGINAL_HOLD_HEAD ); + } + iHoldStartRow[t] = -1; + } + + TapNote tap; + switch( sRowString[t] ) + { + case '0': tap = TAP_EMPTY; break; + case '1': tap = TAP_ORIGINAL_TAP; break; + //allow setting more notetypes on ksf files, this may come in handy (it should) -DaisuMaster + case 'M': + case 'm': + tap = TAP_ORIGINAL_MINE; + break; + case 'F': + case 'f': + tap = TAP_ORIGINAL_FAKE; + break; + case 'L': + case 'l': + tap = TAP_ORIGINAL_LIFT; + break; + default: + LOG->UserLog( "Song file", sPath, "has an invalid row \"%s\"; corrupt notes ignored.", + sRowString.c_str() ); + //return false; + tap = TAP_EMPTY; + break; + } + + notedata.SetTapNote(t, BeatToNoteRow(fCurBeat), tap); + } + prevBeat = fCurBeat; + fCurBeat = prevBeat + 1.0f / iTickCount; + } + + out.SetNoteData( notedata ); + out.m_Timing = stepsTiming; + + out.TidyUpData(); + + out.SetSavedToDisk( true ); // we're loading from disk, so this is by definintion already saved + + return true; +} + +static void LoadTags( const RString &str, Song &out ) +{ + /* str is either a #TITLE or a directory component. Fill in missing information. + * str is either "title", "artist - title", or "artist - title - difficulty". */ + vector asBits; + split( str, " - ", asBits, false ); + // Ignore the difficulty, since we get that elsewhere. + if( asBits.size() == 3 && ( + asBits[2].EqualsNoCase("double") || + asBits[2].EqualsNoCase("easy") || + asBits[2].EqualsNoCase("normal") || + asBits[2].EqualsNoCase("hard") || + asBits[2].EqualsNoCase("crazy") || + asBits[2].EqualsNoCase("nightmare")) + ) + { + asBits.erase( asBits.begin()+2, asBits.begin()+3 ); + } + + RString title, artist; + if( asBits.size() == 2 ) + { + artist = asBits[0]; + title = asBits[1]; + } + else if( asBits.size() == 1 ) + { + title = asBits[0]; + } + + // Convert, if possible. Most KSFs are in Korean encodings (CP942/EUC-KR). + if( !ConvertString( title, "korean" ) ) + title = ""; + if( !ConvertString( artist, "korean" ) ) + artist = ""; + + if( out.m_sMainTitle == "" ) + out.m_sMainTitle = title; + if( out.m_sArtist == "" ) + out.m_sArtist = artist; +} + +static void ProcessTickcounts( const RString & value, int & ticks, TimingData & timing ) +{ + /* TICKCOUNT will be used below if there are DM compliant BPM changes + * and stops. It will be called again in LoadFromKSFFile for the + * actual steps. */ + ticks = StringToInt( value ); + ticks = ticks > 0 ? ticks : 4; + // add a tickcount for those using the [Player] + // CheckpointsUseTimeSignatures metric. -aj + // It's not with timesigs now -DaisuMaster + TickcountSegment * tcs = new TickcountSegment(0, ticks > ROWS_PER_BEAT ? ROWS_PER_BEAT : ticks); + timing.AddSegment( SEGMENT_TICKCOUNT, tcs ); +} + +static bool LoadGlobalData( const RString &sPath, Song &out, bool &bKIUCompliant ) +{ + MsdFile msd; + if( !msd.ReadFile( sPath, false ) ) // don't unescape + { + LOG->UserLog( "Song file", sPath, "couldn't be opened: %s", msd.GetError().c_str() ); + return false; + } + + // changed up there in case of something is found inside the SONGFILE tag in the head ksf -DaisuMaster + // search for music with song in the file name + vector arrayPossibleMusic; + GetDirListing( out.GetSongDir() + RString("song.mp3"), arrayPossibleMusic ); + GetDirListing( out.GetSongDir() + RString("song.oga"), arrayPossibleMusic ); + GetDirListing( out.GetSongDir() + RString("song.ogg"), arrayPossibleMusic ); + GetDirListing( out.GetSongDir() + RString("song.wav"), arrayPossibleMusic ); + + if( !arrayPossibleMusic.empty() ) // we found a match + out.m_sMusicFile = arrayPossibleMusic[0]; + // ^this was below, at the end + + float SMGap1 = 0, SMGap2 = 0, BPM1 = -1, BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1; + int iTickCount = -1; + bKIUCompliant = false; + vector vNoteRows; + + for( unsigned i=0; i < msd.GetNumValues(); i++ ) + { + const MsdFile::value_t &sParams = msd.GetValue(i); + RString sValueName = sParams[0]; + sValueName.MakeUpper(); + + // handle the data + if( sValueName=="TITLE" ) + LoadTags(sParams[1], out); + else if( sValueName=="BPM" ) + { + BPM1 = StringToFloat(sParams[1]); + out.m_SongTiming.AddSegment( SEGMENT_BPM, new BPMSegment(0, BPM1) ); + } + else if( sValueName=="BPM2" ) + { + bKIUCompliant = true; + BPM2 = StringToFloat( sParams[1] ); + } + else if( sValueName=="BPM3" ) + { + bKIUCompliant = true; + BPM3 = StringToFloat( sParams[1] ); + } + else if( sValueName=="BUNKI" ) + { + bKIUCompliant = true; + BPMPos2 = StringToFloat( sParams[1] ) / 100.0f; + } + else if( sValueName=="BUNKI2" ) + { + bKIUCompliant = true; + BPMPos3 = StringToFloat( sParams[1] ) / 100.0f; + } + else if( sValueName=="STARTTIME" ) + { + SMGap1 = -StringToFloat( sParams[1] )/100; + out.m_SongTiming.m_fBeat0OffsetInSeconds = SMGap1; + } + // This is currently required for more accurate KIU BPM changes. + else if( sValueName=="STARTTIME2" ) + { + bKIUCompliant = true; + SMGap2 = -StringToFloat( sParams[1] )/100; + } + else if ( sValueName=="STARTTIME3" ) + { + // STARTTIME3 only ensures this is a KIU compliant simfile. + //bKIUCompliant = true; + } + else if ( sValueName=="TICKCOUNT" ) + { + //ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); + } + else if ( sValueName=="STEP" ) + { + /* STEP will always be the last header in a KSF file by design. Due to + * the Direct Move syntax, it is best to get the rows of notes here. */ + RString theSteps = sParams[1]; + TrimLeft( theSteps ); + split( theSteps, "\n", vNoteRows, true ); + } + else if( sValueName=="DIFFICULTY" || sValueName=="PLAYER" ) + { + /* DIFFICULTY and PLAYER are handled only in LoadFromKSFFile. + Ignore those here. */ + continue; + } + // New cases noted in Aldo_MX's code: + else if( sValueName=="MUSICINTRO" || sValueName=="INTRO" ) + { + out.m_fMusicSampleStartSeconds = HHMMSSToSeconds( sParams[1] ); + } + else if( sValueName=="TITLEFILE" ) + { + out.m_sBackgroundFile = sParams[1]; + } + else if( sValueName=="DISCFILE" ) + { + out.m_sBannerFile = sParams[1]; + } + else if( sValueName=="SONGFILE" ) + { + out.m_sMusicFile = sParams[1]; + } + //else if( sValueName=="INTROFILE" ) + //{ + // nothing to add... + //} + // end new cases + else + { + LOG->UserLog( "Song file", sPath, "has an unexpected value named \"%s\".", + sValueName.c_str() ); + } + } + + //intro length in piu mixes is generally 7 seconds + out.m_fMusicSampleLengthSeconds = 7.0f; + + /* BPM Change checks are done here. If bKIUCompliant, it's short and sweet. + * Otherwise, the whole file has to be processed. Right now, this is only + * called once, for the initial file (often the Crazy steps). Hopefully that + * will end up changing soon. */ + if( bKIUCompliant ) + { + if( BPM2 > 0 && BPMPos2 > 0 ) + { + HandleBunki( out.m_SongTiming, BPM1, BPM2, SMGap1, BPMPos2 ); + } + + if( BPM3 > 0 && BPMPos3 > 0 ) + { + HandleBunki( out.m_SongTiming, BPM2, BPM3, SMGap2, BPMPos3 ); + } + } + else + { + float fCurBeat = 0.0f; + bool bDMRequired = false; + + for( unsigned i=0; i < vNoteRows.size(); ++i ) + { + RString& NoteRowString = vNoteRows[i]; + StripCrnl( NoteRowString ); + + if( NoteRowString == "" ) + continue; // ignore empty rows. + + if( NoteRowString == "2222222222222" ) // Row of 2s = end. Confirm KIUCompliency here. + { + if (!bDMRequired) + bKIUCompliant = true; + break; + } + + // This is where the DMRequired test will take place. + if ( BeginsWith( NoteRowString, "|" ) ) + { + // have a static timing for everything + bDMRequired = true; + continue; + } + else + { + // ignore whatever else... + //continue; + } + + fCurBeat += 1.0f / iTickCount; + } + } + + // Try to fill in missing bits of information from the pathname. + { + vector asBits; + split( sPath, "/", asBits, true); + + ASSERT( asBits.size() > 1 ); + LoadTags( asBits[asBits.size()-2], out ); + } + + return true; +} + +void KSFLoader::GetApplicableFiles( const RString &sPath, vector &out ) +{ + GetDirListing( sPath + RString("*.ksf"), out ); +} + +bool KSFLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ) +{ + bool KIUCompliant = false; + Song dummy; + if (!LoadGlobalData(cachePath, dummy, KIUCompliant)) + return false; + Steps *notes = dummy.CreateSteps(); + if (LoadFromKSFFile(cachePath, *notes, dummy, KIUCompliant)) + { + KIUCompliant = true; // yeah, reusing a variable. + out.SetNoteData(notes->GetNoteData()); + } + delete notes; + return KIUCompliant; +} + +bool KSFLoader::LoadFromDir( const RString &sDir, Song &out ) +{ + LOG->Trace( "KSFLoader::LoadFromDir(%s)", sDir.c_str() ); + + vector arrayKSFFileNames; + GetDirListing( sDir + RString("*.ksf"), arrayKSFFileNames ); + + // We shouldn't have been called to begin with if there were no KSFs. + ASSERT( arrayKSFFileNames.size() ); + + bool bKIUCompliant = false; + /* With Split Timing, there has to be a backup Song Timing in case + * anything goes wrong. As these files are kept in alphabetical + * order (hopefully), it is best to use the LAST file for timing + * purposes, for that is the "normal", or easiest difficulty. + * Usually. */ + // Nevermind, kiu compilancy is screwing things up: + // IE, I have two simfiles, oh wich each have four ksf files, the first one has + // the first ksf with directmove timing changes, and the rest are not, everything + // goes fine. In the other hand I have my second simfile with the first ksf file + // without directmove timing changes and the rest have changes, changes are not + // loaded due to kiucompilancy in the first ksf file. + // About the "normal" thing, my simfiles' ksfs uses non-standard naming so + // the last chart is usually nightmare or normal, I use easy and normal + // indistinctly for SM so it shouldn't matter, I use piu fiesta/ex naming + // for directmove though, and we're just gathering basic info anyway, and + // most of the time all the KSF files have the same info in the #TITLE:; section + unsigned files = arrayKSFFileNames.size(); + RString dir = out.GetSongDir(); + if( !LoadGlobalData(dir + arrayKSFFileNames[files - 1], out, bKIUCompliant) ) + return false; + + out.m_sSongFileName = dir + arrayKSFFileNames[files - 1]; + // load the Steps from the rest of the KSF files + for( unsigned i=0; iSetFilename(dir + arrayKSFFileNames[i]); + out.AddSteps( pNewNotes ); + } + out.TidyUpData(false, true); + + return true; +} + +/* + * (c) 2001-2006 Chris Danford, Glenn Maynard, Jason Felds + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ From a9be18d57d9311a461cd0c6ea2f98bbb939a6efb Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Tue, 19 Jul 2011 19:45:10 -0500 Subject: [PATCH 043/106] since ScreenOptionsExportPackage doesn't really export packages anyways, no one should mind me committing wip code that splits things up into pages --- src/ScreenOptionsExportPackage.cpp | 172 ++++++++++++++++++++++------- src/ScreenOptionsExportPackage.h | 22 ++++ 2 files changed, 154 insertions(+), 40 deletions(-) diff --git a/src/ScreenOptionsExportPackage.cpp b/src/ScreenOptionsExportPackage.cpp index 1ff29e1f0c..405ba4f786 100644 --- a/src/ScreenOptionsExportPackage.cpp +++ b/src/ScreenOptionsExportPackage.cpp @@ -11,7 +11,9 @@ #include "SpecialFiles.h" #include "SpecialFiles.h" #include "ScreenPrompt.h" +#include "SongManager.h" +// main page (type list) REGISTER_SCREEN_CLASS( ScreenOptionsExportPackage ); void ScreenOptionsExportPackage::Init() @@ -24,51 +26,130 @@ void ScreenOptionsExportPackage::Init() void ScreenOptionsExportPackage::BeginScreen() { - // Fill m_vsPossibleDirsToExport - // todo: Split these out over multiple screens so the scroller - // isn't so overloaded. (See ScreenOptionsToggleSongs) -freem + // Fill m_vsPackageTypes: + m_vsPackageTypes.push_back("Themes"); + m_vsPackageTypes.push_back("NoteSkins"); + m_vsPackageTypes.push_back("Courses"); + m_vsPackageTypes.push_back("Songs"); + // announcers, characters, others? + + vector OptionRowHandlers; + FOREACH_CONST( RString, m_vsPackageTypes, s ) { - // Add themes - { - GetDirListing( SpecialFiles::THEMES_DIR + "*", m_vsPossibleDirsToExport, true, true ); - } + OptionRowHandler *pHand = OptionRowHandlerUtil::MakeNull(); + OptionRowDefinition &def = pHand->m_Def; - // Add NoteSkins - { - vector vs; - GetDirListing( SpecialFiles::NOTESKINS_DIR + "*", vs, true, true ); - FOREACH_CONST( RString, vs, s ) - GetDirListing( *s + "*", m_vsPossibleDirsToExport, true, true ); - } + def.m_sName = *s; + def.m_bAllowExplanation = false; + //def.m_sExplanationName = "# files, # MB, # subdirs"; + def.m_bAllowThemeTitle = false; + def.m_bAllowThemeItems = false; + def.m_layoutType = LAYOUT_SHOW_ALL_IN_ROW; + def.m_bOneChoiceForAllPlayers = true; + def.m_vsChoices.clear(); + def.m_vsChoices.push_back( "" ); + OptionRowHandlers.push_back( pHand ); + } + ScreenOptions::InitMenu( OptionRowHandlers ); + ScreenOptions::BeginScreen(); +} + +void ScreenOptionsExportPackage::ProcessMenuStart( const InputEventPlus &input ) +{ + if( IsTransitioning() ) + return; + + // switch to the subpage with the specified type + //int iCurRow = m_iCurrentRow[GAMESTATE->GetMasterPlayerNumber()]; + int iRow = GetCurrentRow(); + if( m_pRows[iRow]->GetRowType() == OptionRow::RowType_Exit ) + { + ScreenOptions::ProcessMenuStart( input ); + return; + } + + ExportPackages::m_sPackageType = m_vsPackageTypes[iRow]; + SCREENMAN->SetNewScreen("ScreenOptionsExportPackageSubPage"); +} + +void ScreenOptionsExportPackage::ImportOptions( int iRow, const vector &vpns ) +{ + +} + +void ScreenOptionsExportPackage::ExportOptions( int iRow, const vector &vpns ) +{ + +} + + +// subpage (has all folders for the specified type) +REGISTER_SCREEN_CLASS( ScreenOptionsExportPackageSubPage ); +void ScreenOptionsExportPackageSubPage::Init() +{ + ScreenOptions::Init(); + + SetNavigation( NAV_THREE_KEY_MENU ); + SetInputMode( INPUTMODE_SHARE_CURSOR ); +} + +void ScreenOptionsExportPackageSubPage::BeginScreen() +{ + // Check type and fill m_vsPossibleDirsToExport + const RString *s_packageType = &ExportPackages::m_sPackageType; + if( *s_packageType == "Themes" ) + { + // add themes + GetDirListing( SpecialFiles::THEMES_DIR + "*", m_vsPossibleDirsToExport, true, true ); + } + else if( *s_packageType == "NoteSkins" ) + { + // add noteskins + vector vs; + GetDirListing( SpecialFiles::NOTESKINS_DIR + "*", vs, true, true ); + FOREACH_CONST( RString, vs, s ) + GetDirListing( *s + "*", m_vsPossibleDirsToExport, true, true ); + } + else if( *s_packageType == "Courses" ) + { // Add courses. Only support courses that are in a group folder. // Support for courses not in a group folder should be phased out. + vector vs; + GetDirListing( SpecialFiles::COURSES_DIR + "*", vs, true, true ); + StripCvsAndSvn( vs ); + StripMacResourceForks( vs ); + FOREACH_CONST( RString, vs, s ) { - vector vs; - GetDirListing( SpecialFiles::COURSES_DIR + "*", vs, true, true ); - StripCvsAndSvn( vs ); - StripMacResourceForks( vs ); - FOREACH_CONST( RString, vs, s ) - { - m_vsPossibleDirsToExport.push_back( *s ); - GetDirListing( *s + "/*", m_vsPossibleDirsToExport, true, true ); - } + m_vsPossibleDirsToExport.push_back( *s ); + GetDirListing( *s + "/*", m_vsPossibleDirsToExport, true, true ); } - - // Add songs - { - vector vs; - GetDirListing( SpecialFiles::SONGS_DIR + "*", vs, true, true ); - FOREACH_CONST( RString, vs, s ) - { - m_vsPossibleDirsToExport.push_back( *s ); - GetDirListing( *s + "/*", m_vsPossibleDirsToExport, true, true ); - } - } - - StripCvsAndSvn( m_vsPossibleDirsToExport ); - StripMacResourceForks( m_vsPossibleDirsToExport ); } + else if( *s_packageType == "Songs" ) + { + // Add song groups + vector asAllGroups; + SONGMAN->GetSongGroupNames(asAllGroups); + FOREACH_CONST( RString, asAllGroups , s ) + { + m_vsPossibleDirsToExport.push_back(*s); + } + } + else if( *s_packageType == "SubGroup" ) + { + //ExportPackages::m_sFolder + /* + vector vs; + GetDirListing( SpecialFiles::SONGS_DIR + "*", vs, true, true ); + FOREACH_CONST( RString, vs, s ) + { + m_vsPossibleDirsToExport.push_back( *s ); + GetDirListing( *s + "/*", m_vsPossibleDirsToExport, true, true ); + } + */ + } + StripCvsAndSvn( m_vsPossibleDirsToExport ); + StripMacResourceForks( m_vsPossibleDirsToExport ); vector OptionRowHandlers; FOREACH_CONST( RString, m_vsPossibleDirsToExport, s ) @@ -142,7 +223,7 @@ static bool ExportPackage( RString sPackageName, RString sDirToExport, RString & return false; } -void ScreenOptionsExportPackage::ProcessMenuStart( const InputEventPlus &input ) +void ScreenOptionsExportPackageSubPage::ProcessMenuStart( const InputEventPlus &input ) { if( IsTransitioning() ) return; @@ -154,6 +235,17 @@ void ScreenOptionsExportPackage::ProcessMenuStart( const InputEventPlus &input ) return; } + if( ExportPackages::m_sPackageType == "Courses" + || ExportPackages::m_sPackageType == "NoteSkins" + || ExportPackages::m_sPackageType == "Songs" ) + { + // find folder name + ExportPackages::m_sPackageType = "SubGroup"; + ExportPackages::m_sFolder = m_vsPossibleDirsToExport[iCurRow]; + SCREENMAN->SetNewScreen("ScreenOptionsExportPackageSubPage"); + return; + } + RString sDirToExport = m_vsPossibleDirsToExport[ iCurRow ]; RString sPackageName = ReplaceInvalidFileNameChars( sDirToExport + ".smzip" ); @@ -164,12 +256,12 @@ void ScreenOptionsExportPackage::ProcessMenuStart( const InputEventPlus &input ) ScreenPrompt::Prompt( SM_None, ssprintf("Failed to export package: %s",sError.c_str()) ); } -void ScreenOptionsExportPackage::ImportOptions( int iRow, const vector &vpns ) +void ScreenOptionsExportPackageSubPage::ImportOptions( int iRow, const vector &vpns ) { } -void ScreenOptionsExportPackage::ExportOptions( int iRow, const vector &vpns ) +void ScreenOptionsExportPackageSubPage::ExportOptions( int iRow, const vector &vpns ) { } diff --git a/src/ScreenOptionsExportPackage.h b/src/ScreenOptionsExportPackage.h index 13952e1ff7..80e6c1059c 100644 --- a/src/ScreenOptionsExportPackage.h +++ b/src/ScreenOptionsExportPackage.h @@ -6,6 +6,13 @@ class Course; +// Can this be done any better? -aj +namespace ExportPackages +{ + RString m_sPackageType; + RString m_sFolder; // used for more subpages +} + /** @brief A menu for exporting packages. */ class ScreenOptionsExportPackage : public ScreenOptions { @@ -13,6 +20,21 @@ public: void Init(); virtual void BeginScreen(); +protected: + virtual void ImportOptions( int iRow, const vector &vpns ); + virtual void ExportOptions( int iRow, const vector &vpns ); + + virtual void ProcessMenuStart( const InputEventPlus &input ); + + vector m_vsPackageTypes; +}; + +class ScreenOptionsExportPackageSubPage : public ScreenOptions +{ +public: + void Init(); + virtual void BeginScreen(); + protected: virtual void ImportOptions( int iRow, const vector &vpns ); virtual void ExportOptions( int iRow, const vector &vpns ); From 99c91989715f9c010dc110e1f32e2fb8405c92e0 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Tue, 19 Jul 2011 22:53:13 -0400 Subject: [PATCH 044/106] Add pump-halfdouble medium chart. --- .../Mecha-Tribe Assault.ssc | 858 ++++++++++++++++-- 1 file changed, 758 insertions(+), 100 deletions(-) diff --git a/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc b/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc index 366b79ad19..48cc7a4d43 100644 --- a/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc +++ b/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc @@ -1,4 +1,4 @@ -#VERSION:0.76; +#VERSION:0.77; #TITLE:Mecha-Tribe Assault; #SUBTITLE:; #ARTIST:Kommisar; @@ -22,9 +22,9 @@ #DELAYS:; #WARPS:; #TIMESIGNATURES:0.000000=4=4; -#TICKCOUNTS:0.000000=2; +#TICKCOUNTS:0.000000=4; #COMBOS:0.000000=1; -#SPEEDS:0.000000=1.000000=0.000000=0h; +#SPEEDS:0.000000=1.000000=0.000000=0; #SCROLLS:0.000000=1.000000; #LABELS:0.000000=Song Start, 16.000000=Verse 1A, @@ -52,7 +52,7 @@ //---------------dance-single - ---------------- #NOTEDATA:; -#CHARTNAME:Wyde: +#CHARTNAME:Wyde; #STEPSTYPE:dance-single; #DESCRIPTION:; #CHARTSTYLE:; @@ -98,7 +98,7 @@ ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 0000 0000 @@ -1007,7 +1007,7 @@ M000 //---------------dance-single - ---------------- #NOTEDATA:; -#CHARTNAME:Wyde: +#CHARTNAME:Wyde; #STEPSTYPE:dance-single; #DESCRIPTION:; #CHARTSTYLE:; @@ -1053,7 +1053,7 @@ M000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 0000 0000 @@ -1854,7 +1854,7 @@ M100 //---------------dance-single - ---------------- #NOTEDATA:; -#CHARTNAME:Wyde: +#CHARTNAME:Wyde; #STEPSTYPE:dance-single; #DESCRIPTION:; #CHARTSTYLE:; @@ -1900,7 +1900,7 @@ M100 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 0000 0000 @@ -2525,7 +2525,7 @@ M100 //---------------dance-single - ---------------- #NOTEDATA:; -#CHARTNAME:Wyde: +#CHARTNAME:Wyde; #STEPSTYPE:dance-single; #DESCRIPTION:; #CHARTSTYLE:; @@ -2571,7 +2571,7 @@ M100 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 0000 0000 @@ -3108,7 +3108,7 @@ M100 //---------------dance-single - ---------------- #NOTEDATA:; -#CHARTNAME:Wyde: +#CHARTNAME:Wyde; #STEPSTYPE:dance-single; #DESCRIPTION:; #CHARTSTYLE:; @@ -3154,7 +3154,7 @@ M100 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 0000 0000 @@ -3543,7 +3543,7 @@ M00M //---------------dance-solo - ---------------- #NOTEDATA:; -#CHARTNAME:Hard: +#CHARTNAME:Hard; #STEPSTYPE:dance-solo; #DESCRIPTION:; #CHARTSTYLE:Pad; @@ -3590,7 +3590,7 @@ M00M ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 000000 000000 @@ -4411,7 +4411,7 @@ MMMMMM //---------------pump-single - ---------------- #NOTEDATA:; -#CHARTNAME:Vin.il: +#CHARTNAME:Vin.il; #STEPSTYPE:pump-single; #DESCRIPTION:; #CHARTSTYLE:Pad; @@ -4540,7 +4540,7 @@ MMMMMM ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::TIME=101.194664:LEN=7.000000:MODS=*0.2399996928003932 Reverse, Overhead; +#ATTACKS:TIME=101.194664:LEN=7.000000:MODS=*0.2399996928003932 Reverse, Overhead; #NOTES: 00000 00000 @@ -5465,7 +5465,7 @@ M0000 //---------------pump-single - ---------------- #NOTEDATA:; -#CHARTNAME:Vin.il: +#CHARTNAME:Vin.il; #STEPSTYPE:pump-single; #DESCRIPTION:; #CHARTSTYLE:Pad; @@ -5520,7 +5520,7 @@ M0000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 00000 00000 @@ -6337,7 +6337,7 @@ M0000 //---------------pump-single - ---------------- #NOTEDATA:; -#CHARTNAME:Vin.il: +#CHARTNAME:Vin.il; #STEPSTYPE:pump-single; #DESCRIPTION:; #CHARTSTYLE:Pad; @@ -6441,7 +6441,7 @@ M0000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 00000 00000 @@ -6998,7 +6998,7 @@ M0000 //---------------dance-couple - Simple Chart---------------- #NOTEDATA:; -#CHARTNAME:Small Tribe: +#CHARTNAME:Small Tribe; #STEPSTYPE:dance-couple; #DESCRIPTION:Simple Chart; #CHARTSTYLE:Pad; @@ -7044,7 +7044,7 @@ M0000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 00000000 00000000 @@ -7438,7 +7438,7 @@ M0000 //---------------dance-threepanel - It's a 3 panel chart.---------------- #NOTEDATA:; -#CHARTNAME:Simple: +#CHARTNAME:Simple; #STEPSTYPE:dance-threepanel; #DESCRIPTION:It's a 3 panel chart.; #CHARTSTYLE:Pad; @@ -7486,384 +7486,1042 @@ M0000 ; #ATTACKS:; #NOTES: -// measure 0 000 000 000 000 -, // measure 1 +, 000 000 000 000 -, // measure 2 +, 000 000 000 000 -, // measure 3 +, 000 000 000 000 -, // measure 4 +, 100 000 000 000 -, // measure 5 +, 000 000 000 000 -, // measure 6 +, 001 000 000 000 -, // measure 7 +, 000 000 000 000 -, // measure 8 +, 010 000 000 000 -, // measure 9 +, 000 000 000 000 -, // measure 10 +, 001 000 000 000 -, // measure 11 +, 000 000 000 000 -, // measure 12 +, 100 000 000 000 -, // measure 13 +, 010 000 000 000 -, // measure 14 +, 001 000 000 000 -, // measure 15 +, 010 000 000 000 -, // measure 16 +, 100 000 000 000 -, // measure 17 +, 001 000 000 000 -, // measure 18 +, 010 000 000 000 -, // measure 19 +, 001 000 000 000 -, // measure 20 +, 101 000 000 000 -, // measure 21 +, 010 000 000 000 -, // measure 22 +, 100 000 000 000 -, // measure 23 +, 001 000 000 000 -, // measure 24 +, 010 000 000 000 -, // measure 25 +, 001 000 000 000 -, // measure 26 +, 100 000 000 000 -, // measure 27 +, 010 000 000 000 -, // measure 28 +, 101 000 100 000 -, // measure 29 +, 100 000 100 000 -, // measure 30 +, 100 000 000 000 -, // measure 31 +, 110 000 000 000 -, // measure 32 +, 001 000 001 000 -, // measure 33 +, 001 000 001 000 -, // measure 34 +, 001 000 000 000 -, // measure 35 +, 011 000 000 000 -, // measure 36 +, 100 000 010 000 -, // measure 37 +, 100 000 001 000 -, // measure 38 +, 100 000 000 000 -, // measure 39 +, 101 000 000 000 -, // measure 40 +, 001 000 010 000 -, // measure 41 +, 001 000 100 000 -, // measure 42 +, 001 000 000 000 -, // measure 43 +, 101 000 000 000 -, // measure 44 +, 010 000 001 000 -, // measure 45 +, 100 000 010 000 -, // measure 46 +, 100 000 001 000 -, // measure 47 +, 010 000 000 000 -, // measure 48 +, 010 000 100 000 -, // measure 49 +, 001 000 010 000 -, // measure 50 +, 001 000 100 000 -, // measure 51 +, 010 000 000 000 -, // measure 52 +, 011 000 000 000 -, // measure 53 +, 110 000 000 000 -, // measure 54 +, 101 000 101 000 -, // measure 55 +, 101 000 000 000 -, // measure 56 +, 010 000 000 001 -, // measure 57 +, 001 000 000 100 -, // measure 58 +, 100 000 000 010 -, // measure 59 +, 010 000 000 000 -, // measure 60 +, 100 000 000 001 -, // measure 61 +, 001 000 000 010 -, // measure 62 +, 010 000 000 001 -, // measure 63 +, 001 000 000 100 -, // measure 64 +, 100 000 001 000 -, // measure 65 +, 010 000 001 000 -, // measure 66 +, 100 000 010 000 -, // measure 67 +, 100 000 001 000 -, // measure 68 +, 010 000 000 000 -, // measure 69 +, 001 000 000 000 -, // measure 70 +, 100 000 000 010 -, // measure 71 +, 010 000 000 000 -, // measure 72 +, 100 000 000 000 -, // measure 73 +, 001 000 000 000 -, // measure 74 +, 010 000 000 000 -, // measure 75 +, 001 000 000 000 ; + +//---------------pump-halfdouble - Community Skype Chart---------------- +#NOTEDATA:; +#CHARTNAME:Steam Pump; +#STEPSTYPE:pump-halfdouble; +#DESCRIPTION:Community Skype Chart; +#CHARTSTYLE:Pad; +#DIFFICULTY:Medium; +#METER:11; +#RADARVALUES:0.589,0.891,0.400,0.610,0.019,333.000,42.000,64.000,0.000,0.000,0.000,6.000,0.000,0.589,0.891,0.400,0.610,0.019,333.000,42.000,64.000,0.000,0.000,0.000,6.000,0.000; +#CREDIT:Jason Felds; +#OFFSET:-0.028000; +#BPMS:0.000000=180.000000 +; +#STOPS:; +#DELAYS:; +#WARPS:; +#TIMESIGNATURES:0.000000=4=4 +; +#TICKCOUNTS:0.000000=4 +; +#COMBOS:0.000000=1 +; +#SPEEDS:0.000000=1.000000=0.000000=0 +; +#SCROLLS:0.000000=1.000000 +; +#FAKES:; +#LABELS:0.000000=Song Start +,16.000000=Verse 1A +,32.000000=Verse 1B +,48.000000=Verse 2A +,64.000000=Verse 2B +,80.000000=Verse 3A +,96.000000=Verse 3B +,112.000000=Verse 4A +,128.000000=Verse 4B +,144.000000=Verse 5A +,160.000000=Verse 5B +,176.000000=Verse 6A +,192.000000=Verse 6B +,208.000000=Verse 7A +,224.000000=Verse 7B +,240.000000=Verse 8A +,256.000000=Verse 8B +,272.000000=Verse 9A +,288.000000=Verse 9B +,304.000000=Fin +; +#ATTACKS:; +#NOTES: +// measure 0 +000000 +000000 +000000 +000000 +, // measure 1 +000000 +000000 +000000 +000000 +, // measure 2 +000000 +000000 +000000 +000000 +, // measure 3 +000000 +000000 +000000 +000000 +, // measure 4 +000100 +000000 +000000 +001000 +000000 +000000 +000010 +000000 +, // measure 5 +000100 +000000 +000000 +000001 +000000 +000000 +000010 +000000 +, // measure 6 +000100 +000000 +000000 +000001 +000000 +000000 +000100 +000000 +, // measure 7 +010000 +000000 +000000 +001000 +000000 +000000 +100000 +000000 +, // measure 8 +001000 +000000 +000000 +000010 +000000 +000000 +000001 +000000 +, // measure 9 +000100 +000000 +000000 +000010 +000000 +000000 +010000 +000000 +, // measure 10 +001000 +000000 +000000 +100000 +000000 +000000 +000100 +000000 +, // measure 11 +010000 +000000 +000000 +000010 +000000 +000000 +001000 +000000 +, // measure 12 +000100 +100000 +000000 +101000 +000000 +001000 +000000 +011000 +, // measure 13 +000000 +010000 +000000 +010010 +000000 +000010 +000100 +000001 +, // measure 14 +001000 +000010 +000000 +000110 +000000 +000100 +000000 +000101 +, // measure 15 +000000 +000001 +000000 +001001 +000000 +001000 +000100 +010000 +, // measure 16 +000010 +001000 +000000 +001100 +000000 +000100 +000000 +010100 +, // measure 17 +000000 +010000 +000000 +011000 +000000 +001000 +100000 +000100 +, // measure 18 +001000 +000010 +000000 +010000 +000000 +000001 +000000 +100000 +, // measure 19 +000010 +000000 +000000 +0100L0 +000000 +000000 +0L0010 +000000 +000000 +0100L0 +000000 +000000 +010010 +000000 +000000 +000000 +, // measure 20 +001000 +000001 +000000 +000101 +000000 +000100 +000000 +000110 +, // measure 21 +000000 +000010 +000000 +010010 +000000 +010000 +001000 +100000 +, // measure 22 +000100 +010000 +000000 +011000 +000000 +001000 +000000 +101000 +, // measure 23 +000000 +100000 +000000 +100100 +000000 +000100 +001000 +000010 +, // measure 24 +010000 +000100 +000000 +001100 +000000 +001000 +000000 +001010 +, // measure 25 +000000 +000010 +000000 +000110 +000000 +000100 +000001 +001000 +, // measure 26 +000100 +010000 +000000 +000010 +000000 +100000 +000000 +000001 +, // measure 27 +010000 +000000 +000000 +0L0010 +000000 +000000 +0100L0 +000000 +000000 +0L0010 +000000 +000000 +010010 +000000 +000000 +000000 +, // measure 28 +000100 +010000 +000010 +001000 +, // measure 29 +000001 +100000 +001000 +010000 +, // measure 30 +000100 +001000 +000010 +010000 +, // measure 31 +000001 +000010 +000100 +001000 +010000 +100000 +110000 +000000 +, // measure 32 +001000 +000010 +010000 +000100 +, // measure 33 +100000 +000001 +000100 +000010 +, // measure 34 +001000 +000100 +010000 +000010 +, // measure 35 +100000 +010000 +001000 +000100 +000010 +000001 +000011 +000000 +, // measure 36 +000002 +000100 +000003 +000002 +001000 +000003 +000002 +010000 +, // measure 37 +000003 +000002 +100000 +000003 +000001 +000100 +000010 +001000 +, // measure 38 +000100 +001000 +000000 +000010 +000100 +000000 +000001 +001000 +, // measure 39 +000010 +000100 +000001 +010000 +000100 +001000 +001010 +000000 +, // measure 40 +200000 +001000 +300000 +200000 +000100 +300000 +200000 +000010 +, // measure 41 +300000 +200000 +000001 +300000 +100000 +001000 +010000 +000100 +, // measure 42 +001000 +000100 +000000 +010000 +001000 +000000 +100000 +000100 +, // measure 43 +010000 +001000 +100000 +000010 +001000 +000100 +010100 +000000 +, // measure 44 +200000 +000000 +300200 +002300 +000000 +003020 +020030 +030002 +, // measure 45 +000023 +000000 +000230 +002300 +000000 +003020 +020030 +032000 +, // measure 46 +203000 +000000 +320000 +032000 +000000 +003200 +000320 +000032 +, // measure 47 +010003 +000010 +010000 +000010 +010000 +000010 +010010 +000000 +, // measure 48 +000002 +000000 +020003 +030020 +000000 +002030 +003200 +200300 +, // measure 49 +302000 +000000 +023000 +030020 +000000 +002030 +003200 +000320 +, // measure 50 +000032 +000000 +000203 +000320 +000000 +020030 +032000 +203000 +, // measure 51 +300100 +001000 +000100 +001000 +000100 +001000 +001100 +000000 +, // measure 52 +000002 +000000 +000000 +200003 +, // measure 53 +300200 +000000 +002300 +000000 +, // measure 54 +003010 +010000 +000010 +010000 +, // measure 55 +000100 +001000 +000100 +001000 +, // measure 56 +000020 +001030 +002000 +003100 +, // measure 57 +000200 +010300 +020000 +030001 +, // measure 58 +000002 +100003 +200000 +300100 +, // measure 59 +000200 +010300 +020000 +030010 +, // measure 60 +000020 +000000 +002030 +003200 +, // measure 61 +200300 +000000 +300020 +000230 +, // measure 62 +000301 +100000 +000010 +010000 +, // measure 63 +000100 +001000 +000010 +010000 +, // measure 64 +000001 +000011 +000010 +000110 +, // measure 65 +000100 +001100 +001000 +011000 +, // measure 66 +010000 +110000 +100000 +100001 +, // measure 67 +000100 +010100 +001000 +001010 +, // measure 68 +001100 +000000 +000000 +000100 +010000 +000000 +000000 +010000 +, // measure 69 +001000 +000000 +000000 +001000 +100000 +000000 +000000 +100000 +, // measure 70 +000001 +000000 +000000 +000001 +000100 +000000 +000010 +000000 +, // measure 71 +001000 +000100 +010000 +000010 +, // measure 72 +001100 +000000 +000000 +001000 +000010 +000000 +000000 +000010 +, // measure 73 +000100 +000000 +000000 +000100 +000001 +000000 +000000 +000001 +, // measure 74 +100000 +000000 +000000 +100000 +001000 +000000 +010000 +000000 +, // measure 75 +000100 +000000 +001000 +000000 +000010 +000000 +020000 +002000 +, // measure 76 +000000 +000000 +000000 +000000 +, // measure 77 +000000 +000000 +000000 +000000 +, // measure 78 +033000 +000000 +000000 +000000 +; From 3737b2eac695645d5adab922cdb00613747cb514 Mon Sep 17 00:00:00 2001 From: Alberto Ramos Date: Tue, 19 Jul 2011 21:48:13 -0600 Subject: [PATCH 045/106] |B300| --- Songs/StepMania 5/ksf/easy.ksf | 1 + 1 file changed, 1 insertion(+) diff --git a/Songs/StepMania 5/ksf/easy.ksf b/Songs/StepMania 5/ksf/easy.ksf index d4353e9f65..8f27e79506 100644 --- a/Songs/StepMania 5/ksf/easy.ksf +++ b/Songs/StepMania 5/ksf/easy.ksf @@ -51,6 +51,7 @@ 0010000000000 0010000000000 0010000000000 +|B300| |T4| 1001000000000 0000000000000 From 516ea1abd967ccef81ee3d11e441a9daee840950 Mon Sep 17 00:00:00 2001 From: Alberto Ramos Date: Tue, 19 Jul 2011 22:15:16 -0600 Subject: [PATCH 046/106] etc --- Songs/StepMania 5/ksf/easy.ksf | 384 --------------------------------- Songs/StepMania 5/ksf/song.ogg | Bin 220298 -> 0 bytes 2 files changed, 384 deletions(-) delete mode 100644 Songs/StepMania 5/ksf/easy.ksf delete mode 100644 Songs/StepMania 5/ksf/song.ogg diff --git a/Songs/StepMania 5/ksf/easy.ksf b/Songs/StepMania 5/ksf/easy.ksf deleted file mode 100644 index 8f27e79506..0000000000 --- a/Songs/StepMania 5/ksf/easy.ksf +++ /dev/null @@ -1,384 +0,0 @@ -#TITLE:?; -#BPM:150; -#STARTTIME:0; -#PLAYER:SINGLE; -#TICKCOUNT:4; -#SONGFILE:song.ogg; -#STEP: -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0100100000000 -0000000000000 -0000000000000 -0000000000000 -0010000000000 -0000000000000 -0000000000000 -0000000000000 -0010000000000 -0000000000000 -0000000000000 -0000000000000 -0010000000000 -0000000000000 -0000000000000 -0000000000000 -|T2| -1001000000000 -0000000000000 -0010000000000 -0000000000000 -0010000000000 -0000000000000 -0010000000000 -0000000000000 -|T1| -0100100000000 -0010000000000 -0010000000000 -0010000000000 -|B300| -|T4| -1001000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -2222222222222 \ No newline at end of file diff --git a/Songs/StepMania 5/ksf/song.ogg b/Songs/StepMania 5/ksf/song.ogg deleted file mode 100644 index e8b8af412f2fe0182848fb6e23ebd0a3e01e4a6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220298 zcmagG1z1+k(=dGKM!LIOI;Fewrn?(yX{4m38|m)u?vO4?l`cULgV67Qzkhts`(Dp` zJnXe+=bYKu*_qjy*}YY@vC#yefq$+j(!UkGVdq;YGAJ(>H*-7p$0jJL>VIDGhI*>B zL#aM~`S0uT%SXsa&Q>G_>!1JMH39P%(IawQyO*|Xs%|zEj&|nSPv|M+DLC2Lx!HL+ z1s<_M!To)iQ9@E13P1!~IFu+xg69$-0Du7irZkM`$=33WB`F0AJ{c);kF^o@sEm}T z5dw=?j?sS=6x^1$000XFGa$tm9mw0y2-pzN$GhbV*s1WBQ6NOCe-uC(yrHvjE^RJ# zaGqhLMMTqs13*rQ$x(*mXgn6?k(3bxVDW~;ZJe?!#|@dOJU;}PbDSbniSxKPSw--; zyeMAqgrRv(0)@4CK|zUQS=*wv2j0lveMaCg=br-UX&e+FEfVmAmKYL0R)4?1Y{F&S- z;(rR(zcmK{l_u;-CsWL0ImU8ARV0x9PVm1p#}#KRkz^u~MzN7bd4c8q6}Rd&_dK?= zI=8YWuF*WM=OUh!Ca=*VkJTc?YT3)`L#vfRTYz5cKMM0#ZFW{Y|4VZoRfI|)epfCD z_CK1F&k+BaKb~4XiAFDp&L_<#Dyt&%-El=B^8e5r+vu{4=(5P@!^n7ss5HB%tjdl; z$I05$&j08AZ_SZ)qXBPFbEMs9{!4TEIY=ZyZE9puzWzH#;dzju9@6;#JplmFpMa|P zWJlCBSeG?;mNi%*TEhRk#(>aeZskR8kg=%%KnMWT;3S7(M7t$OI1B3{avadW6$ro= z3=@QvVQ`@epiy}wh|>$VCkYIpUVqeJz?D)8jicp@r$8GlHI(1yM+D6tET9em!5rfp z!vt{DH=132MHRJ9Q!013Ib(0nll23q+ydB@VTKFj3p$RGmK*- zVbkLKIiYjn3;;mU4+Z{7FmPK+0~qwc$Cos-$=r%Kw2Ii$vp80(*vhM^-0!)0)U_Z} z*pOu{$OfJ=q?J|~TUq&=76e-wf(uzpQ--uS&2n3P(1L8?L6%#sHt+&<(mZ##l=Z;J z6%gvVnigQP;$)QZ4=QDxCse$U)m9#L4~RO%N>2--=Vhh$1ERAMpa?=Wl|SG@Agz!O zH%^eWfKMI}BOR*`KOlN|fd;GLpS}ltB6!5Sy6g!;%~q_;+B|m{?6U0a3(G6B7%D3( zDqEc@YikS&k17i*CmU@lYpW+4>#AxUPeEvHd1WI@WhF~hWA$An%V}$QWoOM~V|{jQ z)oJSm$`H$G=gZ34+N#F0M`&lw>8R^zC%bvXFVNm1oVFVoau z{bb|CY3K81PfB%&=T?f*t`0a3Cll{?20y|ZorL;o?j}J53qJ*BT}V2>&zhWx!M4$B zW>GW#_!65ekkZPU?8>UsMrY=s>Qf1INPtnQ)efJL9=`JqU%bI;Tw&!&C(~3f*b&F( zs0&FKJBiT-F9^tOtU(E|82^DZ>##BEdMCL1-Lt3;6>01(C>v0ZvVlD*RzS%N9n22} zz*8RLXksvpPH92jZ$dE%a7+IV=34&rYvY66qKkb zI25F;XgD;KE}5TG6yqt_v8F8O+gFS(>BnMPU~nE5Th7QMl{7yBKvakM#pn_WCB-<3 z3ar}Gpdc45h|5(JV`<7)w1B8eit!W`I9hQGoH@H z(iQthfPs_nN|w7q&B~HS90;&*>RHb6yZG10&Fxu7SIlc3J7;Q0O#(YVSl5pgNLerk zQ6*`_f?pUoc9f>sgMciJn3jWecSoM@OZwH1eJFw}g!|i$8*R|)1j7Jg!AMs5k0#_% zZN(!sX5{TK+@=MXkR+xB=qucmBp4YX)8dGf@NK~+Kk&Pxf71;|?hcXSCRLW>!3 z2F5To1t!LD3n%Be-Yr3b2i_#N!c=qJazm zOfNx?s9xRDJtQ$7w3*O=&!f#$5I`tMkzpLANJ-KFy90+*;f4zGZbbVLkfMJ^0g8qr zj~50gR-^io3N<6T4z-jeE9TWatDq3K9Ar5tfB=X09RRQihXB;W5KHsY6Cg2hTRsgU zm;z*DEJp;6c{ImijwB-ENCxQRloC9;9^fMT=zqk50Pt}X1PC0GJQg|b@&9p5{!>Hx zzYL-R^s_Lv!PR<{fEe+wS1yC~^l0JukCUG9_wm1c_WyYA|69$#p#~JW|1JQrK4b*o z4+62aEI%U=3d`ddG0;IrZzuz#7@jmNg7K(044j? zaKkWX!_$MmZ4#7CsQ5Y;EkYC?F$6*KyyNAVzjEX!K=DuJD17L)Wqb5e`qGDlJzAiKu z1au8e#}R^2wkJ;fyvtDZ(gVDI-Uqa1w$;v7KLiMpJDcKoXQLLH`@_LIGp| zkc37-MU^EGkN);q0!AWc5>_&H3Mjq+@DVEb84yeZ7a1989bYuG3qvDi8CE>J2TS_| zek>3X|As2CPxZecu^1SsK3?NI_M~= zso0+r6Z3Mlw>7n#rPg)#8m(T*<-vw=IJ0zM!6M2&wN2MQGl~l@9y5f^gl!XSYc8mVw(hQQcN&_T3WbRzr`3}>E_Mt zcA8eXfiedcMXR$`}eARqMeF;qXI?}_20{CWyjMT$l2=pwWK{P6^EIP0`k zcQr^vZcmB~^#g_ZHPd;2U43%vFpTJ^6D7;5LFqLVG1Q9?dAPZF9vl5E?X$`3>@0UC z^t#o(=ZTAHIe_73(Qa;D$eRWI67Pq81o;vFrwqH_kuZ$Cqgi1xtL{^o+LdP?*VBEI zUmr%;JH*S``suoPm~Aj#G|S<_s@YuVzVyFpF0NbATy&2D80kP^8 zTeCsyklCPXb3SQf!x0Mv9C(D^@7xk_ZX$n>;8r%Sk|FJVIHO56)-ud7mZ25Q`@+zZ zDuL_(dnZ)9gOk#f$id7cdS<@s>8cYW{)_3hg7g%zLkuc&y2@mZ)*CyZq(Q_fZD>6Q z!YtT>I)FeGVfm&-iASp5SJs`Kd2)Eg)mEyBx7wpy<>s8zgI?2atto(Blf;n}c|fvx z%?mk$2CCP}-{qkz>@_siJ%=H!gJ@?$J`k)YQ%&%5-RkYw9aLXo)#RJkJXT+OsfS-C zA^w@%Ho(%dMgD;+h}8AjoY6z#O{e;SQzf$(nshR9#BD&cw&%;u9iFrCL=D-u!!oGy zwq;+K*jf^{xo-7Tc^t-3Qdr@p!jsP2cB+flhXZl>}>k|N&{nDyUN?w@J z0OGaTc)I39AWc6jx}=H3U&8IvO9@YieQCq?^@BW9OWa5{qln6_6P8hG`7pe^8rPK; zQresS1MT^1wQDUn>|V=wG-}GZDGX@~BMT93ZS1dF3*`Oh$g#3CQaYt}qSOcIZ=yuC z7}Nr{3ecH%_hV^PFeO6wnk->)5YKBDGq%SrZ3^Y8#HM;KQbxQ`=2ub=AuhQvIrlyW zEqwytk)>-0DLep>?#>K8e&FLU9nqj%AFAk=_aZsg-9mVv-JO3Da%&lm{zL&q~Y;e z*x>tCldTX@hG$)te6@_|Z14l`I+loetz%rDke3++Lr9`9T1W1NM1;!OGw_pZ540{Nc(UY)-TMs(oDqWr-gaZ6JLVyE?D?;u3$pniS#YT zi*Xyz^Bzey%0(f`Q=LP8xWZR{_B2wDVG!f5pK6;p{Pn%HYL2V3y`fLd!61c|WNxv~ z?16DFQ>?GQOGC++S&+v$U*Ymu1eCFtAN9aMW2D zO!#VmWqR=P?VHHJU;XC;>|6Hg!hxR6cO;-^i1ZI5X)n(#<^xcS9ZwKM=da1S|y#SRS9nHJm`96P8hM1 z+3yeab~t6rbK>_Rv1QYuWdw&i4F)XRHrBwtMgtVhqxtB(eMSI$Y=b}=pZmpwE7zon z%nw?#s?6_XWFOU6dGby;WUF_gWLZ36Q)DV*8H%H}aA+ftcjbm-7ip5d5iA+S4_!3- zb@k9*yzC7X#d3&s2#={2UH&BtKo#>tdo6c<@qG(Fgg#=9GH~(h&ANWGNQRdFl>ohY zoi(rcLd2&RVS&&ppSXBhFomu^i#4n9T-l#Pzg^$@iC1e_iHg%oKTqg!B(`6hrX^!= zQ!;j;Ylr+uHpu2rU~Z>|X_iKx`7QLv;4eS?)*Zg8Mk3Bk~ueZ=<@ob z*Q9DZan;QI^@#($##IdCyjA*)$F(`PMQ?r3ehy(VX@V5-v=EK33!CRJua(($wYp8L zkXE}HjF_liGrc$Z+D*!6sj~9rqBf+EQfl3rvs$3n>R#}Dml^1BXy7Ue(HlrZWt`U| z1b)=fQRN9Y(L{4eVN250b6a#RA=hpRxww`iz=9si;F&1V!9zYN!HwKou{fcCkd{;y z3Hvk%t6F7+6)NRYF|i7Vix?M4g?Rx#>{r*Lohw= z!bk!brZ)~WcuVwr_=BM2f-RVZC?)0?qg9zV5vbf$i-UOWMsrl9kXn*NNam%sa@4LP*b|Zo927~OeG2j9;~Y>u8!iPttcW6`OjIT2eA0uJ9Eqr#T^x{sHg1W{X^y z1RdFS_&u0d041AU>@X=q?%1}uKrGIcF#V_V@(5}do7hpYtZaRkh-`@|`2=&iBbJDC z$VQKwTT%#|d8{vXGteYra2qYZ1iq-}kp26y?2DFcPJ5OT1H>BHR zYQ@gv|9Ho_jx^WnteBT7)1+U<1kL}A_>tW$%O>nVaE3M{Gvlb7p&v&!jyBplEmw88 z&wzt~y1O+|xXUz~Mcq1(?JdSQ^tEl)Lj2ET1`^@@{d(a;xYtlr7iHg*T*^2)(KbGi z`A4Tm7j9ie@U|k$yIp=io|8u6V6yvWU86+&un-gZ?%p2+Z|}Xjr!@6WRdS+qv5CnsnnI`E zw(>Xm+*a{A7%61EwerO|u^zZPgr1wT{t!?s(|YQNA((q(f3Xb3(x;cr9A@;n^0kM_ z4C+n4zr(3}M?8WCnu-^B=4IGwi+~aX5+%}2h*OvR85!J!b;9t4h+2PgPTqq;-dNQ7 zu$kAwci1oNcS2ffslQJc1}-KnQ9ZbXVKAVw?2qdj_z!;#aBf5gmYEzpBh1t7i>=eq zT6n>61H16k?v0#Djf~Emb<7%Er#bZmtrl*902&>z^0Ye2!vKiHFb&-qQchU#rg`ss zl%pG&1n_0Bzw@FK2hb!s52Q_Cgbz2Qp0^r#)3L$7jigbutLEq4So6#B(NE&tIl_>1 zxI{v5HP!yjZ4*l$-Xu0Lk#$EVEbwuax*sv?dm-N{hg`AVI_X{$^FYX^0PSVu;#BX4R1JA_Jk%~_Re z&MI^RAOlOVFh4e`@UU;%13PFg-#YfVg=x>$Hh%xZID+2k+U$&w7#3I$w+9P}%p`)c zAcAU-VZ!U?D}qKIc2_=$(wDvEHWuMuMP7m>{UKXkLCxZZMnL;AsE?rbydHVC78OUa z76G&SyKx{h+7fIB$^-?qrBb@-V)P`O4z}(4j_xUPwG^=_gZof~rAhduhZjv|fX8K- zTtDeXkZ630wV+Yc74C7>^s<7>k5~osyA386Nt1;y3KoXm`g}mF^E?k`FicFT_E>J2 z1!2WOI7jBh^NQ^O+h;yG#52dU<(XGdjbrFP6J*;(PDn`NxBPzF?#U&Nwp)o3VNiTq zp|0a)w1VmKM&gd&_501XFNZn$v35x;Snbd67vb-Ya2ePFp|vz(oIV4Hu-vIk&c$2X z$-{ztN;wa^f3AN91%(9po&~uM?Ra%L#5O$lZS~Yn=QINU<>HXwJxta@0o*A4asDXJ zu@d)of1mPl^8I!jxQ;w0kj-wZlA6>Xco}O7%E;V1N$bT7-AS3PZ zS{4l*UHTmHEdMf4c~G~u7I61wg8W*XCMtRr6>n0RqVjxNl)IeX|E;-o5>6dv!81R~ z29}L z8?uaQHqDZse~vM2GCg3&a$TgH^wsdgPg9-K7PFqcFPKepMydPNu;j*!oCEh_&iK4D zN!RDPE8=o)$ZJdQUqAF_*;t3(blz+Fm-_x3a4DL%;T}A@8mxqRT>8P#!3+?a%SbzH zW_zxV1B~aTL*0f`7Yp?isUlRRIT!Pl6-@Vk*sWtU9i9mHJHLY3rL%(}_aC_okP@Qm z{DtiH&A%*a@P;+ZQsz`;sF`!csI*YAi8lUyor9s0irPx~A1+Ft;|lVjieQEg=TN=L z@Mq0rXi6;CF7kwB)|9#t<{ooF(ai`-WThP~*wY1Ew;pze-Y+>&m$v+;Uv%!}XcN#$ zAO2=Ip825P2b1xaWHlgoZM1SFy`>Beu7BZ#^E#`#Z#$6>5g~J|cXb{exZu zX@+gSZ|Bd;OXS+v&rG^-Aq1WCZHUab`?Xh%iBTsBQ@>AN1j)~>Ai)@S^Km3vYOLNB zN0N%;xRY=D5!C&*i)Z>GuOS5Wb3SABMM}#LtQ{GN!iyds){j`ir^CKRl~d|AN$-wXVd8k$ zJ@Pn~aWK&=RK8O~ve$}(5(k-vMG+#dnPda$HPQ-vOYE{@y)WdxtSP~X7ovU2hE_bT zeVJ{`Q;B;5i~JZ)?}EY=Y!YYa24N{;02t(k=Y;<_ly2SW_(`GXJckrOYujezKoL?C zQt%(;PPJAr$L9N_%vrO{%99!8>kYEh#YSP!kQTeJenl6y%qa{Jp&Z!c=UjjcHF;Vo z)rK2Oqq6rEc2Zk}r55un@qJclpBT%|OD<>=Yc9sFc-2Q%o@}t}VTm+9-iYz6S7JZI z&pjt%<(E-Cr+jzUos;zj^OL8xKI-zwbzCiZ$metp z9I<2$7^5tnF9}I5tUG^7`P{!ialebqb=lo9@z-Jn)`K zK=wAKt{@?NRiB<@G!R;65 z*JHO_%o#pr)n6PcT(d*)ytRb2I4JAN-v*nvY@GwweX4M`)#OkwUOt*o(4_}$k(!SD z$Z&d`HV%;R-TFgtk_Ea6x`Oq>pHiugFLoG6`M%Y*H-&($9RPbapATynI>$|Y0A@{gwH+7j~2G=7vKGF7^(5l zH%uDRKaSC8c+tPi2tM)}bc?Z(0gM&x7Kq!o7p1^7%=0f}#*ig^@o7miC&D$dPVUh-N=cui zHhtiVaLl03K&UC&Mc{*LUdlGDU7F*>5DRDi<=i=8!eu3}#}l?lVX{O$Qvrm^?Njkw|XAG#lz4OtphootGS z3LZUwyEn2=Vj!uCNWZc6^T*M&C~I_BzRFz;R#E0RW(wz@f!@xVwEb%eo_1WsaA!4I zZ?@m@T|HO$ljF7V{w};uwK{;1#A+#Gz`>Wmx1IT|oSH*P1xNR6_SE}55s6Ogg1gW0 z0vfG*_WZ(pUDg6!Vcz@$5z&${cK7ii#(dC)w1)F@hPO#Z$({YIDYSz$r|} z4cqwBVewSz!h4dbm#-~qa}s&mQ*E+xtjm5;7+9Fq8_^;PIc*A;u8%)EaKZD+CRJCG1k`AUs3BZ(SWkyE# zBAF(jbH^fEr7?XJJ^tWA_DoMxGq|8QaDLc*WL1L=pJviXF5A#4;F&D?GWJMjhxnMV zDb^KbGVD8egsdv&eE)}gGNl-khoZbps@OA{XPG8msDAUcHJm37O?sknO!EPQ_aBv6 zM#@DarGTjJxl##!p6-rog{!LfV@!hk-|Hadrr~IGr?SeH@1Yt)J*`6VV!FnpPmlK< z@lS{l9~s@L`XnI`C4W7yENH+~e3Ouxhbg}dtvnYU>7?yC#zxY^W@L-*f(7Y_kqGUp zNKl`tDdiSHFw0F%giyuX0EfWg+iRDdt_mzmHKXAP$E~X5L63)@GBMun*qZ~w!BQL0IceCVGGhDr`w00vIFZ1_eUcN%_YFzv+t$K zl&jr}(x$m%uR>P82=oZ$5U^VXEjvZ1TO70bH0$Q^LNR2FN!|}wb~e?ja7xI+GosF2 zRv5KNp%*sWWv!YYP=6P9Mi5Vu>(}D+Z9*Fy939EAJlE2Qlrc8*e@ILD1*KRcBW~4U znz5qgpe;S*nL;yg&uT>?11Zi&x(<|^^K*1EjPXeFE+9r)p-hhjdN;LKgvS&Db5L+^-L6b~bEb|b5U#`IV0 zV1<@~{kX<52;*}j2dfdH6_-Ivn0v&gYgryDbWK6@tGdcll6A*4$cJ9_2Ip>p=nnaC z))9WFB~+UO^D-sbej{Fr)cipQZ-dhMmo}O6G;<;}jZV);sFlEo>3Xc9B8(%BBEApb zaewFy6%I*DLP05>A4AsbB>)V$V#}*t^{qxiDa2L0B$bADG>syT98k~ac}E6lrM19q zZS?uG59kR40XNDY<7xTunTi-~X7!#!+taVBYW(;kEh@hw5CZW+SDAd(q;uHl5#}|J zR1Y}w%Qn3a5hAajK|UX(^Wn`3vdWwPqe{3 zCTfoiyu1Yyzm@x+HNS~iaDS@*GD38{ZH9y$v*>6lt`pAnyLu@;x6x7>3T9x%%FozB%|NV7R zCmUCA09lPL(HqoZuQ+*vp2iw^_Rbf1zQd8CnWH=Wc1+!UL$9%L(--+dbgy#OnZM-s zU%)p0PAK@`PQRrLG2fQFDc<>Bh{{}Tz@t=Cjg?_kg-=nB_T`Ot{Wy9B+EvUuva0wT zlwF3EiKAun`|q2Mr6=r12qp)_lBxZV@enLVv5!@Y*$nYN zVIRBl2L6s!P*Od8PEfPWT3-kSh7m8ez&#={wQMcI5474s$bgtRyBl`SVIflT_UN~T z7QC}2r`%y5hFH~yi7zs-A}x;bL0r+Vzu~HztX_B<`!Gw`&4ukS@R+Ye$xWG#n0GS0 z30_`$#*OD%VC z;DReUsuU7fRNygpe5~jfGP_asjg=sLojRO*cIjp)aK6l^ncD9h>88Yb#l3P%F4OxI z-&A|1^ESUnT@IGUGOT16z%Ip33ZwLB*unyO?Nt8-*_J!4> zAB{VtA2;|!m#)!0rvE!Ko-aTFqJ|KT#DFqf7@+dO9uL;PbG&xhIM!-?kV?z{%nv(l z68`*5NwAGoQnkO!(@ZIAAusuN)cnxqOXhNOviRkpT6Wf-c4u*>2G)c)n_b=W<*dr@ zN!=n_7GBJXb=@7Jo<_)fyT4)jjv%JdHvz!G1O_`lQ$5Z4D`r? zu3t4b>rkr5mDz942#^^|qOyUL7e%uK~wgR^2;*j*FaE4{zbvXT`SqL03m^x`8W zqXQ>HOE({fZEia=HHhxoAgm-!fWntM^7$!6V9hNTo3Ow!CWCV19 zJ)=MgF~fD97*nNpPWnf^%Jq}aCwoY(@G$t`7rVkzmv>Ehdrii&SJwO7e;gG0d#ZM_ zB(U)Oaa6At^9{;fM8$mEjegoif3!IPb>@u9P!vrDpEbvRQDo#5SZ|S9n!%U+XpRz* zMdY~UOe8)#?i8hJ<%OLUnmtYS7;>{4bU>sYf z5-pv&4Oe}UU%l1`-_*16r6hY#F zuaBw`PTeZX{e$RDKZ>y>xd>scjm0HNNCU*E{5jR~sbRioBym%e_v~d}tn;>6dO<9QLCi)=osBZbZf;{=CT&{HhX*+I;3kY3qbCZ- zOb1buBMNilVkmH+3kLI{J9go2JVu`zWYwFru8g{EeK}X4i{mq9#(&ye+8hPLBfzXC zPfJ=aF{%`>_1-W=7Tvue@urygc(;n&&eCophU7w9S=eHGW7~-2RuI1(>h|-(7B-Vq(+jH1^4I@Zd?C%#9>iEuY}`1q_tvX_5HqEp`51e>wRXBbgsG@5Fu`-|h{t$!Tq8AOC%43Z zbo4GeLtsOpV|Vb~)8_P}{}P;E$<$ZrsD%Txe;{u(<6F^vPBgjHEMI4A{O9t|3Tb_4 z=HeBNH36Z_jY>SjHsJ6jL=bTl5zs0&KAAJ4$8rOnc(h%Tu& zV^TifLqY@i?uJiKgu8f$bjMHDL~GA!Q##i)@$m&$H9V7+YF_+V>U;mByVN!?A?+5rHiS{dW=@y zjJ`khIPpAuZo!D_)7opD^QMMoAp(96miQ}7f|(LEF!m5I?8p>!*zpJHlwzLy_(JGlJ!`~Sjux%z%y&}s&1=&h}?}2I|2r`OZ3X& zkEhoxLyo!BebKH%mpw!&a{Iy^sCBB8t$v@){yuwmH?})=n!zgKmz!PM_xnNmPizts z07gazk1-P%7;Wi@Lk;5db&SO75t_w_$ML$XHrkz zgwnI);APx9%m-gq5!Iym?OmHluJOp}{kT@X z%D${M@H4X3Qry%U^yq>EBdC9pj{J0i(yUz?I6x<*MMZrf8nprUptL{p!>A~_+9l6L z1>>}NCzU*`CS{co3rBF0mqc5|LG7KP&8Evzwo2h?>#o;Gj0Z=c)lJ*V;i4huA|dSn zeio|3Oq5-=Sm^7e9AO*I3e3A1eDqn217+D}So=2o^s^sI_6wdyF_iT`-R+d-CgkaL+<*!=Mh>IDW<0wmQ809Exzp}kv6oz`XvU>A0kCJXAUUP+5CH?N6eu2 z;ui-;1S4?966DWzl{caKZP!R#9#M52J6Q+ELQMtJe_xqiG9x~vP=UkOLr9sxt$s3qEG&!@z#2$+X9whJaZ1S)yx58sRW#O zg&8aJ#e?{`tuej&`ympATzmF7%qLT)57vjp(JBw)ZzCOcFOxp&k%uP|oLH_=9Zi;fwiDNMKEtMWybvz& zQkSh)V^V9JhkVRqQFreavf!Ilym}8e3-yDkX(=ey+G?}wV$=DRtw`DLCeqK7u*t@? zWKIpOP5?f1Lp7=t-C*SK&>>n1mr<9JU%uu7mj=bKXote(iVN=#2(tBa)ssaggT>3W zp69=~eL8Ahdzq&24(Rh}wVM%%=l(`?7sXRi1^6z#GwC zV@sC2`w~yi{WaORF&`HPWcFE9x0=(B7V+%2rA^oL6(UCVtMMehI^wkhz$GuWbHVL( z)k7L|S(8dx%)^FedLE`&7&9 z1mVflM$0_YjpDJB8wy_@2JduT1PLxfixti%G5ugwCSn{cry~fPF<28QkC6!%(#0qa7A8*+s_#&S~DdyT1@gJuETwGnNud1l#C!(P*WAvR~ zqwE}KB}3ivre0d^$#}9y_5K+Oum8;Y&avp1^9d;dW^DP70;lxX(C4r->z_=1ln*kk zGeQMWrg$Rww@aY4u>#*-i9r82a8i69Rii5mQ-@(G$M2y-E}c|@#7+Ie{+Se^0<`#~ zJmOepi<*s*8S4ojQ5thN*@W%eR{yEYZe3md(bT@{;R^fij-Q)xLiW7)--= z%kj}KO`DbY6<5NA|3>a@$;B_voaec9BFlR*L{o^`2X-t?oE

  • %kq5 zF7M{;Q;L9D@p!@RbF&guaPHO%-b5O2BlcchQRnU|c{eIs}cwvE+y`M4_ z5z#12b(Z1(o44pSUF3?NWw?~0nBA6D+M0)T5!Px-*N?p^gG@)}!B0yXLz}+le>BAK zX(LxGWi#<3R0~X|#Zbz*#KvI3_(E{2>m@+JKsr^&K>T492cVOG&*f|TwOfz5=G&{1 z9`FzuUlj3#b!gGzeE1w;;OAibL48T4O^>ziB^Gt373tNKV=^zlPp{}xoR4_rjyi*Q zH3O>C=a|U8zYr&XNbQt_5C3Jxe~wK9w_rSr-6F6Zk68{hWml2r2ad%j-yZAhfafd^4Y zj}ihj5kQW6cDm@o03p81qm@$W%Q(Pdtnj@fuboco=Apg^((Ik2VVL%Gm@~0d)*6*Q zqkl{l&Xhi#aiUvRo7IB#ekxQ_>Q)Y0P*@Sivb;xDW%>M%H^^#~b{Ho!zwl7C7CYz? zYNv7{wylLZCzoF~h?mq7zTeIIn1QjX3eDq9ux;vNN{4Oj9njl?`l-pkx93Z)-b&+Y zo|>4-=}hxnKzOZ^G5#kH(GIy>y!Vr-i-dLsC!hKW3wWJuDN>@)LGu4@9Q9Q)MX}Z8 zS_7te@_ojo=bstKBkvs1Ug5{N#|4zz6giX&cp0bk3o&{hr+EeKi8K5XuAB>LwVwYv zm*CN#Ic0R`ZMpj(r=)J$+;8SnEnaJ66y5IYOVzc*pH2eT1ov95X|%kQaE_RoQK=}M z&BRVOU2+eS(1T1Qt{mL0Q6$9_toY)Spm>B_qI#+y{>+_(-htibz;%s`h;Q=d462B- zlz*cGHU3zotUhI0Z7Js`^hbl(oAq=YHnnu$Z!`?_rErUK%;*#ybv~uDaXLeVJCa{O zozd2;3tvUEpoIuCwI(moESJ%kd#?s@$*@CrO^PsXA%}c3>(Kq;gZhHU)6cj}<}^NU z*$ZZ(g9rb!-q=L!ZVP%<^`eE>@Rv8e<+^}-khvk*{&F>GvcagmU44&yCPO6r3HmmV z^1PdYwV|y;-T9IyHC~66`q(Rarz%xFZ@ct`kq8HYPxTB)^F2yQTmj-Rz~A&iu0Ni0v9#ZuVbW+h%Fmkbza`G@Xb$9o5G<6KLcQ^P{wgs6F9HE{f`|znj?}CRTB@E- z7cJEp=JA~m4Vy$~%iCk8j9-t)!g6k$1yyzhpo?T%V1q>&)dR7ey(lJ#Qwjb3NN4EdQwMc&E@3RS>otF>VN6S}syD#)1P3GvsQY`5+) z{)PrpFcgKuWi)BRAIA&etk5&jN%APWlqVkj9f9{k>{38vk5_DJO1y$PKoZ2uWTe?P zJ2I%gyr44FM`Gbl!1wk{A>Fw+f&5!K*! zeG94**m!gN7IG@PzPaKPN7x!|bQ0A2L{_af?hcDIKB-fMZbFQH$9qhKJ`%e|!1MKzM1Nx0w;>K9D4ntu8b0=OwhTral*CcF1*UQj#1@hTA zirzGbt9r!ftogTvld@~SMzTbtauWSL2Ti0Mdrg4!l`5Gu7oGP$L@$RG`;1h1XuB6?6V(VMIh=?1 zoPU8)tRC!?$P z_8RyR%yrPhcDRd$VARF@9pPnvF}1{ylll;+(Vq@$-|v!P#^Z2;g?)^J`<&-+WUZrshR8ZzyyjlD_y?+h&E&*w7p`yh&OY#NjWBO3*hOn#xvM zrs$m-_(IND#tBa2&*!7g=PQmNm9|KVNW?g8;$M~U;c$}by5(k_nM9;`-4z@Azg{xU zBsAI5-KCe2S9zWt2l?FQiJrTD7#p|PTkH~j5B{!6QS|h7*LzJh#OUX6oa>Y$InZC} z>Q#{kse~d4taFSgLs7~wCVd_ybo~r3=J}1<_n4w4`Le*}+gVmm^1^6x^SyJDw|^){ z?KgyDVI3vBwQ7`sd>86Xxw{8{gbVU_?`Gb0!9_d@@E zcBodlM+R8J$o6PJ^7%TmO-YJ)vF$V*GupywJWa61rqa+;Q$vGJOahnp@m`b$47|Yg zdq@mOFw8X(q}JiJC&{Z1 zl$+p6lfU28PKWYEs;Y&QY5zM_1?Ep$_uP!J;NXIL0_4f`ms11{itn+zM>g1!O^xp6 zqJvJ*>nQ6hyEclsq_xdI-L1~%dnN87ig#;{O(>RSII<0TvejmD<;?yHdo3y^m|m+; zx@xS?3)^zJKXUDcl4rlA{Qoia&e3sxU%c?dcG5VF)7VL4+qP}nw#~*?W81dT#!h23 z$vf%yckg|(X07@6%#-u%v-d|QnIcq%SazA!BONC}1ywVL|C^1=cpBy`49EbA9Cb^lV?_^g%3f@2z7`7=1MjsnXNP{;kj#oUUgyXsN^J!iJ;fvtpAk$7Sg{)V@|w2j&sQ56;qWYNJo&@ z$^wX*%;qJIV31U8Qk8RWz}00?`yJL0tnT}}>{ksz>g*!jz46{)-hD!ds#K71!YTEs z?;SE9Id@3TT)rIG2a?c{Dv4|co(ZZpAI z@yjKwKwThG?QW}=Oz(?XSJ82;dzw4nIjzZ}zpm=UsUhg)j09(Wjq?{|DuL)YAovsT zdOUo>-Hgkx=I&EFT9QI_B}dW=ji@6x2yoc#>cgkxz~cvcj1t)|;3Po#3h5mE*f1aG z$SjfT)&2S+bl_O`hInI5hegVNHyc6R&t6{1R5^Ypmu@rrZ1}cM|M8vml~k5T(W>aZ zzkaCMrK-N3w;)>ChS~}!pD2M&IR{fHR9F7!0!c7G@$-JB(kGEn2&oP?kAbzkwn#Tp zZWF}r5GkbiT|`5Nv0#s#81BUofyWz{(ffyZ7s<2{Q5kh8qjN)zAoJ}qWaY0qrvCr} zu^A`gMb9DkZ?!FIuF~pYNCEF|1_&^@!yM%q9;8>6HP_D2e7b#9xUW*eMAtlb5KgYa z^p!LVyU|Mo2q2!i{q{s9t}r_6zc?PHAfI z*Pl{L+KL$XKK+EUWSgrtT7v{M|0orJx>H&!nU`6M6%?&k;F*Wh*`#&gErh zRP+(D|Ci00YC=<8ppS7{+6caHmEAH{LPyz7!TEWWvz5Wwpx;l9qV6s;F4|N+@>T8- zneUvg!?3!N2*#QvdFlxxayydvNc8F34v2W^{7vo9SGE;g9Dr z(_t3(4P1Qu)VT>)g>AAwFvxMP){(yg!Ex^F0iiNV)nED&QZz=4!w=uh!;yOTvFt6H01Xi+@ zWO0K>8tF~JFX~=TlHncrzx4wxaw2)@@$?~p@$OwQ2VKTj!bDV*UhcOUQl&_&rb$y( z{0lzsu64stX+_2PN7d8G{|mmuuy=Ei7kHn`qT=hwNubnLlWW@4;oL8wFxcEgWx^>n z@z?ahUoE9<{<-1UX)2NCh}8B7(3L#Lm0zWFnwpk-ax}(ql68{*gBsdDxwyRMYDv^K z??Os||C>{WXe{o+&l3+z!*eQ~uRMCFleGNkLo)Wiq!P2&d|C?A9D`FN5opihck}JB zHG7!|3G&e(b?`f73QxWn*!p{3%o8#y6$uGRpVL?4?%0HJ-qu77cXI&!Cd8%>vIKUU z(fHe=CE9&CdBdU5?l)w2jc{vq`i+`o#2+bkNEK#dtmIFZ*?F>0_ZDUyyK*PS=ql>jJ zxz$(q!wUSey2JE+Uu#q794++d=3wa`ZAgJ!6pVE3Z2t0$Ml@;GK+RB??%(N(vZ#+j zt|K`d9jR0uoWyf&TK(j}oPOpU8w{hZl{2cYH3ZF$uy1ukAkfx*cMNKpaXCWh6Cf022~Vz2vnhZ4DiyZLko9T}cvpIy!SF*Ko5eU4pH7j2!$D%lgAy(KMD4AV;n(rA2=UrD$kpAR(aOtfa3k$$Q&mNqsw zZzNB~o+@c~gui*F8O8rLI1t;}RhJN1TbcGi@0IoWmC5)(-)c0I>m;llJi7)^$YGE- zp53f0@8Mr7rYrt=l=cI$FGRfQ<(g(+6#gLZF%bW`NscT8w&<4N$~=OT!=bopg9|Rt z#y1ovuYtq@y}H);0j`!_z1Ne7HBw{zz&)d1-7-PO__vBad7aYXkXh)-T=pYed|0}` zW~3kyb0h^>be?&nQd1Mjz?m5I_WbFVZS54=;}g<*U4gU|8~J~y4^XrcVOeS1BW{Kd zHaWRP2VGYH7g;MXp*q}&%sDfZA7E&Xb1&8`BqyvM?!XeZ&=QKY!5P*BKHh)O0$HcL zt#8nS6+6cj@OSR%N;F&5s4SsHoI7g>NA-3o(N=8@#~cp>^*D zijyNs`rp3(bWs9p$r;5o{T_!5$SR|+908%NuJZ^2l-T2*|1zql|k z)J;6%r5=AsqR8>Az)d7CW9R1@p2C!{t$@B@-##Csq5-%k`QOsUh3CDK$=Q8S?8%I) zT0+G)RNw4Q-BxMLohA&obiupO=`cnEI_JJM{!Y~sXalIzf~ZF(s=$jF7D|Ey2{M=d#tTk0(X;%^}=Oke6^8ttH=mHE1h z8M&TmtF9p&bnZ)PZ z@}gCw|L3TN(VRkJWV{!9o^riuCU;W%4;L8%t2a_I%-T#mDTlS%jTy{Cp&pL)aq;f}>O-YuAHIr?_bx;;Hhe{xK~A^_}q zV4Md2_q@N9{)d;8oNEMyV$a6r@uXMS!1a8%x^VjbK6p?}d?K`PW^zPY{DlI9OA#|Z z*~hXQFb&Ynd$k{}{t>VVz(+z6&p7OmYE|-Zd9;;9F=T3}`*S^8y9W3gkZ1tdhgZ56 z%lKk{rGmIxa^yNR+8{D^v?vNk*T9<9F*4)7(DJ%@)(u1($3c>H`_LBwaG_Iy_D5=R zypty#4HiebdmHp+n;Tue__F7iwbph_E2_utF?K!t&iY{gVGO<1{|{q;1Y!*L^Y%By zWVp;+UCk}^eQj-Zz@&)wy0)%nBEqjk^bEMTOpM)a-L3z0e6|PTKpmfhs^xdsw;jFG zS+p(o$lh>My9ZUXHMUs{088waSPfCCA}~*434Gh$6JqIL8YFyx38}+kOyX1dmd z{HyZQvZcpueX;-pxl!mY9y??y((BOnGzJJGg3`k}at!$-Tyw<6*B!l@9U-E$TP_#{ zJcP)!#D6doe$%eL$57XcxlnbOeLrZ_BBbgoeCX#R{}aEdH2ahiB!&Ott+vW~p6+2IIA`d!TIeIV*Y3N=eMR7?LqyN6kFF|=OCr6KdM+)3xJY!u9_vxDc-ve9UDvb zm1{)DH&`8By3!(sEM;Gukk(RFN|MmAhF{Je-A21~q{E$LarcMl%qzdfdDc!n!HVL? z6m!b``CmhmIniJf*;Dn;03>13DdwvH0oI6#tX z3*>4vPeH*RU2gL-!i;pmed%p%~*+ne5a)q zvd&Db_JrQ6a9Q8@>9Hb5qK>Q#l`;AAkPV&ki|Yc1bsltP#sZ{_--DwfmW6^)I!@nI z^wQ##F-?JRJg#oTVKjzsNJ~L7$_Zz$0EeKoymen!tHjR|B6~`BfyS(>t*PRB;{#*; z<-YB#91Ue%&qsIb5Z7)Yk_bxD=ItYd*@I-|?ioW|%Jcwo)AQyuN6QtP6LoS*Y9X)E zXvBkmTm(?@_qkJSo+FN4bsGag>s0l=j&uAJFlFaBUeK<{UV88#A~VR$@0mK-&JAgN zUADv0;CBq0!aea%ktC}|U@MuvG^RV30KXZR)4GdssHfT1>}qxX(IV78^dReLc^RED z&4@K5^WpRR78xRUk*VR9&~oAe?8^V^E=4_Af%Zx@6%6&g%S5{)Q9PQ_dH8AqZEM7M zW#f<8SW?alrEj4ZesePTAB3l3#2EyiC+t5i7GUtZ!cnE3QV8U`sYTPc%rx>9p$l~} z6tZlXSQ$ROvxV^r@r=$Om;T(dtsT3Nd`a<}FCH&Pb}4#VFEg?|%1kAsGxv66;`%)Z|B z2qXu#0`P(R8~DiW0siVXDk;?X7-050D6wqhYL`8D{oSqc^9~0s1FvN1_Xv;64@O7) zhq^a9aL5wlZf6lmAjX8v+cqBH)MjX@6@7|7DKjX8U(@qmBM7eTQIbXOw&TeCX_@y+ z2aVv6F{Y9m*+o}vwsct48aB`1wOCv{E}D)rf~j!+2F8fP2J8mDSWu(xBB7<@)VwR^ ztA*6N?s%?|&SoQ^S$RUPyxxp1ppE+BjaIUIX!nJ{;C{ZCzyyHL19z$M;Mt^*4c*`5 zmFIV7p*4q_!o|E9UEMai`PQHtDT2d@s~LGfQ#}4hlcP zWW3?b{^0&kwq*8PB-I(&-XOYB(R`upLkT zuCgJ(21)&BxTcoOKUSku{?V+SW7Qcuhqb%f(kCq9vh_>G7;^~*ib#u$=j-1rU6wMK zil?lR*f=RI+RrTm7lRpj4TUD36P^v@3Q^64!C;CUck_srz3B9_cGQ zJGSTTq89ECM_!jVWnR_f_9~jnM~okh!6=}uB!m+wc-^~_9r(4fS%Rdn|Ng!w(GxrdJH8CV>sKr)`m$MIOlYnr0P@wUD`#+-X zSqC@fA;kz5V14^>iW#NIJ}so??-pA6E;|3y@+&hg`S)hKLbYuzVY*;E)1y+^w62;) z5B`^}G(tz}l)T>8Ajom8&^OkLXx`(UL@BtJy*JC*)9#sMLq4<=h6#|F@v=uqUf0aj zhh~~f^Uy#2x>>7}{r4_GuEk*@3tVTST_tt+FbD{&-Rt@4JHIXjb@&Dd&xWKDqqwuA^+DvVI z+H+ML~asO3)z1a#vBQ^*(M5_d1=h-}{Lrh~TWVk-N%m{vczc zx?1LMsGI3ZexnxJS8AMaM12L3#_u#Di^!THS*lb4F|A9_fUhtWaF5LEkflTYUy?$) zrrd6znR4}g!}xs+U=B!aUdaXNs|_T1EHs>qYw8nl!+p#%rlvLGJ|9UTFY;m*_p4rL4e*w(Gw9rEcfg1L(i0) z1x?{8_6nvcO3Y1$6uT8R-aB6SiHsUG5HpmCQJ;J=6@^|&~}smsW?bXKBBA!%AYq?Z#!VP8L!jga#Av4Dk_Pq znvi}GdPb`|_nfH2Syxpd@gS1LbmyBm#wn1!&(!0QKmz?QkD8~U)M(!A!WYc3{TZrJG(z=&V;2SC>D=CEWb*h%;=|ZME8XcG5 zAtl&<=SyA-qL&=RNn^4hN?zVPT1|r0SJMY-a_3I{#C)o=#n$X-3HKaC9 z(C~t?{kEbqZY(~4q0)i=Z6p|^4Fv^}Xr?q-)_kVcYwQ;FvJ4c+DgmFmfj9tJHAP%S z+E6(VG>1pt^5B%?d9SSTh@a$$UYYOj7K ztU```{lz**f;n5vK$vU@whO4WdQUd$yJUg6)psV_FlGCyl0cmF8MO| zrXd@iWrw7g#=b%$R!s&)MC=w$ccoiqa)|eZf_}vjEo1Kx`$EXw0q%)Hv2CC2^znyL ztpZ9-vaEs!z*UIRD)IFwO@3$hXUD>(?GwRm)f@VFEk(FzTJ|rSog0S+b_3UIVJM!t zDLVDz>m-E7i>(rF1)&b}W&xDo88TPJpAoMpN+P-O(zI>eZu?ZU=VrFTbn*@G9xWMj zHDR&dpPkibzycu{&>xILoq$&0i0;qs-pIDs1QEAWePM+wfSX=`)Tbfh3sos!Nq(I> z`YKKOIBX<>q)Q(k#Sv(!Qb%2$C?76es_CSqY1>p6-hk|tPV}XVe-Je~KYV2babc0i zHk_*PN`1}#=Y}5gtajEyh1jU2Zu^_1go*7)-yLcixF0wXnbbzxQ|oKWfLW=jh9<7E zH$gP~^L(A_@4I~wkNmSad?*cO+lO`K(a=+0(y#?=%YJ*q2kU;1`k^7(X9K_0Bfn|ttQy3I;ME};Peo)vC!P_55%!r^1&RcuK~q%7tLB6&lSnRx&^Io%Iu8 zj8JQ7^Es->t#VA$Bqed7#)J>Z&@3#@fo6eHNa{E*liA0`BIv$0DdN#LMAlsHT4{$4 zjtN7A%NK5h1Q>K)i5>W>y#06niA>Q3w6NO?>fP9f{4AyasU>& ztw;tY>-HABRK^BIjX!W8kBzLicT%bm32dqwqrzTFvzn>qrYfuZZ?|95Gt8C@2|41T z*fZG_H43;h(&h)O*W@Ic;=^KUUzr~`{UH(#T^GkvQ$3MVIz&Z^EzuDhlX}xqZ%eya zHs)DCd#{VZfM?nN#_QjfH@?aef=poHT1`yu1w}<~#VzHcf|INn$zJ=O?WM(tA#$`v z2dc|v%d8v51g+$*xn`r(&&z?1y2alFyZW}Wo{?1|a+Q)%GF%p$S$->tUJBHB<)L^^ z^fOw96BIvE%^%TN8dcJ`Eby~93}k%ch+M+tU5|1K;>mmFkIc^dPP-(`8LPafDzwGF z6+~Hk-hFcLCS|14(4g`owEF3+JGCUvRJTG@Z6gol{}LYl`|3X{B$w-f&BGEwPJ07^ zLbaO6)d)V^1^UXU7AV5jkW?0zm%BeMU42o04NRpV@$FnE#AHF@_#skSC%JoY$D>yN zEt#;`)LxP&Fsf`2a}Ukhts|(&Xi!Q~=K%61tt-r!J4u=WJuf&{Q)OG`smBue;KY&} zb6RIRcQe&aV*>ojg##jtUt3dXlqR2%yusGbsGpA*jr?}kIxaXC!SE^>WE*jG#%f@S z&Kd2$=lvU)%CV%{_H81!1i;VvgZBfMd|_m4n6Y!?dF{`h33ZwHV_H+!mpEhhFdEx$ zPOoT*D4;+u9b#bayEAfU^){MNfC}tVM;de#`Gn@ym{5p0bzg`0MaN-RR$0RauZx3T zJhdM~&@AljEgvK<4DYmK_4G+KvFog-jE~N??DvzbE*qhvy~QkeeTSb3=a;Xj=;E_a zMRsf6$Z8>M2l->3_(BDu8n0N{-%T#sUbsuB55Ycr`u||zz14A*2s!~pfSn%gnm%5y zA??@;tqxg9sxW1QkPi0u9E0G?zq@v52hi+hCjLU|D09bepkmZ*K~1s1ba>vtjR#|t z*-VJyz#;OP(wJ{PJO^mard|4C({%v%M)ZVwFGm9pBv&L6iI!0!>a8J>0Z`Hz+PByexZBZN<7}Mkc&ET-`h#h892C?~7$;QUgr_0-J0j1J1w(IIu zl5X5#1le66wj0{*5R(Eha-}K^F?P}R9v~VuZd>X_Bm{3re>u!FJw0}hul6VvfY+5P zUE6)bRlg<|g-<_eQZw}@CZtO~(^%y8u3=9!_;_Hu`BLZC-bx-5#^QZQym0@suFji= z0}Hw6+=M?(*Vjo%;3>5F;`R?n@>Fz`P9!D$#=rAXjCwvM)gJP*LTFKR1x@|e&B>*@ z{#`(mSu8@Vmy^ib@wgMLv54E1YCtyI5VTUdwX7%xsFTM+;Q(e1>=}>Zi%A`P2gxWC z4aVOd4Fe69=+1yb$OOK?U&A?Y?;|*@Lw~Vy*2^IKrgNG~9d}*f2+HOl{G7c0_+Q6h z7Zv&X5ht3Ce_e}EZ|1VI`0C-(BrkfH=_~AfW$6be&|;4O%gpv4kR%73sD#xHCUh<2 ztRQ=>N@|Z^NehD?z6ZTz?ISi?YjDw_#wT9uRBc0C(-R-3_DAv$B#S|@$qYaPt*lDWYycx z+GIr;H2#nnafQyLPZ{V4cjIp?V>>k<*o`3T(tp5?9Mz|`M=ad35v4s{=DDm&>!N5ue<&Nuvu>*tEoTdY+yt+N4=`r(1rv?$LZTG4 zcd9?4HexjGEt9zOd9OHcjtA^RGsDA7Ax*FPOYJ&g8lfzQVGh6#?cCw9+q_El$r@ln zEW(4q35=sveyUj$FORrD8(y}}U%EuHaF!l@HT zGhsVsh75Di7Q%m2aMl6{gU*?50I)kL5qt4F#?TI1E!cEhSe1IjZe3$XK9G%u&B*UH zRG)c7i*pLi7Vxtj`w{`Y2vMd|yVD%ldNyOR%%1&F?emE}n_Zz4FL!cAb;EORkCkO~ zelW@)!m(#sH6zjJ2EeHa0FAu5KgCEB78_u;?eZ^YFI>9-9c{RkOb!4N*e0g62$o9f z{0(3%3nwE80A$9XvES%;>Fc*Ll~UcuK#(w<4xYlOlV%;P$j~4pmAp#lHA}i>C0*3 zCqT0k4W$-NT+A1{nc!Bn=Y@4~ytTEDKf)4hvQ%7=oDOCFnd!g+Zl$p*C#>cyW+jp7 zxpS5ar5qIy8`HK*p{p#Ag<#NUIW$7*_$ObyvRrb{wmLj<`zyHz# zWrW@mX;={Mb`T4dy2B=+7J=hRwjNmu?$nI@f9DWTKQK#LPAaOQWdyW5UFBPCg6gI# zADU!q+HB$#Nz0iXKAX48MC>lP3}VEPaKQ?hk@_mf-ySGREF8hK=p+hWmE`c^WR;WR zvshjrFdM0<>hi4rb-D13B)3Fynl67TNO-+uA=W0~p6aVF&35BN2uYh4Or16SVq8Kl z` zWv&vOyy~s?efSvE#Aj+Wo+RPI=R%V%9mQ@X42gY+l!;)}OZ8i%x&31grLo)W3~=ZO z*Z)QqO*nov9v7RN^)@&Y?GKd<&7UK#++t8=)=x{TiG`K94e(jtYE|2(zGT$MyOqy+4S?}-17bROF zPfc$v%}_wMu)4iWgS+BRjy$`v#{~+Uo98UPKApms+c0(&@f(m~@4+&F9#6FH65enH zlqsYSsbtiSl<0i{^)}7W*?j}4u2X%fEAbB+W+c;yah5MF*U)aL5+O#lR>x=?nm;5Y z$k|mpVr4HzWMZAIzd<}rS}@uHNF>r3jO~B z$CNdzl?w{!DFQ(OW&7AG8l){Za>0TjU0MhqU=Ax@`ZRj4vd<+{W%a$bex~leq!DaB zifXMto$F7_E?a6hk#~zZ-C>icr?6lRSv1=b%s+wi6f!BjUt)Xx`hacKZ6F6%tXVaZa@0pWexTGne^H6 zW+S5v@1^_G3KDJO^c;)j39gEaP|qZe%dWCt3h6gQSR%x>K8}^1-hHC?t0ftcSFM=k zq!twX?WR_q?2~p9MF$D-UTyB0`Sse!Aq2h^vS`_6ED}mn(VaBAtqbqV63R>W&iyaH zc=vv@>|zGuZek)zjg(7?!jLscsEU+Ym4s7=l&PXKN7b0Ik5u4Eui^YVH~;lmdClYO zSa?H!^yM0dUP-7`J z6&Yofa5eQdoDv!ekBoa5uA^-%A$}TuTsQa%80}--M0#QMHW)s~HkNr3=O3!I292$R z6vYS8^~F@wD0xpl##ZI&UTUPa0ES`heHmO-_qn%T|DO zoyT4NA#gcZn(&X6a7*tm`~O9`Q`s!Y-=UGQK&)=aQxt-b_Fz5|Y)ciW=31)Ogq2+{ z{LE>L7<6DBtLoCP3NO9ngZ>E@W?p*2Qj@N;!>ph_+jTH$vL$PJer1NE{{I7;Fx&JXH zg^D(3>_AnD&JVLYTD#7}BHi((>$Xgp=2ssELPm$%*g|(M@={N!*NCJCnb_lM$*apU zkut1iFW(7#zgs)8C!8SsoNf=Pxua61G62rAyGxN z=3Ph0ogsfPHio6cjbcX<=y*d&;2kw{d+vM;} z(AoHv8W;(;w)j%KMfqQPxes%KtG6ce{g&GCp&RY)c(oUav{Kc=BVYGpYt+SkmxD4J zo}PKBly3{lT*F+FVlN4a0=*cPbKwk<&J%x=bq3;Wv0L#6Wc>8Qp`*&+s$pz?yB`f7 zLeYCwLM~6{yjhR4?XwEQG9W`bijGRe^tfy&tk#cKYxv!nxzfJh@$=fAc;d)T!BNe` z33e>su&TKd@sotg{4eWhT&_`j*aB9*v6X9da-~G4`KyxZ>6@4C00{9JkJz|%&hTgy zMS#4T;sWCbF8`oYae^>s5nbuu+d8<7`zK+iB`Z&FH73%BDF);773-EvMM1R%d_+GK zBD1TxrbXzz_SG`zXS9W&vDlx(Vp8;4Bi*w74t8+IDT;YX;;r`@$Q4>S(Fk`>Gjd#b zUptot9zZh4WWZ@C^S;i6pI}8;1r`0p5GZou2rpp;t{PbSfrl20zr~n}N#{2_2pn7C zV=!1#Rw(_>lL36{(O>hK=2e)c>gms^C2$2i6SFwZA7OICBek&3kw=}jzH}PK62CVi zgjsHG0}A-0dif3II+H#;~}8w5N87{bvCEd39qzbxT;T9!@e zH6Y|ZFBA&KK*RBwIm`T+GmBl?TxziRrtY}1Q1k2M(rd>;ok61MT)+-`n7}9?tn@}_65eZ=VoFb%4apJ+K1B5Lc0+HpxE*L+ zU?yFNiIW{Ghkenb`j|1TVv;`dBDy`CH=+_=?3Kb;m8a->WGO&}}un;)Of#`?^om3suuBH zHL|ERHU$X`+XG&!^GOc3;!oV_EUp7}*KdvmrZ}yBz6~MdEc$+C5{kqP+Mct(ntF_R zMuIb`nMSwBe7iy>12z9vND$IuQ2!>o+8D;EVY9CsTbM(~sWW~4cj+F_)bJ4gSgmn(h|B5a`jpi@b$=e^0wq+4k_+nkx zuDN$@8&p`CR5qGW4QNi$H{^gL z4HW%xxiSaB>q=tC)ck!V6#k<7TEMiWqBgZg&Jx6wrq>U$4^9103awx;=TDx$om(Ou z19MR1=-RXUg`&NR9n=QB17OS~W!3=_ZxCsx3>G`W`9sUcm`MwmA@T9?_V(}VqwC@G z+wX(@qvt~p3a}WU*M;#L!4#C>mfGW&yLDR<8{4U8dp-QtR##E8ncoBO1Dh-@BO{ZN zyr{}F1OVRC3wJ$IR;)@;RQqw zyagftIySrUWOg}@?|$k<6pOPxx%HTgBgL`6S%goz-8DV~M&Sl%eX)2Ikm7F5t`6h; zQ>N|aHWcv@yS>HuBlEblb2?xV8UP%q{<|JwR$Zn0hp-t7gnv-}o``F+DVoH7m$pSb z?Bf%(Qcz3da)B=7$bsaIxjR2!ZUC4#;snDjB7v*34Qb}dLJRhcH9VSPbxO_|<(v4{ zBZ%tT=^O7m^16uU4Z%@VbGCWW&?(gv%6(F6n&5{2eoX`EtrTCP=r@`kIaVY!EMCK> zyq=1n{o*EE0=q8$>i?b5`iVb+z3pbsW*3+wu9a6FBTz6Bi5!EPxTtfy)4jC z$|rKca0yLGKO1LzWt7;3Vt<$fDys&f)Zajan8yb&Ix-4m2Wkx->2Hn>xUS~sWJ;2Q z3q`!?SAZO7}j7>QB-$Xm5}0rae;7 zn2iY+8t<$v6tfUH`HHWS7)y!?F`wj~ls%u%6n6BFck|JVuQq^AM?SK<-Z2}B9)hoB z=+38bIN;^VvuQ@y5KB}^6rr5_5-VPe6LLx+Ghl*2*g8OdYHf--T^DjJ{x$E|Fz3aI zkSij_W~0NE)|o>m%+JxIQ4IHO5;b0!xgN99bfmlfa|HZc@u$T=dI&Znkrn~~nMSlB zRimNgbj?yNrLk$N8K`BANnv0M*Pr1CrM$ZRTOIOwVACoUeeI>uqy9dph#*}w4HXXW`2O0Ly6>xoQW+GFz@ z(Gnn^x}SDA;7#EMMmQ5I2e=pC{JYKcbU}sJ9u}$DYFMCNj_J8kN~=VFiTt$4c4?|l za&z;VX@#-mgG(1}5`>cTWm*br^IkH{w|S611Y2=AM^<3hVcX8`s&HimYv7JB(Mr8g zW*-WkPb73~VDI~~FFiv^7~LrFC-YlYfA<7@|L?uqYW73<_rMJBAnc_w&8H zw2Xm@;MsQp#8Kl1$}a{(yORacbEC3%P5i-IDKBW)82IjuX?8&Z3Dr0^i=3I%Jrm!K z>&4Lh+TvsQApyW<5s2!c0GmY>36XhZpii%^wD^r2lQy=B{4osmEv%brLNm+VMyuyONsF9?6f#o|lg;iQSOAm`1-O7pY z#+&MmyKV~4ZLwe&BSMpH8dl@46@@eD{6NC&AUDDG7JpcUE?4ZjKsA+8%WH&V@W0cf zjM-1Rn3QaafVpwIl z6Z2@HvZbInz^wvoUcLj6%`2tJROS}Y0rHQ*Hzi1d($KuJl&|YcB;JH#JiTwxB^zF^ z-wFgX*gJVi9AC^U(EiZOIs5@Xv)1)AU&PiqNQ>@i9g9WF_&9c}9M|;d?+|UgsK&qZ zS2TcS(lgvO*RhMnI2klIG1ReJI;m+nIl-fy0w+CnS|>Mg7{$}esHYQ!wTz-hDKB@6 zER-fu6Vk;EmBd7G`%~=6P2XL(Ty=r-MyB@0@&spNrRR1C0=%%K`#)L1ziby29{i>P zKwj*ru~RX3_Yk>0XVaQ+hdq8Ld8Nb58a)moIqQ`-rs@8@;(po8KIbN<3d^mzOEiSR zbQh1IU3xDLgqN30js>wAa&NETAen;qnzjH@9{~hKxNRKCg*iU+W9OX$$F$z#F7-2N ziEjRr@Pg&)REO`N)H=2?t34un$KA3cWf85vfuKY6Mq(vK2_^4hBSqAD_~Nc4e2|CY zNTM@|AY#As!9Or;6zD=lR{kC7AqO{=37WT>0d&C5b(%NqAq3p#9;xGs2(Dqb^VUDR zBocB29kl5BH?ch=XqhQl-68-WJ7CG?33si-$Ac0igLr=jzeuaIRA&8d+ws}|Q&X)h z;vVD-s3zg;GUD~^dR&wOy-+9G*w=4*)oL=jjnAv<@QYC&?J#u>+26+R)+0QSVMO6!2JQ%Yo<+U3^FfJR;v92{=3+iz(Ku65&uYTKz3Or27 zm?DCB(%H%QKu9e^2u|OP9yqYqj)KceA)H(G{$JtWW4j-Vr5{;5}a77_Rw=E@(y=7|s0{`1#VBl&=> zcH}{H_3~ZfRM6NKKk^YDHB83T@l-+WVbvc2y;9}keQ;nMH!RL=v%iuexWphQsyNli%(AU03kIfSMCW@>_X{ zI0rW8eDvG8Sts*)h*eq(rT~i=`_R-LpQEPeeQjmAf9k3i7wI^TpU}am8)LQYPgj|{ z)ZW3L**_`@7ZM+4r@k_yBm@%Bg$t+aHqiH!I$qx`jp!1|DU*vhW`h10B`jLSPYd4k$1EJgEA=@Xz&<-L76qJEv@yf^-cZt)vXQf zEyN^5lnm5ZtZX#@?K+^%tf$|mYISto92n`mbUyvvT??g;{15vrT4>}!E&Em%dGQ0c zd0oNZ@yQ$Zyedg*oLqd0b;?Phv&SWrPz~w}G`O5XbgwgwdOW?(btsewM+8>q>T zrsSAnv|lvvx^6O(M0OfxJS zc!5LYSGcR*@csTn+<5P0s;DlZST1PjI2%$j4xexEx9{g>tJNv(b|7>6HLE|u^-YAx z55whu8|R%(!@+vS1al{LL#jx~m(+8>WE51p4s{l=%=WYKd5||MhQA~k$VtvWQhT($ zq8KZ94m?Zg6*VkUS7y9mQ6;#C4SaYp!%+Lx3zodGWY)IYUO{M^!P(VR%3;aDoK%hE z7-RJ4B-ft50?q*YfS8DY^PDeA3lNQ3EZfX$+AbcZY^sgbo?=Yzcm44#FpJP&k0ksd zPDOCN@4wKzPMN8iPygo1MKbTIdyIbRpnApK2Xx%Da7Fs3)5U;yE?zCpmb!GOiDk6G z=A`3gn4-9=aITUMdy{ zIP`GC-_`|eoK?(8KW@jNO`^u&jq=ExwY*$&$`+bNZb}|mc%YZ#6UdR3r#Mhe$=dX7 z=`q=6vdd_h1V+LK-II_e97r~mMF%dGD)XxUpeq@{zjl-Uj?W(I6l&+JL$1;Pbj8 zos#mb?M_Dv$&>d0={3D}Fw)%;f#nqoV^MEX-)%d#`1aW4jjn9TZ(m=OVtCG=c3WfE z5?$Hv?4W@yW78(*dNJ*a4!k8ZH0bBEiK>rGjg6K+1KX%>n5L`r3LLHVLmHF9v6 zaW`RFHR9&mBn$Q-Ox{{!DkUSV?=uo_Y=3NRPNx(FY%$CPLdXUY@7W#S4n)V|05*rB zjMeonaOD=|jfVy7Mn1eOoC2KB%xzntmf<~jQZ1HnU|R5VkInGLp*w;xV}Sq5^#ENI zD!S2{sii6ij1G4X?7M=LcO6E3Z%#9W34Ep)mFh4k@4Fglq?~<^ z-~_jnUHopfDdxo6%O5I=cn~j3J7KlhF8ts#^%GJU&v3+hf**AEOZahOTvi?!2GIv4 zc2p1Wd)E1O0TVdjah_|>onIFWizj>Hd7=!HnFrdnBfbkiKj(KF(g%dB=uEQYgYm$p z{(nS$V{~27*7k|f*tXf&ww*L?Y&&Uewz1Qov2EM7+1TcH(tGdwjb!BfIDgjIS$nNH zA5DMs(6rgo#u-`q4<=tbO2|gg{iQsZi zM2z!QT}=mRBS(Yczx%lRFeqtee-Bn{mu(S%Le-pgSEVG$NK1y>v?X9u3?td69fhYt zf}~JGaaIcFr2a#h;IYX4BIcCEV&}#40*lTq{1=ptkcnqCcrgE4UJa`Gf>}~}4<(Zv z=gR_g*^#$1t*Vkl6oD&g0If{Wku-Nw(C+{v)R+MYiC(#u<_23`W|n``DS*oc%H%bq zXhz8;@__vyfC4oBqTq7feYh%z$T6pttoL1bDn)WI;QYW&e!XY#uG28inMI5Cxz63o zXwc%SBYFnfGR%=LG7^Wp=15R_%p^zPRxcgARfN<2J_tQghmUsjOE}(jJBDAltrXc| zP(*JB&^v-0V6G zUztip$T~#(X$7^{5>m)VIMv%7(+RU&F8GdjvVGl^O1e-nQ683Wkwu>VPoe6G(`(0E zFps=Ntz5Rn#(kzs%IJg|OQS?K`8?|76IwM@6okw%N|soAX`O>aTInP?92?RZ)mYC) zc?IKGxfl9A&^FDcHojU~*Ske)G@CLT0LB#mm*l;Efs`Enf9QsvXg&HH6(s|3ycw;> z-#woDcp>8&mINMw1yAQc(Amjn%aF71*hD~GH35l=!5Uv-UShzz01yP zHr7)+Gb>5j417>>=U0N<%Tc1MrUMArl; z-BXRc%!ZpgW-+|-tA*dBMJSVSU_Md1iy=a^*5^@q;E^n7?yOV=g@!3ReZ0E9T| z+4Sv!(sJOG;g+^OB>>JUR7}yx&JWf_vq+2x!6GwZ_FMLx#qtP+ zwBn9kG>h!&SN?k6s@Q1-gSb}$EcC_N2=8YGv-!Szy$(Fdguf9W;zCY#nbeZUrCrO2<{8r{evF=XJrxASkdZ+o1DU86ij!t~k z8G9qK%^Nc^i)C~MeW&f`muPauCvLL^Yy-nZDL0Za+16OXcZMu%5DlC}sAMv+vtG4k zNnXCr=~roLAkOz%s1WTeez&LqvCtF2Il9jKjuip7;24sk1GA4}Dnh6jdLZ99NunZ2 z(D6?p_U~pa;8vP8FU0a&#vjLuxLuP+%Pm9O-Qq&VQ}7s#!nrceM*S##yv)+`bLipI z-rPh_3?$H(Qd|!7Mz!er6NiOO#lJmJ?#-FYx@!J`9g#ZQd)&cfZbtAm^jp9r1cbnp zsW#>aBzN=aoWe_~On$1F(Lh~RX8x1b19j=3&(B{tKHn;NCLCUvS24n{ zu%gU$UvLKGu!uBx|M45Z6E6pdCV3aw7^%qu=Lpd?*VVI1v7<+}Af@WnTG%+~nMH@g zIX-yYB;Gejdf{}MCV&A6c%|x;6?S{bNAtO0ANpkQ%VsUNr<_MBUM7cPcc`^w? zWGH2>ES5GP>~ua^4aa&^jmdWB{1X}e=mM(oaU_}Urpvtgjhx^U)m>_F3kN_D6=^NA zP)Oy@zyX4$iU-(ZQRI5EGl-AK-x%pG@_%PagNaOyC%xTyU^N+AW7{Hf)s4=U;;2SskD{rU!8#@JkB{7 zShp9ee;6)4fxG{zHUt${lXPm5u_hG(msbTKlvo2)?KOSkL(o4RlYSw#&ZoTak6piO zCI2BXsY^qT{z;w{fS^{w9hfF{Mu89Wniz`kJ>_FI{p?15;G$+9ajG}8N}ar!>G)Sf zJs|Y}V67`n3KIuK@1avG?2nC_`h_F8#>b0*_%uB~Rdw?lJ8e)rZxta$XZMB6)z)-V z-BS>jWNn=)Oej<>bw<>}pjSa}*{xiSGo_C0%`v@AkT(L#!sm{*LxqGDB(k}YLP1S7 zmjEGZn($zgKG=3GZj0y1OWAU;0;9jidh%jcOAXJw%2HmgS+Csd$Qr=vOd}2(BX<^) z5E)4fy+3+>E2E=(0#z)wg$@pOrTR{mt#F-$ z_K|mSufF_av+<(K{az}b`0QvRjFYcu0~@@Yk(qpvHO`g#UJUB;C zLwZ#3u5T)43z$hB9gzZyJ^&d-wtLrqn0FtA#p7s!}re>FiPMN?-05b_0my%j6nCmGhrOIzUIdYJ}V;E4Y(OTeEk5sdOMNk z%A1Hs}4wlZ9h086*? zH-*(=u>d+tZw8H!uh0f{Z(sJ8o(8J7FT1`!y*h4Wa;IZN_6zSmzFzOoWfzK3gth)% zdT5kVe|~3i=Jp;y$SFxk#Y(qOn-T#W2Poxe1JAaV$l~xS{a80KPJ?{5LApNH1oq`$}v zHvNAGZoq;8fdjz5S)s7NPo#rLbb^+in(B_;rnZKb`etCDMH3k*=~pIfY&PbquGYrJ z|MW}1%fLZ)ZG(HZ zt-o7rz4qCnGi&7U<0$R34(ysfZh42nx4vS-ynEv^8)i{Gj}E@o`+FoQ^i8^ZAmq zkc`9$IDerOnDxr`SN81_nD0pEn+Ky@ZvJKK{9mVc3`?em!Ux-hxDi8%QJmi7c*sUy zt?n~1+&63K1hO6@}0MNK5|C)#Tbq=WAzBL6I3g5Y|OlxJ0vri41dx} zU%x`GSPApUDgEwrpXcg`uYHt9d=^FO%Gq-r7m#}M#U0I?(&i?J&IZ!4w>vF-M}*+4 za-+2O7%{|O|Hb0*$RcL>m$qrpHxbNk|Bg{|5-4N^Iw`Vq0&O*W^Q)sv*ta|SBXrFSvQQY}EI{8rCQ;6PZ#$MQDL&;eHOmB<>9sE8lPpz00rdaFo9M_}vNd3d+9r%{37y<8ECD7bhc^E++yMEctH9f_9nOVm5PC9S5-cx~#>33)e@ zSeAl*&~1I~`Mc^?rYCr~DK@P38-TU>3Yt?;W!F4N1U3sd-0(im0L9Gi3ii3+f8q{c zphe;-In(sOSHES?enk>|f-SGz5hoQqO&Xz&S?Qw<%@T<@l77UH0;hr1^ulVgJR`zn z6pqBp(;Ag*yKeW?+0+c428L1&zRW&em2w&}6&90F){~U{#Y45+0q0z2rLQ*)eGBcE zKS<+FwSI_o;6@HpGIKi;QlDCV+49EntDXuny!HuQ@O-}p!DOhDxexhetKs>}XHI6U zf{9_`Fy_0=X4PPuqec>cz_F$->@4aAu$1`c>i+Z^!xlQKaU(}jZzwg{VB2rE>x}y&> zokspfle;*9lW==@?4~yu6-40Cn6H?t`(war9>llE-RNT|?I&bCTp=vIU|Ra6 z9~>=tKDS3&QF;l(0``F0En_`oaT70(rFU&=U8LRx^BH_WV5U29VhPt;`)LuOTFV{l z>4m-_&3Zr~;2-JmX~sSXgYp7! z&sEs;-K2^@WKECYDw~G}>6Si4&kyxAL3Aps2$pfQP=62*>4S|gN4fA!ux~OnIteqg z3_=bl;m-<Qu=NBkctWb zKyBTW+1i#)a7Ilqjs>&tfT0i-^k+0SpALu-Z*DQq5r1+-fHMV=zvOcBo3Rml;Tl&zUkbx*UF>O z5#W?|ddU-f6}}=9iDpP2Rvba0Jf~Rm=$54VyZ_GMmaQj-g%g3E_ex3hHFSa*y=^jven)T2W|hNT&xaw;BNu9&iT@xX&__f4p%USn_MEb`LZDVq0=yQ)iIT%;6jqvoOIpE44-%@;{pbIg`RCc@M!fP^Iv9w;O6@bZ{t z2u9?a`j}C$t~)&I5Va2XMY_<)6r&6~d1x{=bw&IN&$s#-v4Za(wT6wk6F%yHq@@+& zLIW^x5+;TtFP#uZtr3cFlo|puqYcG_&CiPg7;aLe|0gg2!UfXupy;|VkX6kT?WVVw zaD~4H4us>{?^5%4^lw3(7l+RYhrt(vzq%W*oOG97A&YA|@0ISWwM>Z=d;^b}DSGy6 z(KREl15bXeIFvmRyteFW%jEe$zvS<8k`TE z%@08vB$1?*`!=-r=CaU&$`bR%1urIBsl&r0nKK+_+Ixh2TnBQyhkDx_sXk8&aS_K^ zkLWiz8gO@i222B=wwj|@b1ow}6`*w=;P`%U}xfg9#1mEBI{AJF(7YfcemMg z*Njt7}okXW#-9V@EY)SY#WQY@(HLSV}zZGx_EAsunb|IjG47g2H)B6tV7SOs}{dR}g zXJYuq1V`d?wX1@7CKF9T(svRJpWeFVn>UjMFiz2HZnvgrJ)D<%Hhz%BD>wF!{bn(| z$Z=OVrMbXfL@_9zGCU0>U>tMKLL7`n`MEVT;Dyg))V60MEFL9cu9Q_^NH;+kp_2Ly z89C-wKhqziOnrXavvz;s6%R_S{u&n@uW(vth*I{oAmQSUGG~c|6K!Dhq_6=z`++2V zR$g_~2?}@(0qc}ck1beIwrw9>&(%=UO zLu&#liv9Da*h1XeBda6s!IY3s)(E%U@+1 zZS~nNYtiMyGFqEW!r-EqFSb zOh9y*|LW}5FEm6TL-`~k_~Ul}+XDM1rv%&~pATAh*hZN+KQkMkhpQWdeZ|VI@2y@J zlB=xZqS2AZTd$~J?8; z$-JR2$)QzL9LZ)thi721%#Y8QQG?CbL@kFjLB(lH$6oC$;Y715#sr}<69&b zUE!(>EcM?qU3X*WqF2!*sYk63Ch4O_xEk@Tp59*~2|YoHEAvd-P$orO0nVnyTn+%J z1C}$udB*qFqHue-pBr~9OYS*@&VavV9*gP4BB8ha8=mubQzvFvlECacVEYt?m$38o zpIr%B30Db~Z%WD#p#>C zj=NNS-aj%5q24k-eqKqLzy9|5Sz4!$7<+j4R_QtId!F+XgqMMDtQHxNU5UW3e>1;k z;=_;kqp9b`Q||rr%~#@N`Swk1+W6RqpkTp?zkhNi;T7~#bN8wC6;vEvK_oA~=LL>` zoIurk&N2F0Pal6E(s%##)xW8LL#Wx^jRSgfUZgfEP;}PU&mVR=WMoCbTftHasq+=2 zl~HchgJ$jAT1L3FGyth66@unM%pb+GPt>WoMEyuARLl7RU94*M%2RF3NYTOa*Eeii zE@&Z63urlLO-WrJn^|jhzo(7N%c^>miH>y@xrhWkYCg5sga~=QPWHAmc*y2M@&ROW zi2s~+K$Az2hMH8O!+;WC$u^f{ZkSB#yfC)0xCl+XGX-(t^hPjdEj@;M!V_m1zvS>q z`qh!AFpqv><5}ipNT`7J3Y)!X&@NCCN_T#gZ?SvFh*IEMY`j=!4a~kz$DYDsN~?NS zc}wQ}hZ?MPWC&Ox83$C06!@!N9Ci{_<1H^~z|eB{59@_o-sd1+G}A~NJ;%yz{}ltB zRe~R3RiP)>w`OUH;@?d&rYr1|B%%9nRz;V6%hO~~tlfckV{-~n?JHPjp+@c_TbB)h z(@}9CmQwKht1k4@OZpT+E902wu%K^|vXUb}J;Q&|coyr2X?eNXfroW0UVzyuCf!36 zi1RWp^83Ia&h6HF3cpO)5z|!HV*CO+e4IX+^2{r~zreXXEu^)3S`^6)mHsS6go{o$!A=G&4YC;L zp7R&6bjKV#9^@>035Or~7+7v>aMz0~yFL89%5mME(h7f`rm*=O9lUg>P$|Dun%8F8 zfrlUPCX5~Iv-R8S>hcNxGClTRImWZ#2@uv+MEk2ZsjU(7jw6zme5>@W`5v%HT!7RPX!w4#PzhcR&d3K#bw6aLjd^RiadpMt3;jibg0J zsBEJFaw2SQQlXCXlNCx2MIslMyx>|@y$Vgb3@$flV>ss5Zn_Ami zKCK>~w-b;yT`@-y7*XO80cqkHS6g3le{+vW%aSJ@xPA;pN<@j*aF=%oa)~A!;Q_1Q z-Os*UV6SjOZ6A9JIfiJ(giV1Z$7yydam6#uFwojj;ss~LDa#0 zb{EZu99W-I0h9%vvtrUfyB>+{w(&h~&05;7L>F|@8VRRwY@f}%EGZ5t*BzYY{**Tf z38}GNhuW=%Z}!PX|3%oA+AAB7C&9@7uIa`g{K#);{#NUfz?xlm`<}&WM{PpaUR#E=Cf1Us6Gqa`|vBR(3XC7G0z&^Ia95vx4H(STzog?Zl2ymu9)Ko20%l zm4>BVZhps*pc-yS{}3%2TqDcKj;T7NGgK<_;=|65&srVmQIP@zKwHg5Na6C~^T7(1 z>XK`vhOK0YdQ$TIJ}b?lxRYs@)(ZdCE^(46)pRT0X3)vo%3-Fiaoq~J5Ob>Fh@YMcYN5TBhK0AjH8ys=s4g?Q2{yRV7TPRu$5N*Lmh-hd3f(l zEbt&zFfyzd>~ov{+cSpRiRu>dKnXLF0M-<3aSG-jUP?HF!I|-1X7GVP}Dhd^9ZCF8AaV*BqHQj4;H9may+^)A3y1Q_jFqMM=N*uJf|6Dsw z=q0kCLRsuvX*5Ntt-tgl=(Ka}+MORpjW$nj?V|>XUSCO9aO#~d|naz`( zgB|B@w4h?DQWxDimAt>1QRGqS&Fo4)P&f@}ZjK9ws0EIwc&6iCOzhd_va^61jDM1R zV5z&a)Ie^86%c+(cUypIS7ASUuQv=1)*? zXK!{s!eho-o7Txy@T&?vF$p_cP82z~Cwal#DhecokwTy$_hD2UKW4YRx7ijQMR16> z$L|9F4&QruYkK#*&ZmelBiuoAfC}~U|1W(w{GyTE>N5Zvz}}N55UdjWBwv`0&wv|e z7xwTT<>QLXCUAZ6iupFb?7YcvN-T1{a)}-OW*K$70drG@GuH5}`(65-xvYgphTHF~ znfQC13Oy-GUqF%TbXbg0Nhq;$uKFotnpe?p{>IG%o5Yvph|}=YGf?lVrakeb z79t@2SRKQ1-8Nk#o-4amDn4R7hY;aq85E+3rLh#?uyYtC9r56)?$+AT>NDYHOZA0T z;q1j8mODv$6{^XOp)q}&g_9F6~!i%7X4 zLgIJwt`BlQ(wE>i!q@scAlANvMfhRNiXFp|mRh$S{{RDKYDZNBjiNc2vN`NJ@P`f< z^7q}R>-c_*vo-8iOJ9dy9p+@8ldZfbRY7aCA0bk8=klwC>Ak!E6D@3wgz7l2&Ac{f zc%Ri(mbegY5MiD(egIE!Yjksy_BypFH-iBIowu7ueWmFtPsH7U2u@diNWBV^t#2yV z%H~oRH~?sAYX0Qk1=ywTWq#<-vpCoCJx~qIv%q)ml1dR0HYDz-VG#$Cuz5 z{qDZWiY{%|KP0YfsN3`YBLLfY(h|)E9)i@IX4$^uJmCY2jkCNS{hr?!B%TJPj28esc?J0+W{~%8w(f)Ki zF)m}J4*RrZM@x1>M9ZGj%^X{YG1_yr;qlO;(inpSUI8p$kfSDmtc_s2;ETH#R-YT* zqDp$ z$Vdf%f>1{$75JC5J~H^2$_<;fR8tmbF_ zwTKr`cvVw37o$?aZrOez$aCR~iUSLT-p7xvs-}*&>h-#r)i+GFrLWu^Kg1oxHV%?l z(CxfWW+K!8YalY^Ks$kH@0PgFdy46Oa1NJmS7=7_(B3M)2PNkg*BdsQ%7VUU(rxFgT~~VFKonz0ukIXSA~t7&OuY-KU478n=G-uh zmfDwxt>is!ZLuMajA`6up_c)o=x1QOF)y1|lZJX2yADjUEcTQplJB7PVN~&We{Q?$ z1Pt}v-(<>BELir{uG3kXI-_t+DEU}+@`@N+Ld<{Q^gqEcXOh0M&yGeNnqO;aTe&uy z1E1nDm9%T^y0$soCY(i=Qp~s(^CT0p(jkq;Qr!EG8CV|>@c7{!ocOxS^33=i?CFLd3MssN(uZE@MMf)8lWxZT;ZWw6xXUm03u5rJ&Q^X{TE#l&% zM0O3Oky&OioR1P0;!MWswWTWUcc3+)Yih?!zs1)^N$t;})5ZT@(+bUf!1*iB>Yol{ z5#~qP;I?JtXTLjUt3@n=V7(@7p=H+=AL4}+NyYbFuFfScv}8_g1`zO0;Jb<94^~(# zArKWqGFyuzt?GC*dOMCpw_*KielSh)ctow=_vM5R83gGcZx2jh4$B7j2l}zD>ZXAr zyg$8vpLUfmRyxY5z1P)Xk62eWNSDP&Ir1@J`=Z#+i^vd4ZwYI^XZ?n+A!&8|^@GDY zkiw=?MB}-NeHZn#_^(XBgeR`D9ZdCDUK^HJ^&0tXEw;;+8NB@HeZ^&PuuQ&~huu7e znP9(x=Ob!r{mlD-@q~J$UN=Doqv%G#ZULO7)%Yw~@NZbFl&=sYg?3c$r_BX)$2194 zGr(cK{~T|hJrz@VL?YRW1#H(+R$c;}ilzR_6g=jFgNPj-9vPOsk{YIIsbzIqY>2$T zfN-DQF;Ac<3R`Za!!df1jE~$3y$(cP=gvg}#04lC!W*zm)Oz!`$8kk_ODbEHjt z(2&Nsl1fvP!8Yf_-q$bP&cju_yPzv*C_kw`Z>Y~CNgxu&MlnCq!J?!BIM5Uz<2qq% z&J2)u>kwK%pDnH)TH$U**H@OziWvm~CBR|x*0f}8k4&$DLth~SyS3kNz0E~I`+8lc zHf8#XX6U?wvfjNW70QD%<|i?Z;{gdS+*?U7DzCcFFuc%UAFL{=jCnpufW<%)B(>Iy z^mYxg5wKk`Imo0Z5`CaB8r7%bAD5+JnNX9Z0+8U@L+iS8AZlAaXR`W!EvI^#Gr;E< z9RS<*Nx*!X$pyioab}s4^eJ#eKma9CSlt4yM9s#O$u*FjoRq2XqyrTX%#!EV_Et;% zBJ#ipW8>p5U3m>M7@IXm{qg+^6o;TTyg8Z+EPq6twI=A9P06a8A|{18DJ{^5*$Tpr z@!6L3iI3{{s|fJh(=n-GLHYKY0F^H~l+zW{Vg3qr&mz5HB&Isir-dPb9+H_o;M=-^ z#v!}Pxk#@UJEWvj{FyftIMRuN7}XOEQZrnw!m_L7`;h2@q>i*L66K8x*&qNJ>e|@E_*-&}LT+ALmD?K`Cd5$BFS$WmOQDRI z{Vl%}d$_QFFO6fNQgAZ)XDceBEJwVm_~N*g75gBRaK7@?CnIw*B8q9bl>Sv|c%Fgm zU5Aw9C$8;R!^}d@Yw*=;Wfn11%pGNWwN`Pw_<~ za%x7YNy+zmUY0P}#PJ@S8@!b({!s<8;8>JdP<0Myo5YyAd%C=5nJNNW<~)xZhYNHd zUv+X2G0i&r1Ie-2D-4B(}Sm`4z(qQ-I+q?~xvH?L=1suAT?DwJFi z)ZabNH<~WSOW2=GyKwsmb~iJ8Ee!oqCeOv>*J@`XG@wNqD=wkx<{Pbr4*f)PC!BcY zn)MGz_-_uTk=Ar%4T~1={WdqrK`iH>Z7e*_-$)@HWQtNYwGnam#EGIi$x2c9+-#)^z3}4|__|fSIm#Wh6m0xZ zM6@jl6p2B8{D!E#$nG_wG?(D?`1ajVPRG-zk|+#?#~>|WVOyns*b9Z~M6XEA?e-za z6u~!p7FO?2JlJhW?pK!OwHF_eI}w@w*d7yAJc7`AhNTvaMz;Oo*J^|;lOMm|*MWxr zDpiKf8|SDMC4kc${2;sr2pE*Jn<4TEy3v_tV5uIC?2%gE;+Rc`cfrGe`wgp1M}U#s z;a}=i41TrQh6|>sa=l)KTzjJ&y;Z5bR7frHmcE1o*{ErP%v~u@U3^n##p#k6guz{H z^$nIiI3*(S?_bvJ_%QYB7=teOMyRA?AidJQl!>K644-;WMC6@2)Y%QIV67>dKmX|B z6kTV0&$61eObLb919*XEnY?noeWn8ym0Q;96B~g;09+plh7w6DYQ9HSxoH~EugZj) zOvFAIlV3VzbgLEqHXzv@A%Ax)QxRZ|;Vj}PVG8!Blpu7mUecQr(tUR23n|!bd6yeh5w%!{_&~V~SGuA0-$oV&48|`- zp_E2^H#Z+}kl|Kp1)nM%m%pN2q1iDqomTv-P=bjFEyyWiQJ42 zprPH3Tq`~Vzjz#S#YgDA%yHGFH}v(Wd*<3C6;TDAL~oHpma7MX5oP0at#3ASf%Jfb zD3F|?#)%c0g9MKOv$^|hp~Vvw^p0cW^pzD=%A%LqgufL|2F*!VgA|>O{G6yz3S4MI z?V&o=E!rjc{oK?G^pkV?7h))wO(TV}IXeNI)UDIi9*qKB5jOTipJ1Gi%C+Z(UaT&K zaQE+BWs1nG^j$6N8h`tNB>G{G_lO1<3Gtgd>zsfNDCzp( zG4tGUh!<=9=*0BA16B3xjw{W>b%wzCx$G6}*wOUEfSW+J{O6$Al_$Nm9)m_wjQ884 zH9qPqcK+7>CViB22-rXB$#zfD#v&^HmR8Vj%D%Z;BeCY;iW@v;Ui;mAPZG7DY5!^6 z53qf7;A9uC%zi4uh$<={Da!yr0?5X)*i*knIS93zaXV>T9K-8;JTG>>=lRV2d{#;( z;Pbpaq>9J|{vMt!GOodyol;OY&tN2a?mXBzFq3C)lrf%nJ0j3rCToY!Hp{l{-)61d zxO&300I#37)+i8wkec4GTFqY)0D$Ai+2uBk^hm}-vA6=FbEe3n&!4DU$ph(^OgvXJ zgJW;CT3b#FZ3`O>bC0}Eoj=h9tRlEK*`3b}saM(7$Q@c zKkPlH77J>w5|95ic@m+v%UqYNi)rbow5XR(n&G1Y4Xkng)9+=M&@ev#nE}pa%6_}5 z1#v1gJv>869j77_hrElX;8uLQlH_38Jd=}HU_QG3#SVrzmUl%&D3!&&D5B#KG_yj0 ziY*ECH}mUaYicz&K5L#`ECZVkg&ljvK@8GxG~tcV7T3FNX}hW@`m(m+@CrF|zyznK zr2Sfhj_Aa#vyKUkYSoBs-@sj~)$Cn=g{ns($NV)6l;C$4#EtRECJuJYP+WgiS_@sTIg{C@)c)>nB*w88YZ z)p)4qO~6~HDZBYMvC~r9$`S5r@2UtW>xC6%cbH5>ZaQ5A`>UuiWKB6OH}+4nB+H!K z)MTwGvH93phz$rAkl&fON~QO_8fQ4GssS!(l45no@ntzJu+jv}u!tjR>eTsnNcl!) zq1ydRJ+d4P#*+jtw5jbZM*O1a&@G=$D)$|b%?1X~&;Vr-!MwomWpgLiyzYYPBAii% zqGgT+`QwNpHe$#WO{ZUP7>JqULHW8kl6|#}+yaD{D%2wPXU}`pSfNY_J%WT^Q#8Nk zR6U_-7f8&LJ&^=mhzn`Kc$PNF+PSj4DT5hv4K0g1lt}BPlhgy#+HkPOv_eaBB#o7_f`L(gbE#uhyF7WV(fE!j}~)0X_lL7bQr z8!w%^fF}5}nqS9DxNesKohYJaux;4|Qh+NPnXy5v+;oNFsQ|N(mJ_;5hA*#OMGm93 z_^gNhqypG7mCo}x7&}wpIh8SKYU4AyCuC1a^rFMFJ+0JPDWL^|IyF{?-&6H|g{C+0 zFgN268gO#-6>Ty9U zHWk;`1Wk|Dg73oybax8 zk6;b~+crY0vNdnLI%zc5mN2iKkFS4Xir8VkgvY?Kbxauc&vST6e;cMV(>_6NH}%Yi-Dm;0Wh>#j?>I4IBVy}w40f<1Mn;MfX$5>*!mWR2 zbM5YVb^>FC;_)?blI=NYq%;1DrO!YFp+YJr+pLTZgWFU!$%Kd<*fp1j3Y%ChU+ z*VuR#DCfmI?^ks%oQ1tx_$Oak3Sqv-4BJ;=oG4KX+N@E=m#$Win^Ap}yFEg`jYo4+ z{55FSc;)Fiqm?1D#W0y+9#?>3q=M6Its?pt=V%Zb%y;mD7Jfo#8qXkOuzzSWomazSP1~WB#ALEL*UdqE zo~5mDvrX$mJP+_fHl}n*FwcbV^N6HlD&3D=^rva?6$*INB4=kVE_1KHFiq_})$qxi zaga|Nci+uL9ftKM7U8b62aA-OIT3cL&22}{8v4UxlQO7Ak>+d$kXa$)WvI@r4IUFJ zcAk+I`z_;w*1tOq(#lZqzV5UPC}sy|mQ-F5HQZKJ2B9@=+^7`rS)M+hXeplX(QAL1xJC()av|ByD`k zJ_Wpa2^_53;JRte`t+R`i&FQ7G_Xb}T`}hwXNn?@3~}q>ka$h!{Mk}$$BZdB*B~V{ zCtcXJ>)iF-B&WwTKeeTvi=d1>#L~fJE?{WiAr!OvspVVzOY8d8g%fnx zY1;F|eA5lqF7|qGCF9>XJz%>7oQy$OT1qpYgo*}OI%A0)6Oa^rKVZu$KjWyjk+7Wg z%(fV&Rn{)>_%=AP5XrOM8`PIyYfJN|+h15Kdt%)kcz(KVvGKyC#KmBpYS>m}DIsSIU@4Wk96V?PqZy_(_MQUCky*+@v(dY~Y0^M6xAJ|RYk zl4#~>ta2(qHkN2_hnAFyJ%&>8jDH`*H9D$XbR$Z1ItQJbr{df1xqGL{4ZiY}dp_#i zx|2)%X1NzCxX=r(MMB&f!=7`|qr{iFwq5VMZ)cZ@bs%ceUKrQ|Bin! z6vN|OoOx|_H}x>VP&OlIf)o1$mrdkN@IdT7=|*)4mUC~=K!D8DW!xhtFk$mE);1~$ z!K;w4M0Lng{d*^yfXNkGjTZIc`ZcjYf%*ni);L5`y_b}y%CnWBP`+;UwtfenY8>5< z!dB*z)5w8g10LkmlBs+nPs>sF=qf=pwCkt5AKE!EC$eRcNU;?bp-@zJ*fd55je+qP zvQ0=kMH`DLi^Wux7{^?eC2$V@3JoM_l)6?*7!776k-|%8vCgSXhoK+Z*o&RnLdL6@ z4UIgS@)H(TJI@t3`d{tX@D$vH0lA6+F5$nON-?;~YHy8$nskmot8idz`6;3@!llw* zSkaUN!Kx(SoDtpDQh?@04~%P6RSel^x?M;m4rE%r*A_7b~}4_*MK%#yR8LIvv&k zMa|tjo?!3sZ?uBcGnh2?iLEj5V>fxDsnutS_GlK@C%X=QOp*v1@WIZLVO0`o{a+%n z4aamtCk-`1VJKrVLX~~o_*jE;N3cpT%^Y@Q>fK=-F8@U@0C35Jq{BqO;bgEeRpe9U43g)XKht$GchSC4HE+{BMU9CwE6eX@)K1{?_=JV z7zdO^#-n&bDxPRhreB{lLgor(znneh6gl7TU}awV);Xy*{aV7>`P&lG$AKlhZ^3Eh zAjloVgI@Vd^*FOJU?CRc7Vj0Z{~S*y{!pxu5?ztk=#1p$T2zmf!Z>(@bmr&kSQ2jq z)0H@X64~_?oWjWR<``*r_eK&WE9L3Dl>yqUn4-bbTG`ilB2u#;qHA}7fnV8zQ@@Z` z=kQ72YrjWnZl~_FS+q|te`b<@4%89^g&wh`O)4`<#)1X>(#XrMuTDbx@i9_O59?6f zj)i8_!pO?m@toOmi&ju0lbQ;#^L&Kb81E6KHHG|a(R6<%VlYu5_Bf!7Uf3PY{R+yg z6a6ZebNIXpL@V2>r9!AYu(2`OwJN6H*dYj%(4jHNgjjVRyu#}W$Luvif}~674A5fi z{<^5}vq(w)!cWeS!b7Ae4P$f>t|EY~(%}*?=|&j}ZS-5%Q9_Vd{*wYY1!P9}k4QzV zLPmk_xiJV~oK6M11@JY}AH}t8sv${R1LMeHK%6-ZkICQ*H7qh4Cmf7#e;IAPUoi3i zIFcZ?4hNqDM|~hhqiKT2!mE0f9+t*5yf7obV2x8RM`0lM+=d4_q0+A;a758F*rTMO zaFF{?5*0(@1&C$+UAg1LTzIBekY-hxmlsm?PEGp#6y|!XPN8$ zoeekr?d_WDztTb(RZ{+Ou@nbR7PId4Zn-B(ZxN+^4+@R+To0zfUR~qAL_p?wly(9l zixuMoa&B$2j2|wRUp&;PvGEM$g=f||v&xqjhkI+Irnzgu67e$}xWvcQwj7H{pk z4wNYDxJlt*_2F`CXJnD@G(tQPWR+Gqj&!(F&Kd~=(ZqV1`MI7W@0Dgxh(_#xd&}on zbbDlE%KUj%{98A`ATLAVwa)@rO>{Z>((6#hR+yK48KoY4qJj+CU_(l~?3olsm|jg{ zxcq4i9gt^=JbZy zK^K9uyt}__>?^`=lhIT*yj&ZT1s+g)nTi8^#|pVSlw>IhAyHIE@6N}7M&^4arioT| zxOil8U5qbXD7lFlE8-Rzf|fhKS0t@I+?v2fg!MvGkfXmda2v`hE*O*|mT&r;m1TXD z^Dp9=#0hJAA&EmjO;Hch)j~iovqKWD5YLb1_{`xYFzF2)pJ&R=LuLNsLjI#0H&S~- zk1m6NxQyxikUxP?bEA@%!JokGn#^v}v)u~EVdLo=jTDW_bc3KA^$&>Wh+T0^ZDN9* zGl&$)9BKAcOxj9rSw)vjERR#yf%F7=R*hE>bO%57P;iOIMPNZAk*0WzBv2of1T`3y zJp$}u;VT#9Bfzd-2(`A`#z9PU9H2H+$Wnvyt~uN&>H_Mx!??>>I49^qHk4!!pkeLM zO-x2Bt~*H37<50I5}*wQD7I=m<2*3gHC|Q*2&=3--F5d!e)X-dYq*P=_ZM&3e5^QF zc{d5NwTg9rX?M_;mQ`PWGYWL}bYVlVBMSqqp^9A?{}MZoe`{fxbwAPgR&&HEKb+O) zuzGfhSdizTd5;{Me^D)7HYx5ab>K|*_<{5j`u{QYR#9<9ThnM`!QFxr+}$l`aCdii zcPAkb+&#EEG%ms2-QAtwdYhbc{_nyA{lr+k$J%Sns##UjzJc2eABYmAM*Y6Xx$Nfk zU|3S25We%^4!va6wR-7+%y6qUFk&F1;AVy`)ZjEkGdj8@c_JjMbY0pY8>IF1(#lSS z3>WkT{&O8OMkXel4)juke2ITlI_oq@dU(IdgzxWXY9~9M-IDrNW}okg-;A8xuuR~P zw}(@sg?Za+0bS#!CL*85&hs)cTkK@awzA7hiV`Z4HWvu_hJ|9cghlDKCx7YwDjx2+ z&Ct7QT~ukqF4#hV0Ztl3D#C~Mi?kUtR@%UQYyABsGAKZzJM;2UjWPTE)Y$Krp2mcQ zt_bgpslz#2pAE&f9VOwS;k}yU*oa&S6f|j=n-aZ^q>Z^S3`-@<1=0!4DWyY7~ zNFQL8kRirzHEBd<&J4Z?eAug!zE4CgRdbONQWap4R(BBRTY+nAc+QL*?o#&}CR-&F zP;96N=$?;#<1k%MTG28!l3Kr|GkFn>uUdJqnB(@C_ZO_x~qTK**)w6+fJmm4&dadC|$g^Bo-UwAn+ZjOxi1D?TO&N z*2Uzyk=&C5xb|J=)#~iqDHS=%N^g-nEVvlYx5GgLpNH(-+gjC|v=$>W%gg0=r;)wn zon?}0AMs_V!WG)ot~kJXzB7(QPQYLQwv_yl;6}#$2Kms5J<{ zZh3SHx|^CU5hu2gP_yo~729~3PEJyORBa!O0SHW)M*Q}u1zBkRXuk|*ARZM_f_&S- zIf*J;`LPlE8P;K8!&`%^2Re}~UK`BUi5ou$OuM#6WU+c7B{TJ2I1zoP~jyDM!PPl z9WpMo@~%WXZB2|#yZgn8p}WE#6(jBFI7xPl$$QhI=CF-0o%D%pq`tKFLv)z>*zdH4 z1Ofy#v~9^NhsDIe9NL4O5r`4224yp3S>G9~jJHyCQyldM79CXiGpY~;Q|rD(Z?L5D z9*Y<$t+%^ry-FqQ^PFG?GpJBNKxeO>0>7(IIV>BkgFCC_hCtHxGp|+qb8jN0rTW}p z*Fl|eo?Pl$Hyk+bVgvjG8NH|Q@LMB zzF&Rb7H_rS{KG1%Zs@g91xF0n8vXX+f!Ej!$ zHgBi{KJ+uL#F3_#40`?${*%yPDuicY{Ft22pXBi@%`gW`&geFn{A9Xvi3#)Y(@bQx zm_yn6AseD&177nt8S4dY>Z@I(9=AykV20M|5_84Yo@iA^X;@Zj|$p3hP(G+fvyq(={1|vOK+QyUct1zhsck&BWa= z?taB0Z;^Br9SP7$+lrVOu?w(3jgBNXGJr}frXlf zcScpHhqCp!_xKX`SG$@__p^KD07fu`7pO-;;BZy{`2-WS__*Fz;S#%5?c5HzStq2z zmu@=*)=x|2BFY=2chrd8kR2d6QRw}lt!~NRl`=|@RsiUvio=(cE7iL+-?LQelDnH+ z-Jlq#OCoBGZO$axYZdE#Dq>r8=2e+0(iR3yoJ=mo`$@3_WAv8AC5o?L^Oc45aIMQW z(lz(V<~;nBLAl}1itum-{Obg$NOtYoG~lO0 zctUoDqpQ^vruKa0uDIOILp{k=26Xp-D8cX7%qj)1ZO*|p|29LSvRyp?^mp3Qi1;a) zUQJR7{||UH3@1|J3F!=VQR|TL>CwYBVmvFu(dIivoS3aC&wjA*=?DXZDRvx>vlSIy zHgG|>E9TC~Ir9j=(_4X_b}j+b4BZ8_l6nB&sUra=+XMK(7pAeUFm}S&+mm&UQ$c%R z1K2JA9U)f7<%>onwPP>&<|0z9>&kppH^F;EY^k4cv8yQ==zp;OCB1U6z_JmHj+>i9 zV4Y-ihNJ3mN#P)Xu(sRryGwzbMXCF1nD2FXu6iVTl1ZYal(68cQ9k8Yv3JFU;9mTK z+{NDbC2vI91}#KsDz+MoLPi-M+M(#1kB!`*&GlJgqrm0aTYL}A^;z_eOrP;f&NWBG z_*s^s&Q}P&s3m@XVu|;j!X=e1M82CpJ*^yRe_e-nllg8Tq1&RqD$>T=d*3@27B5lB zQ(#1$f%-*z67l^_1)bOm-I4=7$pDt7v5s(Fw=4LOY6iP`%A70z zDfwycgM1mAyOzX8{iBlJx?JVP_ZWbWfGb@w0B~d59hu>L*-87?>GD!ayUJLbp_MYN z;%{`Bzu<=YG}^Id`tt9;CC{Fhoq!vZP!}|VKI5q_p5$J)30G&Qjtibpas79SPp~j33M{4Yfhbj&WR4JBGkumD2tquKF!>W%_Kd@5z@uaP4-HHgkqCxcay_M6CG zbS~>)1F&6mb4O=Rf*OPXH^iY zJj`*Oh9Boa(&cU1&QY|_zISf7ce!e~4o5(O8%g5V&_=6D<{Cv9QKAMe8c9rF+-zW~ zQR}>93~U$9Ijrt_wb6dAGE?Sw4@-pPc*KdVvz!rVscZUW8}y+a0^JfHC~*0tw#?`2 zw?4qSfQK(4y-jH9yJJK{Jo;-R;&rek#){^*?3p$b)~1R#9=c{#m7#T-6IO^%1h5>| zv^Ra2UJpOXx>u~b%PZ0uXxY#)!D@e!%5o*}d9{C;^loRs+P3>OUujJqeOWls}Et^U-6_0t`O5iqB(4IJ*iRQ=wn_j;c!I2run65la3pLpefbriN?w^Tg_^+uxl4Ufwi^ja0F*c9#mYiYupHtb6 zo^+0eq3)l-VJ0b|a31#H@(-~cYmvFGbUMP_gkvm*>pZ%c&d}5tR7sH)YE$?x`_HUJ z;o73kedP4LS-bP6$S|DDaZfY!;%=5k)8uQ!>c-H_K3#do<+3ocRgGk*G^}=eB{2RB za6ZUeQF=-*KcN^TIypo3cNrWy3YZ-y#|EhzNi4Fc4~z2V>ChdsZWBagO=rP*gv zRBQZ=FLPT_Ic#sfrqI>fdihs9+x~ZhN2yViP6<@{O6*DC)@}IDd-j7q1AFf+toenF z>41nSz2ocH@1nZ0y(n_LJZI$Jy^96wmQ3wn&?)A_-*Ko4l*!j;19gaYf`X!9hJ9Oi z{}g3I!!h8fFQfkchGs2p#s^*n_Vc6KUkB+|L6t>4BBfIV505MuG22{+N5eH%h8dL_ zTU%4&Vo~rP3grD-)W+7X-`#DzqiMOoWIc%mQDd!@I+AjeCf(9L4ufuD4LJZ!O0MyTLcXMQ@4UJpleMsMvhavSYYf1(;CpOE$m3e;l1{tXz;f{);-H^|BT zU#3_T za}!s6Rv2!lTbsvd|M;-NaY>U!)}l#p0xn8(Jmf;NKIWHn=mjHg?J^8b4VYQIcBUTF z&8Prz@RebpxkUEc@xorZ4j#0OiLu${?I_AO9Vyk|XU4a7Is8h=Ki?S}!hEGU zrJ;3Dqf*2v8OcsPYi<6#gXt;isAbXVvo?GgZ{>bE66+^?-9b_X6lm|CqAz#QT?%aEu39*A>bMj`ZH=nO<^P->0j~ofl&f>E#s1O z_N*&D1Bl}qG~}EMwY40WY$q};5A|jw#$``|BSLiFKtT)ZCU3G2Kt zy_QVGEZQmxcaijsj{i{j?GSDLoKAhB5xPeicmZY#UQnsMOyT?#Yjqx2_;bMVNJ%#1 zIgW%oTKtP4)L}ikcK+5voifrtSQh5SH`S zw!c6>l3RO|540$hD4st3qg*BI>lX6@t^6G!)1D z1ajQ9`M2_yDmJt~hcg*JG}lsvKyyFgEC}e9wmZ*8VoGf(R%*G)w2&9RO@P-1P6|SU zmM^f@XbkGk%EqyUkz1ov1A50RtYqx?F3LH{zn(hjkD}YC5^#CaCs)3hcPky4BU7kZ z;-*u>@UVTQ;>5Lr|C_$H580vDk&l_21R)l zV44f>N>2jB@0EGM{-()4Cz($xP6V+8Ga()FbO-u;`Pe!j76eq3Zl@%i8j(<{0Rj?T zO_>#)J7fFnm+R!JXuo8}G+nKqBRwEHFOn6q|h&Eae{i&_D&PXmZ9-YKxX?4LwV|W&#`8us+wa^vI=TM9w1C3DmvoM|re^ z13hlgv>O9}ATeJ<*afAQG$^+PKkM%n-NMDV(+yQTkSj9kJHFmI*9g?_JiZ3wP(I5T zi3)gD8f+)QsH^bT9}mA{R(OVX&*S?e5t#QZd?bxCoNH4FjaOG?wV_`koa}rf7NyN3 zieJyg@bi_DEGILFR^P_O(-pqS3-ggrPYukl1#{7D-yv@S=VVWbSGVu+6bL!^lq>no znZYwO4}V1dN-w;SABlFSLy$BkuGI$=m9)H1LKTAl_dNx*39}tkp`?<4r&NH=C;Kq+ z<(zfG6EH;~XXXQIH{EvEkgt=j)U}E@BDC?_?Bkmlyry1Yztv~M+9M?9i`=`t!3=&_ z>~`?G_UPy+cT&n4;?bgk-S+qTpQ_^;s>e5@R}tLm8fVB*HE3jZtS&yWfCyOk8|bWS*%2mkRKgJy$OJ zic*h%vWb6c&VUWI6UzRXEKutz$6yHi@O$``gKqMpzqEF2LUP&YSo58ZB~=H`vFMUJ zr&E6NgtM)E`v&veVlGQw>mg&~-YV^G>oAhYjf-9LS`=-OOh0x7>vnHU&mqIDo-s5R zRRK1YA3X6%i|kjjOL}g@J{Cg*3sWd|1t@)Joldd(S&l@Mj*ms+RBT~z9Q^r3cEh*hC_@O3zy*JwlyjFU)qWsu| zVnVkm-V$g(}@@7MTTu&bt zJ!pHBHh|h^Pf_5LxbxjaoN=pS?6xJXe`R?o)Godx+xlEq!==^lEUJ*+bG4>RgLd;q zi-2$b+cF;7p<~3B$~cRZFxYP9C|5+*$8J@kq*n_LQF~8+d{! zxS6cN@fqxnk%^|7@C|QkAGjb!oZxMyqu< zP4o-zSQZaThFdubNacZL$7*zuJ_?aU`@RYWn1u|!DjMX92utp5Qr;H5kzKHE*lg8i zz#m)&JhH&f17kn|5P4ULHa&(?;vutB9ZRv;W~a>31j?BQWg(9K6qGEpkg2do2#M`1 zk&wGYDh*7V8NVRi(|cGX%2+eA(D!1YcQIQ3+FG$?PVUwQ0|gQDsYjgr)>~p1tM0$? z4_M}%G!V1Nwl$z?*t_fkOw2}z`Z>D5-)91G&lkH^xpQ>!ROz_)k*zrTfYU_x&W>08 zCy?DqGU9>RE-V2P5a2|offPyrVdCWO;&hT!;>3S@v|8c`?tbd3qflTew=e1c@G&{+ zkkWUWGV$RSG((C=={FmC@7Vi04*-LuN=<%8318spI8R5*kDp69nd9+#%c)uCM|0Iz z!rv9}9XbL!nm+_yZ!Z`l!jY4<^(Q7K*iykk@;p#;a?1c9p>k^^R*|WO5rBqizA*Qj z-@2`6(pfA%P@^XL-OAt8)hseEGC4)}wBTl`ZP;Hu$r8_;1ik&TOh5cCh9<|Z1x*O9 zUIn`Zi?~ImDHTaQr&2xfRIEjo@k3Dp>X4J(twYaAK5bY5{@#KwWxj3Kp zsQatNfamx9LKX<>Dhk1qcH9k9jB}62zk!>^;1IQ4$benU$TG%jxl$#xF?1q4p^J0bBoPC5nr13n+J<$&sjGb1f0a!{F~vr@V0ZY<`S zP(M}KNPe-S8D112BWKT<3Mu|V|4rzz5^i}c5XlgGsYc$^73;UA6!mUpiQ%}3Us`Lo z!$74JnhfqR9TL+_sY7;SO_QRb^du}!f5IWm;?_n`dKcjtgOH&D3X(2YA^p*H`^>@w zevbWjg+jq0wn%ZsZRIu+y)jo56=Bj=TN)0D8B zB;fGlj{i7UK&E~g%_RP%cy_32ZT(iYCVQV^-t;7PRX6pwXfT~JwS!3M-a;l%I5&FQ zTn^p*eCv!UESsL>jjoI4CIYr{nNBxK=xqSIO43@XrxflKt!Q+~K&%|}uvbPl@ z@JkjlmKui*-%>oc=5qYhV9IyFL7RbM`^N)=3KP(xX>g>Y3ZyZhHlLT7K*M(n-1se} zSzTBiDZc2>(P3|%wAatNnJ6HL4F&z8a^{}+fShYe)pY{$x8RkxVc;@X!U*+8L-7usbr$e>%W_=t0(;hVC}=-%@Dtjc z-1~Bu4mn=m-Ya+4Gewoa&_KkIK@!zqRTaI+CSHd0jYwjCCk&(z&l}sqU7nmZe68yh-4qF3EN zzH+In6N&f)2%^gDuc1UuWjQu(=l7&f($|sy&Dz{lhs9s$oSv{&^bfFMxN;kJYY35d zj&hHEDzBzMJ)dyzT1*vCEbm~WLE7s+_LwA%jHE$b2xixh^E_V+j1 zLds%!#TTW>)>)*V)qYSPZ-v0vzZ5+Wt%4ExTxlx6<=}cz)2BvFbN%Gyo`zjGiIf8w z*VaGIBX;TZNQ1<3H>4DGxfKK@j8JmB-fs3ln{LEO@tjZo%f~XK{iLLCJDIvl-YEftab`pK67$rJxxF4(RCkuAX3KOg6M8;!9H1AXS1xqQ)ZJmQnwL*) zxxxeapEu+m`|bDGQV&Xwpz?lIKwzs(BoQ?OWj;#MjQT@m25++H;Yy_^Oa)Bwe|h{l z|J{9nF-jx9`l>f+OOG)UdS-!|L^$?l-LB7VtsbYC$pgb(&BGDO$MwFxUHrN%2TU)2 zplFkobd^Po3%aV)_;W<6YQ-$^p=g&V=E)gli_EV&=Tn{fHQ4;?R%iw}TgiaSV2S#W zCp{x+2)f_CP*bZN#iCYb=vB1JntKoD`A^dqdMsZyxm^Z_8Sw`pn z)hX`*A2%rEn5v_T^9Q>7SU*P<(87BL@j4cGA}FgH`lp`&>@2c>5VgqM|K8| zR^u7Mh1xDucfkRdSV``Y$4*=DPg<_m5H@)CS4>IQ^?vEV694-I<;?;nhT>ug4f*## zqU9f^+gD=|^lwG=_=r?;d}B#eb7?BH5)wC8rtmD^z?g9D2g94`Fu5M$QZ+V^YEbhH z^5c2&L{<=mO$#t|BK?cxS0F!ZmLR+02kT`u5Qp9zF@q7{G^fT2CY^)8)K0l%agMHg zi@9`C&i%EOT`sv8-*%jS94;V($l~{SCK+GyiV(s~j}mi+wkFdLR@axTrkjl0W|AJr z-M1$qii^3?OUh$Q(edXv?;D$Kl=X# z(nEE-X<3Xsa5e{<(w9bdZW+ZmDWq14J!wEZik560@r_0=LlG^+SrYesCx+|x1<*7ERNIFd zHkJG+5cEV`4Hl(ZeNg!NVIy+=NH|K3ZsP09;(Ok>1O1twAtxbEGA;cv-9p0oAX}a6 z$9u7YoR9S2$Xsfyc)qmS@DDSe)?KBgcvslW8&(UWl5OsuL+g2oxDKB{m})5e{x45z z_#xUxqh;0u&3P7NGQtvTuqZ)GMz3x#(Bxe`xNO6}ceo~V6#JwoNPa)!Hd@LH6%~VJ zIPbiopF%{1EL!W)_MPQq#?jMfsTD7w9*^RQyaI9SsY-zovyv>yEPaZ6hF$;9U#Dyv zzM7MzgzbdzqcVH^rL~)i3l47gm9mxv?SYb4OpTIJM5j1zRp#0>y5}}Z03P%Pq1cTM?2QJVBks-Y+&e}Cb1i^SkGU?4P@9Pd9mIpQO!}uj`WflXjaTQt z5zQ78g>btVO;7M?^!PJk_g<2}p2gN)pxBj+(E~F5+8j$K=9H%d&?Brymv^wUtTq5( zAK4NAJs9WA2Bya!!*T<@fi%b-9a&^?edIbC+Cs0&+a%T%RP$<|VYEB`KqHC>~(p z%3`nFpPabC@V?;bmY&Vx(sX@hDD6Ie_oT!coP^C>EF8ZquSUMiU`}{^GPv-J%}(z` z!Frv`!*&0r14Augue!uuo@|M+mD%ik0azuB;ZxUgNQ&*5=4z1E3N6s6{#larYt&EO zS{;%osXQr2NLP$G*DA|*NtFyVz?S|mV``35`_CPK3$NtXXIEcK{Nv#`^|==zXI*Vf zJisgr>s@TN>gO>$ArumoZPgWpLLP&xLm2!}5odZ_(`TjoJ`nyQ_!~$@gMi2MGhoZD zWqey|jNI?y1*pYmB-~7sV1}^^X$t3U+Kq$zXCuG~cJMvDKmug~nq}GEJbqt>L=>7K z(hO?$m9Neapz^s$;t#=!|JSGlGalW#Ys{mv(K#vm`-nS&m5rn}k_pOGb+6Wws1C3Q zyD4_m0El0OY6F=?#yBPW-aDxueb`r_WajYAUjibIuAI=1f~7PuqT1uzgam85Pp6Bi{X{4P7F{{`enNffPrL7 zq_N9iTaWMM;grdE-Fg4};O`&g?{(_$*t6l*Y8_F-=+)q=mdv6H`pv|^$9f&E1Ou?a z|B3X0XGEJBp&(jY)an_n{SjWiRlK?>!I@FrVBEL2%kCM;_l=M=I+g&0s9c9R=fMD9 z2}a1exiqam0SpeQ=d zg?*16X@+_H4R}NLE>_uj_WAg}2Uu3BAG{xVk~TWl$58&5$IDMfh3yO4*GdPMc;NqC zQ27T&yxLNrP#6{pluY}t2>56zmo5v)SBm0EgMH30AFDNm_I+%JwC)-}_vu7tmJuV? zpsG833J%tFzOWN7X(FUhrO4Z2NoGu`G}Hzjz`VAb%DsR&ex-~@;n24wN%sDkNl8N{Lf?cAV#a z!;G!$La&TNF;MGm8_%5D2!2TTeWrcnVBZg@?D0Jm7pDAt1d5i>?cdTtpyXreG*9H# z1V(UzH*=(`YZ@KoKU;Ta&u%3Nm$a4pM2bqS8gC>=+x-OLjhu5lJ*dA(hvnC$mQWXr zA&CFTg>{ml%r-7XH!a7jO32_U(5m%xjYg_+pQ&a_sBUWxJ(LVYAZT`eTEwl1wg>k= z)J?>^#f`q_zNK4adV@j;%kC{D=)f`}&03c+@2yDcJnrUK9g>ZM@{G|N*T>l?UNm+* zoeBOoS(tAOQ~(fLlxxU&M-_)*05(0~%^?>;`>Zouc8ZcIl1A*PGFiE;SAEFi7TaKbSN_1T@pTu{Ryz-~&7k_9uMO zD`IbOgH5ZD;hMdxx!~Y#0LG#m|FafBR zOU5E9M8u|uQ~eq->HG~&-`PvsuNRqC=>fZ4_9iI^c&N?9-#>MYRbZKy3&uT@VM^*& zST9_%lpI+!{3~_FEjkJ*QDkzV{x98oCJ*NQE?snEZDPc?9exrR7M1mBr@!#cd_^VyvaJ)enQUXG~2C{)AB*bdq)NcV!;Y?DV-IXo!RbAqu{o zRwfkYplk#)lD|H3a6i1d?pfU8Zx+U9*N@yahXKK;+Dq`BWBR6?p zBB&68JtL^g*=S4|?e1`qMp9Bd%TO=uPhlD6u#R{Qh${r(1$TJf?h=?6b!xL49J5Xg z6BajAg@0u!mjpYf+qkR zkh&^KQDo|ju`3Ow`D5L-A}NMFwpVH>5v48XTmR#D(>`$Pkg8-v7<-l+D4+YyeW6Tu z8UE<=;drthd~*_wL5hOdtldacs(pdGBnwLv{Y=<(SE6kghn`AlDCo|%8XfWx7#5L_ zA8#YbfhYo^9^a7Jd*SQQta57#ik%{3h~#*H zg7Y!iejuPdGi<-zFvwG685hSrSA30)I3t%yoVrB4naxe2oyM?gA zH#F}j-$a`tdj+Cqf!)b{d!L8v+WAx=(vT!)hEr%nOZ~Tkc#4*EG`RlD&;{#{=Jo>u zVnuh1I>ePedkuI{FcWXN%woiY%v(0jYGNyk904^ivLAH1Wa6>)jSQAx1qAMY%PWuo zpjU&PB8($z3IlMje+vwmfAzI|RDpUn?U`M~P3^BFm);hB%;M~os&R;4Q0-snl>iDz z-y>cz5nCt1>FHqc?Ys0MkB%z>FYbrT!1)Rk>+{G=auknPq(*cCj&`khaG!3+D)T5H zZsktvp*DP`FFo(-VOg)|tFy+TlA~;CX2Mv4cOAa=v{x^9bXKNcuC4BDgFzv>A4W?2 zAl~?4pi}vCb-iK*(b&8K{J%DkKOiI7$4?jmXn+UkFO|jXAyG|Z3$U??y8*3~T-`;u>s_ z*^y*FvvaJ35NdLB|5L8HU*w42B%R<}S<~IpCtobG{cGm)icofDz7|Ke&Dl4SpAAEC zkk;gop{KFvyT*|d+Jtv7R-kMz)3=g!;nLHYByL@2m;cQo&MD4@3{llmt;ujs17k9a z{id#PH9K!9A4V;w*;i8TU?qMq+4;Fspews@Ya<17WMh~z?aLIYCAYu4dzyKsgCa57 z;{-C&;c#nY0@QZRsRccqr|^9@jJ8Sn=720luKpaaV9)(%nd^Q)iVL<if4NDVm`9FdEZe^PZgj zOlf8Smw)>TbnJjc0&KQrGP$OC)PU3a3_OfI&+FV!wZ6Lbw4VEMqeneNS}k!OIqKXq z;z{Y%--Vg}Nad6lE!;<0vpx4JFgVe5>y@=fc8~5?#t5IPH2b5zCqP;Ra_jC1O9X`l zkZp3VnTg@tO#E`~d~&o3$e;FXt>oG(n@XQsNtSUrJKS2OK-eB~BaROUXRH zDrhN7!Tj$j4b&14aYIW)oA*_&U2QfwsKYG$uIVQ*`aD3+|o8f;ap) zCJj})`u<40-!doMd1NtKPZs#J&AODP+laHQRpm81h@KgtgRksAv;VHQ+QySXhKH-GU(d0~Gy@ov{Sca2p!h zlPMX9;@tZ)7G0=u3}M1NqXU7DFH=;6OsZzodakdMyDeGsEI& z(R64N;U%SitUGGC7HHO%jUYZSmN?ovGo)Q!fH>rFqEVkH9=RrCvn_IGxRuIkg~|*V zX#5i*n91cd`Q*vHY72W8hgA11G}C`>CpJwU zwfTf5Be)givb@s$yVzIB4ep@1WBiPSura@bT9**FuDEId1D9FdSP(B!^*G#FH-#rh zn!oAqsdsn9iFN;OLEANSvlAb;+(!oh$jhYtCOI5S5#cD^34nx|>)zC(3-2%pf~AY< z@&3R@P!thenW_rH+kL06gic=q`{fWpDG;g*06>ZnL{qHh9WP?j^3w`Y=Wu&j^#1Dm z{J)QDaJqWN8{n<}@mCz)w)gfd>j1vT@CvYi;LKL|CS!3Z_0ZIqsoz5dQefE5e`;)dgIzb*2?TK->Pmo7Q8+gH&TMZ z_~saWBUMP-E520lgsm#{edwVl8#m#3}B&$q}u0BI&071M;a7p#gIx zuWi|&S%4yPnl0^&7H+e;+WGzIIK5OTaJh_CdK~xAxdQ_NN&dDP9)sp9)PIW`5Y#YQ zQ5!07olOIearD@C7|*F(GB%fLJr;3f%98Po%{D1Zh!XU5%+}qZ=BvNU%upRXG4Wfm zjm9QPc}G1)X(oM+RY&?`Md{G!SypGc71g%^;gg!WGpCKtk1knoqxz)pQ>^ie$?&FQo@Vuw-Q_V* zKdVJrx07Lg^$<_yM#f(-l$>4HvJMX)q1VoQa(NVuiYNI=&}eVvprVg5)RopaE(wWS zqtIW?LN0rdk0@QWyy3S{#BX*^*m~K&J?cMIH}_~9MB6AKCHYMUlq?X`1-Yc~BX{9) zGy3_KmqG8^Qu$5FiK_(4ptrmMEVL4v(P=*c?wV{3TU?v1ZVwD1*N!kXnsJ=~!?J^UMSfA&A$zan7W8 z^{&vl;N>-(aLNCLdTJ)C%)Nv*^zW^PIA0a(XGb~%XOBbA9QOqEn~+cRrg>#=vyYyR zGeP6{Wqa~DC+%xPR~d81dvqgIZm*C*bS|7tJ&uiZ2ibKP_s)haliG5|mxMLj{(les zKkgb^*S(j+fnFs*lve3yn4#vQ5fVD|I-IHHyPUX=LzdegU#*kkaN<=j#+PpDu0%?=WcDh`^$Hh6rmv%VV5&=>JeS_{H+97MQ(-BFko} zRkkWi<`Sk5imzCT`aR*{eD794@$X+ZHm$3W@P^n(W8=0Au&!=&^JEUu)E`exDTYU< zFjOK?r?2LxS_V-N2}8Q{w#6#pfu7P}|BCtB4|<(T4Y)kyWLXHP-?^iR1Ac!~8q!E| z#HjCfR?J{r9^^g}e=3ee(nN`g$UX99I-|%h9&~AtaO80fj&A`Mfho+H_H^G+8Y{?z z#f(`x-&FOox(ApeB&;<#NF=ZTJ#j0>)shJg;616?VL8%>mAwM91=!YAl!)hgwDOgt zt_#ijON6$_1xj4e#39GTh@}&%L$e7O?tIhFwM&vm*Ji!K*35cWKi12A%Ucf0hKN_Q z%VSZr1|cV34^vp1h{7UfqQD8Mt3#wEqwXx2FOSuF<0Q`|aw!1_cD`o|?8s0Y&=vzL zQY7(HH~W;R)Pr$<$C>Bq{e1;QE5?uGRt+9mN6q0bg7__%tTKz_&`IK$4D{N|JqWy{ z#}@9=7>b3I6N%RBqviy5R$N?BRbWh{ho@WuGq#{iFQL!BvX@?Rqi=O<`-tenWzgy0 zKGxobPReVvYY$YD!T;l=|I@;T8(@odl~|DgvyfIN&5(dEGAlEv%myQpGk$liP(^Yh z@Xl1QFZ)Z=oN#OvSaHP9j-G+&9G8xnh*oRjFX(go@b)&U+5uvo%}!^3;N(0JQ@HOh z$Z*5LD{9@050Bp~)#O$VW!@S$-_ktrCVMSaUv7J7J4ep8%jD^g$_^XybY)>lotLUh zt;t*w#6J;-?cP9nW`;NyBxUXFs?Un;D!}-A9Kt_6+k_W~{>Sh3uh&(fvvr+Y9%%+B z%-f#_8>`C1k1v9HIflx6hxx2^bc6xsBoUOO|AvF@hX(v9u%1Zm8L~9TJj655^Ol8* zuS&W&xL|hh#TIP?>n?1)!2t0mSw}2KYJ4NHWsky)S};^n8pHOvYs4h~>D=owrn8MY zc8Y`W!X<>^!Fp*t3JGgM8}c;JaNz1USvgMj_ahGhjJ8?Cim`q>ihs{dz0~JYI{d^xWwOQrc0#&c`Xvu=<0W3bA$6 zELr0>lKDm>nlSu0zf2UVO@FS^6doO&3!KJM10NkcZavK_kd={FJ(&WF?~vcOnsq3c z#aRFAxGS-cX{4h#SWypzq{9?kTVM%$WJuYfV7HCb+x$@O{>Sx}9f?WHW1CP2ARd6i zVzgaFwO#&-%!XbIkvdgwANw?6Wa?OeV6Uy}bx+s{N)w z&}}*{+KFK-)B{c)wp^i2P#(0s@4HySR=Y%P#XYP{8Nxl1SXN~8m_9e?Mw@#_tl_vt|amBchv`l%PIH)H{+1G$q0eGQSg zA}Z!nO22>XoTl;5M_fNgfLF(hjLYH;6RqrUW2RTzdaQc_6PxjyKxi#0epvrQS`j_ZM$i z@Iv|QS>k=`G9lodJFNd7g<)PO^;8857nr4w>%C6~%yu@m3y zjiQ_tY$g(h`~6*{`%|RFGPxGTAswio+FPbU8uGmhW zWo%TKaR0UGgAMsmjxFM6RWhvz&8FD)oShgq=?!nSRTJu3=h9G?+{FVpg&~c0@YG;p zCq@lyCsIyC(2G5AEpyq56Ik@}W8A_>MtXsCzM+)v+Y#J)IYJ}$LRL&wY=t!dG2}76 zriEytuX+PES4$_WY#;Ktr)8;9z(1%20#PIpU2Ez>0Vo|!OSdubVTH!-Y(btA>|jkw z5jD8XQ0Kdi&iFl6C-(Y}cn*&%1a7UaxAqk}&5oJV>YDW<6D#S4us%}06fmH$aUdG! zb?sgmc`VOYo*P-7_n4@Mxc1*eGRQ{(bC}PluU_;5@^Mq^JLdVGqhPxzy!Y19HP8fu zZPq3*8UivDC%VEmRUW%?kD853^$$g-Fa6CwP2nGm-?;%GHxr0<1??$+CFZ2lVUIL$ zz%%8=N%!CO+YRNXKE}bU;wGS4vnQ$LCb-wwwd_&OTe6RHp6y1E%ow-`-Nb4a5{IG? zy=C%iybzFFLsHXalZG!Q;kL?^ER=YeHkxh^y(L z^lKIs?yWNrOE*zLnAo^Wq?Ga1iYp2c*LTC5=N|mx;`^798S+^pr1(-f-cN9ndQKVn z=Qh<-{DcarXdqa^^D$Ns6#O>)u-sdW2nCoH^+{7~%lfhwyxtFOqk-u`PBh>~Bu!~* z6*AhZrNos*tez7Z7O}sL;?ks<(qmXTi8eQLF7g&ouoL1}w#Y!n-O>30* ziXt>0^8sEz#CsrOuT+X=sundIJV4ut{1;{LH+cPTc?@9?{d`OJh>3sf1b^ZB{iu&% zRr{Lkz7Iw!P$2G(Z>Sbh-ggPz=oTqUHX-pzx(e5^5# z4XwURb{f`@nY;2{_ueVCab7mn%%2CVE{tj>c4^EDnT5A6YZ`4U`E}B?X)KmrrtL|; zAoRjQL8?U6lzts+jrwZ)8rh6rOG~^kC+cpOfJw4y`2O5{ zONS@9iI*Cal_G$T20cw?Wh;!w5U^O2P{=MXq^juUa3C zj8*7hcl*D&zc1uR5~aV%lm!slrnE7_$PCQ!6JY-c`d z0&Z)&y^RS@PG2ouYj&rW-#6lz(tUAlvh^(gR~Ccd-eK{x6v1EA^Y^(;apFGCwen%J zz#-O)-sHfk8|`}anUYEh8=Cf%`Ej{f%TzUW zq1i^{0t!Uom3_(=K2SI*vtpi##A27eXwx;#2l)HQDgtej8rfXN=c$=5{~uA`7@S$x zbRAD@+qN;Wt%+@06Ki7Iwryi#b7ET)JNd56{e1PNPSv@7p4!=aclYYGRzm~rAKLs* zr9&|3DfIr^$UbL|Hd@f%$jP>I=%u8;?VOhsHseez791wjW*EgVE~Rql<30+dIump5 z9oc&xcTR_zBAa-hwlhki?VQqG!xt#c71V~_z@#Nq-A?^}E#K3`v>?}?#r}vykZp~? z);hsW3=QtVL>4@W2GFyotnF(`6iHM_;!9EFNHGm47{y?UXkMQtL4r4vOhU(rKLtl# zK}e@}05n%$W19f%9>S1$>V%geX;yGQQ-jZ|qzNM0N1K|BV`t9p!+OOWbzBzMm8ch<=LWlkm&ZZIjS ze2-UxouH<>aJE?*t#3jhj?b`g$0O}h^1>`xPA4t(qtPm50k9L>g;swnDV7FP>`c=B zD$A{-(5}wAIycG81}(338A{|DL7v*ycAK}1Nu@E*LF@r{u=I66omCBj`S&{u8F_(% zAd{B~JW!qKzI^IImnWqoGt(2L@7^N14qTbTRp+;_ z#>mN4>&QfM;K#hka`Rtk>)Ag{(5@oFwLjj5N#?=lT8^bU5OrAeY(WkBU-a3}>d75~ zp?;c-H!jgcXZE?T@^#5eV;?S^#|?_R>4?)*)KH9aGV1?L*X?%~878rEUG1OD`$&+e z<$Pt0@-icmO&Jy7&%)a5CN1c0xt8f@S}Bb z=16804*-Z2yVgo8@)C*ejxY%$iz8|O;6kJ+c(W%DOzrA z>LpW1R$Mz=EIy*aFYRNDgNP%%`LaZfLKDiP__-P{$75*8(vJg9J1i3%!Yzv(JcHvj zU()mgN%>cL^hB)$J^C<@v3{wRpc7?_mX}n$C#{0I1pPlWkLT zqrPb&a5^;1<;mR!3eR6AwabuJo@#9q0d1O?`zS!}(6f%v%H%e|eE`;m+;i3ILS${< zGORK8fM&^$F^-Oi>KKK!kU-NCMw&^6p<}x_HfpDbWI(M{8R;?v4tBE%?{W#Ed*f7H zTBNwABrst`MJBD>k7QcO{sV5vdAg?_Lx_|PBgu3#dnbF&E|}~eY5-`+1Gtaa73Iig z0GC%&T@y3gXG* zU~l@2r=3dKhKThD zW^gHsg3v-4+st+NdXcT7G#fGQXDaAmpIC7YWRO&Uam$Xj9S-id04?>|WP18`%?`Y- z*(cPRO5KZU{$T2}^NK>gIU9n8p69+;^x?%j!pN#k$I=|@5vqM9q>q;Z$t)rTB-3y6 z4_x70;gRj9rdv(Au2^kXD(Z);Z=_rPT!Xn*RGW^0&GMIVXXH@ZcCbVf~Jh zbKSMqyB{3nlt*_Gh!QQ0^gJmZR7nk=bl`|W_eYU?0j%Mg=ns)H<-LsnMV?ahRiU)& zcboI811s$FN6xl+-vJG( zswl>(*diGtPzWOXk*S6a*^MWP-xy;3
    rJPKGV< zJYV#(KaS*I0nb4Pf7k1L2md6&gjv-mPi=R%MlPGGoyfgAHlG-SEP8wqADT7Z_@+SvRz_83$Qqk@Qk#r z9z`gx%kK$m&jIbSjT9;n_?B@N^o^$yl zO=0f!KAfJExJx*&+r0_o;4M^wwQ*q#maLDoCJx(RNzwE$aj+Dtvs@yga`GvD&cm zLPC{Mf&2fnKYIQTb3g`Q4rc*0e)xR@O*I{@&25eCEv;>}ZN$VRG|a@FUdYO!MKAY6koRHt0OU*QuBoAKytlqYH_->pgFZiPmSsPl}kbfkTt))lJyNTzgY*1SBj>o~-E zsr949MD8SZHJ|g>i>Oa9izlIK{uN|V{ySF2<%sk z&Kh5K(Ku29$E^j%>OL`y&DwMq7Kg#P=R%WXvi)RoihV@cQoxG5uv;n%R9H4IZHj%j z@qUv4@XVB%*G*)1u<@CSl{+h)h&(EPObV<||BhkFy2EN)jk0%UGXbSO(R=I-u&aqu zHxuRdyztC4fYRG&kB`E8@zSF2L8Oak685}#^px{rUkY@?6q$Ww!k}Up^>7m(@%5GN zS{uI@xm|Yb(^I*U`as|Pj|lRw_hwGp<7E?h1<)BQ6m42984tGqwDwSvCu8{)G!6>! zaIu6|>R8=S&?9$E_^MIs;fKT>yJ2|3Gg58?eWwWYLpBYVTt>tq zOERdr4+GW;FwE?z4ktr7KEjWQpgG$XbB($h6sXi8sx2Li0C4iPEn60 z%GjQf)j(zPIs4e9N-*79U9CAG-+p&CE713VnO&VR;wCE%0-Ra@Rf}J$5S1hm3h_8d z=w4elSoTR}oR`?myw_tYx1TgF`3$s|#3`FDWvGW{AZ>~g*T~w}ZJnx|#~hA3R=xE@ z`1LLxMs|PT$&-`AmIJ_q*sl7)yj=s^iSfjI70oO0OE!b;3aR!#d4+*$TLK_n{1?WPZkaWoJIQAF)8rc@yLA?X~Q1sL)fO}^T! zHg&=J(||tb*v7~1?&@M)6do{SX0Z`>O(YGX()gAgaTlKyLX7>dk|&w&rr#J`-gMMd zRKuzw{HrcNVXApYDu0_Tk4@Otk#-Du%AHwQ|4TvvJU_!{z~n7QLTKpRk)81x_{?8Q zKeV6MbF$ig^L2~sa>Zlj!ub}@IZ$_2JiO@Ero%y@L3`oL;O67f{sA`yybi%`v@>p8|68+~V`Ci&X8|7l#u8AySt?aLAEWIru``}S z!O{E*YF3lftLau)WS43em^faZ^XJx+=(_gt@S7lbEOf!{U~mV_>=Los=>ZZ_2p#IY zwzCaNGI19F?)QQZBkL*`tw1_G9akKhyo>w_o~?8tQ6Hr3xFX#xaVg_W-S&3ZT-srC z%uTu9nlDB{i(t@5$S%N=k6hgwdDj2-^_SX7Ah%*LQQPN^4csq_MV@GUiR8*7#1)~i z3$$rLo#Jtem<}^=E0UCKyzILAV+%7Eo z!OLPFxwUDwJjA-BuH{1&BGvlIul7a#R^AgX7lnP|9$|7SFhS2s+h_v`ed^cEHLoD4 zsO&Cw;ADl6drA6rzp#%uNHsipIA(91bsIDlaY`mXsa6cX8H@(E@DykxfjinF&~5;2 z;_DXit1TCysMl5`rvfV4g*0_LxiJ!)Kd(s@4XFHuyjBq8i2kUA-W{9~Y)?l$YccwK zBBh+Sd`95wHJF4TX?~aCvhlfkl8a0x)afIx-nXnR56GztB-uHt(7MM;x^Sk6wXGXO zBFQfTj|Gvl9RC!Kxu)<3^3DJcks=vQ;Ok5j`jc-UvvRST+~(<6Z+{%)sm~kGia^3X zc(+hDwo0qmSs97&Q{WRnOU?f8R06h$d1a#)mtO5BhSMe%h(HaWSvm-eBhx1e~2DQuB-e`*P$4ygoCE- z076d$l9iDF-qnmueBN5HZtd}q-!i>}bma{s2M&gaQu>p#j|fEQWe#D+_p89_*C_fk zpQJzYQ~|9mOivSq-o8FB_+2S*Ydu~l{y4BFiH*=h6&wDlQ8Sla0mqKY)_~RKo&-#! z_;>v=j47p40d+Z+5~{7To5GiQS57KH={Rl*zGt`;G6O}K?C5HC7qtlk^(VELIaTic zp@H%V<-*ffvd?XW;rRv8OyzO_>G5+G#dAqPsXSkmV+ri{T@f*r(EBc(XMf@|xWcTS zXZTeqGd1^yqcV$x^xq{9ku44!Z50)86B$03SNZ0K(p0QYV;enSzYR_p}V78IioXVv_h=+A@w5E6bH3U7dqH|7!Oq=N2vgSN@r`-%_slS+nP(&G5$L=8T3x>47fqXg~0#V6?e_I)7docyS+U<_~~XDQ)b zz4lZ!C?O81wr)~stUv`zK>rJqfP&ocxei%P(MlG0znk2uea*GB?lbnVN$&fAN(LE& z3H!s6u=<&GHEP#P^spka#H_fUoo+=Otak-Tg~Q_qs`v}~n3Nkx`aIqss=kz!BLQ+-E4OFn;Go(MFJ=r??AYi2hd1O<5 z#EL1#rnZ;REufD+7S=yK@KP(~`=oOjb&C0|Hl$R+{?jzI+X1W&w<^j><4mgXz=2E- zE_e>9to5%~sSGz#T$Kd6IJ8_dATkyw2Dq>>n?@a3XDMJEZvANEv4Ub6Oda*=;Lz9u zRA+WEPG9&O5LL;WPPM8fW5KCe2HK?OLZZ*EAHC)mRtM92j^mRNWbz#w&#fi!cPN=` ze5YPgS$dZk36onzwf%)77J|(%v?Wis@ZKD+P;O%&m@YHg=zo7yo6Usf(w#I>MH@|^ zB-1D;C&@trbW24y;sP`#*}7Smd054VlMfQiCxZWguwfdSx`)g6F*eA z@tu7hV`1iu7m8Vz;g^G3IsBV&?23DU7r+Yc6d_UOW>dw$A)cet?vEnTz}Gs09btWQ z&L>OF>ji=LVGC}D$*8N8jJe)#&NkkkEOKi#bSk8jc%96{pn%^5UZ4Q!n<4_ zNVjRIJ;(GkKYmtrcDB!hneYD|ZorQkr*b;_kNd07_nyzk&yQ0Kj2ytWdar`p{rh7YI+wBIvM~xu1wTk7BBDI;I zg(*xDe0LTR|2LS0-@Tpm6GJR@eg}B+dI!A-h37=BEmp#J5wcp~gBHo^XE8gyXGM{) zd=zK9+UpTncy8tD%N875I8(Ha=4w!*SLz>&26}DNq<4!N8!!AZv{wVrvK>bRnvF?o zr4;W86!}RTNo+^<$0jL`o@7Gu;xnLrfMx_>ypE7gHk*6P;E-9?Q1o*iq5lPTXRa{FgH+$j$}{Gvxg zJ0Y(SEDL0?+zh?gSL#i636c?+;>jmMLYWJ*%d>y`m2OqS5d4oT$Bb(!e9EGwXdZY3 z^?(Wk2swMhTCGkHzIteoW_*WN1D{kf+q}RF68|h?Lrd)VRtFT-Uc+Nhh-D3P9tcus zSfxgOC*e*WYul`^e&*sFb^_S{GODk2r_O9VP!k0Z#?OkhokxBf65M1)a_$*_CjG<) zmS^VI4cUXnMmKm->j%}7KBKtdM#wG!(`#V`p0q8P*enn6ux5R%j_Y=>E!OtGO0{Eu z{(GOe!^uoLCV_=2c$83uM%Q@3Z%O79HT$&bAZJ`nSjL-^(8UZ{`P=Q7F{@i-qP@*f z+W1d7N9=l+6p_Qy*&IFd+O^W_aES1t`mo)+9Y&rl-C>rRTaiM#{w*#W*suFH)Inh6 zugvQG-)6s8Q31?#P6z2FJH3=NF0`onv&x~qE*cf=FVnYNrlj(RM2NrDm1Fy1z3&!Y*#0mAH6AP_g5eFi{5Fj=_3VnvKL)kV|#s^>R&xS~!{tuf{~xdFQKtFwTI@6=L)h z?%msZO(bm;V0s+Ts0z0vhAV_*!8PGEazAyJDdA+gfzF@wp@Gv6D^$Q68mF+E zmjr+N&)h-)69Rx^{3irK0lXg^yVnWo8oQf2TAJ$XJIRPhi5VF2FqxTJ+I#ET>l-?2 z+uQyNxqwoyuH1_`ENm7ZT>l4ue>ll+)~!kA%MSA9tO@OGXLYBEZGRBuI17CjK?0JR z!ew6>RKYMIpQHE3u+WQb5k>gHId8>alg0^+LP9c$dTOlS7zPhgd&Wvh^Jf+f+5*^MQ}wc`jgipeqrc(Xpyv#>F^H^ms>AQD^jP$U3G^7o-!NRUlP$T6`}X zWIgOMYv)4U-DH0TP0Z#?3O{3iWx<=L{}3n6Yh^C(Esk&y`@znm-Bc7AmxL&;D$!U` z{|~#K==_7Bv_j=x6T9ZJ2v13(kVaFs4&ukB8$T11X9|_Xe%A{@F*-czh+hWMpKV!5 zZ=*_TrW^JuDXYBmYh>IuBZI45z2dx=Aj+i63fJ3U`5Q$Oy*eQWo)uOiw{!gzi}$#& zYIvfs!5)8{FIvCL_dS##!7czdH`Noz zZU!1?{i{yvsJf}06t7n>Hq zTn(;3ekIyZNz1Asvr(&jfj#hR#ao8}D^A!}RjyuSl0yXql$_1Pi?dRfl-87CB7A~7 zZ3C^&-Ua;|fgTZUm*e&_h`q24kG%R68dS3h?Zv?F{6NQS{y{s-Tz=uTsiWR(hMfY7 z;A~I>&AJSx3KS{T0|`HOlxzYH#I(jSE4(Wrc=)#$Ih6@SfR0BhjJE`~jj1*m^xesJ zVe`%gV%Oz?uWFx;#M5 zaiYFMioFN0&aSnJD-MJZqb?YRf)k>BuSQOZXD4+FQW#kAuMVgt4p|XoQrE>RO zE}gqrK8(1e+lhQ@S#|DMRGNFF3TMcS$KeLkcritKjIa2cI!*uJ*pFBF7MTddJV-&7wMUKQx2-p)%^={!OCRL_%8q|k zUR{(fR{AMbq$~!pwsY|CHEUZe+iPPe52tg?a!2&IZR(JYbU`mW`ZPgJ zlI$Jk^i!Sr-_Os9dU;kyx(NaIld~GV?;>IZ`my~RlQFjtS@QlZ3nSJxUeKUXuHA;~ z@bve~B?KB`@bPt1$bcEhxae3!E?AfAAH}BjhA>Y#SLgM)+nbxk;{LfZ#qqE*QQaQA zAZEF=<3jVaR(WuAl%ikpw!Iwz6KIB}t+P}o5-{%^NTR-n;1ryrd5At(ugXA35EcIk zfgzZ?=(}wPRQcbT;r8aR;BeH|ER`Hew1dSrY*}2|8NVU0Ci5Dp%FU7?NdLcsyVO?4 zl31KU)e6c(!cb8{iH`{p`$s^f^z@ID>yfL&z**Xvpg1t-WIm}L;7kYQ?1Jd?C6j8i zjS%1qig5$?YveTA7lE+&SaQCKQME-hoJ1Xp;3f{zBSXKwHue{12H;iPMxDjLB^CpM zh}!{AQ{_!MHi06iv?N#r_WO^GznX3%l*#H@8o{5XA0MQ1MY=(UQ-G1jj);Wm>MGwr zCuDhK&VLXTe#=cQd=y@t4M(_dVH>Y_Z5lD<6iNs=hK+%vKhq?}y9l?iayOlZ@v>gi zshiLbqu(g<2?6aJ7JE|5>@p_#2xgf^Web#w2|>jU9ko3EgF4hq0D*bjv;f*ck4yGA zu$?Lk0-)%1K7CyvEfz(J$tV<7(7C$eF>>iGyB{o^OlMRo}GtoIo zOn1jm?;Tkr6MQg@hyElpMV_LnNz)W7BW`ubgdb^WoZ;UYc7rO&BirIt^T;v_E9cO5 z+T9cr^ZPZ7>sbc6Z%&ehRqGJQmlO<`q?ru1!fkd2lB3 zFB)E)am_Xdwiqby6JJW!&kIf#ZN9|?oOf;~dq1DD%22@ATTs}zP)Qt|FzMVLp_s!| zK~)pxDW%1RhCXijj@eUD7;A7CQ(<6SOrLb%^|T%IsiAS&c`aNqSu+!k?VH<&O*Z<^ ziOn@O-;O6&nzuaCOv{~2pk9B`21XRO(_%fW+Yar+Z*CvhA)AgLM0hXAM+8bA$a_Td zJ;qlQ4Dab6|0sIlxMjUx^%9c+qQDF;mWwbGDvGzIV8Zw4TdisXF=_$Kz2s6LFvh_~ zQTXvZ;P2K-@8kf+=A;lA{ei`N5s9)3)8kWn)iWvopnBEkU}>Wh>Ey@N3bUto`?wz2 z`xPaM2r=&*I|vYKMWD3BXV)ewJh>XRN3*<9X|LX8^AHrlu^OMdxpEEqrQSf?F9FfL9SxGnd@=~FtH~25rWi1R)LU2*lH|VQ=6{4blFo;ZQw0R+k=J| zq)xX!k2kzlli#a_+D{ub+T59q9}r`~P+t|)dNCjX0hIn0DwW}@Na%hma;S$e z!({3;J&vS}wiYFmsM|YU(?ykJPIhsZR^M)|sFeK093?{#bwcI9#vh2tTJvS&Up&&{ zvk`x0@GT>_zJm)zXE*Zkc9KPdiJbhDj?Xm{gr%v)L=KIxg7fB6+3K)Nv2{)_FNkI| z&XAh**U0lwl(DI&jBq}U88G~H6@f%>rH;P0V%URmblx|s4Fqx!SEf!y6m$RNb*RhA zjrSGs0UBCY3s=>KlN-7?YeV$k-|*H83zI6EY@+S512uAHyn8Uz~mO(lGUJ zXChlZ+;7O3yPB&%rZFC_m{Nl;dv{UU?Ls@G$-UZ8>zcqX(0R=Rw^Jo|r5HrG$>XSJ!S{XR0f2 zTt9-VXi=NA7?7y1LMfh?RCx|4JL=B$ynnF2WoZ|Jxs90|3u<$ZfP4K`?sL`6KjN(@ zb|HZ$$skGb045R+h=tvQ8UA^J3X;k-;+*@~JZ)y%kzYjO%%-T&WUl$>h*)VWW6&I~ z-b9E6{S|}&`5_<)H<&N9p$S{X6bJ5q&Tv{D6Ux#_L*2CENU@=&m!nwgvmpr&jA766 zTI(Ie%9kSizRhgf_p`5j^EBTRtUR?KjU?~SmD1cAR~eBCHX2eINT*kI;mgAsK#O78 zN~7+(_1%S_`f6sbGl0ki$2q<=RTZJ_d5>;)bvIA^+b;fwcwkDW9W|Ge>TBvoXja7ZxylGukv z5HVD3opPO691puRo;QVE5RJJR9o>IsV+F>^uGHQs_IrbuqgcN3-Dq9MSr4XaIl7F<-gp2G4oFxFf2=ug3TW{;i2 z3d6MA8sRRC-rU7Yw!6`9kt?)IA$68Hb46SGR-+?;q2quKe$Q5hVMD?D7-i6QLusz< zP6#xX!RwwMfv_Ka&4nlH~9+fUoytMhhX<*gb{PV)wDB1Z!8Oge@ zzOQgX13k&?@=34VT664nd??Ewb!D~J!Jn|34rLuKIMn{|_<4PTFlc6tKy@C>G|1I> zzsWyg2Y0j9TJZ`cKgT*#ADb5EOmq?CU{z51R~ri(qhd~b=3IxX&>^vO{|u?H<=QdOAo4z@P&t@eQJMO`)c7zJ>&6j*vmVK}q_ zO2{q@iPZ^x?O@vD?wW6Mgrings4ED^_$=->g0_4S<`drC-&5rg!TZEEzqKm>ua|U> zLWdHa-|=<91Vz$F`Qt*yhpgo5+jbdvHy^wI3IqH!<+?UKCuo%WiG?zOV z%QO@hx9wU*4{t5o{!PilNn^vbG=TeC zZCI<`Ute>Q+FJox{7kb=ktFRNrwA~RM5E|2;V1omwXbcH^%@Ig)_9eP@1v}j+Oy?# zfkPaSjsRHHcieWn?Ozi;o|Pnb)uH_H?%gmK&!=rXUjFO`$Cs4M@EbPR=5M-4M{;)X z?XYWxmj(vD(_|BSfh+?u{mhD8qC4lzVpGQ)IjeaXbI7ccaV$5@elOT7Q5d=`^+Ae? z9Btcy$(4Pv2NfMk22c1;cUUXQCVh2}PA$#Q4F84Jba}vaUsGOgyw}(a7!wDSwiEgb z>EJsRV3bG02+2C$L2lTQ{MNJc-AtNn(l4jV#H!+4Awi)SrDkr7!$C?s5@er*ZTpmD zz2r368%V+_8u#N~gv^+i=Yk$``oquA7 zYBWdG-g>d+}ssEPbWrKF!%E$N{yLgyfKr*xAUnh9Bqq z1P}k%2LpIQ{PT7P;1{Whm05O?c|hm5O^Vz!j8Na}OoAwgvDzC)2*!ueydc&|+eGHU zA^l-RrWp~0SCFrUF848)DI)PdxdwNC*o(s%S5sSLcC!m3Iuu`3lT}itj2RKNtR)CT zRTJ`3c7$w0CRI^bU^dKEDc?h@%9`1Ez28i9^&+XT?9ba2h~A=a!#Z`{kTY(?h3Srv z)%Z|)H=V)*v(-2=G~zDvg>_=?K|Y91e^b){@bO4)h3#kkgIz611zre-BByCKTWQVF zuJKZO%qnH_TtW81zCD1-LTJUEaGKv-l@$Bmwbl^s<7>E3EPeuci@F_%LM;Fl!Pp=g z+wVbwNS9KCBuxGd|BbR&qvI*$#tw1iRCVJIyAKp41?4IWY2B_5eyR-tm1W{yJ$b|$ z;vUyfI<9###sVP%GHbd9gw{y~-;38VigMU$!LHlFrraZb>l!`$iD)$R*;ZtWQ+_WT zDaF%jHjkI-*cT7f3pZ{my*tH)rDro5&EnDjt$i-OXT2+!;^j`>sCH=94Iwwb{f$h) z21q3OOuBkFlGPwmD<23FsCG2NNF5$d1{mO$=lKzen`qdN*|HBsD8Tq=9^ug&FEY(Q zX)Fh0^EJmdDuMMz$5UUwmAQoahC#J^Ll$C~R&JTar?%V~l%jdgcxpGjXpsUSp z+z3A1#4G1x^B=o`QbjV(C!Y$4VtASR>06f!?ar`1E80YzZ4fTiui!n?4w;O0=v7zWC}>wspRpTRq^4i;&x*WT>`3Mn1@Rlz?UkhG>26_#x*QuLibQ~4Aj{4o1uEUr|nLIVYQ8K zd0F`r1Ba`xa&8=08a%h7+b7Sxio5pD7V0ghyiJNEu+&u-IuuN9R=JS$7+^=d{^l1c zvGY|dWdRU}uAn;ME#iGs-MXvIEF_1}Ii zK45i8|I2dHzmm$_At}Q)g%NBB0j_A0PI*Z(E3D`E+s98_DZJn2@e$EgURX#ELH0E` zu(V#eg7TD|;)8#q_RzW{`I}roB?xH?v=^fJu}lA4Bv_#hYksdQ#s*{P#Z|2Oq&_{5 z(1@f|RCliOc3^#ifBz=OnA#PyZ{B{c!zPCMp)Dd$ev^UUH;Ibz`k-|zP{7bia_1^( zv}SCm0WLqbzUa8g3NYtXiK&Jp8KREvD`iRo*ynz+H+cZVVwVe(Q1*D_sUU!s(0JWC zXyfI#TvRA+Qd`*^fXd&TQ+lh=l;q~hG7MtYQ=3}EY_`Tsmik>tI3s%($2=Wm->^W@ zx#P$s8O7%-Y%I3aH3u=s%Sq(Yb$e8)B3C}?8;!ysJv3^cdUL%KnKhM#3B3;v0@Awj zSa7Lm@#&tqY;JjIS1y1-qv>2yZjt;ii+k>?=yEah>TCEm?{rr#DHl9{>Gb5b-j8=e zR~3K)!v0G7m(Un4P;XNSQti*OaZ@%KWdbVQaNTf~{ zT=z#l59)&2<=vqsmC1_3ivZyoHdN6=e?3ZRdF8H0Z(&t}P8j-&_>4{Jzztyh0r7w_ zovxasYH8^rZL08)qA`#)d3AiXa~k`^48F6Q0GSAvoAE@I3Stq=O%9tk#6D4MM*r} zl)fb~xt4X@@bZy_`Jk4_wuMQ^i$j_uR#GvvC{i&}l8$x*_25TPEld!C?@ZhntK}>d zHHs(Q6b0c{Dqmtcim;6SskDKb-u3v*mtgVk^y z>R&^`Un&cbU;!A6>2}KB7(wf*3M(ZuS<*p_-Bcbx)Q-|4n{rTe?Gs9Q+lBUjP|IpC zKhq+v7?-?4j5nVWIcGS+$TiL@)MZRZA99p+hZJ-+0V?qhO1oK@Dc-7SS} z$S+Fwlj&NZG)?};C`O_eQ-P9=+R9`mtSLFhC zNyAz+!c3H*KSqilPjX&k+1=|tZzNk&E8iR96R_0(Yef3-Cu=J{m~eTZ0uk!|&x3G{SlK+;L=1$4tZQUy^zbH#h44;k^_(2_xzhm8{Kr=jlrwit-Y|k+tD@&1{ zW_pAGZ0~<+H$qBn3o>0~oqS3lOd|>`8F8+YHxgMlZB3e(7JMi79-VZ!STca+G}6@? z+2f4o+3T&DRxtugVdQa|?Wld4$Gs(+vld=7WWXD_76Ak_mGGvh+j%i3=urj2a*Pl} zU5{;@DrRg3mhnY!I*m}5m2i{1(*!pf)@VNDpSaw{W;WSk3{CXKUM^B^`YJr)qJ9I} z_0-BzeJ7z3iaQaJkBy8aN92&t2Ww3cgG8e-*QHi%@)LeMmc z7Fd72Q`W6OhJZ^mQ?tgx8^4}9i9GC^T}QP%Sk z#hH7W{s8d`tLh+9X&oTaj48BIDOV$TeOl0ZZ*0V`Yg70+|09n)gT6%2}6BQFL zVuqa9VCp;Au>`TsTC{#RMe1*I?TWZF=U~=VRidpyH zc147QzM~f4t;FD#nw+Di1O=O`Zvpb(uKp_9<{C3uG--x`X8PSrhUEwy-PR<|%ry}0 z*Z+3dWo#I^hEWYkkAdinbbjh5dHCHGJ$jKWNIPGU!C2sufrG)|`evkHay>W}1;RRE zMb=r_o85M$jn1uKe|VmIYtiV@O(6F1o>&dLOkhLQoCEO^p}%`|nW}5baZpwiT$}0w zhKB1gy>IzudJ0E)UH=`?FW(JBNmS@J*04Ce(y_6k_(p&F8mq202B!D#%5MKEeP+}T zQqJ2%0FI{5|Th3UkiOjRgd;Ykyk;LfcOLPTo z-{2PT|BSMz($X)CVdblt0ncilvVnqX2Q8~$rO2YZL_B)!j`kw2oE1;VnPkc?q0Cbj zO!cO;oia>{1Bq$+pbdPdrb7INgb?``aF?W|3A$K_^ ze%=WP$ZGeOi!GHzXwyg!<1Gsb0gt4|Q6Dd#Efq8%6Z)VM?l1F9S5Vlc2_EXMcbSOX zC4ls5Q$zV~IH_k7zb;|eftwsr7u&TSBzv)BpR`M1JP)0OFR91OVfNVVeydUU<)~sF zXw=W3JksD8Ci)1k6D^m}$^EvH2j)9X^O`)4&%(bc{ld#|KS*D z0372W`$sA{At@0t6B8aiJ8ef>XJ<=mYio0ROIv$;dov+1AvGfnE+Z>#TgyIJ!p(3! z<%a<_@bNB&)wu`pqr`8u#b!QB1Q4xLR^SCllt&y`1Asef=dX*q&|9vEZ!n^GE~}5S zWza7gZCMX*KVTQYs_x{mIAu&o|9ID&rD`@pG{m;{+Fc2Qp@sHtPV6H3+x+0UABboulP#%&Y})g82M= zfB*OT?0Wcm`+jnK_I&cA04@0Ib)oIRnS$Wo(ztK`v~EjaXFv65uZP{(=qhafk0Hm+ zkd~gFPEA!-WgHHCmsI1`^w{)$f&&->3U@ErSlW*eK}L*@E{_w4`#i12r|HZRpB+U4 z#11Q`Q2H-Kv8v%JICy)8UdO8IyiA2#=lj@$VjC85K>?(;lADTfh5)edJZu=wir%NT zkz>H66|R5ezb0^yV z7`Zo`*0tH*SFW3tz3LOojgX1zF4u*-r9aOb{|slB#ub z&-|s#B8KQnXf@2zegJ zpffD-{r}1myGm*?sL2*77|9Ppx4+zM zl$YizY1xV2ED~3=?aAKfn9=+1BNqmF4F?_@Su1i^XGOTAZ$!|eany=JjmW49#ocU5 z3;8=;+Hv<}%6F$$bG0Ex6s2(qY@iItCu!Kb>yg~dzh!QT1aRTocMo1PfW^xFG|P=I zA|6NO;X{i=r*i;?1h2V(86shww|TY0YF1wO>YaTVVgeYr2|6jQueg<+^0l>BWIEa5!i19U zB19O?wEivn|C}MHF)A8EQGxsvYppDsEr(c}q(end>OQ1uEQ1@Vk7{9GO|-*mk95f> z=a_=YREpdzD)Qww))+Upd+JrQ_k2_&;yZzy;uLpLs|;Zz}h%ZuU+~* zoc%P0JCd>1c|trwc@Z20HEGCr=TQ5XFzDdofYp@hf8UM;3O<0iP^?lk{uB%bG*g*n z*+!ddvNNiE;r=}zdyGKznnYCGK{dh^!sEGiZ$_|L)C~n9F3v|`bGi^|ObxOGt47fx za+U$znNuH(T6TbsB?-7(zX|nrg9*;GZ8IU-{Vjx8(IuKOdkO+xx=fofyaN8du+ALDrL;KbT68L| zn$afa^}GR6r%WUp@!rTYRyE>OhGzibxsI^N$3aWkV$`!BR>kmQ(nD5M{5=VH^3&S5 ztTTfYf#u#_@$d$7hxRf+6VH2Csr^m_B>9YIKogiIH(AQ6)kZL>qp9=vjxxsgj+}8p zi6S!GD$g6Wa=sOJjA4E)c>mekqZ7@=P`WoxI)DEm#TEb}H;l zrdYx$|1El=Ogs8Ba28b+{e_2SQ~xE#jR&G@NKeH@SLF3Vix|XJtib*%qX`&_{Un*U zs$x{fPbR~@bF`+}3pK>uy#goOO#QcCPPNlDO-~f;t|%T>GOLTsH!Ck$9R4VIl=x~_ z-lrB`%PM2q)x+5R$+mW46StNTzc<#VvtkM*ioaLO%fM5a&?Ri+(sIT*YkOW38~+UJ z+KxFmfe2&Jw3OQ$od9?}6ZfrXPvA;UqnwliY*lCp{9M$a?q%ZOY>>?q&RwL zO7iXUP#1JH7PQ9;dh&vJ_ylw}OVzq?v20}O+V2huORDwT_g%>8`eC1t0K{3!GbXZy z+X#PoQEm&S+7LJjyaO z!ltnd>q39bmh&NvLpM%%LuWJtlM0F*Tb$At!I-29ycSC>3J-7@?C))4Z&KCJ{uGG6iB(^ zxNRYQ{Gx%NhR04Rn=KfiVMZ{xk3ooo$s%SfN|H6h(m{3**4oHf#i7EBvWS^VDC%b1Gb{)lf$KSBphjhNgk68*IS-2c0OKKJ+FbwcXnenlbRmegJ@Zt)R8lhcVM z9?3fy*ZAZu%@_=!0S@pi zn(h5p&s1xa2zmiF^!_Um{asNMNd?Ph_#qO*VRkLHwAY%DJM`RkA#rk}7NRyV!SZyi zW;0$`!jegBKa(~6-Fb3{VK43VeqBve`rI9=$3AF}HfHn2OhA5V1!%oHN45CvSm`us z(n#?h?WCVqF{;m}QpRupi7}l&WBM2D{h#69ZfY`Z*04M?KtPnymO0*;4apANzDm>S zV1};LDaS~Drzm);`#YOWo~vTKh!!knTkCrU=SqI%-QR$gwS}K$NW%6~WCIwYWjQnRW@W9O(oHr{T!Wil6} z{yYV{mt}u*Hp0KFKzCfzyhz7uqM~ThQwN30r;pKNM!J{gMnpF3!oI8pLW%zKWNaz0 z@9P2lEicOhjyVV*0BF4$L%kA5ZhRfigoV6kF>$BRKU>>_C{hb!`+Xy43&6=)T> zGAouWPOFm8R2|9WYQy7j7BeIOi&EOBz1J$wZN!-q0$8d5H_K-yyKPnORS71q1jsnm7{H{H?ghgW zvt8$Dq$5WciT|-WQ0w>0!n8MhLTQq{#f`EsN6Wb3X=#bKE{Jz&RO|y|tqBI|PoTb+ z?*#+GZ1u{lVcf}>s_TY-+~vs1ZZbmJ7HFW9thxLLrz6k{&hi%|W^b61k2e%yFOJc& zxC#QC^nUkBqWHp#gCJFV>0U^~tcc!Kw2&tAac+2-P#wsf$Z}1h=1+O8_Q<&UyJnt9 zC}6+!k5@%h(uOTJBD@GpBC#$XT9wT4hBA`m|GJKtr$bG0Y)Ns0lqFdG z+Ll{yDG_eFWXQoDz%0MlZdWbK0>5P_@6xn=i4c=(6jS>^gTM=XzS!aXD0jMoerIVX zTY~;u0BS)B)mx(;L$o%Oz1WM@iH7r<8nmcfP7hm%d;B^sAS0E&g9wC_40Q5)>x3K!sFu%LK z_Yb5r5#EKh_3B$BxLW)l=0A9kSMw|eOM^@P1_?|w0W|Qk}bS)2C8uJYreWH{sKip*2Lw>v>HL$)b zpxS@%08GM1(vW{MA|tY9CH=noegS2|Q0Wi#T-fN1VH(xl?g_wHxSuZ4*YYmk|2IgY z+D9$q0#1_pp@Ea6?ERsv$!S6KSukG5fy7gQ33f*L?hpNU-#KoI#jh_-LJrnd%3?9{ zHZhYfi}<_M_s#crIzEzZrvP4Y88t(2fQ1zV=XE#KyFeN3*lo^_6T+PPshoR81p%Qf zc}2>7^`wk7pXP4U4Ho;f=CgU^ggYZC6)9WoBzc+EGlbLgp}y&xf>m=KarrT}i>G*R z@5rb-i~a%^iBG${jn5e?z@eh7KOxJB0Bp<3xh0F`152Wn2Q#Qspz>-wJ-MmYvYz#* z5?Vm9VaroONVK2VnOTjTk;ZQ+<`;LO7l&RKu+6h5*xzFJNh!#!#)0T#lB1~q+rI{> zZC-3vDQWL1$rpWb#%mUzt=lkR6nwQ&!cEeZ(rv3(NRljzK44Mcl;L65rax%z;{F2j zAtvJvCDgOwyEnBex|!P9PJln&g}skJT!tR!UfijZRs_rTiN^o$X6-6tsWsW8f)!+i zecU+MzJLiQv&zjxP4>v9myIg@Xi0jsqNMtTn!vh!!7(jyYV>~6Kg`aj>s_`-&*4;i z?>8TaazFpPJ}Y!*Pk7vdAJ}Xv{Wx&;lAt4I&Kno~%Bd8Yji>N&3PZusjOP*@_n4ey z*t@hDaVyz0(PC;OF9i!HmNqbXWDU7F5p$_-xO2QsZGwQjre=~SUq6L?*Q9_X5-c4; zviNvI*#q`JpaBmG2rvAn_P_-Gz9`1m6E;>iw6xZBH@DZ;w>CDA5RuU^)8Vjl(Ee^| z{M}afNtpONW(9lTh1Ap>alY=+0sPwBufQ}LnYX`?5*@4Pi1EcYRwWtxKq`qM-gA@Y z;~J`Pz{zW+xy#JL8Xq4e_9GVL8(=V~F~h|k!P-^6s6047TO@&P&AFQ9b+z&c6wL@A zSu?cq`S|P%w(8m3qVsx+21@z#C|XkZ^zUg}93`))9m!m0eJhTEV$c-IhW$lwzeX5z z=l=w$;YvGb{u}Q^yKEq`0aMNOhXb>&HctO%b-xB|20tZHrPANnSf~Mp+5!TOh}O9< zu-(}>+?mf@E2f<~n@J_ROJ`Sob-__8lpuwf)UoZC0qEPQ-@#*Ec2>1uqLF6qYwlnb zn3uqsv^@*@712Zwnn9z$*0t}^8`nlD2O@gl+rSx0L=HglX6WXPn%Z_&_b{ZIk<`_< z9_4wU-B_s}a<`-Wvi7GsFow!$Uqk!rv^L7 z%8#|$tPg)l{{Dgw@p?T3jjJjCp&J0DbH*!&DO-1GqYG)^uNw!o|DW~qN-iGM6D=C!7g=8Ou8N$@^se8**+kB?@_k!{ zNFWt^EQqIoQ5%RAsoV8veHz^De=)>oZT=7PF$W4)GDx&s3qTy#Wti^VB zeM4rEncBg&HBuXZzDdCYg{`uz#J!4pGwTd+nh=R$p@$rr;xPDJ_a{yO0E|c_DIXqRo|2@EHyAbhi(eT-#}Q-XeV4oZ&5%j3?Gan zOAX!CH|43WDkipLaR}AtuS}=3nB4X6D%TP3Y*!1OaS;`nel1ltPP!2N z-iqD7g}9K9kD>*n({}y4dx6+2u*A&sF7_4!5p<{()K%iC_eYGZa-830h+M{dOMCRL ztx%O=>PX0%bEa_XpHr_m9o=B_@E?8Jfun1uuNPeMMM8aXJY|L)QVEIkS66$lTK;RA z`L}YHRZe8qlE+77fvbKk6VXGcs*^{Ns5BHW!0@*jOncQu-dhddnu>y+RA1L#&(ao#}s^dukFK|53}BPVX@a=p9EQ zz%Yut?0@Yq89>RAB+U{)4@}dd^PY#l3;W9DEX^*tO2+E6hbJ~-q-aW+51Q^v#4vg; zFbi=2J3pwlh+aiTV~g%Pq(qm}v45-m!oQZR(Q{T4G8B&2izY2)E+~LR6}ZDZLiR3< zH7u&ySQy1#90m1%H9c_P08Cg}iZg)~#5J=Of=95|yV`&gnVO0U;+V{Jt3y}6IOj7k zZDkr^({!Q%^G`q2wsOZ0>nI-6mJD=DwV#h5nd{9yZsFmfc{$`zcHoYSKDIKKVPQwq&}At4@~*wxpXf9*3;QLBVcAub0E62ST~vu;=g?o_!F9?zpQMQf_YF8FhIi- zKXG*Yfxi7Jt{Ox$;?OQ1bdICDXG$Ob8u{l*9P;66MPOFbkYGt80Y7YeM1#~4UDuz2 z(Rxv62;pz#2)fIh>Pu}mx}MRwJDz4Kr~@Ts)xeo8r16PiDEapGFjIsNG_Lt4ONrm_?!oe975UgH6` z^Kt%3poN@gN!twyA=ERDk6)WCldZB$kT|nLE;|~tUIo$+3H=w1uv)Y+dd70pAWRI4 zuRc7a>Y`%N0RQ8nq}LliPQ^`9`|sxCvV+*9U2UZ4!hTXA=;MnTtk?>h{7baa-;Wal zHJjCg^E~G;`4J8-JnX2Dje}Vtw-^j}%75Ivwp1X&ZA&Am^r%6G4gxT!LV=Uh72r}M z{B06lc*k4;$rANML-roO%ev4tU!(C(BA2|ABwqQ5$}!NAr733x1Fm=x4uW2+MKvRB zs>R!@j+KOi@$_C!-F}Xb&k!1o8rp(&IZEu20@JvI4Ant$X+3I>Xj$Y`}SKFubMNdqg3(GKQM>TuBN$$}-KC#>Gor$Psqzj6S)rby13Kr<+^ch6b zybG+nWW8JSDomFZ0lFGUi5gk%%I+?mD=yZTt`^y5BU%W3oQb$?x|2}NlU?30U!|nk z`MA1*5-eKPYbBX?Ue@nqM-=OvnEH4`rPA`^z~(3#Dy4~+pM*u*CQE)feY^4G>I-8= zh%eTXTyuD1W4)uzV&d16PBs(qmMhZ^?JlWzO_5&W!~co3fdDbGT$sT7ZS9*nWC7+5 zIldjZFlh5ih`pGwDaq=Oq*;5|Uuy7Bz=Z=3Zr~;9P$6wXnUJl5F8J^@)@-4B#Ycxz zdj*R9sSy@oIo^61+5;6)ym&^|nObc077nrXspx310NjkKFc~r{f~`ixg%Eu-lt^QU zF(WQoc}D#W(dH~$z4WcED+*JHGRf}R!@zj(Q25zyG{ZhL<345eIONML)3!x(IWA%U z%77purbr3pJrVVoj*>slsbVD-VtC-9)moxs1%B^d)L+q~V+Rp4X0D=jaWy^A&j{N# z`vgP)GDosOc5+m0I4F~yLkT;D*yJT_8#~%LMOKj9rWLU^=sf5lYGDM+IPp+l;-!EY zk(i+pnv1!JTd?xYUl$pMU>?{_C>*)h&it8@ytwoG z;lEB1*9wTEKypsgoO+R{svMIs<^)`y#iD4JU!joZP~X@#4^4@YhJi@D1w13>W~mRE zY4xpI_cxLoRGF4_y&#tN{lG8t;8E8@LP520M`T>9vm%l7O4(RQoBZ<5QSJL3yCPmf zP3h&}(ML8)7T^C!CdwGrW~7+J z(e$TwJaF%ygq&Eo`kyJIfz890yKo8y)2efy4=mN?)Z`IiksS3>^CM!Mh?(20_Yr?- zQxQhoEtCfosBiD#_(AlU>7cpU?KEbY-fWaP($*b}j;KDK54p8t_yE;Q6PtFI=WVYX z@lf&r-sp3us_k+rJa18uH9vTH21dRYBD0G*XLu?8fk|I9sOqVXZ_P;ehu!2ZpcyW5G4HXSBh z)b3acV=-i>rYf$(1K!I!$B6W%FQhZK_aI_!Sz;FU3r9dAi?J79{lwH%HQ`)`E<=h; z)!pvUDc9dfZqD_oDK_@~?wlM;mVJY%d3f4e4jFgz`ERC7zpvvIP@x$V_EDfJJBph; z#=i3?q7;D<8ifoyU#NffO)H=2j)2}-vPyNzT40=mZar#1W+r3pDPhkfM&_A;`drY4 z`ZS-M^6ea~KN>iD^@T+mw}kgf=}%|cVAiUZz?$2wfD#psB-g27;t@up$`y=*qm2Ha z*|BT79y5s(StJHD*I(Ec+ZV-TNvP)`_sA|av(*)uF4{8HMX=e*_cZ;mZefZlIwKdtv7w`&XY zwglInusbE{-w0s7V3>2gOgc^#|I#uS#sX7au|GnFrWlmSrgLW45YpTg<810YC{bT- z7j|=_<i<>f&-Q4Dpa7$VWEqps*m%R8S3}2fy)psUh%^+{ zuRk^lLni1Gs;OoWWUd6`)8@@2dQxRZ6P7pzQ9ecGHOi^&4!8_!LgOHE>)BGsfo zKbnEvMH$vA59))loVe%Xy*~k2p{<>Lf>L3pPrv-H>q3!id?7c{ortmspds2ttlW!b zP_u{#Cg!Oz$gJ^K_4x-Y*2pt&RJ^ThSNf@akb{#Kw%IayOfjAr886%!JIh(*#TrRp z98da6E!dA7dDVzGZ1T1&8jw+(qf#QpB!v1m)cGuH=)iPTWN7B*M)O9VsT&*bVs6$8Q7@b3zJ5LzkBJ(Xq$jAQjV&alNeH=yY+hoZq$)=CGp=d z68PkSuW4CjzuU?jw=$rP#Y!-oBMj?oG{e2F8KOm?pm)A|k-`xrOdc1OON?licGvRNj`T7*l89^xt_@^^X=Wr9EOPAC zF#8~YGUemhDb)LEMSJXgUi0>hz`T3rOBkM&_r|I%Jq<6(iF|1_Nb=+POguc+jK5ld z0Zuf@nE_K1c`kx7B09wVz^C5;@OJ&|E?gE88T7i00e%xLvUE(Od6#F>9gsTTYfi$2 z!8}s56KSD>s~m<8VF2hu`VA7^;o=RxGS{FSeCIVPP2AZZ%UAs4rCVvB>>vyZyFd2+ z-f~n4dvYG8S~H&zOZ;RaK>GH+BCNMa<2Q>Bvq;uK_~B+mTC z`?6$KHh3>RX_fbsX#g=kD6x_$l8}Ae^axhxPbNOVb=BArwLM(s7zawSStu~)O$Ggb zp&-uxKfr+n1UP=!pmGp&w6s^(w^Vm@5fhOzG2vjdvo$t$wAb`^0MkyJ8-QiS|Achg zGzJWt3Xw$sZ616k&dV<&iwUaF1y8ewG;Z0f3^%j($#9kC1b;#!f$ej7z)4JG)6z%+ znt-^_gKN-9xE0w0INaX(30O;2l1o&9`4J^Uxp2weL-N3mt+PN5)UlxvyQV$hlI{v z`XlKEs3?3yiz-z?Dd@Psy1wK7tL6UZHuf}=boSC!iw;oqiP*TR2&(NmKMG-V9)ExQ zZsqOSxA4Z!CARPDVtW3Qy;i!rMk;u%v2RF^`YraB-*xEDEpMF2L567lK^BxC4~w_M zY+WIAq;@4&Ck$TG&MltUn=zA?Wj%szGIyL2!*3zn@OH;jtt3kUHe9l!i&Xur2`bt* zcab>_-(;~OvTRRXCqM|>KWC0_EefQ2bY$1Z42LNE(-C^21p{cbgx2Yy@BNdC7FwJO<+4+`;H=V?Et=2n z>D53l`l@d84eQHAC~KDkY3Ouz#XV(4V`R}ZK6xcyS>R)+cN$@HBN~fYo{o{r?qOoD61xzQwWy%aG}-bY2WH!N3r{K--lW?ir>M3}&fB{24=(f}>u`N56h$9;tf8Qa7Wy z0UdMdjd5Uo?{w@>msP!}LLGHihuuTLf*LQ|5+T`tx7BBV;DH(vf`PJz?dp9Ov_cIOcI2Udr??WE|RqJvhNf9T82BdYb|*b;w+C4#NPS;LN9D z8{lWKEvQB}g#%0sn6u)sAs4yLL37Uu7<4?>V?C=-I{rDY5FJXUenmpg%77c?+@6aF zy&~>0X=32e{3Aw`mdUXxBRafHuK%wHWkr>UJM^iT?%HZ%a?yhw3WTn(;E56r#&oK*~g^c~DDto}|( z!^05bd`Flhep6G@#_w4Xu94ceZz?i=`k%DF|JE+5#zp`2s!<6Y;M+2!rL^1D9rCMr zWH`bYN0${zpoi;{9okKG(E;{0U4cQH#d>R21bk}AK;*aWUYnJRFh!;Hyr>|ssD(=WuzeIA_kY87>usR)JX6|Yw7 zeXpZ8Gi`Pe7rT`VqJ+*8WF8O&^D`g&)bI;T(>pbRMRAoVyKibE=gMIg4~P6IeN#Ns zExe1KFq1Ab-nA1<0c$&2-;y}X-KnRIQ&6qyt-mpMut1j8)YOk^S@f?KoEM2u&Ss@w z9RN@VtmlA>OvCn)uFC z`0>12dS8apUzcA#_$$rl9yG*|66xnj%qO@;WoI(Rm$Vr^QlP*cw>$WAXF<-=$ zd)+tVP)?$1jBn6KI+hCVYiF?bukW?Yj*#>z`b>+>R~V{SrM{t2{AdVpJgf)o9vp$& zk8A!m;AgPJ+4MuO9M-*HEc@-ILK(|t0 zc;RRdN-|W)D9(_ibE&yT9E!#xxH@57;1jnrFP7WG8Nag?D|N|ovCmJ+$nT!$0(MI? zFZ(EHF>ZHV3u;Il*QR_r5RH9J>C+&;nt~ZrzVkKW(cn)wOUeoIH;aV%{o(JDYQ9?t zxDx+k3;sK-Gu(VC;(@tWT&|w>^FhB4@8Y+Uc^_Do;G7rrig5D>U>};{O-)*r>V6Ai z_3Yzk{aLkfvZFD0XJxaKjoIr}xfahV$`rsoa>=R(7QC^foXAseF z%)ET6ZW)J%OH%jyfgY(7z?>M0ant;}1uX?ipCK-=1y`qUP>cR|!$Vc{_**jHEkuQ2 zTk%BHBDAKa2g^FSz>GBtnrx|m*0ppmqL$jf3FPt#=PYoxHCslb2V=X-4IfK{DG>be)4ofjSldYAg z$S|HUP~b^DYp?1-WUK_4_YNnV89j|If?S6-cIULPUPTl~$(~dz2WgLdA9=gy-bVv7 zsyA1rVD6Bt%GqTOyl;AUXY@o_FH|uJK{gpwQdVDV*3-j572iqki+s!`;)49V&)+`f z9o5w|>Pd7jz;r}FZ6cOe;$*S{;H48q9FZ%M$_GZGAP&(MW!~I73|ai} z7t^qO)@%HKLuXEBs;BChLbQ;XiTS=p$t8CLjGl3PZkM%Z1t+K)KLPcYvPf!MU_mv% z-+g^Do_MLtFsU&-Mr!=t5y8C5>-YOHEwed(su9oBM@0K^ljpl0YWHOV?1}9qccGo0 z$1fVCRa@->(q5t&c-9#5l0+Yy_FA4ss zQo=tos!}p*bX3mg6Y@aLvSl|(!Hg5F{@|<4LRN&7e7EPWr1eezd%Zy|Q~7J15?u67 zv%F(gvN@rpY?z7+_?rHQQHPX|a*8<*Dgpc`8yRu7h8$_*_Ttmy_KF*ILbdJo=GCI^wj9HX$pq8H7Rene9ieS3OKA0#X!G64;P*ZG|yKxXr}XPGU#*FneAcy*!vlug84o?7hBvmhJ`1O4m5`SJukg0PVe~L&>eenE)2mrc<428=K`zs0#Qh?PY>^iNb(AHCdRV zh4ULLeNDH3OD1uK^0I8lquz^)4L&(dT3GxB{c_88ykROs#1(DKub`3L_pv2`-aBfQ zWmrY)|BGP)E?ZD--+0GF00pQW*Yue};`$0M`osKu*qYbI=j)ArZ5XR%+47@5VN03X zCOsvkEt}}yj_XsW-!D@k->N4-DOV`2Y)LzMYjyZ&qdc)9kSF4}%tu2mh!Xo5QP7ye z-9d5HJW>!F0!-C7F0%<#9gq@OM^J^N?~?XYGk8sFY7?}kweS= z{CehkE;sMsI+0aL3igN)SzNpTUtB-IPOZQGCw%+!?Aa#-`j=MD^bjXsP8h_G=>E|2 z-IRYixE@!{7u(TCvW)DqwjV%Rl8q9vbc2)sYgg2ZdG$+di%z6_%g&Y@edbwMy>ge# zVyyZ^>PLt92`EVK4PR9P{9_^k8E0-!V9&_7ssjH$W*>UdRmkvs@{<(2w%+B%E~|Kr z9owsr?w{v|(}P_4+=G@Chd~7<`1)p&8@npk2Ay4TEjjSL;}$lA7oDN5@-Fvd;4$Er=0c`4vItOM|4B z&wG-5RKL(@e%zl5RHb~yRtNar&JzD@mb_7lBXZJP74WhGls|#@anf#Gn#7M6(ysj? zUu@|K#~auruTOU%7JLwzG?O62QyOMo;5#*umqXtPob!VJhPF>R3%gw*xiB||v0u=)Do;F1FjjgSOK<5f} z7F>J|*4Fm6x|Yty*4pZ-#*UWyK2kE^O98~gK3NTAWtkQ6sKKB_$wJ^o3MwUk8U7YpmsW|OusTi2`+rLY#-FI( z=U-aqQvtU2=*RvJXkn6g?nX_#m|A0zI!TY~pU%_S-!;7ET;HTQj@i^qnch9*W@o2_ zM(~G<4bWvKj7Cdq=XzhtlmE=qF`{>;KQ+l27(t9b#_})i{$spWfE73I&T-T_toXR$ zhIjq~bHsqoU*mrqqW5(UqS~@DA}(!gEzOa||-&_2w@Ok*umPvcAKm%K&cYRZvQ%%Q?vTu`r=rUK^ar(e*vX()? zlqOr*m=De@f^ODLSL9m!cWI~t-g;Nt9~QcDSLfrv+DXm6$!3iq+l3@GGT)YYy2lA- z4)XgX^7eVunak56sYY+l$n2fd2#fNCu;OZ^07G1EP0#M9-twi3K9PFN2 zSVb2_kZz8PDw8mwI}@ab7SN!7lh1VL^BIwf z1iC=tRz9GAv6wrRv}<%b5+KjZIntcbzip=%!;xrSwII6vdJ0doG} zs3EL|_R}p2TYK- ztFURzuIGSXZ0Eh zqT!CL`0x4VVhz+8G;VZF4O$VRGU$24c+g4ZP2*4W6s-N5Y3)*m+c? zKTMxH%t1eX`_#W;2rYXnwnTP3i5CP8@M7bWCb5>T#ms7-L6 z;TQLt*-oko95C3dG?wGFk9wOl#((<0ds!m@_2r$|^dHGIz0Y{)}=H_Bt zF4!YGAOv|Kd|7p1iP-n}u~pO3)ycwHdF%QihQSdziIAhD8`s>rFFT;K+1Bt4V+};6 z5(Suj+qb3c^PXyUAC&vm_jgEU>+s$x|J@&uspF}VG)}@d$+ep}joE9H{+s5{9tx<) zH30yGl9K5>$wPpcs9;06=TKyt%(<=(?D$KK%Brbs9A1?I_i*t7lWx!D5_h!y!t-jSl zQbSVCygZvJy6YMlX1U(7hIOW*6T9{&&doT72VK?mDfnW0+;gg2UTxNjI9rVwm-s@G%J|$8YSYe0W2(XC?PK!FaryR)?*YVeLZS;>{=D@M)>g z>pxq-|AZYQ3+nsEiTS{IkqW^=O1P>K@h`R{KlGUqN>0ho)*M4DkpePFYbRDuB~9$L z^wj68MzIkiOzHCT7g9;~vFIN0D^VR+P`W^b(8k4oc;P)W)S-8iqW?IbW`tF|!YsYP zG{PDR+85{~ksIc!3wLoYxC~f_eiPf;L_>OxE~%)9eyq$HS)-8cB0hKtorYV6z>AaI zS|#VTv}}W2;Z{q@;HJXx@X#tnHkcl#mvKV)@_EL80$+lPbWuCpMwsplDt*~`7GJEfovQfkZd=sKGj%=`iqp?-X|A4Qfg2v}7 z@LhB;?-90FsYPW@m~acZQOy445I|W0a^AUDGnDj=up1fPsJyvt0BG^Czn+bLzUUuo zuT-`KQ~YQ_EVtyx!-INU;?kr>+ujkiO1f!M&8dpymY|Xu#QkMClw2A98Xjqcr zK7TXG;tw!6aPwAl`TAA9R7-N4{emPNnM;4TYi?&J+aEcYiRM8_^0Npv6s4*#AiI9@ zV>?wxGj)!hJ$H`)h82Ncdn(@(AR8NiPSA!%&)|mFtmM?K30{R;bjxWYy6}ocn)uQu z6D1!|Osy@O?0#3C&UD6bwQY^(==vYh2ps#WC56>y<^fzwzppDne37CX%;?O&+3^qE z&mp}?>=Fs7)7z0N)2E&izCn2D7ca+q9vZ_L)5U+6%9{6TLCo3kICoMYKx9zl!f{zh zDvg6Z_0fX$O*7ztgJd4%PJ|Fyak}5|MJAAf6xLPR6Z)G?Q0S3{CcaB`M&E4Vs^zuV zD+wQ{3w}(F{-CL|23jjt-7S`897sAtcITC|Qsm8h9b>nVP;!7k}A;|W(jY=yl`4`S@=7T+L-rS%$eW3HVI&vT7 zt!z(B*^J$uxOFbi;f!5N2(mgXN49Ck5&5AZzkBaDnNsT>)F+CrXfp?#vhrry$#cF9 zI=-?#{F4D^kW{EvvLoP==3VbJ0^)YI719keFg&n^gjwgICM}zwqD5wxY)X-E$VK7OXDg=9)77M}hneE? z#LN6tD#&v$9Wn~LlEj*Xsq3sy%i|LsZN;<2i39x*{w)^>p99%Q*l4pia%|{+i`JVZ zEm_;RyymvSdQkHLX6CeZ-yTE`N3_o8GO4Pye5>dfF6B_ydZS(3i3W_Ej7q2J2-BZ* zVSEZpUHkqrx;FDS4m1J%y!l4)1IEGB81vdp99T<{nzL|g*=Ke1hAR{K46z#~aCvJR z9SBjcC!DFVk4U4=Q{nEC3IV z&xe~|N|u})<%(`tf6d2BVH^Kq-(}y^aWkPG7pu>xkUxOjBTiBMA0(5JwTo!>H{GA6}+9(BcB=0iAZnT&N( zx>2~(7cBm47#!ymr71)zA&)_k$Lj|0cYy^AdNqg!?@7!ykZFBoe@a^1ov{a9yU&zN zTRQNlo=63_7U;(Dd>^RA{U6o-b0pm|+kl$&C%6C*tCn54771&co}O&(ZT*Yln|MEQ z=Aqf5g#TaE>MTOon9T7f`m+(%D69vy$a-4R4^5SR8ha72Ik>ppjF-FlUOl_0 zfY?RrJ%^tMDRnYF#s0O&ojOZ}R`Jw*IU=ZY#piWylLvH7qoEJ!$_hFaYC}mnRFc!| znRX$QNc>40?c#+Yw>9e)kq^9mpvd?`LXbULC%0yHW`x>T>J0r0$8>N=pNAdLm&yqY zK(B^6mJ#Q_={>Sm0}o5W8zf9kb2KgoaO4m z@h9+es7a^pNbV4^ixd#fahq0?Rl_|n)!)9?Bd?Pqf-K0MK4Uzk zE(G^OT0x0%&JO7|norJ-g0%b5{kN@w9d#Z}tm>`T@>kg3?+d?3bol19g!9nV&@ztt zp#v2VZMM1J_XUoO&_Ui?5ZEyVf9emE#9<7mHSB8K9grcm8taxBosUzf&PA_ZRmYvg zUZjMzflPI6{ymh(-?6S8&+Hzy8gF4h6%xxE>8fr&l=Zs~_UURr*znmQODeNChzgWj z52Si{`l+Nz%$~|WiC93ae_AG{i^1rB4rPSS`mQ>a-G!e3HZ|ZF&NI?l)N9FtosvJ2;wvKAx*$nZ8Euj(bPSfj~KHf&4 zJ+Ya21xdgYsjhhh6489JQ zPkG53(usZ9AXJ`VE#{O6hCEX67KD)9j+Z~>(vjBOYh-5Z!Pm`Q7f zA2CqvWw-PIF(H^a(TdmC`8u!>2`V|{8n_w3wvljCP<{(^e>nNk=2@dDY2)Jr?XlyK zAlClT9h0pOQ1$4EFVDwyhWHY*>>1?P)#7EuO(0ttGh}|{L2skappi^`f45ujBKy~z z7J~7kEmS%f3^-@fdAHk>w6~1RxTO{JoBrNftC3U}4+9>(p!06ACz&wVvj4R12iQJ7 zaI#NO<}ic~6sox?UggVW+oir{_5OhDDm%88cedc4Hl~M@!JZ_Ju z!t;Qiqw^(3ptS3n&`*6fZ*=6gd9L$H*CgBL``Q`F-Ybv?1C`GV-ka*tml`Au^N*YN zX~`@I%zk6=sJmi=@Eh0mE@9h2;Z3gSJhAyMpsi`H<5ecJ8D_#;b-&)9;E<*qRO;x< z1~an*##;?fPj(HZbrpyKv_(QklnEoE|n5!zg^f~`KSA|8zfQ|A?v+=ua+ z;z@C8t@Yt^vMqLi-CyAXxV#%n1P{j3NV_u+FAo-RmP12GZrV#*gFb8DpAZwQmq$61 z%T)Ho*;L!R&t|*K^+_=hly04juxGEq`rtPh|EjR$Y4rx~rTJ8khP8RTu&z5hdJqE& zDR>x_RkvGF@@^_TDxc-lpt(A3A7XFSzlkx;XIqRp4XGWXR?Jpd>=uK4o>OoCJa?tb zq$NHrg14y5Zy3OqlPYlqvW&NiSyO)I8hhZikit#YWP^GUC7H9|)XJ;9qI&8VS}WwwT|GUrsQ17R)%RcED@PdY~BVtg`gI$8CZQcI&X1T|!!!CmBxp6WiJ? z&z?pSgK00S=u?R6aDe9uGRW5LoX4o+c09sln^yD30$> zdQ|9^g`8$D|H8ltAGK{oZ*is&aGGOtAW>WRB>{sFu7a$}16 zB~^#;17Wr!&gxYk!;Ro6bt!ISGg0G!VErYqKGkobg>%j>D?2(}8|^4AP!+vXFr4{> zR)wfMTb-QN=HgkuZ8_j_v#RDqF;DQ%DW!DNZyd02Q)*}6qXzoVVFQSij8hU_!&or^ zYxwO`L{>ZhIry*z)!+PjNr@An!a0_xYiC#KNC~0u4p;u z`!xG+9iD+jig}QyWJ$PX2Klg1Za!Qp2Q{(JHL+j|dl9=1Y$*5FWUZ>qNla*fXz`-$ zziQXtL{sHMJIj|t1@-!3DpnH zudVZiYbTuJpRW1jlYtjjdp>Gu-0&S8u%uTdZr0!ma@o_aZ%1C@z@cI$zoDqIQ{QbB zNpRI4lPD-mXFp&Fo#h%#s-!_3$X++iA}5DYb^_l;q9>axl)sQsM<$_Aa!GzR`|yA^ zHAsL*mgGOB&X%}iZ31m9d>xX>S-HhosC^1GxB#icsdT8Lo`uRn9Yv6I5Rcoen9Nii zHQ05HOsW*m>)&@gtxQpkbWSU3&1}+g{ojPizE21Y8a72k|2At8=o#}%-|nv8E-(6^ zZO#>Duz76NzN`$f^h?h4L>NvofhQN-#EY-;nV$rIlr}xDx$xZxtuv#}(xaslrfCe8 zM)ZQqccP}Ojav-{g|8bG^IkT+-vw#oHl&p!Y$p5{G=H@kf=w?i=T3n+{um&Sm3{nq zr%C6kM;&a`Kndwov)VRuv;}cDH56!~@uCbnqV~O1=sD!kKj}C&vQiWnBl9``{U-+Y z)2yXQPMCEU1KHZZJF4v1;mMkzz>?&oR-ZR@{Yt6Y+iL4ExKQE@!q z*|9jhg~g<FKP`S;9!UrNV@&IAq!p%CxkpFlA4@vS3_Xb# zT6|NAvQAH<)J<7;9M}PKO{~F``bIF2uYi}F$|ziNydG8yh^j$hL%KotasS%ym0Q7| z98*i{lrH|Ip?8`Nm3rIpvari`wV`A6pua6K8*V}C)}eU?C!)>Fdf)QLi8gB|+I;_m zjcv=#Q)O)4L#Hw=3b|o{^~Owr3mcc%bRD#2S^?FM|2VME_EKN~XzTcJpZMWHXjmdU zhGS~)>6&W?*~45COPu+~BHb%f2ysm8HTL`!HG`xtwe-#wbl)G>iCmo8WCz*hBaOGK z{y(DLDLl^admo-8jqS!xW81cE+qP}nw(TZqlE#f~r?K6>lYT$H_kZOeb1(;co@+mQ zuXV2*344SY>>lZ3()nvaLJ^r=gLVL{wGpi|<+r0ZuzR!^}xfl~1B&f8a{~N-H(Sm5vq^Z;^$qr-QDi z1cqg|W+B8HO>pSduk`QmF!x*dd;{M_FNu0SF48rE`$@kb!OeN@nU&Ni0mdT)oy{Jy zDBgS~2qLEY=gJ-(J4Uf$g=~8qehe(Fk%OhnH1xJIPWe=e{r=mP(@V28Q~WHmK`-iD=(v zo|qC#UuTgGQ-dChZDA7VHaWtW$-P9n{HlmWVX^{lYOw)YtW8v+9jEcf^wOUetOm*#yv_82nHr=fIJ>Zltww_eg}k;w z;|Y8K0epIF0BvGOs)W5rNsRQp$k)McXiHSn=Y1R06ANCA%LhzIWbM=>lgaiE`XRzg zRIV+cA8Q8vSAalG9hGF!EYK7$Lbxcef9!$l4iM>CbnbTjt?ZgMu_)B&=NSz}w68Rk zCI;?x+_*HsI~qi)ed)Bwlk3ua>cs|zpl~PBp#6LDUA7mb(wJG)wp=P7Q$%ILMz%o4{S1N%X`QAY zT&0ERiRMaK5pg%(clv^it2OrQR~;zxWmQA0)TG(Y4;3jcM0SloM#oim3>CRh`hcML zN4LVK4?Ar->Cg!-H~_4^fdj?ATGGDJanB~sV`sirT$(uQDGpCnbRtUV>#y8K+=rj1 z;8dvErNy;mYu!=H^#}OhMl8?p)!cC-C~Y2oKK;^<@E!|vdvg@y1e!mZcIRFB`kVfp znbZ7f62ZoOwskn~ge=_QM_?{rJZ?R&eJ@j5YbPFFZ8t1 zr1)}HK#`{<)2>nzsmtU&5lbJbu&W68KUeU8{IW)uy|-Ct7yzziIZ__X6SX&WUJUlsrrkh0GUdF zywii_gE&K+tCD3b(qTTFV^68vH)d1}Nc(fAk4F9BF~!iTxT|kJZQx>8ug-I?t;j9* z`wX76-`!#jhprFX!t!ARTe`aGj-(K}+p1xN&8I~-($&}bvfJh|Wxy_U34sHh*r*MT z{lPOf6!9->jguWgoZa#3^i5+{MD+1!~S4d>&WVAH;vsa6sbrf~@w)#&B?Wgn2j<%wVufUqylx)XOuz>jFc zGCVKt)~4~rGv{u~>TNeCxvJJVZYTNvgWy9l;%_IIOW10fG(evaw>;Bz@B5|a{ls*9EwN+c4jnWhhTNjMf z>on&KL?$EN4b}J_< zmkq+4miAdVJ!$F*yl!#dO&guEoKuK@3`I=YGAZbujPDQv*8V%*1q^@&aW~`hK-(3i zaPC7w0pM-5>r1rjC%%xY3P}#{@mi<^x|WM>j7)LrPkBQ%M~fbmz--y#pV z6X)p=wX{;{1rsq|TsP2M_EkPZUbIEqlHT8W7mMOkEt6-j;!~OJ==A~&7=1yMd zr@CCka^5a@^c=U?rj1Q-eb|sDqEuI)&7Ftq)z=GsvVlC}q>j+*{-}iezTVBn+XFmW zWmYEd)L+y71ln$#sI*3QsbG4yqL~KjP&r4fW74NA;thNxp-F2n?b*gl9OOsnkp<%1 zfo$ezhCZt?rG~Ug{dsQhVszy^0U)36v^g{z;AbVeuX|C$mb zl-$TT(0+&T;f3&50HW*F{bS|Cs26KP^tpkyDSvT95Z?C5pc1c}KrL!fnR3}x#avs9 zbKiX6F_~@sI6p-(f{8zoQIN$%=9jgYB#*jO@0LKGbf()?mE85vHPh2*If>yj{{tmF{vRlT4Fn}X7Z7d;I=hu^vqPf zE$xk6?cMGFelO4?BtQh1r7kxf9R;coQ(MG{*%#;7s+G~K@^)+z42R(t7mEolPrbb< z=>wfyxF*;&bgSIhLp-dJIM$cOMTkK{Vy;e%oM|fqV<&d6CJD{bG`;e`(!O`wTT33G z_4mt%A#-!t*Fjg;JxHf|yVhXVkDG=B?#kI*V;wp0V*)V+6y25pL`?B>@{jdKf+j1gA-C#J|T#Y5fOwa*Zmy3{a2oBivHnHVk?Qc2*slCXC zT}9Voj^X*fRs0nXN2(Y#r{nDoezikI7G7A159{&d#uN#s?kmg5zEfAyhB`-2*^NdL zh+&deMej!=|342E=$j$7O0SP&O#uiuWsEspXJq#b6yy%_$Y-9ld#Fc*{i6e?BhX?* zEYaO+ZeS$WAjjg1+Q2pWYE!J~q(40Klxbmq6&1siN*A#;Iq7`Sfm(i2!0VuprD&0q zG&ov^$d`Z^svt0t5uQOw^C*^|3kiooz+NNvECxr}jh8=8>8odOl z-;foA{w}1omyORq6z_s%G;PPQS%mM^5J=7Y&v`3A-&R$|HKnx>F!RKiyC=W`>fS+| zypc-bn-Fv6_JVb@-3DaA8r;frj&NB=qK@gh{AER{2>1i-`C#w-cqki6v~CumkfpMT zcVl}g*(DSpF9YMY$Tman-OQT$)86IDn-tCIj;vvYpel3ddw=NHin2TSsAn2!W@Tg- zlv_%ah-YOaJ3%zoLD2FX$@$4;q#F{a=!gnU+F3`O-cajJp{4{0oO(Iw%)YG7&prfr z5&`+AB4_Fghr=Ske8XtN`u;ucv}iryL{I$$sm$lqiY+kS@8pmg&$4ghSj)E3(AjcD zy5)9_?&S>_RflM5M4>KcP6xz-35CaEJCq-CQZ6;oV#@Z_N7t7T98f7|;n~!PqIw76 zX;PX{6d8HlEg$(0P=DlyL1akClbJ|+Zc2pU z_J?EP==ciB8keF#BNgIuY2o*Dp1WyFIg{-jcgX!nyKg z6NCvE1?(#vN@zPLZOQji>+eUih^9YU+PCSL=Jk+u*sf0nx3(80ad1U&;R&+^FFoJ5Je0kwk&OhoC~sRa zVq<|;DZ|;A<)}JxVVAZ<4q@G#gKCqi9F0Ciw}SX;GtMWMD|gX>4%%owIm(-@&^6~~ zzZoz6!&}v5DlO)}q53BWX*PXAMDxso0+7L?$||A_%`0nNewNUg{5?160PdXGcutoj z0u5@oi~Sv6i5zev<^K`mZL>s9xr63qlHX`O`s;9d)7j?0f0y z*AbhVzGYX_t{k=;@pW_7&!0Vaz@_a5Ua61IM83P2!;(FVTTp0f7{gaF+1suK{qi6q z`lMU!cOYmzEr$=dA|2Ktyv(o@yobJpLeo7Btt{gw=+gH|zaWe^RPJM*o{s|slr*$k zw+xAolz3V^RgRdTCJ%SFz|OA`v=g2S3ntmUfT`ImNr2=nJz{iI(j=CX8;_g*yy3c0 zo=R&@wNJ^nYXU79ews1Jii<`SnV!<#Dr{hiHwd{C%SH6)wH#9fb;;wgrhMxfqL4f` zr2fv|X{Z4M%p-;6KXfefn-O&}uf(0!kS6uzVI-qmYYYTW`8dL%cOTNVG4b#O5pec) z68fB!{_9r(hL&23V~0iaXxCodsW)c!+lMJ@KNKf<)AJ|h;~qk7&h5W~zGEf0RNk#B zOX_%QLXm!-zXh*p8rFf|B=)xz!ge*gL?}#=>--tuu%lzQ0aZVR!sW>&! z&Q2!F)e%D<_x8UdG**HtLKXi#i(Y9Wa89UZJEn2ZO7uomRlA4lP_J3;N&xrr2iz|J z06i4l{WrzPonDlq9`x7j4Ais}o0SfU*y+?U-&d7yeg8L}1`^fkGT4FK-oLb4*kplR zbMH<>>91i|duuNs%H>w`V<)fW2sEsNC3dde7sn_;yBF|52yUmrxXWC^ zZqFQwsB4=TW&*vpITfR?a=Zu9Ga06QArxKGEZ1jFjU*&$o856CwUU0==?k`I4nRXu zcY^$D0JA=cYIZd(Ey?g$K$l^pgQjk=w8KLJk_)$0bI!AuW=0pf%qKCLG&IAl!j8xq zR#DHkpleLm&5>K7I{fhbfal8gj8tig&K%|MOeG2wc9j>J|_b9HumF%w7zDnonm9_rsXui-N(O%DZ6aS08evwJmB%ii&Gd=v7gfW=6> z=73I4M=<4)@XPjA7_opgR(0z-Mmw+%3B_Ni7s9DOY`!#5T)6~1`u)?Wn4&yaxotp zxlxx;a-hA5x6eGcWDul^N14}HMSro#_{C+?8fKP1rM+)Npq{dxur@k*`O zwNH)w`$6ST1P{5tkzA%u0p0P;qEo;|1_Ukc!uyZKp;8pn2<=BNaQahX+?Ql(1Y1PC z{zb*gl`S2>)G^f;#qD+jJJCRAxAd*>#(!3Rj`O%g#^$jrwOyZ9InrFT-0m+Ch!3AD zO$7jOZ#x*9<9z*{`p)V4T1va#SevfQ^rjw$IWT?6M0C3hK^i=&;;+%0&|Ih#Kf3qUh4l2jlmncxc z8GU#>HY#`u>N$f4eO;$G|L-qe!@GaNb`=Kc-&TK-s=S4fD8c^xMu}q)D8XXHZYv;6 z7VD?dyxN-0$y@&Rn(X>Q+YD6uGhjwSHem)z_aU z*OKDCmbP=H^VKaIr8)!pLOi4 zGm3xPuW_SF;U*NbYS7IZmYW@L7~Bd+-*YRZCfg!=E@NN0=Ks@2x~COG7V$(xZ=BHUow15WuQrF zL@y{}J063oFW2^pQTl`E2B{X*THq~LC7%g@;DkJdzIVWe)!q0ST$b2yLz~kD<^0uq z!-tV^6?X|c+EX*WA~lq5VC?@0BHj-dpS-EQt@Md_g}b?+ zRD*A`2?@m#CSiI>_TpA9u!oz&8TkDbx)CFL>^4e#bq}c^+~?1V*-BVPrDvZ(H3?8M0u9$oC%z#yk<{9zjaKq6i1Pa!R;h>J>K)V2H=?3W$q~)BzgYv0#KzcV zLwHS%znF$0mj+T?GAeqL({}M(%5?iT((keGE^(BvJOaLet0Lc`=QOm_bg24o1602j z|IdW)b7C|&Za-gAB)$*_`h3~1*!*GUmedzaj?hZ%O;sGW0sbi8W%Al;6(eFdiHGV| zWb_6iy^u=x0TAWX%3n7hzc&&iBP1stY!x$0I}G!yzmF=xodBnNZE+F;Srle~<)95k zHSW$soP#cAOAVDMh~lkbjH;NP>uO%EfHS3jM26G3y z{C<`NzoITBv?3n3l_L`Dc;fO?L#n0#II%rvhxczxNfBk}B|U{pY1Q`~MIP93Y}0+p~F%-&Eb!)Z07I zK}bwY!-|i`#@XE3)za3|J@~!8yQTTF>H9~|FQ{UQtQ4V^1rZ3100I=;-El3_-Tj;l zY7`C`#f#xdA8lB!JtZ4B$CR;47h*VqTSX`eNMByHmx{De2fM&MiLRm1C#%T{D21lc zGZ%eb$b~Q^DK^e5(GNs=DhGeIsczOQG*!5c$x!auM>QTocD0fl@jxu07doO#5Rv`h zG=K9`ASxJ3*4>(CAJxd-8dVk;^!U}faujEIwh1TYn9VT0CNDyE00yitd8UBbqXI?M zRK>zt*72YQ)5KME7`TeW#j0Z-lqyNrLDH{yT!vHwb|wQaGrX+d>p$gk7DQ}|Fd?sq#l=VBKfFv zJW+rNoJRidJ%A9<&`uT6WD}!+*}+5D`k_9(;NBbr#L$ZKLba8Dt>BvbG|livQ4~JE z32#0NtO=9rP)4dOGB{#aIn0WR#~Qr;>K)0vGl&k^u9X)HWai#2W{HbO7B%~6?rc#R zh#M4_FjbsIcH5KKI%5nueuMI%DHJNrv!w!<-LfBihX1# zGb^;5pJ>P)+?gQ7%A{YW4t4nEXJ$MzQY+!}DAab#4os8dR~~md-vv2;KND54FehJZ zVUUoD4eX8Ga-u7&h)rPrf#myOO4M33#Q&_yMWK4iLPGF&_h*OXn$%xHhn6O^d%|BPfu1~f% z@FI-^K4@itMadJl8s@3OX&lc)fFc<8&+H(5FZ|fAG*It-lMfLw=;rj9?t%m4_PyU` z{0oQ+QP7$McYHXlFh-3tPyWCMPnB{$*VCXJB)-j-L#^3OG#^p~b2wJwtkRvvXsVEr zyYiu!u^Bhs=N5|^B#gl33{ljafSHPFwkY;tn+j?hg}(L)LNXI zN@8~g--ap{gt)oXffhNvxjiaIbi_r^<(>aJc4qj~jMN9$CdmZmC-b z8E#&oRK5*BeW3jOqDKAnPSF^2r?;6hmH1fR3B?qZJnYP|m6Stsg*3tD#~V&2^*goh zpF#jgpazyODo&|7dX~8ifcxeOY>?aG`#j|oHY|@iC+*#)bK?ZdAw0u6qeLt-=N;AM zYwXH^HY~;?Yc1p2px#=>#-j?EDV!&;G8XqUXRfi#>Cr6Txhf6 zKGRS!XhlLpGEKc3?t}a26Iseq!sUgC90KXDOK}$5=Trb=sLN7k`ooOhFBFQ7FNa(f z9q|IP?+6bH&vvl!7BX~g4-R~s3Sk})LAt1^j4a_$*eIX24M5V)CqYUTrCLX6TmfLf zv!9i%iRrwyJVM8#=35+VTYhI}^IwOL9;5STpq_ zLqZc6a)6ZWRGv`b_;>*klgHXw#yO>V^{P8HB+pJTc3S8BRvWLvU$$Iq^0p)aFfp4T z7-1U#{W~9seYrBQJ}B%aa~VFhFUd zx9^hw9pO!~0T$8Gcw_Dr22fyQwZVRA<^yt`>i)g&L;tlQ|BGbIGoxK(3OYcL6N4uF zN8G>{6DM~Ur?a$5C*FtCjY>~Y_j6Yrg;GnoBT4_~&s3+AZ@zQiQlB4y3_k*;d=}K9 zslR`@0BB70D)Q?pxO}g_i*>a8csZ2m* z)|iEThv8)n7K%Tjp&trO2j`o)({#eNRmLS~W%;PH1ZFb43FF+_o&#y;Gtg03YkP&?#xK)p^p&_1;pzPfXvuRPT-)Hd#dZdEbjNXC7?{>iU#WA)i8~9=v-o6Ni9(P z%jf(rJWX{mJtdL1m=Z938E(6tAH#7K^V1GL{drnAJCDZZ&g^|B2n#9>m^!b5u<&|s z3|8c7pAPXA<9v)vsbkNEWwyF0nI2hmqz}f#4G7Md>Lc0yM!2v5%O=8^Kh#D zGgBsuNW1RgW7ByV^`0@Z$v$N&5ylxU*XQE~GLL|F&V%%6Sb$!99E?qVlRzEZ|&uYOvvW)gnm>X|Df?X%)NCurZWGDOt9^aLI>RLSr5KX-L@%C+2B#4-trc4A}Q_`2e& z>GDNKE)QBq+4MHWQlQvfQkRscO5|jIX`IreWJ4%JuC^+O%-pwRC%@n8aTjhrJGp=2 z-GG89RX>?=k0?+i3q8Cf_FH2OlLrjrQz!FvopJ9a2Mj+rTY*eH^2#^2Oe z!9Ow+S;Q%%&{iJtv!eD~2O{Hh<_LTjfk$@1MG{k8%LCAd+H_C?5kg!8ANZF20CpIySp$b&5oF$ALXMinOvLYhlmHkyc(OGGgDT?Cb@7zYh3k zc3i2uQW=_M*?BUD@23{x(E1lBQ~fH`O`)Cv(>-t z9eQeAf&&=AfbmRe%po^MO!t-^b+NB=^vzh_%-Un_#>FoU9X-x9$|kW71SW)Hz3&E! z#QNAXPUp(TjXH}+Tzg&~Uj3Pb6tKRaOj|qF;+pYa?aw8aqbKn;kD&VD1VcO-hWz{* zN;f~RC_Yi?nJw9&WL-{2?dqU&?r^XY4Uwi1{;+b=G|szH{G0odQZr*(sBNEF@6etC zO`|fgK-h1>;?14NN@#Qu`d_=>`N`%1s&*VyUq)Vl9nqZL^uB~b#k<$xD@Z$N(KN&f}L)&3GAI<dsC_Y~yEU-Rm7J%y9Fe|1=_vxEQ9wY`Hb zwAK*g&E(X$4e9yS!N28JoK=_Q%^6&?b^}`RoC&-3j>w3h@ld30Spt1hUZtz5RAsJf z?z6&bWz}Z@^rx4r9;PSaNrC{Lmh`Ca*uTeum*35)UoM#PytFanUCO*id)kLtmLdxX zXWuSN4iO2vQAHr6@#56FSubqPLr?eNCT~xHMWb-PR3+nIrEQjrNA(&~BFlWEyQAWI zuTyRp={JG9>RlUe#g{8l)G4dJ-Hj<3rL+)ZNgJGrmvp(bVSj1KR4dx7 zMM&zsSzBD62<9~REr|R>-^=5937zi&Xn1*cDHJoe&XM#E&=o`(y1me1sTUzd`m1qVd>Z%;nU25_L`tnje-8nI z0({z?CqR{#09=(r=dBL05M05+pX;?j8;>>A8=@uXI9*B~=6nlFrIJAK*qPM_)-s{j z`!>tCiX@7f<#q!VE7(oS_vDzWrnO883aF5i$#WYGCKgwlP7QFa?j_RTV84_N_(b6k zrp)al3uSC4qhyr10E{ZPz=H7OM_4qi`dm?!hy?A_7P?$L9`=#@K>`Hh_5O{m3ld_r zZb$|Lm)M$~QS3rn&}2#!;V`h{w`K`?;s<74myCaG=>MrkTMyHZbw=mW02W|Rlqhk? zw!~PSo^s_Z7qY?fer7*T&}Y=<#gd%lRuf3r37;Ad^avLqRPNwuVEHkbqgG%q!Bdc*wh^O#`z-M&(eMH~QOt=iLOj$lDT~pn&WT(sKbm z?*ADu7->tADca@E0{S(FHJ`+qKB|kb2hw+JT8i!WAwXc$Tu8k<9Hl+e3BBG&Vr(Pb z6-4B>A*nuk%Pv1ygd+FiC&B~AUnRdgCnfro0=*=y0oj^n1FCw{2P?bA=pzq%Xljro z?_6T`5n^ne&u2@o>&_%~`t6yE^fB2cT)e5Qiw;IT6s-zo^}y)oGlG|-Vh&37ii>OL zc#yY-QLXgp=|oGUjo**RI>W-iwDEU7ct_cUkotd;kW>8%Q)6&2=oa%}07QBi> zi3s;hNXcPGmp1z3*!+g1z0xnJ+gG-bAv|7r`=w|Zr;;#9u%riq4SJl9dh4h(f-wBF|GCV3=CNns?Mrot0({E$p5* zqQ(NE_cAAV=rX9EBBm^RW(2^O#jkZ1CZ(Z3#eLqc<2DNG-|0)|`pP-!D>uYpl-Vbo z{4cEM*A-_*Zv-*mO)&4-Qjl4&cPE-@B*cmkN`L)`EX3q0%IIS=*(5w|7B!n^Pfs9% zEm^Q@{ENhSYG_7R3d`WA*{QU&u~@beS*B5^dDb{vbxNTkMt`AKGwN7#t6iAwq^YEE z#Lo@A4Q`d}U|4_Diug)8*U9^C?`VMbtn%T44ryQ#8Jt3Y`ZC=A42W8m&n+PHMVqZF zKSHI6fqizr(^UE8R@%i1{6g?8WEW+MikSo`{(Wygi&o4!YiY4Wf#e)k3gauil+~wk zLsURboMna>%ImVaj9PINV;VR5T-^}CWap~+sL1rEA303m`XntWPNcPoDKkH=FebvW z^+5&+sq7Ib`5yOpzA6e};e)5y5TNq4T%sRu-Jd@$#f(e0`4;_D+Nt%EBDcrrr+qlF z=o?*~s(0K~Ob>{$n`K1~0E;eD`j#Z**a=kay z$u5hZQEM9KO>fnW2S5200e(823>-5odMO9>--bPgKFhfdT zp1gkkqBYWI_G4QJ(?HOgOk9SlrCEtK{!71>sX?vvhY+>*^&$`XV=-{L4>}}7Jr@G_ ztmT1K@n`>`;U}s*I||I24T--2CS?oS;aVo^JL^n;#l&g(GF0Zes+9hRvivL61e(@V zCowIkxX95wUONdq(dKGvJ?bF7V(LiGt+WGWaxHEKf!Aw?Jaj(cpG^r^#?(mCUu2~v zn6xHz$*PiSl>B|UQuR{cII**!_X%nbrEvX zkB+7xcJ&6KkEbSAba4~dD9C$beVw-giOY({NJiG8pFk4N{J+#}OI0P+NX9Hsg)VBa z&1UvjVYrJiDopJ5VE8OeLf5x#P+OnNd#=uTvjZI@?mopEW#v~@DyKoLXH9*T`Vm%u zL*X|AA!@Dp)N5VGU)>cVRzjv=@&`5Rr_*U!wQgFteVi`bvPb=(E`HYGZ6Qn&Np-As z&F2Z)dPEb8h6G}pVF!OUG>8)>8(HSCTQ|&1`BZnQ4J{$~XX(DEu@Blh!zzBLYWq|| zd1Ce4^=Y6(w3dB7d)F*`QZPVJ)%eqR{0Juu0O>|N%*f&}i2+SGeIW>&@3(-add|Tf z%#aSIa~JEn{~v+0zVy2vwqm6hQ5Ua)hUvecLRq?);(|snZOHM+LZGnUIdIx^ls%+y zx!#cw35MzFm*b$Xd+Le>O39!F$7LPjs?9e=j}>iz!2c0ogoTE zN#@mcZ*|&-RFUh@7iYeHe_g`Rh2C@omDDA1cSykP7G0Hy6>p4MJodX$6zZOt9C4A( zWH|+%AB5PI3XAyj)G<|Ot=(;Va~SK0eM`YC5(Hh)2^}eI59*TULo3J~lvrx{{^guWkD4I+LP7 zRU_(mL0y})r35XfSkvouaeihslPAJ6IlP5>5vA7Us@;Q+U|obR;BLB%9){mc}f3d#~99A(arK1qnYUMeYX3cebyx!Mn+vv`HZpcY6!*XW+P z_#F}KGfH3YO@dC1jW_F*3wo#E^V_!<*(TkBy_w3!G#jdwOGA57@m=$uN@?q#d=0rS zNw-E~AqZ5#jX++`D|kcbvWA~buKZV>$k#IKw9aW+?Icq9^4Vo=x}9EbRXhEVfTLnx zEpHeK8O>!6UGWt)!Q;kr8FGqe|A}M|zbohV1H|qJ#wzpItRLWcZYt^GWye`S++tSO z``}oHwFwPHWjz+-?3Z#IM~=<{y0{|-Gm!~0b{h6gHbHNTMz)))`IRT%{5Sg)O(pu( zOsX;6Gzoay<86fKv~nV*ifiCR;~i-9_}L83OO4Ctd;`WOHNE}S4ATp?t>T-`4__w8 z1$7$oa*KNED95GcGq=;G!GB41{ysY!1Uqr^^0sr(!a&8 zyt;qJY}M*ZlI6*z6a$bJlDw%(aE(b`c*cWDRu}Xa;rXc{kiq5+V+)wkh|@?VTVxiq zRg2TRjafB{>=?GXLIfTME)6~k+{(%jz$de1uH8I7*3YFx;C;j( zV}^<=dLl7X|F#^WF60D%Sa6S)9fR|=@vn1hbZq-ho$bjeEW+9I+VN{)&J+F=Vgr2J znX(2~7Y;V!ab_AMY7h>1s{Dt}w7kzrqP7BKep}v7{m3{Z9M0cG(4Z`+bt1=~P^E!HEsX=<8MQ-|CYb8O= ze1vjZ=D6DSA{gmy_a;+R5O@H!J8pMZplj`t?z_qORN%(NrjI^*`$v4tT2kqrU?EDD+cP5XRQZ0dO&4crF1%CmeE0$m^=i?b@zs=wH9` zwRQhkgWE5`x6k%@oFPBFRVyq;K$(aNv+dr0qaUY}tns%1mc=9aXoS7yE@Zzi88%Zm zaGthdta_LgV+kOK>Kb@q0(^Pw`~(+zCAK5VGR=gTFLxpA@m+1gXoCK-swvdFrf+ ze`qb{RKmED+BxQciP$B&c0fyq*Dn>a%3;a0@zrjfZ^jp~NIwgIo`*mu&`(_{pL$=M zC!TN?2t}a)pW(Gg;9t+~BNhSq_>a=&yUm}}0O;^=nX(jT|t@iDF@xxAS5U;FM z*r`%@Q6cGUln_IGOL=u8tmS8}AB{+Ue3uG!wR`nT`U{&7&L8!y7j#$idmX0=By+~p zrIgmxPe1Ox!l6r{zjv&*QXs|P9_aS|Bt|&RzIO&}*E|eB@F8h7za8Eh+r@NFIuFTK zH4%D&&H#4^kly%Ns|2XHsqT449@mrs0$3I@Qq<~!P(aXTU;IIct}vE=aX{6dogv8)3uQl}K3jw)vVQ9-M#YoO{&mBKcfSj&+uTK{ zfi;y5EQGDbA@Nvy9pXC1VWcEF#ugxu3}o8zd;sIA1QfDIP2a05Siu7VdK%hKJJ}q1 ztQb}!t;p-A5=VY9Q)ORZ?-gXZVwdRrDtXIA_spG$a!kTJh~y_IMz$&*;?IErV`gu}GtmS%pH5Mf@@p~A zu~emw10SBe_UsG7v6+l@UBy5az6f7K!Vjm-mrM6k{;?>Y%(LyJTK@$l+zxAvwJ&k4C!0`U+9Z3?hOsd%lX0FyQ+jyAwyoj!9Ka zY5q%-9@OgFn!M7}Ur~O^W848NR|L6nk7o7brmrDxyEzRYbR1^QQ$gGW4bw0egXo@Y zzW(B8tFM3Q!pzV34GZWtQO&3sxMzJh{u6Wv`20Ua0S|~MAUzJL6XW5sG4*z~bvCzk z*0y)__jGl1v=b4N5VJ61GqO^2baeKR#%*f0LU-`>qyjmEFjq7+pQ%ZP0H2-E{veG1&!zo>`s|7)j!fVYCSYFE)R7trT=H`q<484bkMlL$4$ zW2@uLgI(x2sU}_U#~@)%Nxz0y(@*t7T>8SAu+T2Gm-$l(YCJB>c?dZ>|KDPq6w_FJ z?hW+0$b6_aT{}7@NGb}i-7OEHy)RNfBwHJuM(AfEm!YXPE@r%gkhW6$lzblD^wgVZ zQm&}lD#MX_;f$woUnU&&u@6XR7ckVcGB}$q$&gQ6eoOUtMmHen=-7x_Xj3o%uz?gu zX5ek$qd(UU4F(U?D9TDb7SjQpD>pK~L+VT|KS3R(pn2`|Js)&Y4J!gViQCUvXszf& z^iU*kTP0rxO7=o7e! z)qfqHOK(kSIukxg(jG{?i@WgaX#7owx(0neL9S#g2-AZ~O-sf@q1Rt$Kao@O?d&wNcvwx^+|I}RkP%u6|;sRY)x8N$^WrG zJu`&ifX!C^=D0XFjN!%>DQhl>;%lHC)EZ?vD;U1{0Zz#^SoSiwQ+r;?-#_zxGcdrb zzI{13X}!=ebX0Y?{kk)#{B1BrypR6m0y}yB?Sv;xSZ(BId_Yi^TR1}7x?p1^&arst zhmpB{mBPL31079e8is;v?(lI$0x%CnHz^EZ-aSrIqAGPqWlX*mr!@>qRk3`5W947` z%KxHc8p&0iWO_ur(F9hG^_>ow8+U@9i}zG(UL(Br1_Ev(wO8%8a)>Q%eN>s&Hdq|} za8?p11UacsywC)3#A83ucIni)xsp`9>%xgvC@sy6hHx@P zI9zUrQ@L81Y_{N`n4HXgTckRjF~If`!RbSVtjUyDia?FbW?kvJES2X8P5gcABN#DQpth@%n`&9s9HGKTP;$* zS+CKPghd-|lg;zQRb|(!SEI>oaO7aLj~uM*&B!7-~drCU`pkc*^Db z{d->J_rjNi?M_9oK*nBJ0TWatU2&d}dn(@ZV^Q*n%CEX6pgLchl=1B0{(pMU7edBF z>AE>FYf+Gf?1a4v{LK#VC5GHtsEZxFS23?&UiG#~h@{bf3~GN9;iwCzDox$rJB6S- z(?Rq-Q6o)(lwR7#l~jq<>NtIG6xS^ja%k=)P7F|iGGjTI<%VjWI5e0^#w(J$BB?%O zaoSV9=^3AqcC+p%^#!I?gs(_4z`+|JxxzprFx2*)IhT$c8LqW)na=d$4o#nGGals*#|bXe)R@ zh|q&;fK$xZE@(lBKr1%(oJJuyfhRpj*Ds(l z&;f82l4+-#k|g>@SmnpB)Qc0XCMR-s87jLy?6-G<@CGzAuCY{RSeQ}*nl=>(m-gT~{mS5~+hRlcN{MS}GRG9MR(~^^FkhXX zI#v{jtN(0;7%xViQn}Q!YC9T%UZ-DPe;NGYV&;3tgKKV#Ds-Ws+e)nh$kZ(cbIJCot#-8EAEKev zEdrq#nYLNpR3ZfQaS7_fu`b9()8DHXN+5aAegEvaKsaT?2=*4=c1Z!qo`ZdmmLE33)Y6$2)@IL%b*J zfQ-}6z7#lg(%`C%BC}q#faurZvgbQ)J}rrJF)R1g$r*%G9QZmNm(!YBCM$~klS`{T&VI#dbPRw*3n1jE$rOD}o? zVsjBHxF@+r(-a}q4>dZPuc3ayCKy$;M|8Jvw$!HsyY zY{(W*+@YkItwQXynZawnGy@hw1xkxJ`<^=y)It%_-2(qt5&w^d$w+@;i3{=YXH#bgfi!uwwp7c|9?!qb99|wwEZ1BX>8ke8r!zh z*lwK0wr$(C8r!ywHhxd~z4v$Dj59|5ea3V4*?X_K=K9Q^#Sen^0ow%>I~yS6s6~7| ze_gJ}9+CRg6`prK;#Qs2v}H?GCba@l3wj6k9!D~L*{q(YFrC>g@V3_lSlRhFK-N>x7}Qh%wBsX@Rwf?3*v#PK zy(bo#B9_RtYw;~ha9l`JoZNIbMA`Y;gc27lnZ{mok>RwE`{T7Msl6*R!(cED(RaZ& zI$|Y|7b~$e?1d|(6f-St)&7%KUCeonaQq-onw6&AM2)bY|{^&!+<(hD*Hn<1=>&^&Osb|p4doBy-Od|63<)w;%` zS{yKIDFfx#Fbt?^w+6MYME11|f*Fc5T)X`^cVGx@Js|(hW5kyy6oRiP!G1KFu6O*z z=M;xi6a0hKfDvsS^|1t}X*wlb(Bvp3Cdw|5FhQ7ugL(!Jh z{HcZBnHTJwJkGXYo9WY+-|@>$@DIAK^DKoBMET3!%?Er_CYU76#O~W}M#~fQu3|(x zT%G0AdERfMe0zfl`e%84irp~Ya6gVVwZ%DO=_H~|47IFBIxZt9p!`~1jddPdhzOWDN@&*9s#;}It z-s_qc3=lBHttUwH>nzf^a;?R?F+rM2I>q#+A-w$?X0v}Y*yB`ea$!)m6>{!LZcAeim zQy9>FJLQ?%)uDI(1h4+#*`3T}90P+bbjGnaat%p+M&F{FL`V*_kV!tIaHT{ngYWx0 zv`|mcqSC0T)3s2AU;rqRil801TyAjefg?eeSnOIcxc8fX6kt$-NygFk$9ceC0MS4* z6+$gZlK|i48EqDIv!``eZW`;o_NY97Y}~0818;x@+(On8mZ-q=YClpBu(gE!y=hms zx6qi+U={^oub_5<`)XVX*Q?<2>k3`*a}tlqx9wO%IkzAr<{#fVqjORV0VOi;UO=B> zQ;S>|VAn>&$GA2cktb-<;?tI9$pI{Hv+|D1JsRf5ub-bSGT*Nfiu(cSug3nTEQ%iR z_W_H}{DfIOK~^N{6|yED7tsj?AKH}KF_R-;+~Ip(a*?u>aT*w^Q#&nj_li1 z7lhu8$k6@PrU0oVjm+xrKFtQ)suWp=%>;gR(BgzUV0mt*|BPe*ypHGEf%c(Iqi!oI zciOTc^7 z^WndKheDI%bN02xp(2osY03{;D*DLY;@@R03kgPNH*Lrv0p)SY6dlg5`?|hA%w1Pr zJt;=52uyGWn&C)N_FUSQO?ix4I$=%r4I=H0vr8CcNor zXW+R)O_9p1x03w}P4$u9mBg!%m5kB3i#nUXoirrQ8TbO!#_>4_g@51@5pubjOLj0Bs!9@F> zESefK5sD)ypme8Lb&iIskE-%6^)h}1zi-jRIQ@#q+OcxdDe1lACtH<>)yRSW<)DA< z@`6Bw)`|09_N^)`gEhJ<=EBlfh)p(+jNrbkE(Ceex{Njs`6RsFXIk+Z6Ui&1ez8dv zTh+6u-$cRU{*+XzD92{iqI!PUdr(uUD%vM)_Jz{dmL>Kj&gal19Py_{WF{sTd;#6| zT2(g!?UXCx?v9c@XtPG;o(F?JaVEc+G-XMaR~}K*`$-iOC<$m3Fzw9#tAW&oKWRlv4T*APF28$~O@R@jaC5WR& zzP67LOx^{cxTjgq`Gu2LBKW)J-@k$_&Ldlbsr70?1F++PY zq#HV6slPxaAAgRE^!t#Wv1xH?HFd)2fwZ_>woYWXn%m&$!P7+!!DM9gtI7tyG5CR} zG#q*i+0oa^9K5ulrBFBdE^P9~gEgPS}5 zudcE9f4T-fK-V}PO&=#{ZD<9k8ufLZZCy>Iq{QSbjQGrKbO66ZU29`!OB>)q1h6B1 zxj&o7VrCQ7Wq@n-bSYq*1n$aS@=8npGId$go!Dd|ISU@hVLfCD7#VIDEA0V5Mn~FUX>3 zQRgYS=n&k+8={K$OLII&^8xKuldjE`f7%FfL#Wq~3iow%n9LOdA|YDq$nQ}|9@Zam zl~Oz1*fpku#o*6j`OX19>7E_$gIz1I8d1Bg_Y+@anL&8j423f7e`#{XV0q0)`IMKP zy%>vIH6`b}?mVU-d3E!WJv+XSfcpqay$g-b-ZgKt4`WB_*u&xpg4$uqa0-o72H#2JlBLi!#$&1*^jRS1;(UvxU zKBh0Uh72a<70X^Uy9xR!K_0a8s0H17iGP$Sx2I=-sb$iO?F4efsKC}z6HuE*lvw5h zVIS)E@&UA|M0hFxo6B@Rk0#R0*0tVJ^F^nHb1@rvgJ%z=Elml96io_tvi+v&SNh4W zlqq`aFNoLPPUPny<(Iqx*CpG!N z`I|J^N%5zJznPck+647No0rcSwhS;t$<3@$xScQ`0u@i1h-IuLqoOHxR??XrXeB6N zXFE1#LY|GrJJjND*}h)Zbz|YL1)?#+;%&$6y>Ai-i8_4f2@?P6?){G4Twp|+Bxcq6 zBzQ^SR)+1+ThE_Q@Eo^52 z^DcW_sfJQBFP8LaDcnzAO{o!$%F}k6R|afN^7#Vx^EEvr zP4%A=wnW635W`whhbix3J!2h9QP0mjb7HYtrqx$N7^#}XSvVG(@U9lqQ?-~k7hRF&!Qv$Qf z&7sDk{qqcVgn6Gj=aM*lyfGrI!hX@skV`q-JkcKODj~3;+cy_V#H%v(>lJ28G(&P- z-r$N)(m-+?nqy2faC>>*N|*(Y{;qnvdQhX1?h1?~Ty7%Hy=mvk{6S?iCMZWdZVO#-wH7y8 zEhiSN2^Q86?t1V5X@COlO7iG$Ov!%E@-4Xa=Zl-I04Gsd)2dP8MiS2jexha`YsULj zPIdRI*T1?;#v-pWqX;3*Y+!nH9UWVBd%Hn=8M6dRy-8^G0=B38v%|W(4sMO_F8GR} z`ftkzyy`FM?uTmp-?jO|VxZ=ZJRn|RM>1kRH7#+bVPgv@gf1S|x3qppwJfL^J)$+N z8!hDv|E(o!b_W2q8s3o3@T{NQq&p#j$sT1b*!bCdwaZajXzE`v=u_Wv|3GISgj7wLvRt!E8)$IC$B zGeQ5(2^tno?%T~(ftExFu^M*uw0vRrb{J`Ih!ceBSjrdOJzbZu5#wJ0o$4w9?*5mh zXAfY|RY}Px6{!jV=k}Eq1fQq(%em48tV|oRfL+-akaFBUx1=J{bVSSzF5qEg1YZ0gnD$mEj3xDr8a^WZh6>atN6aRh~8@`M!E zwyXNy05r}fJ!FTcAsDIc#@QGqODm1p>Dtwj;%hWZZmI9!5W$mZIiBSwKlZ#k-uIik zMa(8iDYX#{)wuH*U8TrQM;6ujM-QT0Giw0m^7yW{&-PBhUbx6RboX{tZxYBS>D zwc>j;yBL(~qtEgkc)f<4ncWgLGijfp3XLsnxu$U~R+GMp`{nV3JS(@BIMLv>{Kc7- zd$4Qx`CH_-`*b=nEKSNE#uy*(ohOL#gsCl9YR2~zE5~~Im>w@FkhlRZyMN;BSFPRr z1s$60_3xD_kgCU(PZmx1dby(-`lMaF^MMbbaGnZge$NdvMggbO|CuGRagnapy{8UE z%cR#~3H1RJ!va45`f)QdcQA(=<*ZBr>^qp^KmCmrtz8aQaF^iB&r6?;h7z+Z` zZ(Xrr=fK!)A?Jj&A-9xfn)kt3|0D<3nKTk?pf5r;WEAv(6mMU4jELFtz;b}wFX?tK zM$Yc-_E34;!I2X&a(HW{pSaC)f)LjQMF<;p4JAuW;}kY^9R3%yzcJ6FFK5FpXUk4h z%gv#sp>a@K1aD<9z)|CCIwhuUsrf|Mouun~@$`nU9MLC@KkpuXG)42iGsu75m+)5K z(7swc&3Eumf;=Qi^Pj)$|6Gyx*Zn&f{ytlUNoS<^{KHAE`gOv)x%>5 zMUa@Dx$dAX(zG_%coBLXaO$V03Va8}mstY`M-G31%(yQ>984DA$f;L*n(_ z3-X#EJ9{d|P45n$|9yU<{Jv*{_gA>(E46_~_IItf>49q5E-|1tII~k(bjP7p7IpQ(l$N^ zk8=W+DM~)o#VaZ{P2E~ysQ)fnpfzII7d`NMW(IaXV4aX;4O*oY%uXAh-eK|BCA8_4 z#)rlphbIaM*h`qyq+*^r&!;If3>3;2OAh$(FIJS(R2*Y6kwJ2!jQGiARr&zuXCoHXT0NW znn;7twNYN9@gmfDR4Op* zzfBzaN>xw03N@9K3Sh)PDG1k^FWXbBTuN$RoYd@ve#+}cS)T(@omLH$2;R~EaTVaH zkOBE zHWkxX7!POBOuiqB9SLV-E%I?q{+@bE@gIeHp#^!SuFZ4e-X1!ivOF_z2 ztt&+fYMFC#t$^X5#`jCT#G0B?L79>Oyz_sHI}dO(U@H#0#xW}>0$MlN7Htn|M(rSP z*l~LSJ~wH;`}@G<<7T>pYwo$!G1?r^+=YE#NdJP0q)MvS7uBn6Gx&T1il?a^P1dYU zPl(X4DOW9K^Q4QHq7^yfm|Q`Y0&}L7Oc1h7#7fqImWai3q~lErAd@h<;rvZO4*)GtaL`oMbbY; zMt<<(xCR~=kTo~rik~H}5c5AHveViB=4t!WsD4ibeH#C3XXy4Py7)<8NS(>C3^0S= zM^Zv5CV3>qZ`ki0>Z^36E!NaeI(4c(h-4K9U9dt4=VSPD8u3b6f;q&yb|ct=D!*QI zo+dleeSbfeFOe=z5@+FghMXzH=!P> z_3_ZHSFiY3%YSXoZuVs!bKBJ-3GZ3yLfBIMMRv>O$P&ToP(PC!?oad&(qkGa@e;D> zhr)yisSD>e8F}g(JGo^owOs}qd5sNQQfdiuZ+QoJ_2&~(M&O-M8 z_K`Z9Lu!2-ygAg~cFsU`GWQowE9#Di)fRIDso5t zT6G3y%jeS?>!{C9izZQuPH3Th5BD;wZ9x^xwu-@o(+Rh(hbt(H5I3iBrS$^aNP&C5 z@rwNsXtBD$hyGX+x4Yqt^K1&YdApzO6*I1~E?R30$i$}gStZanBlF8AOk&gFW}}{A z=242&9z3*g(I#crB|yTg(2M_xH0@uvg0Q-Lomr7>7Svz5ZSBgJ{&!jKn>E>+X84Pj zX{ArZn|zl#82Y%rgGd{X9@QkW-2Ctp1X#4=O^n$>A0%3!}ea#DgHW*{z4;d)y5UuJ^Sd-DW6cZCMS(jPhuj3d|C~8WrhP0KX6L&R-XO?0h;C=bQ9#Cr8(${04poQS(}Ro^x#_z- z$>$_X!{g9@)Cb!iRAr_=e4%j#S2b!Wx|CrT%6ZGUHse}QDa#Bn_u)7-Wv+i!cYMk+ zii^Mram(6TiI9=J)c+`xYtnd4SCGTh1D&MXK`DWo+__Fb8?!wFOPRvsHFXu;NRu&hjhTOD;s0U`HHvJ=6qlwfV17B) zk*NxrI#Fs#I(nLnx-x*zb7Pbe6j@3qN;=Z8W+;zKpDlL_$hOT@_foMtkBK%pFlJ5q~ZQVKY-MXy{NUz6N>?io z=Uo`<%zn@kxFdgfJPJJ&ucD*!>AG?G5wYl8KorjA8PvA)rjfzY*NM&68Dqd+zwR18 zR;9hi?_Jc?{P-Jms>c*O2~ka5*vt8`r8-ZK@f0PvPEPNb9(HEyQ3vHX=_rfZpbzlms9N{$2I;sx7`VBl2#Bc11^6k2rbi%uC+bLmfr=-MosVgdJ zA@i`6;(sLtOCSbBE{N!yjMkgGXSSH4DsYDyKtEM!v+wy5%%_SOr|dLv=X-uPQ4Tb^ zK7zm6N~aWyzxaPsSl>lDrD8sTOO!UzjG~(lJlu$ns8sLH?ibbVAAhBXx&%At)Cn#B z_FrntSA$+a!Bv$@Q!d{T6^L?GHD1}s*NCJBB|A!jgN|JdA=0|D<$={t#_&R}n!?8R z^jnUbRf}Rl1>>=YW$5rZn=L+bVSnB+U&8yxQXL$qZ_%5&dZ8SlUGbk3K7G?9c^9Ou ziUbcKUewJvHPTnbq&ypFx}^{L4qaBs5aAz08ceN+U7QNjUhX%)+G_k^V|5q1TC*KS ziP*QAjCQBM;`6u92|KJVlT8aUSo?>D=vfcYfSO(2_$E6fL6L+JPoyj2OHGd9z=5#0 z7Hfkx4nH<4Y!6CpA9NtZYFDR$&@k0TN*FO4h3!;bye=a=S-A!Rm+I7*aQ0V;!$qW+te{5t9({}>*%*)Abox?5qgxs~j|JqEphZ5ib*PWW>4)puB ze#s2VCPz5X{lSWMR@4FkYxJggHBqusAd~GVG?1uYT9&kCe>^Z@KomX@tC3&qc>yqZ z%j#I~t;QMyLF?N4%t8X+>HmGyv@I=b^twEX_~hi%*D6xLSf!*J-sL38Z`g$cJKTLf zZciQne+~Sv|G$rCma>h*ZH@2e_2+xf=O6W+*1vCWZ*X6|rvIELTDrs|8egQvtE)S; z&ZO?DvptkFd?+pcYL*^_Gih~@2jsen1By^+N~o6Ts%WxbV1ohcXCB$A&m1{)!e;W> zh3satK(_=do(bBCA(oA8CJ`2&n`glCS8F~7PJE46-QlJDc{EPYDTT)ZS`daPrBzR8 z2PJGd<@3tr16)}e29*0NJ*-pCWP+kRrV5eJz zIHRB?U|&}-K*k<`mE^cyai`mM0tOCb@JIhIU&a$U@=x3=*|ulMAL4$ehR`^xG1Sgl z@-)#nulrAxF?;=oeO^vh2HZ+o3gdir>UOqxG464*m&+!_4SYSZH(V}Mc|(ciJ?BqP z>@4l8y5#wC>fg5d!tAku8w!fYA0Met+2d-+70iO$EK)^g)gik{D)0w+C`xGNqDVac`~I2 zC=h_T>t>;BA>TXd_80m*Opn7(r*Ug6Rn1P@6URkLyJ?VSV5!o!2HqP}m!Z2{C5uGt zMmq{)?(nNEpF=XtEHzxIWa>HfVIolmqc(A=#BCU^!1hx|)?+smGdzQ-yUUU~(vyH0 z7P9ja$#OV?c~Z9xUSSizDvi}MJ3}ZSut&g9kg@Wt0#L3?wv($y+EQ^0-B1Nv9KXxC zlkyp&7LA+}ztz@-5Nqx(SVu_?zkefekd@B7=r|l@NLzWMq|5prmjSIZ`vWIjVvOw2W%Ku+<3DA(iq>#aZ7eO880(^|}XRKD47LpL#~G zZ!~U+@^uyXkyv|?SfQ193Zx_tGSZ`nE_2evW?Hw}i>>;v`0`}V{o5L77!bYx$0T9~ zGE89a@Ve|UX9b^$V7_1-xFbI)x*=8AXvG~c%s~sb_VWO4jU>rWkTUsgoi_LeEPyGO z5hHQ!NGgD%uXvOyh0 zwe3;$Nk9jrV);m%417iTPeuKwT=Z+TZ`w+xG}d6E&Y zO?8;LQENL5$5fxFbp$FBkJh@%KHXV1UWwP!*2nuzs-OndDAwbHLm!$2#7xU`|Ch+z zl!CZ4=XOu`DzYErlUopJ)E51^wo~CBeN%i!aTZXA5WE)j1m;~fL{v9rx&rF z$v<0XU&j6IVo5%aVJCpTlKVL2?^EGnE3bUErR($R-R1HJ@x-r&4fV1zR$3X$D%(7< z;pg#&zMKn-(z1{;q^xt1(8!AGmeux!MiMH270oyZK}USgho%)c4%_aTYLEp{RdHS) zGFFVgyf!d8j%r=ngRAPk5tbL$UBpEuFWn`#Pe!BH_v1ZNWi20?szM^1lex8)c!t4x zYtCJE>*;q!ItV2IBIM5~8+ zj%qZK*O}(-6^RPvvFdx8f%~Qh7k`f{956SftfT3V=Ghn8aW>2|zzt?{EC{djh8hw* zUn4T6ca=9h-2*3iKQk=IneHssKD{Y%&E%Oyr#*-$Bv!Ho8LIkTM$cH~$@lr2vJIvC&(7Lzc`yd`% zURIbAjS-dpYDq<~WK5hmA$~kr$9t#h15>bV4qhK5>sr$SEAmjO769TX9@!7|iA}0@ zN75R}kJ;5j-AFFqRR*VOThq9tM$8HI4e;8#+rP~T4#No+Y^$ldllP(mg<>q))cOTs zi_6K+l^HjyuxB?^MYYJrP4Mupl5KowG8?tP#=y+NVul%mkhabp*f1;~KH*hPC(H$9 z7v_CWO@=W+wQ}nIV1yX23e%v60S^LE9N9(Y4!_Qgk!#9C_iaZD^1R;^jL+(5u<{Dt z83}suY1s3sBCza}KzPi4pO{#@U57oFh+?Or>KG$cRG-ei46Zht-)WneqiL~<`>sa@8TDZd>&AMvaLYJXx?7u8v zdcTL)ER>4#lKQlsq#b`s$hJI$;Ehkp&j{d(d$|4|?Gv!p1ytF>2p-XR&@_#W+2GJV?8u)ITMJHq<7rV^9hf|2H03)_%n%NOyf zQOZUm3cb|u7a+@0aC%S?zEvoO+@zauD@6|{&Z19rZklG8Br5D$T)pVaIyuWGOYnZc zFkq-oqRFjs@h1CxQ(fl&##~He&eEjzB(45jAl|)^4p8g#UkS?zSnfcpkVYRs<@8ve zL3j)R=xxAq`7an6RJF((sVN@_G4u9j_e$Mod6B7zT0+Q;@AXcvnL}jIe~woAzQ3Ar zr1_7&a1@I;T*#?+NE}fQ{CrjTp|fkXkb!A z<%;ccnMG#vh*+C`N1MA^?+~gCB`&J|jE(TK747GiLnZFJ-WpqHh^%8+kJZwvzwHN& zmR&Fgbm|d6@6gv)23{0lwPW}?K>kOp2>3s-f)F59_~42~Q8d+&0A@?*8L+XKnHn3b zdRrQrdYW3A`Wrery2(h12^r|IaoAbA0l#j*fc)3quR5ytaBzYO{>#FDOzDResFGtt z5${i=)UmmW{v_~^DKQ;ry5Ozsr=*I&pfMpk3{KeB+6+!=0rzvID3&%CClr8F-e_4# zwVT$N>um@O*2*wzq!BQvknbB*mra7RIQ@;p)lGfnQh$$UBS7tb=IumR!#gT#=h=*q zj>L)f>@z?hWhW-YHBTY^IbRpM_i^$YTU3jtxPAqnMp>(tBa|hVVvem1b}q^naQt6a zRUns6{s~#LLPQy;m$W;gDB^Fsj6Vv8dIo>@g%pTC;nJ|ekKf?U90g|Wss8RgCl#r2 z0jed@v*)Cn^%olNll$+WyQJ!48RY}h9jBCj^>m7I2D=WT7$0$Mi%TK(lBmd7Eiip$bxB=*ENjOn(yyz7PonH)2(aiZVLbD2?B|jg})ognpNY;k)0R@n1 zWHKStkw}b$r3Eg=M98ry_nX87B8}DWeYY6exO~zBuq4S*V;T0VD(Rysta0Q;DyS@# z#7Rb4nR477h?Y~Y6rcsDsPJEm3GCLr5(al9%U(vMG$BgVb5xhVHYyZ!R~7=mtf65| zg@I)>ywZU;(st3OhR12=wQ=QS%}h9U?$*~mDekc^x5}(X;w;L$SfDa3cQb){{X`oW zQGT8k>to$_=o~@*{J;*`a{M5|dqF-XQ2IdLCz|guzCM%cf%sQSh2xg>epO0Lgn~}S z3-Ch)zotYHA?BT92LWQO2#~h;?Ak&_AXlgM zXqNv`+N*!nJPb{6qR!`Tu3UruX(i&5eQ{NW1E`r?&g?WGfkJm#qa20Cis-<5pI!2m z?k@R@D?YI!qU;0M*BulFQH`+}`Apa?=s*XRSVWyLUCiaZ1Dv7XXoXAhRje(VB}_3y z5wxx=)x|POG=}H|`qJe!14etg*~hV$xb`I zw;7OLWibGC0H$KcFiFE zW4L|6Ac2^w3X!W0&1u1N`80I--j_d*lCql~Q|!eQ=c9Ii&!F1H(=BJco9I?uv-e{% zk8U~2ya|RMt6n;6EmJCgt2F$}&q4z4(^GytFe8}6(@6KLn1-)lR+KZpgld`hbw}nq z4<6f`%d_2vu)c*(N_YUv!#WOV5!+GGF

    B@$&cv!Eg5<-^2-&gNgV}hjSh6Ua{_r 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�kxW3R!%e6?yaXS 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

    l9vr1SZt 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 O5WTzpR`T)#kpCZ4z?mfg From f4f38ad12adf896b8d29d7bd56e9a41f978e881b Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 00:18:14 -0400 Subject: [PATCH 047/106] Minor improvements with KSF loader. Cache version up to 196. --- src/NotesLoaderKSF.cpp | 9 ++++++++- src/Song.cpp | 5 +++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index aaedf69a9e..1d2735c8ad 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -20,7 +20,7 @@ static void HandleBunki( TimingData &timing, const float fEarlyBPM, timing.AddSegment( SEGMENT_BPM, new BPMSegment(beat, fCurBPM) ); } -static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, bool bKIUCompliant ) +static bool LoadFromKSFFile( const RString &sPath, Steps &out, Song &song, bool bKIUCompliant ) { LOG->Trace( "Steps::LoadFromKSFFile( '%s' )", sPath.c_str() ); @@ -308,6 +308,13 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, TAP_ORIGINAL_HOLD_HEAD ); } } + /* have this row be the last moment in the song, unless + * a future step ends later. */ + float curTime = stepsTiming.GetElapsedTimeFromBeat(fCurBeat); + if (curTime > song.GetSpecifiedLastSecond()) + { + song.SetSpecifiedLastSecond(curTime); + } break; } diff --git a/src/Song.cpp b/src/Song.cpp index da0b73bcfc..604953e83d 100644 --- a/src/Song.cpp +++ b/src/Song.cpp @@ -41,7 +41,7 @@ * @brief The internal version of the cache for StepMania. * * Increment this value to invalidate the current cache. */ -const int FILE_CACHE_VERSION = 195; +const int FILE_CACHE_VERSION = 196; /** @brief How long does a song sample last by default? */ const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f; @@ -866,7 +866,8 @@ void Song::ReCalculateRadarValuesAndLastSecond(bool fromCache, bool duringCache) } } - this->firstSecond = localFirst; + // Yes, for some reason we can have freaky stuff take place here. + this->firstSecond = (localFirst < localLast) ? localFirst : 0; this->lastSecond = localLast; } From 3b475db699b67515a0fe95c7fcb9fb6383721793 Mon Sep 17 00:00:00 2001 From: Alberto Ramos Date: Tue, 19 Jul 2011 23:42:32 -0600 Subject: [PATCH 048/106] why --- src/TimingData.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 0c8fbd69c5..8c3961c0ca 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -237,15 +237,19 @@ void TimingData::SetTickcountAtRow( int iRow, int iTicks ) { LOG->Trace( "TimingData::SetTickcountAtRow( '%i' , '%i' )", iRow, iTicks ); - unsigned i; + unsigned i = 0; vector &ticks = this->allTimingSegments[SEGMENT_TICKCOUNT]; for( i=0; iGetRow() >= iRow ) break; + // this thing causes an invalid parameter crash TickcountSegment *ts = static_cast(ticks[i]); + LOG->Trace( "Done with that thing again" ); + if( i == ticks.size() || ts->GetRow() != iRow ) { + LOG->Trace( "New TickSegment" ); // No TickcountSegment here. Make a new segment if required. if (i == 0 || static_cast(ticks[i-1])->GetTicks() != iTicks ) @@ -253,12 +257,15 @@ void TimingData::SetTickcountAtRow( int iRow, int iTicks ) } else // TickcountSegment being modified is m_TickcountSegments[i] { + LOG->Trace( "Editing TickSegment" ); if (i > 0 && static_cast(ticks[i-1])->GetTicks() == iTicks ) ticks.erase( ticks.begin()+i, ticks.begin()+i+1 ); else ts->SetTicks(iTicks); } + + LOG->Trace( "DONE" ); } void TimingData::SetComboAtRow( int iRow, int iCombo, int iMiss ) From 71b7dfa3fc57bbc8671af8b44722dacc3a0a4fde Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 10:13:33 -0400 Subject: [PATCH 049/106] Reset to old settings temporarily. --- .../project.pbxproj | 658 +++++++++++++++--- 1 file changed, 569 insertions(+), 89 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 0fae37cc54..36f73f5a4b 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -45,9 +45,9 @@ 2B17AB8A13980FF6001AE57D /* pngwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132113773C8E00CC8BBD /* pngwrite.c */; }; 2B17AB8B13980FF6001AE57D /* pngwtran.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132213773C8E00CC8BBD /* pngwtran.c */; }; 2B17AB8C13980FF6001AE57D /* pngwutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132313773C8E00CC8BBD /* pngwutil.c */; }; - 2B17AB9F13981271001AE57D /* libpng-1.5.1sm0.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17AB7213980FDF001AE57D /* libpng-1.5.1sm0.1.a */; }; + 2B17AB9F13981271001AE57D /* libpng-1.5.1-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17AB7213980FDF001AE57D /* libpng-1.5.1-sm5.a */; }; 2B17ABC51398153F001AE57D /* glew.c in Sources */ = {isa = PBXBuildFile; fileRef = EE879BAA132E06C50078FDDC /* glew.c */; }; - 2B17ABCF139815E0001AE57D /* libglew.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABC013981521001AE57D /* libglew.a */; }; + 2B17ABCF139815E0001AE57D /* libglew-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABC013981521001AE57D /* libglew-sm5.a */; }; 2B17ABE51398179E001AE57D /* chartables.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7904AFD87300D02EE9 /* chartables.c */; }; 2B17ABE61398179E001AE57D /* get.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7A04AFD87300D02EE9 /* get.c */; }; 2B17ABE71398179E001AE57D /* internal.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8B6C7B04AFD87300D02EE9 /* internal.h */; }; @@ -55,8 +55,8 @@ 2B17ABE91398179E001AE57D /* pcre.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7D04AFD87300D02EE9 /* pcre.c */; }; 2B17ABEA1398179E001AE57D /* pcre.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8B6C7E04AFD87300D02EE9 /* pcre.h */; }; 2B17ABEB1398179E001AE57D /* study.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7F04AFD87300D02EE9 /* study.c */; }; - 2B17ABFC139817D5001AE57D /* libpcre.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABE013981756001AE57D /* libpcre.a */; }; - 2B17ABFD139817D6001AE57D /* libpcre.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABE013981756001AE57D /* libpcre.a */; }; + 2B17ABFC139817D5001AE57D /* libpcre-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABE013981756001AE57D /* libpcre-sm5.a */; }; + 2B17ABFD139817D6001AE57D /* libpcre-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABE013981756001AE57D /* libpcre-sm5.a */; }; 2B30D6821315EA7E00044B68 /* MouseDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */; }; 2B30D6831315EA7E00044B68 /* MouseDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B30D6811315EA7E00044B68 /* MouseDevice.h */; }; 2B43509513949F37006FA051 /* TimingSegments.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B43509313949F37006FA051 /* TimingSegments.h */; }; @@ -321,7 +321,6 @@ AA29CDD50558741A00961A51 /* ScreenSelectCharacter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E005B047711F3005F316C /* ScreenSelectCharacter.cpp */; }; AA29CDDB0558741A00961A51 /* ScreenSelectMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0069047711F3005F316C /* ScreenSelectMusic.cpp */; }; AA29CDDD0558741A00961A51 /* ScreenSongOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */; }; - AA29CDE10558741A00961A51 /* ScreenTestFonts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */; }; AA29CDE20558741A00961A51 /* ScreenTestSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007B047711F3005F316C /* ScreenTestSound.cpp */; }; AA29CDE30558741A00961A51 /* ScreenTextEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */; }; AA29CDE40558741A00961A51 /* ScreenTitleMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007F047711F3005F316C /* ScreenTitleMenu.cpp */; }; @@ -535,7 +534,6 @@ AA40D24209A08D650068C0D5 /* ScreenSelectCharacter.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E005C047711F3005F316C /* ScreenSelectCharacter.h */; }; AA40D24609A08D650068C0D5 /* ScreenSelectMusic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E006A047711F3005F316C /* ScreenSelectMusic.h */; }; AA40D24809A08D650068C0D5 /* ScreenSongOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0070047711F3005F316C /* ScreenSongOptions.h */; }; - AA40D24A09A08D650068C0D5 /* ScreenTestFonts.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E007A047711F3005F316C /* ScreenTestFonts.h */; }; AA40D24B09A08D650068C0D5 /* ScreenTestSound.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E007C047711F3005F316C /* ScreenTestSound.h */; }; AA40D24C09A08D650068C0D5 /* ScreenTextEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E007E047711F3005F316C /* ScreenTextEntry.h */; }; AA40D24D09A08D650068C0D5 /* ScreenTitleMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0080047711F3005F316C /* ScreenTitleMenu.h */; }; @@ -862,7 +860,6 @@ AA40D3FF09A08D650068C0D5 /* ScreenSelectCharacter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E005B047711F3005F316C /* ScreenSelectCharacter.cpp */; }; AA40D40309A08D650068C0D5 /* ScreenSelectMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0069047711F3005F316C /* ScreenSelectMusic.cpp */; }; AA40D40509A08D650068C0D5 /* ScreenSongOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */; }; - AA40D40709A08D650068C0D5 /* ScreenTestFonts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */; }; AA40D40809A08D650068C0D5 /* ScreenTestSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007B047711F3005F316C /* ScreenTestSound.cpp */; }; AA40D40909A08D650068C0D5 /* ScreenTextEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */; }; AA40D40A09A08D650068C0D5 /* ScreenTitleMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007F047711F3005F316C /* ScreenTitleMenu.cpp */; }; @@ -1142,8 +1139,8 @@ AA77E76508B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E75B08B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp */; }; AA77E76708B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E75D08B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp */; }; AA77E8B108B6ABD500FA24CA /* vecLib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA77E8A108B6ABD500FA24CA /* vecLib.framework */; }; - AA7A2BAF0AE09CEC0054C5BA /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; }; - AA7A2BB00AE09CF10054C5BA /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; }; + AA7A2BAF0AE09CEC0054C5BA /* liblua-5.1-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */; }; + AA7A2BB00AE09CF10054C5BA /* liblua-5.1-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */; }; AA7ADC27072CAB7F00C50A7F /* RageSoundReader_Chain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7ADC23072CAB7F00C50A7F /* RageSoundReader_Chain.cpp */; }; AA7ADC29072CAB7F00C50A7F /* RageSoundUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7ADC25072CAB7F00C50A7F /* RageSoundUtil.cpp */; }; AA7C8AFC0B6744F700FD9940 /* bn_error.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A800B6744F600FD9940 /* bn_error.c */; }; @@ -1424,10 +1421,10 @@ AA7C8CF00B67467D00FD9940 /* sober128.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C520B67467D00FD9940 /* sober128.c */; }; AA7C8CF20B67467D00FD9940 /* sprng.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C540B67467D00FD9940 /* sprng.c */; }; AA7C8CF30B67467D00FD9940 /* yarrow.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C550B67467D00FD9940 /* yarrow.c */; }; - AA7C8D1F0B6748E300FD9940 /* libtommath.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C895F0B67444700FD9940 /* libtommath.a */; }; - AA7C8D200B6748E400FD9940 /* libtomcrypt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */; }; - AA7C8D430B674F4E00FD9940 /* libtommath.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C895F0B67444700FD9940 /* libtommath.a */; }; - AA7C8D440B674F4F00FD9940 /* libtomcrypt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */; }; + AA7C8D1F0B6748E300FD9940 /* libtommath-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C895F0B67444700FD9940 /* libtommath-sm5.a */; }; + AA7C8D200B6748E400FD9940 /* libtomcrypt-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C8B8B0B67460600FD9940 /* libtomcrypt-sm5.a */; }; + AA7C8D430B674F4E00FD9940 /* libtommath-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C895F0B67444700FD9940 /* libtommath-sm5.a */; }; + AA7C8D440B674F4F00FD9940 /* libtomcrypt-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C8B8B0B67460600FD9940 /* libtomcrypt-sm5.a */; }; AA7C8DAE0B68CB2200FD9940 /* GameplayAssist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8DAC0B68CB2200FD9940 /* GameplayAssist.cpp */; }; AA7C8DAF0B68CB2200FD9940 /* GameplayAssist.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8DAD0B68CB2200FD9940 /* GameplayAssist.h */; }; AA7C8DB00B68CB2200FD9940 /* GameplayAssist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8DAC0B68CB2200FD9940 /* GameplayAssist.cpp */; }; @@ -1612,8 +1609,8 @@ AAE7804B060814AC0034E65F /* NetworkSyncManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE78049060814AC0034E65F /* NetworkSyncManager.cpp */; }; AAE7808706081A000034E65F /* ezsockets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE7808506081A000034E65F /* ezsockets.cpp */; }; AAE7812D0608249E0034E65F /* ActiveAttackList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE7812B0608249E0034E65F /* ActiveAttackList.cpp */; }; - AAE782030AC7E64D00AEFC64 /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; }; - AAE782040AC7E65200AEFC64 /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; }; + AAE782030AC7E64D00AEFC64 /* liblua-5.1-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */; }; + AAE782040AC7E65200AEFC64 /* liblua-5.1-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */; }; AAEBC6CC07A20AFE00793F0E /* RageSurface_Save_JPEG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6C607A20AFE00793F0E /* RageSurface_Save_JPEG.cpp */; }; AAEBC6CE07A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6C807A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp */; }; AAEBC6D007A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6CA07A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp */; }; @@ -1661,6 +1658,8 @@ AAFF41A40F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */; }; AAFF41A50F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF41A10F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp */; }; AAFF41A60F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */; }; + B71A60C0139B41DB00183A27 /* InGameLoadingWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B71A60BE139B41DB00183A27 /* InGameLoadingWindow.cpp */; }; + B71A60C1139B41DB00183A27 /* InGameLoadingWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = B71A60BF139B41DB00183A27 /* InGameLoadingWindow.h */; }; B75CE3B5137963350076A82D /* SongPosition.h in Headers */ = {isa = PBXBuildFile; fileRef = B75CE3B3137963350076A82D /* SongPosition.h */; }; B75CE3B6137963350076A82D /* SongPosition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B75CE3B4137963350076A82D /* SongPosition.cpp */; }; EE2153A910A75BEE0074B01B /* NotesLoaderPMS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE2153A710A75BEE0074B01B /* NotesLoaderPMS.cpp */; }; @@ -1824,9 +1823,9 @@ 1215D7A108C6559A00B87D8B /* ScreenGameplayNormal.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenGameplayNormal.h; path = ../src/ScreenGameplayNormal.h; sourceTree = ""; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - 2B17AB7213980FDF001AE57D /* libpng-1.5.1sm0.1.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libpng-1.5.1sm0.1.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 2B17ABC013981521001AE57D /* libglew.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libglew.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 2B17ABE013981756001AE57D /* libpcre.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libpcre.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 2B17AB7213980FDF001AE57D /* libpng-1.5.1-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libpng-1.5.1-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2B17ABC013981521001AE57D /* libglew-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libglew-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2B17ABE013981756001AE57D /* libpcre-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libpcre-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MouseDevice.cpp; sourceTree = ""; }; 2B30D6811315EA7E00044B68 /* MouseDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MouseDevice.h; sourceTree = ""; }; 2B43509313949F37006FA051 /* TimingSegments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TimingSegments.h; path = ../src/TimingSegments.h; sourceTree = SOURCE_ROOT; }; @@ -2020,7 +2019,7 @@ AA28B47A058F2F5D0097C109 /* MemoryCardManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MemoryCardManager.cpp; path = ../src/MemoryCardManager.cpp; sourceTree = ""; }; AA28B47B058F2F5D0097C109 /* MemoryCardManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MemoryCardManager.h; path = ../src/MemoryCardManager.h; sourceTree = ""; }; AA29CE570558741A00961A51 /* Info-StepMania.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; path = "Info-StepMania.plist"; sourceTree = SOURCE_ROOT; }; - AA29CE580558741A00961A51 /* sm-ssc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "sm-ssc.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + AA29CE580558741A00961A51 /* StepMania.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StepMania.app; sourceTree = BUILT_PRODUCTS_DIR; }; AA2C9C9F0BAD6F54002441E9 /* CodeSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CodeSet.cpp; path = ../src/CodeSet.cpp; sourceTree = ""; }; AA2C9CA00BAD6F54002441E9 /* CodeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CodeSet.h; path = ../src/CodeSet.h; sourceTree = ""; }; AA2CA89D0BB745BD002441E9 /* ScreenContinue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenContinue.cpp; path = ../src/ScreenContinue.cpp; sourceTree = ""; }; @@ -2161,8 +2160,6 @@ AA6E006A047711F3005F316C /* ScreenSelectMusic.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSelectMusic.h; path = ../src/ScreenSelectMusic.h; sourceTree = ""; }; AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSongOptions.cpp; path = ../src/ScreenSongOptions.cpp; sourceTree = ""; }; AA6E0070047711F3005F316C /* ScreenSongOptions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSongOptions.h; path = ../src/ScreenSongOptions.h; sourceTree = ""; }; - AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTestFonts.cpp; path = ../src/ScreenTestFonts.cpp; sourceTree = ""; }; - AA6E007A047711F3005F316C /* ScreenTestFonts.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTestFonts.h; path = ../src/ScreenTestFonts.h; sourceTree = ""; }; AA6E007B047711F3005F316C /* ScreenTestSound.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTestSound.cpp; path = ../src/ScreenTestSound.cpp; sourceTree = ""; }; AA6E007C047711F3005F316C /* ScreenTestSound.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTestSound.h; path = ../src/ScreenTestSound.h; sourceTree = ""; }; AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTextEntry.cpp; path = ../src/ScreenTextEntry.cpp; sourceTree = ""; }; @@ -2421,7 +2418,7 @@ AA7ADC24072CAB7F00C50A7F /* RageSoundReader_Chain.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_Chain.h; path = ../src/RageSoundReader_Chain.h; sourceTree = ""; }; AA7ADC25072CAB7F00C50A7F /* RageSoundUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundUtil.cpp; path = ../src/RageSoundUtil.cpp; sourceTree = ""; }; AA7ADC26072CAB7F00C50A7F /* RageSoundUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundUtil.h; path = ../src/RageSoundUtil.h; sourceTree = ""; }; - AA7C895F0B67444700FD9940 /* libtommath.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libtommath.a; sourceTree = BUILT_PRODUCTS_DIR; }; + AA7C895F0B67444700FD9940 /* libtommath-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libtommath-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; }; AA7C8A800B6744F600FD9940 /* bn_error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_error.c; sourceTree = ""; }; AA7C8A810B6744F600FD9940 /* bn_fast_mp_invmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_mp_invmod.c; sourceTree = ""; }; AA7C8A820B6744F600FD9940 /* bn_fast_mp_montgomery_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_mp_montgomery_reduce.c; sourceTree = ""; }; @@ -2544,7 +2541,7 @@ AA7C8AF90B6744F700FD9940 /* tommath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath.h; sourceTree = ""; }; AA7C8AFA0B6744F700FD9940 /* tommath_class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath_class.h; sourceTree = ""; }; AA7C8AFB0B6744F700FD9940 /* tommath_superclass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath_superclass.h; sourceTree = ""; }; - AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libtomcrypt.a; sourceTree = BUILT_PRODUCTS_DIR; }; + AA7C8B8B0B67460600FD9940 /* libtomcrypt-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libtomcrypt-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; }; AA7C8B950B67467C00FD9940 /* aes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = aes.c; sourceTree = ""; }; AA7C8B960B67467C00FD9940 /* aes_tab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = aes_tab.c; sourceTree = ""; }; AA7C8B990B67467C00FD9940 /* hash_memory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hash_memory.c; sourceTree = ""; }; @@ -2971,7 +2968,7 @@ AAE7808606081A000034E65F /* ezsockets.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ezsockets.h; path = ../src/ezsockets.h; sourceTree = ""; }; AAE7812B0608249E0034E65F /* ActiveAttackList.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ActiveAttackList.cpp; path = ../src/ActiveAttackList.cpp; sourceTree = ""; }; AAE7812C0608249E0034E65F /* ActiveAttackList.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ActiveAttackList.h; path = ../src/ActiveAttackList.h; sourceTree = ""; }; - AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "liblua-5.1.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "liblua-5.1-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; }; AAEBC6C607A20AFE00793F0E /* RageSurface_Save_JPEG.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Save_JPEG.cpp; path = ../src/RageSurface_Save_JPEG.cpp; sourceTree = ""; }; AAEBC6C707A20AFE00793F0E /* RageSurface_Save_JPEG.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Save_JPEG.h; path = ../src/RageSurface_Save_JPEG.h; sourceTree = ""; }; AAEBC6C807A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurfaceUtils_Dither.cpp; path = ../src/RageSurfaceUtils_Dither.cpp; sourceTree = ""; }; @@ -3056,6 +3053,8 @@ AAFF55220549F43A00D02EE9 /* ComboGraph.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ComboGraph.h; path = ../src/ComboGraph.h; sourceTree = ""; }; AAFF5541054E736D00D02EE9 /* Attack.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Attack.cpp; path = ../src/Attack.cpp; sourceTree = ""; }; AAFF5542054E736D00D02EE9 /* Attack.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Attack.h; path = ../src/Attack.h; sourceTree = ""; }; + B71A60BE139B41DB00183A27 /* InGameLoadingWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = InGameLoadingWindow.cpp; path = ../src/InGameLoadingWindow.cpp; sourceTree = ""; }; + B71A60BF139B41DB00183A27 /* InGameLoadingWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InGameLoadingWindow.h; path = ../src/InGameLoadingWindow.h; sourceTree = ""; }; B75CE3B3137963350076A82D /* SongPosition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SongPosition.h; path = ../src/SongPosition.h; sourceTree = SOURCE_ROOT; }; B75CE3B4137963350076A82D /* SongPosition.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SongPosition.cpp; path = ../src/SongPosition.cpp; sourceTree = SOURCE_ROOT; }; EE2153A710A75BEE0074B01B /* NotesLoaderPMS.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderPMS.cpp; path = ../src/NotesLoaderPMS.cpp; sourceTree = SOURCE_ROOT; }; @@ -3117,15 +3116,15 @@ AA21E47B0A9826CD00684CEA /* libogg_link.a in Frameworks */, AA21E47D0A9826CD00684CEA /* libtheora_link.a in Frameworks */, AA21E47E0A9826CD00684CEA /* libvorbis_link.a in Frameworks */, - AAE782030AC7E64D00AEFC64 /* liblua-5.1.a in Frameworks */, - AA7C8D200B6748E400FD9940 /* libtomcrypt.a in Frameworks */, - AA7C8D1F0B6748E300FD9940 /* libtommath.a in Frameworks */, + AAE782030AC7E64D00AEFC64 /* liblua-5.1-sm5.a in Frameworks */, + AA7C8D200B6748E400FD9940 /* libtomcrypt-sm5.a in Frameworks */, + AA7C8D1F0B6748E300FD9940 /* libtommath-sm5.a in Frameworks */, AA059E2C0B8F0C67006F8139 /* libz_link.a in Frameworks */, AAA0704E0CE5082E005A3060 /* libffmpeg_link.a in Frameworks */, AAA071B40CE7C9C9005A3060 /* libmad-sm5.a in Frameworks */, - 2B17AB9F13981271001AE57D /* libpng-1.5.1sm0.1.a in Frameworks */, - 2B17ABCF139815E0001AE57D /* libglew.a in Frameworks */, - 2B17ABFC139817D5001AE57D /* libpcre.a in Frameworks */, + 2B17AB9F13981271001AE57D /* libpng-1.5.1-sm5.a in Frameworks */, + 2B17ABCF139815E0001AE57D /* libglew-sm5.a in Frameworks */, + 2B17ABFC139817D5001AE57D /* libpcre-sm5.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3147,12 +3146,12 @@ AA21E4810A9826CD00684CEA /* libogg_link.a in Frameworks */, AA21E4830A9826CD00684CEA /* libtheora_link.a in Frameworks */, AA21E4840A9826CD00684CEA /* libvorbis_link.a in Frameworks */, - AAE782040AC7E65200AEFC64 /* liblua-5.1.a in Frameworks */, - AA7C8D440B674F4F00FD9940 /* libtomcrypt.a in Frameworks */, - AA7C8D430B674F4E00FD9940 /* libtommath.a in Frameworks */, + AAE782040AC7E65200AEFC64 /* liblua-5.1-sm5.a in Frameworks */, + AA7C8D440B674F4F00FD9940 /* libtomcrypt-sm5.a in Frameworks */, + AA7C8D430B674F4E00FD9940 /* libtommath-sm5.a in Frameworks */, AA059E2B0B8F0C67006F8139 /* libz_link.a in Frameworks */, AAA0704F0CE5082E005A3060 /* libffmpeg_link.a in Frameworks */, - 2B17ABFD139817D6001AE57D /* libpcre.a in Frameworks */, + 2B17ABFD139817D6001AE57D /* libpcre-sm5.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3160,7 +3159,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AA7A2BAF0AE09CEC0054C5BA /* liblua-5.1.a in Frameworks */, + AA7A2BAF0AE09CEC0054C5BA /* liblua-5.1-sm5.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3168,7 +3167,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AA7A2BB00AE09CF10054C5BA /* liblua-5.1.a in Frameworks */, + AA7A2BB00AE09CF10054C5BA /* liblua-5.1-sm5.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3233,17 +3232,17 @@ 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( - AA29CE580558741A00961A51 /* sm-ssc.app */, + AA29CE580558741A00961A51 /* StepMania.app */, AA40D52B09A08D660068C0D5 /* sm-ssc.app */, - AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */, + AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */, AA7A2B940AE09B520054C5BA /* lua */, AA7A2BAB0AE09CD50054C5BA /* luac */, - AA7C895F0B67444700FD9940 /* libtommath.a */, - AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */, + AA7C895F0B67444700FD9940 /* libtommath-sm5.a */, + AA7C8B8B0B67460600FD9940 /* libtomcrypt-sm5.a */, AAA070A90CE7B0DF005A3060 /* libmad-sm5.a */, - 2B17AB7213980FDF001AE57D /* libpng-1.5.1sm0.1.a */, - 2B17ABC013981521001AE57D /* libglew.a */, - 2B17ABE013981756001AE57D /* libpcre.a */, + 2B17AB7213980FDF001AE57D /* libpng-1.5.1-sm5.a */, + 2B17ABC013981521001AE57D /* libglew-sm5.a */, + 2B17ABE013981756001AE57D /* libpcre-sm5.a */, ); name = Products; sourceTree = ""; @@ -3536,8 +3535,6 @@ AA07A55E0843E72B00E33D21 /* ScreenSyncOverlay.h */, AA1145DB075DFADF0050A3D1 /* ScreenSystemLayer.cpp */, AA1145DC075DFADF0050A3D1 /* ScreenSystemLayer.h */, - AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */, - AA6E007A047711F3005F316C /* ScreenTestFonts.h */, AAC622FA05389A0500D02EE9 /* ScreenTestInput.cpp */, AAC622FB05389A0500D02EE9 /* ScreenTestInput.h */, AAF7435906110E8D00B19AD1 /* ScreenTestLights.cpp */, @@ -4094,6 +4091,8 @@ AA6EFE9104770E7C005F316C /* GrooveRadar.h */, AA6EFE9404770E7C005F316C /* HelpDisplay.cpp */, AA6EFE9504770E7C005F316C /* HelpDisplay.h */, + B71A60BE139B41DB00183A27 /* InGameLoadingWindow.cpp */, + B71A60BF139B41DB00183A27 /* InGameLoadingWindow.h */, AA729C460599B54D00779F33 /* MemoryCardDisplay.cpp */, AA729C470599B54D00779F33 /* MemoryCardDisplay.h */, AA6EFE9A04770E7C005F316C /* MenuTimer.cpp */, @@ -5148,6 +5147,7 @@ 2B9C2E8E137A138B004C92F3 /* NotesLoaderJson.h in Headers */, 2B9C2E90137A138B004C92F3 /* NotesWriterJson.h in Headers */, 2B43509513949F37006FA051 /* TimingSegments.h in Headers */, + B71A60C1139B41DB00183A27 /* InGameLoadingWindow.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5276,7 +5276,6 @@ AA40D24209A08D650068C0D5 /* ScreenSelectCharacter.h in Headers */, AA40D24609A08D650068C0D5 /* ScreenSelectMusic.h in Headers */, AA40D24809A08D650068C0D5 /* ScreenSongOptions.h in Headers */, - AA40D24A09A08D650068C0D5 /* ScreenTestFonts.h in Headers */, AA40D24B09A08D650068C0D5 /* ScreenTestSound.h in Headers */, AA40D24C09A08D650068C0D5 /* ScreenTextEntry.h in Headers */, AA40D24D09A08D650068C0D5 /* ScreenTitleMenu.h in Headers */, @@ -5673,7 +5672,7 @@ ); name = png; productName = png; - productReference = 2B17AB7213980FDF001AE57D /* libpng-1.5.1sm0.1.a */; + productReference = 2B17AB7213980FDF001AE57D /* libpng-1.5.1-sm5.a */; productType = "com.apple.product-type.library.static"; }; 2B17ABBF13981521001AE57D /* glew */ = { @@ -5690,7 +5689,7 @@ ); name = glew; productName = glew; - productReference = 2B17ABC013981521001AE57D /* libglew.a */; + productReference = 2B17ABC013981521001AE57D /* libglew-sm5.a */; productType = "com.apple.product-type.library.static"; }; 2B17ABDF13981756001AE57D /* pcre */ = { @@ -5707,7 +5706,7 @@ ); name = pcre; productName = pcre; - productReference = 2B17ABE013981756001AE57D /* libpcre.a */; + productReference = 2B17ABE013981756001AE57D /* libpcre-sm5.a */; productType = "com.apple.product-type.library.static"; }; AA29CC240558741A00961A51 /* stepmania */ = { @@ -5737,7 +5736,7 @@ name = stepmania; productInstallPath = "$(HOME)/Applications"; productName = "SDL App"; - productReference = AA29CE580558741A00961A51 /* sm-ssc.app */; + productReference = AA29CE580558741A00961A51 /* StepMania.app */; productType = "com.apple.product-type.application"; }; AA40D1B409A08D650068C0D5 /* stepmania-bare */ = { @@ -5815,7 +5814,7 @@ ); name = tommath; productName = tommath; - productReference = AA7C895F0B67444700FD9940 /* libtommath.a */; + productReference = AA7C895F0B67444700FD9940 /* libtommath-sm5.a */; productType = "com.apple.product-type.library.static"; }; AA7C8B8A0B67460600FD9940 /* tomcrypt */ = { @@ -5832,7 +5831,7 @@ ); name = tomcrypt; productName = tomcrypt; - productReference = AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */; + productReference = AA7C8B8B0B67460600FD9940 /* libtomcrypt-sm5.a */; productType = "com.apple.product-type.library.static"; }; AAA070A80CE7B0DF005A3060 /* mad */ = { @@ -5866,7 +5865,7 @@ ); name = "lua-5.1"; productName = "lua-5.1"; - productReference = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; + productReference = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */; productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ @@ -5874,7 +5873,7 @@ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; - buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania_xcode4" */; + buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */; compatibilityVersion = "Xcode 3.1"; developmentRegion = English; hasScannedForEncodings = 1; @@ -6200,7 +6199,6 @@ AA29CDD50558741A00961A51 /* ScreenSelectCharacter.cpp in Sources */, AA29CDDB0558741A00961A51 /* ScreenSelectMusic.cpp in Sources */, AA29CDDD0558741A00961A51 /* ScreenSongOptions.cpp in Sources */, - AA29CDE10558741A00961A51 /* ScreenTestFonts.cpp in Sources */, AA29CDE20558741A00961A51 /* ScreenTestSound.cpp in Sources */, AA29CDE30558741A00961A51 /* ScreenTextEntry.cpp in Sources */, AA29CDE40558741A00961A51 /* ScreenTitleMenu.cpp in Sources */, @@ -6489,6 +6487,7 @@ 2BD06FF2137242680018CB9F /* json_value.cpp in Sources */, 2BD06FF4137242680018CB9F /* json_writer.cpp in Sources */, 2B43509613949F37006FA051 /* TimingSegments.cpp in Sources */, + B71A60C0139B41DB00183A27 /* InGameLoadingWindow.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6607,7 +6606,6 @@ AA40D3FF09A08D650068C0D5 /* ScreenSelectCharacter.cpp in Sources */, AA40D40309A08D650068C0D5 /* ScreenSelectMusic.cpp in Sources */, AA40D40509A08D650068C0D5 /* ScreenSongOptions.cpp in Sources */, - AA40D40709A08D650068C0D5 /* ScreenTestFonts.cpp in Sources */, AA40D40809A08D650068C0D5 /* ScreenTestSound.cpp in Sources */, AA40D40909A08D650068C0D5 /* ScreenTextEntry.cpp in Sources */, AA40D40A09A08D650068C0D5 /* ScreenTitleMenu.cpp in Sources */, @@ -7374,7 +7372,7 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = "png-1.5.1sm0.1"; + PRODUCT_NAME = "png-1.5.1-sm5"; USER_HEADER_SEARCH_PATHS = ""; }; name = Native; @@ -7418,11 +7416,55 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = "png-1.5.1sm0.1"; + PRODUCT_NAME = "png-1.5.1-sm5"; USER_HEADER_SEARCH_PATHS = ""; }; name = PerformanceDebug; }; + 2B17AB7513980FE0001AE57D /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = "../extern/libpng/**"; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = "png-1.5.1-sm5"; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = Universal; + }; 2B17AB7613980FE0001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7465,7 +7507,7 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = "png-1.5.1sm0.1"; + PRODUCT_NAME = "png-1.5.1-sm5"; USER_HEADER_SEARCH_PATHS = ""; }; name = Debug; @@ -7508,7 +7550,7 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = glew; + PRODUCT_NAME = "glew-sm5"; USER_HEADER_SEARCH_PATHS = ""; }; name = Native; @@ -7551,11 +7593,54 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = glew; + PRODUCT_NAME = "glew-sm5"; USER_HEADER_SEARCH_PATHS = ""; }; name = PerformanceDebug; }; + 2B17ABC313981522001AE57D /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = "../extern/glew-1.5.8/include"; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = "glew-sm5"; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = Universal; + }; 2B17ABC413981522001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7597,7 +7682,7 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = glew; + PRODUCT_NAME = "glew-sm5"; USER_HEADER_SEARCH_PATHS = ""; }; name = Debug; @@ -7621,7 +7706,6 @@ GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; GCC_WARN_ABOUT_RETURN_TYPE = NO; GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_CHECK_SWITCH_STATEMENTS = NO; GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; GCC_WARN_MISSING_PARENTHESES = NO; @@ -7640,7 +7724,7 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = pcre; + PRODUCT_NAME = "pcre-sm5"; }; name = Native; }; @@ -7663,7 +7747,6 @@ GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; GCC_WARN_ABOUT_RETURN_TYPE = NO; GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_CHECK_SWITCH_STATEMENTS = NO; GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; GCC_WARN_MISSING_PARENTHESES = NO; @@ -7682,10 +7765,51 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = pcre; + PRODUCT_NAME = "pcre-sm5"; }; name = PerformanceDebug; }; + 2B17ABE313981757001AE57D /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = ""; + GCC_PREFIX_HEADER = ""; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = "pcre-sm5"; + }; + name = Universal; + }; 2B17ABE413981757001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7708,7 +7832,6 @@ GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; GCC_WARN_ABOUT_RETURN_TYPE = NO; GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_CHECK_SWITCH_STATEMENTS = NO; GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; GCC_WARN_MISSING_PARENTHESES = NO; @@ -7727,7 +7850,7 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = pcre; + PRODUCT_NAME = "pcre-sm5"; }; name = Debug; }; @@ -7739,7 +7862,6 @@ GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 3; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_SHADOW = NO; GCC_WARN_SIGN_COMPARE = YES; @@ -7764,6 +7886,7 @@ buildSettings = { CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_AUTO_VECTORIZATION = NO; GCC_ENABLE_SSE3_EXTENSIONS = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; @@ -7790,10 +7913,12 @@ LINKER_DISPLAYS_MANGLED_NAMES = NO; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", "-fconstant-cfstrings", "-fno-exceptions", + "-falign-loops=16", ); - PRODUCT_NAME = "$(value)"; + PRODUCT_NAME = StepMania; SYMROOT = "$(SRCROOT)/.."; WRAPPER_EXTENSION = app; }; @@ -7817,6 +7942,7 @@ GCC_FAST_OBJC_DISPATCH = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -7847,10 +7973,14 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; + SDKROOT_i386 = ""; + SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = NO; STRIP_STYLE = "non-global"; @@ -7907,6 +8037,55 @@ }; name = Native; }; + AA40D52909A08D650068C0D5 /* Universal */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SRCROOT)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks", + ); + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + NO_MP3_SUPPORT, + WITHOUT_NETWORKING, + ); + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/Frameworks/ffmpeg.framework/Headers", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/A/Headers", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/Libraries", + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + ); + PRODUCT_NAME = "$(value)"; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = Universal; + }; AA40D52A09A08D660068C0D5 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; @@ -7977,6 +8156,25 @@ }; name = Native; }; + AA7A2B9B0AE09BA50054C5BA /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + LUA_USE_MACOSX, + "$(value)", + ); + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = lua; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; AA7A2B9C0AE09BA50054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8012,6 +8210,22 @@ }; name = Native; }; + AA7A2BBB0AE09D4E0054C5BA /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = luac; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; AA7A2BBC0AE09D4E0054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8031,11 +8245,17 @@ AA7A2BBE0AE09D4E0054C5BA /* Native */ = { isa = XCBuildConfiguration; buildSettings = { - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "all lua"; }; name = Native; }; + AA7A2BBF0AE09D4E0054C5BA /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "all lua"; + }; + name = Universal; + }; AA7A2BC00AE09D4E0054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8043,7 +8263,6 @@ GCC_DYNAMIC_NO_PIC = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "all lua"; }; name = Debug; @@ -8059,11 +8278,27 @@ GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; GCC_WARN_PROTOTYPE_CONVERSION = NO; INSTALL_PATH = /usr/local/lib; - PRODUCT_NAME = tommath; + PRODUCT_NAME = "tommath-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = Native; }; + AA7C89830B67447E00FD9940 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DYNAMIC_NO_PIC = YES; + GCC_MODEL_TUNING = G5; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + INSTALL_PATH = /usr/local/lib; + PRODUCT_NAME = "tommath-sm5"; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; AA7C89840B67447E00FD9940 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8077,7 +8312,7 @@ GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; GCC_WARN_PROTOTYPE_CONVERSION = NO; INSTALL_PATH = /usr/local/lib; - PRODUCT_NAME = tommath; + PRODUCT_NAME = "tommath-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = Debug; @@ -8095,12 +8330,12 @@ GCC_WARN_PROTOTYPE_CONVERSION = NO; INSTALL_PATH = /usr/local/lib; KEEP_PRIVATE_EXTERNS = YES; - PRODUCT_NAME = tomcrypt; + PRODUCT_NAME = "tomcrypt-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = Native; }; - AA7C8B910B67464300FD9940 /* Debug */ = { + AA7C8B900B67464300FD9940 /* Universal */ = { isa = XCBuildConfiguration; buildSettings = { CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; @@ -8113,7 +8348,29 @@ GCC_WARN_PROTOTYPE_CONVERSION = NO; INSTALL_PATH = /usr/local/lib; KEEP_PRIVATE_EXTERNS = YES; - PRODUCT_NAME = tomcrypt; + PRODUCT_NAME = "tomcrypt-sm5"; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; + AA7C8B910B67464300FD9940 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + DEAD_CODE_STRIPPING = NO; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_RTTI = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + LTC_NO_ROLC, + "DEBUG=1", + ); + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + INSTALL_PATH = /usr/local/lib; + KEEP_PRIVATE_EXTERNS = YES; + PRODUCT_NAME = "tomcrypt-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = Debug; @@ -8192,6 +8449,43 @@ }; name = PerformanceDebug; }; + AAA070AC0CE7B0E2005A3060 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + FPM = ""; + "FPM[arch=i386]" = FPM_INTEL; + "FPM[arch=ppc]" = FPM_PPC; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PREPROCESSOR_DEFINITIONS = ( + "HAVE_ASSERT_H=1", + "HAVE_DLFCN_H=1", + "HAVE_ERRNO_H=1", + "HAVE_FORK=1", + "HAVE_INTTYPES_H=1", + "HAVE_LIMITS_H=1", + "HAVE_MEMORY_H=1", + "HAVE_WAITPID=1", + "SIZEOF_LONG=4", + "$(FPM)", + ); + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + HEADER_SEARCH_PATHS = "$(SRCROOT)/../src/mad-0.15.1b"; + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRODUCT_NAME = "mad-sm5"; + }; + name = Universal; + }; AAA070AD0CE7B0E2005A3060 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8249,6 +8543,7 @@ GCC_FAST_OBJC_DISPATCH = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 3; GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -8278,10 +8573,14 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; + SDKROOT_i386 = ""; + SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; @@ -8297,6 +8596,7 @@ COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = stabs; FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_AUTO_VECTORIZATION = NO; GCC_ENABLE_SSE3_EXTENSIONS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; @@ -8324,10 +8624,12 @@ LINKER_DISPLAYS_MANGLED_NAMES = NO; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", "-fconstant-cfstrings", "-fno-exceptions", + "-falign-loops=16", ); - PRODUCT_NAME = "$(value)"; + PRODUCT_NAME = StepMania; STRIP_INSTALLED_PRODUCT = NO; SYMROOT = "$(SRCROOT)/.."; WRAPPER_EXTENSION = app; @@ -8342,7 +8644,6 @@ GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 3; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_SHADOW = NO; GCC_WARN_SIGN_COMPARE = YES; @@ -8431,7 +8732,7 @@ INSTALL_PATH = /usr/local/lib; OBJROOT = "$(SRCROOT)/build"; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = "lua-5.1"; + PRODUCT_NAME = "lua-5.1-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = PerformanceDebug; @@ -8474,7 +8775,6 @@ AABF4DC10CD37960005A3060 /* PerformanceDebug */ = { isa = XCBuildConfiguration; buildSettings = { - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "all lua"; }; name = PerformanceDebug; @@ -8490,7 +8790,7 @@ GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; GCC_WARN_PROTOTYPE_CONVERSION = NO; INSTALL_PATH = /usr/local/lib; - PRODUCT_NAME = tommath; + PRODUCT_NAME = "tommath-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = PerformanceDebug; @@ -8508,7 +8808,7 @@ GCC_WARN_PROTOTYPE_CONVERSION = NO; INSTALL_PATH = /usr/local/lib; KEEP_PRIVATE_EXTERNS = YES; - PRODUCT_NAME = tomcrypt; + PRODUCT_NAME = "tomcrypt-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = PerformanceDebug; @@ -8521,7 +8821,6 @@ GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 3; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_SHADOW = NO; GCC_WARN_SIGN_COMPARE = YES; @@ -8546,7 +8845,9 @@ buildSettings = { CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; - GCC_ENABLE_SSE3_EXTENSIONS = NO; + GCC_AUTO_VECTORIZATION = YES; + GCC_ENABLE_SSE3_EXTENSIONS = YES; + GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; @@ -8570,10 +8871,12 @@ LINKER_DISPLAYS_MANGLED_NAMES = NO; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", "-fconstant-cfstrings", "-fno-exceptions", + "-falign-loops=16", ); - PRODUCT_NAME = "$(value)"; + PRODUCT_NAME = StepMania; SYMROOT = "$(SRCROOT)/.."; WRAPPER_EXTENSION = app; }; @@ -8596,6 +8899,7 @@ GCC_FAST_OBJC_DISPATCH = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 3; GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -8625,10 +8929,14 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; + SDKROOT_i386 = ""; + SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; @@ -8636,6 +8944,138 @@ }; name = Native; }; + AAE44A2B0965707500B025E5 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LIBRARY_STYLE = Bundle; + MACOSX_DEPLOYMENT_TARGET = 10.5; + PRODUCT_NAME = version; + ZERO_LINK = NO; + }; + name = Universal; + }; + AAE44A2C0965707500B025E5 /* Universal */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_AUTO_VECTORIZATION = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = NO; + GCC_ENABLE_SSE3_EXTENSIONS = NO; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/../src/ffmpeg/include", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(SRCROOT)/Libraries", + "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + LINKER_DISPLAYS_MANGLED_NAMES = NO; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fno-exceptions", + "-falign-loops=16", + ); + PRODUCT_NAME = StepMania; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = Universal; + }; + AAE44A2D0965707500B025E5 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + BUILD_VARIANTS = normal; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = "*.nib *.lproj *.framework *.gch *.xcode* (*) CVS .svn .hg .git"; + GCC_ALTIVEC_EXTENSIONS = YES; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_FAST_MATH = NO; + GCC_FAST_OBJC_DISPATCH = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_STRICT_ALIASING = YES; + GCC_UNROLL_LOOPS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_PROTOTYPE_CONVERSION = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LINKER_DISPLAYS_MANGLED_NAMES = YES; + MACOSX_DEPLOYMENT_TARGET = 10.5; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; + ONLY_LINK_ESSENTIAL_SYMBOLS = YES; + PREBINDING = NO; + PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; + SDKROOT = macosx10.5; + SDKROOT_i386 = ""; + SDKROOT_ppc = ""; + SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; + STRIP_INSTALLED_PRODUCT = YES; + STRIP_STYLE = "non-global"; + USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../extern/jsoncpp/include"; + }; + name = Universal; + }; AAE781800AC7E3BF00AEFC64 /* Native */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8657,11 +9097,37 @@ INSTALL_PATH = /usr/local/lib; OBJROOT = "$(SRCROOT)/build"; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = "lua-5.1"; + PRODUCT_NAME = "lua-5.1-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = Native; }; + AAE781810AC7E3BF00AEFC64 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(value)", + LUA_USE_MACOSX, + ); + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + INSTALL_PATH = /usr/local/lib; + OBJROOT = "$(SRCROOT)/build"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_NAME = "lua-5.1-sm5"; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; AAE781820AC7E3BF00AEFC64 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8683,7 +9149,7 @@ INSTALL_PATH = /usr/local/lib; OBJROOT = "$(SRCROOT)/build"; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = "lua-5.1"; + PRODUCT_NAME = "lua-5.1-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = Debug; @@ -8696,6 +9162,7 @@ buildConfigurations = ( 2B17AB7313980FE0001AE57D /* Native */, 2B17AB7413980FE0001AE57D /* PerformanceDebug */, + 2B17AB7513980FE0001AE57D /* Universal */, 2B17AB7613980FE0001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8706,6 +9173,7 @@ buildConfigurations = ( 2B17ABC113981522001AE57D /* Native */, 2B17ABC213981522001AE57D /* PerformanceDebug */, + 2B17ABC313981522001AE57D /* Universal */, 2B17ABC413981522001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8716,6 +9184,7 @@ buildConfigurations = ( 2B17ABE113981757001AE57D /* Native */, 2B17ABE213981757001AE57D /* PerformanceDebug */, + 2B17ABE313981757001AE57D /* Universal */, 2B17ABE413981757001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8726,6 +9195,7 @@ buildConfigurations = ( AA40D52809A08D650068C0D5 /* Native */, AABF4DBD0CD37960005A3060 /* PerformanceDebug */, + AA40D52909A08D650068C0D5 /* Universal */, AA40D52A09A08D660068C0D5 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8736,6 +9206,7 @@ buildConfigurations = ( AA7A2B9A0AE09BA50054C5BA /* Native */, AABF4DBF0CD37960005A3060 /* PerformanceDebug */, + AA7A2B9B0AE09BA50054C5BA /* Universal */, AA7A2B9C0AE09BA50054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8746,6 +9217,7 @@ buildConfigurations = ( AA7A2BBA0AE09D4E0054C5BA /* Native */, AABF4DC00CD37960005A3060 /* PerformanceDebug */, + AA7A2BBB0AE09D4E0054C5BA /* Universal */, AA7A2BBC0AE09D4E0054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8756,6 +9228,7 @@ buildConfigurations = ( AA7A2BBE0AE09D4E0054C5BA /* Native */, AABF4DC10CD37960005A3060 /* PerformanceDebug */, + AA7A2BBF0AE09D4E0054C5BA /* Universal */, AA7A2BC00AE09D4E0054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8766,6 +9239,7 @@ buildConfigurations = ( AA7C89820B67447E00FD9940 /* Native */, AABF4DC20CD37960005A3060 /* PerformanceDebug */, + AA7C89830B67447E00FD9940 /* Universal */, AA7C89840B67447E00FD9940 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8776,6 +9250,7 @@ buildConfigurations = ( AA7C8B8F0B67464300FD9940 /* Native */, AABF4DC30CD37960005A3060 /* PerformanceDebug */, + AA7C8B900B67464300FD9940 /* Universal */, AA7C8B910B67464300FD9940 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8786,6 +9261,7 @@ buildConfigurations = ( AAA070AA0CE7B0E2005A3060 /* Native */, AAA070AB0CE7B0E2005A3060 /* PerformanceDebug */, + AAA070AC0CE7B0E2005A3060 /* Universal */, AAA070AD0CE7B0E2005A3060 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8796,6 +9272,7 @@ buildConfigurations = ( AAC8450D0856A19700A9FEAB /* Native */, AABF4DBC0CD37960005A3060 /* PerformanceDebug */, + AAE44A2B0965707500B025E5 /* Universal */, AA0AA8FE0963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8806,16 +9283,18 @@ buildConfigurations = ( AAC845110856A19700A9FEAB /* Native */, AABF4DBB0CD37960005A3060 /* PerformanceDebug */, + AAE44A2C0965707500B025E5 /* Universal */, AA0AA8FF0963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Native; }; - AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania_xcode4" */ = { + AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */ = { isa = XCConfigurationList; buildConfigurations = ( AAC845150856A19700A9FEAB /* Native */, AABF4DBA0CD37960005A3060 /* PerformanceDebug */, + AAE44A2D0965707500B025E5 /* Universal */, AA0AA9000963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8826,6 +9305,7 @@ buildConfigurations = ( AAE781800AC7E3BF00AEFC64 /* Native */, AABF4DBE0CD37960005A3060 /* PerformanceDebug */, + AAE781810AC7E3BF00AEFC64 /* Universal */, AAE781820AC7E3BF00AEFC64 /* Debug */, ); defaultConfigurationIsVisible = 0; From 87c16e95619d73d9e4999bc2f719786bf3164187 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 10:23:40 -0400 Subject: [PATCH 050/106] [Xcode4] Fails to link. illegal text reloc. This is an architecture issue: i386 for RageUtil.o, random_access_iterator_tag. Some help is going to be needed. --- .../project.pbxproj | 472 +----------------- 1 file changed, 2 insertions(+), 470 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 36f73f5a4b..9c07554a6f 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -5873,7 +5873,7 @@ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; - buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */; + buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania_xcode4" */; compatibilityVersion = "Xcode 3.1"; developmentRegion = English; hasScannedForEncodings = 1; @@ -7421,50 +7421,6 @@ }; name = PerformanceDebug; }; - 2B17AB7513980FE0001AE57D /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; - GCC_WARN_ABOUT_MISSING_NEWLINE = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_ABOUT_RETURN_TYPE = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; - GCC_WARN_MISSING_PARENTHESES = NO; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = NO; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; - GCC_WARN_UNDECLARED_SELECTOR = NO; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = NO; - GCC_WARN_UNUSED_FUNCTION = NO; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_VALUE = NO; - GCC_WARN_UNUSED_VARIABLE = NO; - HEADER_SEARCH_PATHS = "../extern/libpng/**"; - INSTALL_PATH = /usr/local/lib; - OTHER_LDFLAGS = ""; - PREBINDING = NO; - PRODUCT_NAME = "png-1.5.1-sm5"; - USER_HEADER_SEARCH_PATHS = ""; - }; - name = Universal; - }; 2B17AB7613980FE0001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7598,49 +7554,6 @@ }; name = PerformanceDebug; }; - 2B17ABC313981522001AE57D /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; - GCC_WARN_ABOUT_MISSING_NEWLINE = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_ABOUT_RETURN_TYPE = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; - GCC_WARN_MISSING_PARENTHESES = NO; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = NO; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; - GCC_WARN_UNDECLARED_SELECTOR = NO; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = NO; - GCC_WARN_UNUSED_FUNCTION = NO; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_VALUE = NO; - GCC_WARN_UNUSED_VARIABLE = NO; - HEADER_SEARCH_PATHS = "../extern/glew-1.5.8/include"; - INSTALL_PATH = /usr/local/lib; - OTHER_LDFLAGS = ""; - PREBINDING = NO; - PRODUCT_NAME = "glew-sm5"; - USER_HEADER_SEARCH_PATHS = ""; - }; - name = Universal; - }; 2B17ABC413981522001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7769,47 +7682,6 @@ }; name = PerformanceDebug; }; - 2B17ABE313981757001AE57D /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = ""; - GCC_PREFIX_HEADER = ""; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; - GCC_WARN_ABOUT_MISSING_NEWLINE = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_ABOUT_RETURN_TYPE = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; - GCC_WARN_MISSING_PARENTHESES = NO; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = NO; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; - GCC_WARN_UNDECLARED_SELECTOR = NO; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = NO; - GCC_WARN_UNUSED_FUNCTION = NO; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_VALUE = NO; - GCC_WARN_UNUSED_VARIABLE = NO; - INSTALL_PATH = /usr/local/lib; - OTHER_LDFLAGS = ""; - PREBINDING = NO; - PRODUCT_NAME = "pcre-sm5"; - }; - name = Universal; - }; 2B17ABE413981757001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7974,13 +7846,11 @@ LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; SDKROOT_i386 = ""; - SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = NO; STRIP_STYLE = "non-global"; @@ -8037,55 +7907,6 @@ }; name = Native; }; - AA40D52909A08D650068C0D5 /* Universal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SRCROOT)/Frameworks", - "$(SYSTEM_LIBRARY_DIR)/Frameworks", - "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks", - ); - FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; - GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - NO_MP3_SUPPORT, - WITHOUT_NETWORKING, - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ( - "$(SRCROOT)/../src", - "$(SRCROOT)/Frameworks/ffmpeg.framework/Headers", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", - "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/A/Headers", - ); - INFOPLIST_FILE = "Info-StepMania.plist"; - INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; - INFOPLIST_PREPROCESS = YES; - INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ( - "$(SRCROOT)/Libraries", - "$(SRCROOT)/build/$(CONFIGURATION)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", - "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", - ); - LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; - OBJROOT = "$(SRCROOT)/build"; - OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", - "-fconstant-cfstrings", - "-fsingle-precision-constant", - "-fno-exceptions", - ); - PRODUCT_NAME = "$(value)"; - SYMROOT = "$(SRCROOT)/.."; - WRAPPER_EXTENSION = app; - }; - name = Universal; - }; AA40D52A09A08D660068C0D5 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; @@ -8156,25 +7977,6 @@ }; name = Native; }; - AA7A2B9B0AE09BA50054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = ( - LUA_USE_MACOSX, - "$(value)", - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; - OBJROOT = "$(SRCROOT)/build"; - PRODUCT_NAME = lua; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7A2B9C0AE09BA50054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8210,22 +8012,6 @@ }; name = Native; }; - AA7A2BBB0AE09D4E0054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; - OBJROOT = "$(SRCROOT)/build"; - PRODUCT_NAME = luac; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7A2BBC0AE09D4E0054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8249,13 +8035,6 @@ }; name = Native; }; - AA7A2BBF0AE09D4E0054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "all lua"; - }; - name = Universal; - }; AA7A2BC00AE09D4E0054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8283,22 +8062,6 @@ }; name = Native; }; - AA7C89830B67447E00FD9940 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_DYNAMIC_NO_PIC = YES; - GCC_MODEL_TUNING = G5; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - INSTALL_PATH = /usr/local/lib; - PRODUCT_NAME = "tommath-sm5"; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7C89840B67447E00FD9940 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8335,24 +8098,6 @@ }; name = Native; }; - AA7C8B900B67464300FD9940 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - DEAD_CODE_STRIPPING = NO; - GCC_DYNAMIC_NO_PIC = YES; - GCC_ENABLE_CPP_RTTI = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - INSTALL_PATH = /usr/local/lib; - KEEP_PRIVATE_EXTERNS = YES; - PRODUCT_NAME = "tomcrypt-sm5"; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7C8B910B67464300FD9940 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8449,43 +8194,6 @@ }; name = PerformanceDebug; }; - AAA070AC0CE7B0E2005A3060 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - FPM = ""; - "FPM[arch=i386]" = FPM_INTEL; - "FPM[arch=ppc]" = FPM_PPC; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PREPROCESSOR_DEFINITIONS = ( - "HAVE_ASSERT_H=1", - "HAVE_DLFCN_H=1", - "HAVE_ERRNO_H=1", - "HAVE_FORK=1", - "HAVE_INTTYPES_H=1", - "HAVE_LIMITS_H=1", - "HAVE_MEMORY_H=1", - "HAVE_WAITPID=1", - "SIZEOF_LONG=4", - "$(FPM)", - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = NO; - HEADER_SEARCH_PATHS = "$(SRCROOT)/../src/mad-0.15.1b"; - INSTALL_PATH = /usr/local/lib; - PREBINDING = NO; - PRODUCT_NAME = "mad-sm5"; - }; - name = Universal; - }; AAA070AD0CE7B0E2005A3060 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8574,13 +8282,11 @@ LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; SDKROOT_i386 = ""; - SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; @@ -8930,13 +8636,11 @@ LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; SDKROOT_i386 = ""; - SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; @@ -8944,138 +8648,6 @@ }; name = Native; }; - AAE44A2B0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_OPTIMIZATION_LEVEL = 3; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_PARAMETER = NO; - GCC_WARN_UNUSED_VALUE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LIBRARY_STYLE = Bundle; - MACOSX_DEPLOYMENT_TARGET = 10.5; - PRODUCT_NAME = version; - ZERO_LINK = NO; - }; - name = Universal; - }; - AAE44A2C0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; - FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; - GCC_AUTO_VECTORIZATION = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = NO; - GCC_ENABLE_SSE3_EXTENSIONS = NO; - GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ( - "$(SRCROOT)/../src", - "$(SRCROOT)/../src/ffmpeg/include", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", - ); - INFOPLIST_FILE = "Info-StepMania.plist"; - INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; - INFOPLIST_PREPROCESS = YES; - INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; - LIBRARY_SEARCH_PATHS = ( - "$(SRCROOT)/build/$(CONFIGURATION)", - "$(SRCROOT)/Libraries", - "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", - ); - LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; - LINKER_DISPLAYS_MANGLED_NAMES = NO; - OBJROOT = "$(SRCROOT)/build"; - OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", - "-fconstant-cfstrings", - "-fno-exceptions", - "-falign-loops=16", - ); - PRODUCT_NAME = StepMania; - SYMROOT = "$(SRCROOT)/.."; - WRAPPER_EXTENSION = app; - }; - name = Universal; - }; - AAE44A2D0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - BUILD_VARIANTS = normal; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = "*.nib *.lproj *.framework *.gch *.xcode* (*) CVS .svn .hg .git"; - GCC_ALTIVEC_EXTENSIONS = YES; - GCC_DEBUGGING_SYMBOLS = full; - GCC_DYNAMIC_NO_PIC = YES; - GCC_ENABLE_CPP_EXCEPTIONS = NO; - GCC_ENABLE_SYMBOL_SEPARATION = NO; - GCC_FAST_MATH = NO; - GCC_FAST_OBJC_DISPATCH = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_INLINES_ARE_PRIVATE_EXTERN = YES; - GCC_MODEL_TUNING = G5; - GCC_OPTIMIZATION_LEVEL = 3; - GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_STRICT_ALIASING = YES; - GCC_UNROLL_LOOPS = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_PROTOTYPE_CONVERSION = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_VALUE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LINKER_DISPLAYS_MANGLED_NAMES = YES; - MACOSX_DEPLOYMENT_TARGET = 10.5; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; - ONLY_LINK_ESSENTIAL_SYMBOLS = YES; - PREBINDING = NO; - PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; - SDKROOT = macosx10.5; - SDKROOT_i386 = ""; - SDKROOT_ppc = ""; - SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; - STRIP_INSTALLED_PRODUCT = YES; - STRIP_STYLE = "non-global"; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../extern/jsoncpp/include"; - }; - name = Universal; - }; AAE781800AC7E3BF00AEFC64 /* Native */ = { isa = XCBuildConfiguration; buildSettings = { @@ -9102,32 +8674,6 @@ }; name = Native; }; - AAE781810AC7E3BF00AEFC64 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_DEBUGGING_SYMBOLS = full; - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(value)", - LUA_USE_MACOSX, - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - INSTALL_PATH = /usr/local/lib; - OBJROOT = "$(SRCROOT)/build"; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = "lua-5.1-sm5"; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AAE781820AC7E3BF00AEFC64 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -9162,7 +8708,6 @@ buildConfigurations = ( 2B17AB7313980FE0001AE57D /* Native */, 2B17AB7413980FE0001AE57D /* PerformanceDebug */, - 2B17AB7513980FE0001AE57D /* Universal */, 2B17AB7613980FE0001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9173,7 +8718,6 @@ buildConfigurations = ( 2B17ABC113981522001AE57D /* Native */, 2B17ABC213981522001AE57D /* PerformanceDebug */, - 2B17ABC313981522001AE57D /* Universal */, 2B17ABC413981522001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9184,7 +8728,6 @@ buildConfigurations = ( 2B17ABE113981757001AE57D /* Native */, 2B17ABE213981757001AE57D /* PerformanceDebug */, - 2B17ABE313981757001AE57D /* Universal */, 2B17ABE413981757001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9195,7 +8738,6 @@ buildConfigurations = ( AA40D52809A08D650068C0D5 /* Native */, AABF4DBD0CD37960005A3060 /* PerformanceDebug */, - AA40D52909A08D650068C0D5 /* Universal */, AA40D52A09A08D660068C0D5 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9206,7 +8748,6 @@ buildConfigurations = ( AA7A2B9A0AE09BA50054C5BA /* Native */, AABF4DBF0CD37960005A3060 /* PerformanceDebug */, - AA7A2B9B0AE09BA50054C5BA /* Universal */, AA7A2B9C0AE09BA50054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9217,7 +8758,6 @@ buildConfigurations = ( AA7A2BBA0AE09D4E0054C5BA /* Native */, AABF4DC00CD37960005A3060 /* PerformanceDebug */, - AA7A2BBB0AE09D4E0054C5BA /* Universal */, AA7A2BBC0AE09D4E0054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9228,7 +8768,6 @@ buildConfigurations = ( AA7A2BBE0AE09D4E0054C5BA /* Native */, AABF4DC10CD37960005A3060 /* PerformanceDebug */, - AA7A2BBF0AE09D4E0054C5BA /* Universal */, AA7A2BC00AE09D4E0054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9239,7 +8778,6 @@ buildConfigurations = ( AA7C89820B67447E00FD9940 /* Native */, AABF4DC20CD37960005A3060 /* PerformanceDebug */, - AA7C89830B67447E00FD9940 /* Universal */, AA7C89840B67447E00FD9940 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9250,7 +8788,6 @@ buildConfigurations = ( AA7C8B8F0B67464300FD9940 /* Native */, AABF4DC30CD37960005A3060 /* PerformanceDebug */, - AA7C8B900B67464300FD9940 /* Universal */, AA7C8B910B67464300FD9940 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9261,7 +8798,6 @@ buildConfigurations = ( AAA070AA0CE7B0E2005A3060 /* Native */, AAA070AB0CE7B0E2005A3060 /* PerformanceDebug */, - AAA070AC0CE7B0E2005A3060 /* Universal */, AAA070AD0CE7B0E2005A3060 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9272,7 +8808,6 @@ buildConfigurations = ( AAC8450D0856A19700A9FEAB /* Native */, AABF4DBC0CD37960005A3060 /* PerformanceDebug */, - AAE44A2B0965707500B025E5 /* Universal */, AA0AA8FE0963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9283,18 +8818,16 @@ buildConfigurations = ( AAC845110856A19700A9FEAB /* Native */, AABF4DBB0CD37960005A3060 /* PerformanceDebug */, - AAE44A2C0965707500B025E5 /* Universal */, AA0AA8FF0963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Native; }; - AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */ = { + AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania_xcode4" */ = { isa = XCConfigurationList; buildConfigurations = ( AAC845150856A19700A9FEAB /* Native */, AABF4DBA0CD37960005A3060 /* PerformanceDebug */, - AAE44A2D0965707500B025E5 /* Universal */, AA0AA9000963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9305,7 +8838,6 @@ buildConfigurations = ( AAE781800AC7E3BF00AEFC64 /* Native */, AABF4DBE0CD37960005A3060 /* PerformanceDebug */, - AAE781810AC7E3BF00AEFC64 /* Universal */, AAE781820AC7E3BF00AEFC64 /* Debug */, ); defaultConfigurationIsVisible = 0; From dbdab4759e29dbb65cabdf6bf08d74aa59844120 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 11:11:04 -0400 Subject: [PATCH 051/106] [Xcode4] May as well fix switch warnings. Still need some assistance for the linker error. --- src/Actor.cpp | 13 +- src/BGAnimationLayer.cpp | 10 +- src/Course.cpp | 10 +- src/DancingCharacters.cpp | 9 +- src/EditMenu.cpp | 8 +- src/GameCommand.cpp | 34 +- src/GameState.cpp | 35 +- src/Inventory.cpp | 19 +- src/LifeMeterBar.cpp | 13 +- src/MemoryCardManager.cpp | 62 ++-- src/MusicWheel.cpp | 344 +++++++++---------- src/NoteData.cpp | 10 +- src/NoteDataUtil.cpp | 20 +- src/NoteField.cpp | 1 + src/NotesLoaderBMS.cpp | 6 +- src/NotesLoaderJson.cpp | 1 + src/NotesLoaderMidi.cpp | 11 +- src/NotesWriterDWI.cpp | 7 +- src/OptionRow.cpp | 30 +- src/PaneDisplay.cpp | 124 +++---- src/Player.cpp | 60 ++-- src/PlayerStageStats.cpp | 25 +- src/RageDisplay_Legacy.cpp | 41 +-- src/RageSound.cpp | 19 +- src/RageSoundReader_FileReader.cpp | 21 +- src/RageSurface_Load.cpp | 19 +- src/ScoreKeeperRave.cpp | 5 +- src/Screen.cpp | 1 + src/ScreenAttract.cpp | 61 ++-- src/ScreenContinue.cpp | 27 +- src/ScreenDebugOverlay.cpp | 9 +- src/ScreenEdit.cpp | 1 + src/ScreenEditMenu.cpp | 43 +-- src/ScreenEnding.cpp | 16 +- src/ScreenEvaluation.cpp | 50 +-- src/ScreenGameplay.cpp | 530 +++++++++++++++-------------- src/ScreenJukebox.cpp | 10 +- src/ScreenOptions.cpp | 72 ++-- src/ScreenPrompt.cpp | 43 +-- src/ScreenRanking.cpp | 17 +- src/ScreenSelectCharacter.cpp | 52 +-- src/ScreenSelectMusic.cpp | 31 +- src/ScreenSyncOverlay.cpp | 60 ++-- src/ScreenTestInput.cpp | 17 +- src/ScreenTestLights.cpp | 13 +- src/ScreenTestSound.cpp | 87 ++--- src/ScreenTextEntry.cpp | 9 +- src/SongManager.cpp | 11 +- src/StageStats.cpp | 7 +- src/StepMania.cpp | 43 +-- src/UnlockManager.cpp | 25 +- 51 files changed, 1159 insertions(+), 1033 deletions(-) diff --git a/src/Actor.cpp b/src/Actor.cpp index d7e8f3f4b2..917f4cc45f 100644 --- a/src/Actor.cpp +++ b/src/Actor.cpp @@ -722,12 +722,13 @@ void Actor::UpdateInternal( float fDeltaTime ) // todo: account for SSC_FUTURES -aj switch( m_Effect ) { - case spin: - m_current.rotation += m_fEffectDelta*m_vEffectMagnitude; - wrap( m_current.rotation.x, 360 ); - wrap( m_current.rotation.y, 360 ); - wrap( m_current.rotation.z, 360 ); - break; + case spin: + m_current.rotation += m_fEffectDelta*m_vEffectMagnitude; + wrap( m_current.rotation.x, 360 ); + wrap( m_current.rotation.y, 360 ); + wrap( m_current.rotation.z, 360 ); + break; + default: break; } UpdateTweening( fDeltaTime ); diff --git a/src/BGAnimationLayer.cpp b/src/BGAnimationLayer.cpp index 42a09a5571..d7ff56ca07 100644 --- a/src/BGAnimationLayer.cpp +++ b/src/BGAnimationLayer.cpp @@ -189,11 +189,11 @@ void BGAnimationLayer::LoadFromAniLayerFile( const RString& sPath ) switch( effect ) { - case EFFECT_STRETCH_SCROLL_LEFT: m_fTexCoordVelocityX = +0.5f; m_fTexCoordVelocityY = 0; break; - case EFFECT_STRETCH_SCROLL_RIGHT: m_fTexCoordVelocityX = -0.5f; m_fTexCoordVelocityY = 0; break; - case EFFECT_STRETCH_SCROLL_UP: m_fTexCoordVelocityX = 0; m_fTexCoordVelocityY = +0.5f; break; - case EFFECT_STRETCH_SCROLL_DOWN: m_fTexCoordVelocityX = 0; m_fTexCoordVelocityY = -0.5f; break; - break; + case EFFECT_STRETCH_SCROLL_LEFT: m_fTexCoordVelocityX = +0.5f; m_fTexCoordVelocityY = 0; break; + case EFFECT_STRETCH_SCROLL_RIGHT: m_fTexCoordVelocityX = -0.5f; m_fTexCoordVelocityY = 0; break; + case EFFECT_STRETCH_SCROLL_UP: m_fTexCoordVelocityX = 0; m_fTexCoordVelocityY = +0.5f; break; + case EFFECT_STRETCH_SCROLL_DOWN: m_fTexCoordVelocityX = 0; m_fTexCoordVelocityY = -0.5f; break; + default: break; } } break; diff --git a/src/Course.cpp b/src/Course.cpp index 8993e8b44b..bfe93c1e70 100644 --- a/src/Course.cpp +++ b/src/Course.cpp @@ -429,12 +429,14 @@ bool Course::GetTrailUnsorted( StepsType st, CourseDifficulty cd, Trail &trail ) { trail.Init(); + // XXX: Why are beginner and challenge excluded here? -Wolfman2000 switch( cd ) { - case Difficulty_Beginner: - return false; - case Difficulty_Challenge: - return false; + case Difficulty_Beginner: + return false; + case Difficulty_Challenge: + return false; + default: break; } // Construct a new Trail, add it to the cache, then return it. diff --git a/src/DancingCharacters.cpp b/src/DancingCharacters.cpp index 403277580c..6b2228e267 100644 --- a/src/DancingCharacters.cpp +++ b/src/DancingCharacters.cpp @@ -131,10 +131,11 @@ DancingCharacters::DancingCharacters(): m_bDrawDangerLight(false), switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - m_pCharacter[p]->SetRotationY( MODEL_ROTATIONY_TWO_PLAYERS[p] ); - break; + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + m_pCharacter[p]->SetRotationY( MODEL_ROTATIONY_TWO_PLAYERS[p] ); + default: + break; } m_pCharacter[p]->LoadMilkshapeAscii( pChar->GetModelPath() ); diff --git a/src/EditMenu.cpp b/src/EditMenu.cpp index 274ff975b8..72076ba71b 100644 --- a/src/EditMenu.cpp +++ b/src/EditMenu.cpp @@ -275,12 +275,12 @@ bool EditMenu::RowIsSelectable( EditMenuRow row ) { switch( row ) { - case ROW_SOURCE_STEPS_TYPE: - case ROW_SOURCE_STEPS: - return false; + case ROW_SOURCE_STEPS_TYPE: + case ROW_SOURCE_STEPS: + return false; + default: return true; } } - return true; } diff --git a/src/GameCommand.cpp b/src/GameCommand.cpp index 0f6ac72104..a78091761e 100644 --- a/src/GameCommand.cpp +++ b/src/GameCommand.cpp @@ -465,22 +465,21 @@ static bool AreStyleAndPlayModeCompatible( const Style *style, PlayMode pm ) switch( pm ) { - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - // Can't play rave if there isn't enough room for two players. - // This is correct for dance (ie, no rave for solo and doubles), - // and should be okay for pump.. not sure about other game types. - // Techno Motion scales down versus arrows, though, so allow this. - if( style->m_iColsPerPlayer >= 6 && RString(GAMESTATE->m_pCurGame->m_szName) != "techno" ) - return false; + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + // Can't play rave if there isn't enough room for two players. + // This is correct for dance (ie, no rave for solo and doubles), + // and should be okay for pump.. not sure about other game types. + // Techno Motion scales down versus arrows, though, so allow this. + if( style->m_iColsPerPlayer >= 6 && RString(GAMESTATE->m_pCurGame->m_szName) != "techno" ) + return false; - // Don't allow battle modes if the style takes both sides. - if( style->m_StyleType==StyleType_OnePlayerTwoSides || - style->m_StyleType==StyleType_TwoPlayersSharedSides ) - return false; + // Don't allow battle modes if the style takes both sides. + if( style->m_StyleType==StyleType_OnePlayerTwoSides || + style->m_StyleType==StyleType_TwoPlayersSharedSides ) + return false; + default: return true; } - - return true; } bool GameCommand::IsPlayable( RString *why ) const @@ -500,9 +499,10 @@ bool GameCommand::IsPlayable( RString *why ) const switch( GAMESTATE->GetCoinMode() ) { - case CoinMode_Home: - case CoinMode_Free: - iCredits = NUM_PLAYERS; // not iNumCreditsPaid + case CoinMode_Home: + case CoinMode_Free: + iCredits = NUM_PLAYERS; // not iNumCreditsPaid + default: break; } /* With PREFSMAN->m_bDelayedCreditsReconcile disabled, enough credits must diff --git a/src/GameState.cpp b/src/GameState.cpp index 35d61decd0..ff265e5f5b 100644 --- a/src/GameState.cpp +++ b/src/GameState.cpp @@ -747,7 +747,9 @@ void GameState::CancelStage() { case PLAY_MODE_BATTLE: case PLAY_MODE_RAVE: - m_iPlayerStageTokens[p] = PREFSMAN->m_iSongsPerPlay; + m_iPlayerStageTokens[p] = PREFSMAN->m_iSongsPerPlay; + default: + break; } } @@ -1169,12 +1171,12 @@ bool GameState::IsPlayerEnabled( PlayerNumber pn ) const // In rave, all players are present. Non-human players are CPU controlled. switch( m_PlayMode ) { - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - return true; + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + return true; + default: + return IsHumanPlayer(pn); } - - return IsHumanPlayer( pn ); } bool GameState::IsMultiPlayerEnabled( MultiPlayer mp ) const @@ -1346,16 +1348,17 @@ StageResult GameState::GetStageResult( PlayerNumber pn ) const { switch( m_PlayMode ) { - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - if( fabsf(m_fTugLifePercentP1 - 0.5f) < 0.0001f ) - return RESULT_DRAW; - switch( pn ) - { - case PLAYER_1: return (m_fTugLifePercentP1>=0.5f)?RESULT_WIN:RESULT_LOSE; - case PLAYER_2: return (m_fTugLifePercentP1<0.5f)?RESULT_WIN:RESULT_LOSE; - default: ASSERT(0); return RESULT_LOSE; - } + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + if( fabsf(m_fTugLifePercentP1 - 0.5f) < 0.0001f ) + return RESULT_DRAW; + switch( pn ) + { + case PLAYER_1: return (m_fTugLifePercentP1>=0.5f)?RESULT_WIN:RESULT_LOSE; + case PLAYER_2: return (m_fTugLifePercentP1<0.5f)?RESULT_WIN:RESULT_LOSE; + default: FAIL_M("Invalid player for battle! Aborting..."); return RESULT_LOSE; + } + default: break; } StageResult win = RESULT_WIN; diff --git a/src/Inventory.cpp b/src/Inventory.cpp index b45b779449..70928245c7 100644 --- a/src/Inventory.cpp +++ b/src/Inventory.cpp @@ -72,16 +72,19 @@ void Inventory::Load( PlayerState* pPlayerState ) // don't load battle sounds if they're not going to be used switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_BATTLE: - m_soundAcquireItem.Load( THEME->GetPathS("Inventory","aquire item") ); - for( unsigned i=0; iLoad( THEME->GetPathS("Inventory",ssprintf("use item %u",i+1)) ); - m_vpSoundUseItem.push_back( pSound ); + m_soundAcquireItem.Load( THEME->GetPathS("Inventory","aquire item") ); + for( unsigned i=0; iLoad( THEME->GetPathS("Inventory",ssprintf("use item %u",i+1)) ); + m_vpSoundUseItem.push_back( pSound ); + } + m_soundItemEnding.Load( THEME->GetPathS("Inventory","item ending") ); + break; } - m_soundItemEnding.Load( THEME->GetPathS("Inventory","item ending") ); - break; + default: break; } } diff --git a/src/LifeMeterBar.cpp b/src/LifeMeterBar.cpp index bbc101058a..4c7eee2ed7 100644 --- a/src/LifeMeterBar.cpp +++ b/src/LifeMeterBar.cpp @@ -212,12 +212,13 @@ void LifeMeterBar::ChangeLife( float fDeltaLife ) switch( GAMESTATE->m_SongOptions.GetSong().m_DrainType ) { - case SongOptions::DRAIN_NORMAL: - case SongOptions::DRAIN_NO_RECOVER: - if( fDeltaLife > 0 ) - fDeltaLife *= m_fLifeDifficulty; - else - fDeltaLife /= m_fLifeDifficulty; + case SongOptions::DRAIN_NORMAL: + case SongOptions::DRAIN_NO_RECOVER: + if( fDeltaLife > 0 ) + fDeltaLife *= m_fLifeDifficulty; + else + fDeltaLife /= m_fLifeDifficulty; + default: break; } diff --git a/src/MemoryCardManager.cpp b/src/MemoryCardManager.cpp index 6a40d6ee6a..b3ddb9e87e 100644 --- a/src/MemoryCardManager.cpp +++ b/src/MemoryCardManager.cpp @@ -449,22 +449,23 @@ void MemoryCardManager::CheckStateChanges() { switch( new_device.m_State ) { - case UsbStorageDevice::STATE_NONE: - state = MemoryCardState_NoCard; - break; + case UsbStorageDevice::STATE_NONE: + state = MemoryCardState_NoCard; + break; - case UsbStorageDevice::STATE_CHECKING: - state = MemoryCardState_Checking; - break; + case UsbStorageDevice::STATE_CHECKING: + state = MemoryCardState_Checking; + break; - case UsbStorageDevice::STATE_ERROR: - state = MemoryCardState_Error; - sError = new_device.m_sError; - break; + case UsbStorageDevice::STATE_ERROR: + state = MemoryCardState_Error; + sError = new_device.m_sError; + break; - case UsbStorageDevice::STATE_READY: - state = MemoryCardState_Ready; - break; + case UsbStorageDevice::STATE_READY: + state = MemoryCardState_Ready; + break; + default: break; } } @@ -476,23 +477,24 @@ void MemoryCardManager::CheckStateChanges() params.m_bIsCriticalSound = true; switch( state ) { - case MemoryCardState_NoCard: - case MemoryCardState_Removed: - if( LastState == MemoryCardState_Ready ) - { - m_soundDisconnect.Play( ¶ms ); - MESSAGEMAN->Broadcast( (MessageID)(Message_CardRemovedP1+p) ); - } - break; - case MemoryCardState_Ready: - m_soundReady.Play( ¶ms ); - break; - case MemoryCardState_TooLate: - m_soundTooLate.Play( ¶ms ); - break; - case MemoryCardState_Error: - m_soundError.Play( ¶ms ); - break; + case MemoryCardState_NoCard: + case MemoryCardState_Removed: + if( LastState == MemoryCardState_Ready ) + { + m_soundDisconnect.Play( ¶ms ); + MESSAGEMAN->Broadcast( (MessageID)(Message_CardRemovedP1+p) ); + } + break; + case MemoryCardState_Ready: + m_soundReady.Play( ¶ms ); + break; + case MemoryCardState_TooLate: + m_soundTooLate.Play( ¶ms ); + break; + case MemoryCardState_Error: + m_soundError.Play( ¶ms ); + break; + default: break; } m_State[p] = state; diff --git a/src/MusicWheel.cpp b/src/MusicWheel.cpp index 5c7d9a6b6b..ebdb79338d 100644 --- a/src/MusicWheel.cpp +++ b/src/MusicWheel.cpp @@ -42,23 +42,23 @@ static SortOrder ForceAppropriateSort( PlayMode pm, SortOrder so ) { switch( pm ) { - // in course modes, force a particular sort - case PLAY_MODE_ONI: return SORT_ONI_COURSES; - case PLAY_MODE_NONSTOP: return SORT_NONSTOP_COURSES; - case PLAY_MODE_ENDLESS: return SORT_ENDLESS_COURSES; + // in course modes, force a particular sort + case PLAY_MODE_ONI: return SORT_ONI_COURSES; + case PLAY_MODE_NONSTOP: return SORT_NONSTOP_COURSES; + case PLAY_MODE_ENDLESS: return SORT_ENDLESS_COURSES; + default: break; } // If we're not in a course mode, don't start in a course sort. switch( so ) { - case SORT_ONI_COURSES: - case SORT_NONSTOP_COURSES: - case SORT_ENDLESS_COURSES: - so = SortOrder_Invalid; - break; + case SORT_ONI_COURSES: + case SORT_NONSTOP_COURSES: + case SORT_ENDLESS_COURSES: + so = SortOrder_Invalid; + default: + return so; } - - return so; } MusicWheelItem *MusicWheel::MakeItem() @@ -490,7 +490,7 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt { switch( so ) { - case SORT_MODE_MENU: + case SORT_MODE_MENU: { arrayWheelItemDatas.clear(); // clear out the previous wheel items vector vsNames; @@ -510,22 +510,22 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt } break; } - case SORT_PREFERRED: - case SORT_ROULETTE: - case SORT_GROUP: - case SORT_TITLE: - case SORT_BPM: - case SORT_POPULARITY: - case SORT_TOP_GRADES: - case SORT_ARTIST: - case SORT_GENRE: - case SORT_BEGINNER_METER: - case SORT_EASY_METER: - case SORT_MEDIUM_METER: - case SORT_HARD_METER: - case SORT_CHALLENGE_METER: - case SORT_LENGTH: - case SORT_RECENT: + case SORT_PREFERRED: + case SORT_ROULETTE: + case SORT_GROUP: + case SORT_TITLE: + case SORT_BPM: + case SORT_POPULARITY: + case SORT_TOP_GRADES: + case SORT_ARTIST: + case SORT_GENRE: + case SORT_BEGINNER_METER: + case SORT_EASY_METER: + case SORT_MEDIUM_METER: + case SORT_HARD_METER: + case SORT_CHALLENGE_METER: + case SORT_LENGTH: + case SORT_RECENT: { // Make an array of Song*, then sort them vector arraySongs; @@ -536,72 +536,72 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt // sort the songs switch( so ) { - case SORT_PREFERRED: - // obey order specified by the preferred sort list - break; - case SORT_ROULETTE: - { - StepsType st; - Difficulty dc; - SongUtil::GetStepsTypeAndDifficultyFromSortOrder( SORT_EASY_METER, st, dc ); - SongUtil::SortSongPointerArrayByStepsTypeAndMeter( arraySongs, st, dc ); - if( (bool)PREFSMAN->m_bPreferredSortUsesGroups ) - stable_sort( arraySongs.begin(), arraySongs.end(), SongUtil::CompareSongPointersByGroup ); - bUseSections = false; - break; - } - case SORT_GROUP: - SongUtil::SortSongPointerArrayByGroupAndTitle( arraySongs ); - if(USE_SECTIONS_WITH_PREFERRED_GROUP) - bUseSections = true; - else - bUseSections = GAMESTATE->m_sPreferredSongGroup == GROUP_ALL; - break; - case SORT_TITLE: - SongUtil::SortSongPointerArrayByTitle( arraySongs ); - break; - case SORT_BPM: - SongUtil::SortSongPointerArrayByBPM( arraySongs ); - break; - case SORT_POPULARITY: - if( (int) arraySongs.size() > MOST_PLAYED_SONGS_TO_SHOW ) - arraySongs.erase( arraySongs.begin()+MOST_PLAYED_SONGS_TO_SHOW, arraySongs.end() ); - bUseSections = false; - break; - case SORT_TOP_GRADES: - SongUtil::SortSongPointerArrayByGrades( arraySongs, true ); - break; - case SORT_ARTIST: - SongUtil::SortSongPointerArrayByArtist( arraySongs ); - break; - case SORT_GENRE: - SongUtil::SortSongPointerArrayByGenre( arraySongs ); - break; - case SORT_LENGTH: - SongUtil::SortSongPointerArrayByLength( arraySongs ); - break; - case SORT_RECENT: - SongUtil::SortByMostRecentlyPlayedForMachine( arraySongs ); - if( (int) arraySongs.size() > RECENT_SONGS_TO_SHOW ) - arraySongs.erase( arraySongs.begin()+RECENT_SONGS_TO_SHOW, arraySongs.end() ); - bUseSections = false; - break; - case SORT_BEGINNER_METER: - case SORT_EASY_METER: - case SORT_MEDIUM_METER: - case SORT_HARD_METER: - case SORT_CHALLENGE_METER: - case SORT_DOUBLE_EASY_METER: - case SORT_DOUBLE_MEDIUM_METER: - case SORT_DOUBLE_HARD_METER: - case SORT_DOUBLE_CHALLENGE_METER: - StepsType st; - Difficulty dc; - SongUtil::GetStepsTypeAndDifficultyFromSortOrder( so, st, dc ); - SongUtil::SortSongPointerArrayByStepsTypeAndMeter( arraySongs, st, dc ); - break; - default: - ASSERT(0); // unhandled SortOrder + case SORT_PREFERRED: + // obey order specified by the preferred sort list + break; + case SORT_ROULETTE: + { + StepsType st; + Difficulty dc; + SongUtil::GetStepsTypeAndDifficultyFromSortOrder( SORT_EASY_METER, st, dc ); + SongUtil::SortSongPointerArrayByStepsTypeAndMeter( arraySongs, st, dc ); + if( (bool)PREFSMAN->m_bPreferredSortUsesGroups ) + stable_sort( arraySongs.begin(), arraySongs.end(), SongUtil::CompareSongPointersByGroup ); + bUseSections = false; + break; + } + case SORT_GROUP: + SongUtil::SortSongPointerArrayByGroupAndTitle( arraySongs ); + if(USE_SECTIONS_WITH_PREFERRED_GROUP) + bUseSections = true; + else + bUseSections = GAMESTATE->m_sPreferredSongGroup == GROUP_ALL; + break; + case SORT_TITLE: + SongUtil::SortSongPointerArrayByTitle( arraySongs ); + break; + case SORT_BPM: + SongUtil::SortSongPointerArrayByBPM( arraySongs ); + break; + case SORT_POPULARITY: + if( (int) arraySongs.size() > MOST_PLAYED_SONGS_TO_SHOW ) + arraySongs.erase( arraySongs.begin()+MOST_PLAYED_SONGS_TO_SHOW, arraySongs.end() ); + bUseSections = false; + break; + case SORT_TOP_GRADES: + SongUtil::SortSongPointerArrayByGrades( arraySongs, true ); + break; + case SORT_ARTIST: + SongUtil::SortSongPointerArrayByArtist( arraySongs ); + break; + case SORT_GENRE: + SongUtil::SortSongPointerArrayByGenre( arraySongs ); + break; + case SORT_LENGTH: + SongUtil::SortSongPointerArrayByLength( arraySongs ); + break; + case SORT_RECENT: + SongUtil::SortByMostRecentlyPlayedForMachine( arraySongs ); + if( (int) arraySongs.size() > RECENT_SONGS_TO_SHOW ) + arraySongs.erase( arraySongs.begin()+RECENT_SONGS_TO_SHOW, arraySongs.end() ); + bUseSections = false; + break; + case SORT_BEGINNER_METER: + case SORT_EASY_METER: + case SORT_MEDIUM_METER: + case SORT_HARD_METER: + case SORT_CHALLENGE_METER: + case SORT_DOUBLE_EASY_METER: + case SORT_DOUBLE_MEDIUM_METER: + case SORT_DOUBLE_HARD_METER: + case SORT_DOUBLE_CHALLENGE_METER: + StepsType st; + Difficulty dc; + SongUtil::GetStepsTypeAndDifficultyFromSortOrder( so, st, dc ); + SongUtil::SortSongPointerArrayByStepsTypeAndMeter( arraySongs, st, dc ); + break; + default: + FAIL_M("Unhandled sort order! Aborting..."); } // Build an array of WheelItemDatas from the sorted list of Song*'s @@ -610,13 +610,15 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt switch( PREFSMAN->m_MusicWheelUsesSections ) { - case MusicWheelUsesSections_NEVER: - bUseSections = false; - break; - case MusicWheelUsesSections_ABC_ONLY: - if( so != SORT_TITLE && so != SORT_GROUP ) + case MusicWheelUsesSections_NEVER: bUseSections = false; - break; + break; + case MusicWheelUsesSections_ABC_ONLY: + if( so != SORT_TITLE && so != SORT_GROUP ) + bUseSections = false; + break; + default: + break; } if( bUseSections ) @@ -630,13 +632,13 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt /* We're using sections, so use the section name as the top-level sort. */ switch( so ) { - case SORT_PREFERRED: - case SORT_TOP_GRADES: - case SORT_BPM: - break; // don't sort by section - default: - SongUtil::SortSongPointerArrayBySectionName(arraySongs, so); - break; + case SORT_PREFERRED: + case SORT_TOP_GRADES: + case SORT_BPM: + break; // don't sort by section + default: + SongUtil::SortSongPointerArrayBySectionName(arraySongs, so); + break; } } @@ -731,10 +733,10 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt } break; } - case SORT_ALL_COURSES: - case SORT_NONSTOP_COURSES: - case SORT_ONI_COURSES: - case SORT_ENDLESS_COURSES: + case SORT_ALL_COURSES: + case SORT_NONSTOP_COURSES: + case SORT_ONI_COURSES: + case SORT_ENDLESS_COURSES: { bool bOnlyPreferred = PREFSMAN->m_CourseSortOrder == COURSE_SORT_PREFERRED; @@ -769,21 +771,21 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt switch( PREFSMAN->m_CourseSortOrder ) { - case COURSE_SORT_SONGS: - CourseUtil::SortCoursePointerArrayByDifficulty( apCourses ); - break; - case COURSE_SORT_PREFERRED: - break; - case COURSE_SORT_METER: - CourseUtil::SortCoursePointerArrayByAvgDifficulty( apCourses ); - break; - case COURSE_SORT_METER_SUM: - CourseUtil::SortCoursePointerArrayByTotalDifficulty( apCourses ); - break; - case COURSE_SORT_RANK: - CourseUtil::SortCoursePointerArrayByRanking( apCourses ); - break; - default: ASSERT(0); + case COURSE_SORT_SONGS: + CourseUtil::SortCoursePointerArrayByDifficulty( apCourses ); + break; + case COURSE_SORT_PREFERRED: + break; + case COURSE_SORT_METER: + CourseUtil::SortCoursePointerArrayByAvgDifficulty( apCourses ); + break; + case COURSE_SORT_METER_SUM: + CourseUtil::SortCoursePointerArrayByTotalDifficulty( apCourses ); + break; + case COURSE_SORT_RANK: + CourseUtil::SortCoursePointerArrayByRanking( apCourses ); + break; + default: FAIL_M("Impossible to sort the courses! Aborting..."); } // since we can't agree, make it an option @@ -810,9 +812,10 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt { switch( pCourse->GetPlayMode() ) { - case PLAY_MODE_ONI: sThisSection = "Oni"; break; - case PLAY_MODE_NONSTOP: sThisSection = "Nonstop"; break; - case PLAY_MODE_ENDLESS: sThisSection = "Endless"; break; + case PLAY_MODE_ONI: sThisSection = "Oni"; break; + case PLAY_MODE_NONSTOP: sThisSection = "Nonstop"; break; + case PLAY_MODE_ENDLESS: sThisSection = "Endless"; break; + default: break; } } @@ -833,6 +836,8 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt } break; } + default: + break; } // init music status icons @@ -1227,23 +1232,24 @@ bool MusicWheel::Select() // return true if this selection ends the screen switch( m_WheelState ) { - case STATE_FLYING_OFF_BEFORE_NEXT_SORT: - case STATE_ROULETTE_SLOWING_DOWN: - return false; - case STATE_ROULETTE_SPINNING: - m_WheelState = STATE_ROULETTE_SLOWING_DOWN; - m_iSwitchesLeftInSpinDown = ROULETTE_SLOW_DOWN_SWITCHES/2+1 + RandomInt( ROULETTE_SLOW_DOWN_SWITCHES/2 ); - m_fTimeLeftInState = 0.1f; - return false; - case STATE_RANDOM_SPINNING: - m_fPositionOffsetFromSelection = max(m_fPositionOffsetFromSelection, 0.3f); - m_WheelState = STATE_LOCKED; - SCREENMAN->PlayStartSound(); - m_fLockedWheelVelocity = 0; - // Set m_Moving to zero to stop the sounds from playing. - m_Moving = 0; - SCREENMAN->PostMessageToTopScreen( SM_SongChanged, 0 ); - return true; + case STATE_FLYING_OFF_BEFORE_NEXT_SORT: + case STATE_ROULETTE_SLOWING_DOWN: + return false; + case STATE_ROULETTE_SPINNING: + m_WheelState = STATE_ROULETTE_SLOWING_DOWN; + m_iSwitchesLeftInSpinDown = ROULETTE_SLOW_DOWN_SWITCHES/2+1 + RandomInt( ROULETTE_SLOW_DOWN_SWITCHES/2 ); + m_fTimeLeftInState = 0.1f; + return false; + case STATE_RANDOM_SPINNING: + m_fPositionOffsetFromSelection = max(m_fPositionOffsetFromSelection, 0.3f); + m_WheelState = STATE_LOCKED; + SCREENMAN->PlayStartSound(); + m_fLockedWheelVelocity = 0; + // Set m_Moving to zero to stop the sounds from playing. + m_Moving = 0; + SCREENMAN->PostMessageToTopScreen( SM_SongChanged, 0 ); + return true; + default: break; } if( !WheelBase::Select() ) @@ -1251,29 +1257,25 @@ bool MusicWheel::Select() // return true if this selection ends the screen switch( m_CurWheelItemData[m_iSelection]->m_Type ) { - case TYPE_ROULETTE: - StartRoulette(); - return false; - case TYPE_RANDOM: - StartRandom(); - return false; - case TYPE_SONG: - case TYPE_COURSE: - case TYPE_PORTAL: - break; - case TYPE_SORT: - GetCurWheelItemData(m_iSelection)->m_pAction->ApplyToAllPlayers(); - ChangeSort( GAMESTATE->m_PreferredSortOrder ); - m_sLastModeMenuItem = GetCurWheelItemData(m_iSelection)->m_pAction->m_sName; - return false; - case TYPE_CUSTOM: - GetCurWheelItemData(m_iSelection)->m_pAction->ApplyToAllPlayers(); - if( GetCurWheelItemData(m_iSelection)->m_pAction->m_sScreen != "" ) - return true; - else + case TYPE_ROULETTE: + StartRoulette(); return false; + case TYPE_RANDOM: + StartRandom(); + return false; + case TYPE_SORT: + GetCurWheelItemData(m_iSelection)->m_pAction->ApplyToAllPlayers(); + ChangeSort( GAMESTATE->m_PreferredSortOrder ); + m_sLastModeMenuItem = GetCurWheelItemData(m_iSelection)->m_pAction->m_sName; + return false; + case TYPE_CUSTOM: + GetCurWheelItemData(m_iSelection)->m_pAction->ApplyToAllPlayers(); + if( GetCurWheelItemData(m_iSelection)->m_pAction->m_sScreen != "" ) + return true; + else + return false; + default: return true; } - return true; } void MusicWheel::StartRoulette() @@ -1517,11 +1519,11 @@ Song* MusicWheel::GetSelectedSong() { switch( m_CurWheelItemData[m_iSelection]->m_Type ) { - case TYPE_PORTAL: - return GetPreferredSelectionForRandomOrPortal(); + case TYPE_PORTAL: + return GetPreferredSelectionForRandomOrPortal(); + default: + return GetCurWheelItemData(m_iSelection)->m_pSong; } - - return GetCurWheelItemData(m_iSelection)->m_pSong; } /* Find a random song. If possible, find one that has the preferred difficulties of diff --git a/src/NoteData.cpp b/src/NoteData.cpp index 78880dfbbe..91c83e7891 100644 --- a/src/NoteData.cpp +++ b/src/NoteData.cpp @@ -547,10 +547,12 @@ bool NoteData::RowNeedsAtLeastSimultaneousPresses( int iMinSimultaneousPresses, const TapNote &tn = GetTapNote(t, row); switch( tn.type ) { - case TapNote::mine: - case TapNote::empty: - case TapNote::fake: - continue; // skip these types - they don't count + case TapNote::mine: + case TapNote::empty: + case TapNote::fake: + case TapNote::lift: // you don't "press" on a lift. + continue; // skip these types - they don't count + default: break; } ++iNumNotesThisIndex; } diff --git a/src/NoteDataUtil.cpp b/src/NoteDataUtil.cpp index eff74fb0ae..924d7d1676 100644 --- a/src/NoteDataUtil.cpp +++ b/src/NoteDataUtil.cpp @@ -800,11 +800,12 @@ RadarStats CalculateRadarStatsFast( const NoteData &in, RadarStats &out ) const TapNote &tn = in.GetTapNote(t, r); switch( tn.type ) { - case TapNote::mine: - case TapNote::empty: - case TapNote::fake: - case TapNote::autoKeysound: - continue; // skip these types - they don't count + case TapNote::mine: + case TapNote::empty: + case TapNote::fake: + case TapNote::autoKeysound: + continue; // skip these types - they don't count + default: break; } if( (itr = simultaneousMap.find(r)) == simultaneousMap.end() ) @@ -830,10 +831,11 @@ RadarStats CalculateRadarStatsFast( const NoteData &in, RadarStats &out ) { switch( in.GetTapNote(t, rr).type ) { - case TapNote::mine: - case TapNote::empty: - case TapNote::fake: - continue; // skip these types - they don't count + case TapNote::mine: + case TapNote::empty: + case TapNote::fake: + continue; // skip these types - they don't count + default: break; } if( (itr = simultaneousMap.find(rr)) == simultaneousMap.end() ) simultaneousMap[rr] = 1; diff --git a/src/NoteField.cpp b/src/NoteField.cpp index e45ab8325a..c2f4885609 100644 --- a/src/NoteField.cpp +++ b/src/NoteField.cpp @@ -1265,6 +1265,7 @@ void NoteField::DrawPrimitives() //if (tn.subType == TapNote::hold_head_roll) continue; // skip } + default: break; } // Don't draw hidden (fully judged) steps. diff --git a/src/NotesLoaderBMS.cpp b/src/NotesLoaderBMS.cpp index fdaf8ea92c..885b5df706 100644 --- a/src/NotesLoaderBMS.cpp +++ b/src/NotesLoaderBMS.cpp @@ -1111,9 +1111,9 @@ bool BMSLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps & out if( commonSubstring == "" ) { copy->SetDifficulty(Difficulty_Medium); - RString sTag; - if (GetTagFromMap(BMSData[0], "#title#", sTag)) - SearchForDifficulty(sTag, copy); + RString localTag; + if (GetTagFromMap(BMSData[0], "#title#", localTag)) + SearchForDifficulty(localTag, copy); } ReadGlobalTags( BMSData[0], dummy ); if( commonSubstring.size() > 2 && commonSubstring[commonSubstring.size() - 2] == ' ' ) diff --git a/src/NotesLoaderJson.cpp b/src/NotesLoaderJson.cpp index 6865120fbc..4021b0e85e 100644 --- a/src/NotesLoaderJson.cpp +++ b/src/NotesLoaderJson.cpp @@ -35,6 +35,7 @@ static void Deserialize(TimingSegment &seg_, const Json::Value &root) static_cast(seg)->SetPause(fStop); break; } + default: break; // The rest are unused. } } diff --git a/src/NotesLoaderMidi.cpp b/src/NotesLoaderMidi.cpp index f356cdb3d6..2dfd891be7 100644 --- a/src/NotesLoaderMidi.cpp +++ b/src/NotesLoaderMidi.cpp @@ -817,8 +817,8 @@ skip_track: // Check for termination of a sustain note switch( midiEventType ) { - case note_off: - case note_on: + case note_off: + case note_on: if( bNonTerminatedNote ) { if( length >= 240 ) @@ -833,14 +833,15 @@ skip_track: bNonTerminatedNote = false; bNoteHandled = true; + break; } - break; + default: break; } switch( midiEventType ) { - case note_on: + case note_on: { TapNote tn = TAP_ORIGINAL_TAP; @@ -867,7 +868,9 @@ skip_track: bNonTerminatedNote = true; bNoteHandled = true; + break; } + default: break; } countOfLastNote = count; diff --git a/src/NotesWriterDWI.cpp b/src/NotesWriterDWI.cpp index e64ecd17cd..33809c357c 100644 --- a/src/NotesWriterDWI.cpp +++ b/src/NotesWriterDWI.cpp @@ -123,9 +123,10 @@ static RString NotesToDWIString( const TapNote tnCols[6] ) { switch( tnCols[col].type ) { - case TapNote::empty: - case TapNote::mine: - continue; + case TapNote::empty: + case TapNote::mine: + continue; + default: break; } if( tnCols[col].type == TapNote::hold_head ) diff --git a/src/OptionRow.cpp b/src/OptionRow.cpp index 4f50268542..472dc2a1e4 100644 --- a/src/OptionRow.cpp +++ b/src/OptionRow.cpp @@ -426,15 +426,18 @@ void OptionRow::AfterImportOptions( PlayerNumber pn ) switch( m_pHand->m_Def.m_selectType ) { - case SELECT_ONE: - // Make sure the row actually has a selection. - int iSelection = GetOneSelection(pn, true); - if( iSelection == -1 ) + case SELECT_ONE: { - ASSERT( !m_vbSelected[pn].empty() ); - m_vbSelected[pn][0] = true; + // Make sure the row actually has a selection. + int iSelection = GetOneSelection(pn, true); + if( iSelection == -1 ) + { + ASSERT( !m_vbSelected[pn].empty() ); + m_vbSelected[pn][0] = true; + } } - break; + default: + break; } ResetFocusFromSelection( pn ); @@ -503,7 +506,7 @@ void OptionRow::UpdateText( PlayerNumber p ) { switch( m_pHand->m_Def.m_layoutType ) { - case LAYOUT_SHOW_ONE_IN_ROW: + case LAYOUT_SHOW_ONE_IN_ROW: { unsigned pn = m_pHand->m_Def.m_bOneChoiceForAllPlayers ? 0 : p; int iChoiceWithFocus = m_iChoiceInRowWithFocus[pn]; @@ -519,7 +522,7 @@ void OptionRow::UpdateText( PlayerNumber p ) m_textItems[index]->SetText( sText ); } - break; + default: break; } } @@ -757,10 +760,11 @@ void OptionRow::ResetFocusFromSelection( PlayerNumber pn ) int iSelection = -1; switch( m_pHand->m_Def.m_selectType ) { - case SELECT_ONE: - // Import the focus from the selected option. - iSelection = GetOneSelection( pn, true ); - break; + case SELECT_ONE: + // Import the focus from the selected option. + iSelection = GetOneSelection( pn, true ); + default: + break; } // HACK: Set focus to one item in the row, which is "go down" diff --git a/src/PaneDisplay.cpp b/src/PaneDisplay.cpp index e812156cd3..0e3a82ca4c 100644 --- a/src/PaneDisplay.cpp +++ b/src/PaneDisplay.cpp @@ -137,13 +137,14 @@ void PaneDisplay::SetContent( PaneCategory c ) { switch( c ) { - case PaneCategory_MachineHighName: - str = EMPTY_MACHINE_HIGH_SCORE_NAME; - break; - case PaneCategory_MachineHighScore: - case PaneCategory_ProfileHighScore: - str = NOT_AVAILABLE; - break; + case PaneCategory_MachineHighName: + str = EMPTY_MACHINE_HIGH_SCORE_NAME; + break; + case PaneCategory_MachineHighScore: + case PaneCategory_ProfileHighScore: + str = NOT_AVAILABLE; + break; + default: break; } } @@ -157,13 +158,14 @@ void PaneDisplay::SetContent( PaneCategory c ) { switch( c ) { - case PaneCategory_MachineHighName: - str = EMPTY_MACHINE_HIGH_SCORE_NAME; - break; - case PaneCategory_MachineHighScore: - case PaneCategory_ProfileHighScore: - str = NOT_AVAILABLE; - break; + case PaneCategory_MachineHighName: + str = EMPTY_MACHINE_HIGH_SCORE_NAME; + break; + case PaneCategory_MachineHighScore: + case PaneCategory_ProfileHighScore: + str = NOT_AVAILABLE; + break; + default: break; } } @@ -184,8 +186,9 @@ void PaneDisplay::SetContent( PaneCategory c ) ProfileSlot slot = ProfileSlot_Machine; switch( c ) { - case PaneCategory_ProfileHighScore: - slot = (ProfileSlot) m_PlayerNumber; + case PaneCategory_ProfileHighScore: + slot = (ProfileSlot) m_PlayerNumber; + default: break; } if( pSteps ) @@ -201,55 +204,58 @@ void PaneDisplay::SetContent( PaneCategory c ) switch( c ) { - case PaneCategory_NumSteps: val = rv[RadarCategory_TapsAndHolds]; break; - case PaneCategory_Jumps: val = rv[RadarCategory_Jumps]; break; - case PaneCategory_Holds: val = rv[RadarCategory_Holds]; break; - case PaneCategory_Rolls: val = rv[RadarCategory_Rolls]; break; - case PaneCategory_Mines: val = rv[RadarCategory_Mines]; break; - case PaneCategory_Hands: val = rv[RadarCategory_Hands]; break; - case PaneCategory_Lifts: val = rv[RadarCategory_Lifts]; break; - case PaneCategory_Fakes: val = rv[RadarCategory_Fakes]; break; - case PaneCategory_ProfileHighScore: - case PaneCategory_MachineHighName: // set val for color - case PaneCategory_MachineHighScore: - CHECKPOINT; - val = pHSL->GetTopScore().GetPercentDP(); - break; + case PaneCategory_NumSteps: val = rv[RadarCategory_TapsAndHolds]; break; + case PaneCategory_Jumps: val = rv[RadarCategory_Jumps]; break; + case PaneCategory_Holds: val = rv[RadarCategory_Holds]; break; + case PaneCategory_Rolls: val = rv[RadarCategory_Rolls]; break; + case PaneCategory_Mines: val = rv[RadarCategory_Mines]; break; + case PaneCategory_Hands: val = rv[RadarCategory_Hands]; break; + case PaneCategory_Lifts: val = rv[RadarCategory_Lifts]; break; + case PaneCategory_Fakes: val = rv[RadarCategory_Fakes]; break; + case PaneCategory_ProfileHighScore: + case PaneCategory_MachineHighName: // set val for color + case PaneCategory_MachineHighScore: + CHECKPOINT; + val = pHSL->GetTopScore().GetPercentDP(); + break; + default: break; }; if( val != RADAR_VAL_UNKNOWN ) { switch( c ) { - case PaneCategory_MachineHighName: - if( pHSL->vHighScores.empty() ) - { - str = EMPTY_MACHINE_HIGH_SCORE_NAME; - } - else - { - str = pHSL->GetTopScore().GetName(); - if( str.empty() ) - str = "????"; - } - break; - case PaneCategory_MachineHighScore: - case PaneCategory_ProfileHighScore: - // Don't show or save machine high scores for edits loaded from a player profile. - if( bIsPlayerEdit ) - str = NOT_AVAILABLE; - else - str = PlayerStageStats::FormatPercentScore( val ); - break; - case PaneCategory_NumSteps: - case PaneCategory_Jumps: - case PaneCategory_Holds: - case PaneCategory_Rolls: - case PaneCategory_Mines: - case PaneCategory_Hands: - case PaneCategory_Lifts: - case PaneCategory_Fakes: - str = ssprintf( COUNT_FORMAT.GetValue(), val ); + case PaneCategory_MachineHighName: + if( pHSL->vHighScores.empty() ) + { + str = EMPTY_MACHINE_HIGH_SCORE_NAME; + } + else + { + str = pHSL->GetTopScore().GetName(); + if( str.empty() ) + str = "????"; + } + break; + case PaneCategory_MachineHighScore: + case PaneCategory_ProfileHighScore: + // Don't show or save machine high scores for edits loaded from a player profile. + if( bIsPlayerEdit ) + str = NOT_AVAILABLE; + else + str = PlayerStageStats::FormatPercentScore( val ); + break; + case PaneCategory_NumSteps: + case PaneCategory_Jumps: + case PaneCategory_Holds: + case PaneCategory_Rolls: + case PaneCategory_Mines: + case PaneCategory_Hands: + case PaneCategory_Lifts: + case PaneCategory_Fakes: + str = ssprintf( COUNT_FORMAT.GetValue(), val ); + break; + default: break; } } } diff --git a/src/Player.cpp b/src/Player.cpp index 77a2b73698..e4f53fea05 100644 --- a/src/Player.cpp +++ b/src/Player.cpp @@ -628,8 +628,8 @@ void Player::Load() switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_RAVE: - case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + case PLAY_MODE_BATTLE: { // ugly, ugly, ugly. Works only w/ dance. // Why does this work only with dance? - Steve @@ -659,8 +659,9 @@ void Player::Load() count++; count %= 4; } + break; } - break; + default: break; } int iDrawDistanceAfterTargetsPixels = GAMESTATE->IsEditing() ? -100 : DRAW_DISTANCE_AFTER_TARGET_PIXELS; @@ -2879,41 +2880,46 @@ void Player::CrossedRows( int iLastRowCrossed, const RageTimer &now ) int iTrack = iter.Track(); switch( tn.type ) { - case TapNote::hold_head: - tn.HoldResult.fLife = INITIAL_HOLD_LIFE; - if( !REQUIRE_STEP_ON_HOLD_HEADS ) + case TapNote::hold_head: { + tn.HoldResult.fLife = INITIAL_HOLD_LIFE; + if( !REQUIRE_STEP_ON_HOLD_HEADS ) + { + PlayerNumber pn = m_pPlayerState->m_PlayerNumber; + GameInput GameI = GAMESTATE->GetCurrentStyle()->StyleInputToGameInput( iTrack, pn ); + if( PREFSMAN->m_fPadStickSeconds > 0.f ) + { + float fSecsHeld = INPUTMAPPER->GetSecsHeld( GameI, m_pPlayerState->m_mp ); + if( fSecsHeld >= PREFSMAN->m_fPadStickSeconds ) + Step( iTrack, -1, now - PREFSMAN->m_fPadStickSeconds, true, false ); + } + else if( INPUTMAPPER->IsBeingPressed(GameI, m_pPlayerState->m_mp) ) + { + Step( iTrack, -1, now, true, false ); + } + } + break; + } + case TapNote::mine: + { + // Hold the panel while crossing a mine will cause the mine to explode + // TODO: Remove use of PlayerNumber. PlayerNumber pn = m_pPlayerState->m_PlayerNumber; GameInput GameI = GAMESTATE->GetCurrentStyle()->StyleInputToGameInput( iTrack, pn ); - if( PREFSMAN->m_fPadStickSeconds > 0.f ) + if( PREFSMAN->m_fPadStickSeconds > 0 ) { float fSecsHeld = INPUTMAPPER->GetSecsHeld( GameI, m_pPlayerState->m_mp ); if( fSecsHeld >= PREFSMAN->m_fPadStickSeconds ) Step( iTrack, -1, now - PREFSMAN->m_fPadStickSeconds, true, false ); } - else if( INPUTMAPPER->IsBeingPressed(GameI, m_pPlayerState->m_mp) ) + else { - Step( iTrack, -1, now, true, false ); + if( INPUTMAPPER->IsBeingPressed(GameI, m_pPlayerState->m_mp) ) + Step( iTrack, iRow, now, true, false ); } + break; } - break; - case TapNote::mine: - // Hold the panel while crossing a mine will cause the mine to explode - // TODO: Remove use of PlayerNumber. - PlayerNumber pn = m_pPlayerState->m_PlayerNumber; - GameInput GameI = GAMESTATE->GetCurrentStyle()->StyleInputToGameInput( iTrack, pn ); - if( PREFSMAN->m_fPadStickSeconds > 0 ) - { - float fSecsHeld = INPUTMAPPER->GetSecsHeld( GameI, m_pPlayerState->m_mp ); - if( fSecsHeld >= PREFSMAN->m_fPadStickSeconds ) - Step( iTrack, -1, now - PREFSMAN->m_fPadStickSeconds, true, false ); - } - else - { - if( INPUTMAPPER->IsBeingPressed(GameI, m_pPlayerState->m_mp) ) - Step( iTrack, iRow, now, true, false ); - } - break; + default: break; } if( iRow != iLastSeenRow ) diff --git a/src/PlayerStageStats.cpp b/src/PlayerStageStats.cpp index e57682c843..4e8a0eb050 100644 --- a/src/PlayerStageStats.cpp +++ b/src/PlayerStageStats.cpp @@ -274,6 +274,7 @@ float PlayerStageStats::GetCurMaxPercentDancePoints() const return fCurMaxPercentDancePoints; } +// TODO: Make this use lua. Let more judgments be possible. -Wolfman2000 int PlayerStageStats::GetLessonScoreActual() const { int iScore = 0; @@ -282,14 +283,15 @@ int PlayerStageStats::GetLessonScoreActual() const { switch( tns ) { - case TNS_AvoidMine: - case TNS_W5: - case TNS_W4: - case TNS_W3: - case TNS_W2: - case TNS_W1: - iScore += m_iTapNoteScores[tns]; - break; + case TNS_AvoidMine: + case TNS_W5: + case TNS_W4: + case TNS_W3: + case TNS_W2: + case TNS_W1: + iScore += m_iTapNoteScores[tns]; + default: + break; } } @@ -297,9 +299,10 @@ int PlayerStageStats::GetLessonScoreActual() const { switch( hns ) { - case HNS_Held: - iScore += m_iHoldNoteScores[hns]; - break; + case HNS_Held: + iScore += m_iHoldNoteScores[hns]; + default: + break; } } diff --git a/src/RageDisplay_Legacy.cpp b/src/RageDisplay_Legacy.cpp index 2b664f2f5b..bedb5c7133 100644 --- a/src/RageDisplay_Legacy.cpp +++ b/src/RageDisplay_Legacy.cpp @@ -1625,6 +1625,7 @@ void RageDisplay_Legacy::SetTextureMode( TextureUnit tu, TextureMode tm ) glTexEnvi(GL_TEXTURE_ENV, GLenum(GL_OPERAND1_ALPHA_EXT), GL_SRC_ALPHA); glTexEnvi(GL_TEXTURE_ENV, GLenum(GL_SOURCE1_ALPHA_EXT), GL_TEXTURE); break; + default: break; } } @@ -1668,15 +1669,16 @@ void RageDisplay_Legacy::SetEffectMode( EffectMode effect ) GLhandleARB hShader = 0; switch (effect) { - case EffectMode_Normal: hShader = 0; break; - case EffectMode_Unpremultiply: hShader = g_bUnpremultiplyShader; break; - case EffectMode_ColorBurn: hShader = g_bColorBurnShader; break; - case EffectMode_ColorDodge: hShader = g_bColorDodgeShader; break; - case EffectMode_VividLight: hShader = g_bVividLightShader; break; - case EffectMode_HardMix: hShader = g_hHardMixShader; break; - case EffectMode_Overlay: hShader = g_hOverlayShader; break; - case EffectMode_Screen: hShader = g_hScreenShader; break; - case EffectMode_YUYV422: hShader = g_hYUYV422Shader; break; + case EffectMode_Normal: hShader = 0; break; + case EffectMode_Unpremultiply: hShader = g_bUnpremultiplyShader; break; + case EffectMode_ColorBurn: hShader = g_bColorBurnShader; break; + case EffectMode_ColorDodge: hShader = g_bColorDodgeShader; break; + case EffectMode_VividLight: hShader = g_bVividLightShader; break; + case EffectMode_HardMix: hShader = g_hHardMixShader; break; + case EffectMode_Overlay: hShader = g_hOverlayShader; break; + case EffectMode_Screen: hShader = g_hScreenShader; break; + case EffectMode_YUYV422: hShader = g_hYUYV422Shader; break; + default: break; } DebugFlushGLErrors(); @@ -1703,18 +1705,17 @@ bool RageDisplay_Legacy::IsEffectModeSupported( EffectMode effect ) { switch( effect ) { - case EffectMode_Normal: return true; - case EffectMode_Unpremultiply: return g_bUnpremultiplyShader != 0; - case EffectMode_ColorBurn: return g_bColorBurnShader != 0; - case EffectMode_ColorDodge: return g_bColorDodgeShader != 0; - case EffectMode_VividLight: return g_bVividLightShader != 0; - case EffectMode_HardMix: return g_hHardMixShader != 0; - case EffectMode_Overlay: return g_hOverlayShader != 0; - case EffectMode_Screen: return g_hScreenShader != 0; - case EffectMode_YUYV422: return g_hYUYV422Shader != 0; + case EffectMode_Normal: return true; + case EffectMode_Unpremultiply: return g_bUnpremultiplyShader != 0; + case EffectMode_ColorBurn: return g_bColorBurnShader != 0; + case EffectMode_ColorDodge: return g_bColorDodgeShader != 0; + case EffectMode_VividLight: return g_bVividLightShader != 0; + case EffectMode_HardMix: return g_hHardMixShader != 0; + case EffectMode_Overlay: return g_hOverlayShader != 0; + case EffectMode_Screen: return g_hScreenShader != 0; + case EffectMode_YUYV422: return g_hYUYV422Shader != 0; + default: return false; } - - return false; } void RageDisplay_Legacy::SetBlendMode( BlendMode mode ) diff --git a/src/RageSound.cpp b/src/RageSound.cpp index f114329fbc..0d0dc575b9 100644 --- a/src/RageSound.cpp +++ b/src/RageSound.cpp @@ -576,15 +576,16 @@ void RageSound::ApplyParams() switch( GetStopMode() ) { - case RageSoundParams::M_LOOP: - m_pSource->SetProperty( "Loop", 1.0f ); - break; - case RageSoundParams::M_STOP: - m_pSource->SetProperty( "Stop", 1.0f ); - break; - case RageSoundParams::M_CONTINUE: - m_pSource->SetProperty( "Continue", 1.0f ); - break; + case RageSoundParams::M_LOOP: + m_pSource->SetProperty( "Loop", 1.0f ); + break; + case RageSoundParams::M_STOP: + m_pSource->SetProperty( "Stop", 1.0f ); + break; + case RageSoundParams::M_CONTINUE: + m_pSource->SetProperty( "Continue", 1.0f ); + break; + default: break; } } diff --git a/src/RageSoundReader_FileReader.cpp b/src/RageSoundReader_FileReader.cpp index 85ff85346d..5c43fc080b 100644 --- a/src/RageSoundReader_FileReader.cpp +++ b/src/RageSoundReader_FileReader.cpp @@ -67,17 +67,18 @@ RageSoundReader_FileReader *RageSoundReader_FileReader::TryOpenFile( RageFileBas bKeepTrying = (ret != OPEN_FATAL_ERROR); switch( ret ) { - case OPEN_UNKNOWN_FILE_FORMAT: - bKeepTrying = true; - error = "Unknown file format"; - break; + case OPEN_UNKNOWN_FILE_FORMAT: + bKeepTrying = true; + error = "Unknown file format"; + break; - case OPEN_FATAL_ERROR: - /* The file matched, but failed to load. We know it's this type of data; - * don't bother trying the other file types. */ - bKeepTrying = false; - error = err; - break; + case OPEN_FATAL_ERROR: + /* The file matched, but failed to load. We know it's this type of data; + * don't bother trying the other file types. */ + bKeepTrying = false; + error = err; + break; + default: break; } return NULL; diff --git a/src/RageSurface_Load.cpp b/src/RageSurface_Load.cpp index 3d332a90c4..aa23902358 100644 --- a/src/RageSurface_Load.cpp +++ b/src/RageSurface_Load.cpp @@ -57,16 +57,17 @@ static RageSurface *TryOpenFile( RString sPath, bool bHeaderOnly, RString &error bKeepTrying = (result != RageSurfaceUtils::OPEN_FATAL_ERROR); switch( result ) { - case RageSurfaceUtils::OPEN_UNKNOWN_FILE_FORMAT: - bKeepTrying = true; - error = "Unknown file format"; - break; + case RageSurfaceUtils::OPEN_UNKNOWN_FILE_FORMAT: + bKeepTrying = true; + error = "Unknown file format"; + break; - case RageSurfaceUtils::OPEN_FATAL_ERROR: - /* The file matched, but failed to load. We know it's this type of data; - * don't bother trying the other file types. */ - bKeepTrying = false; - break; + case RageSurfaceUtils::OPEN_FATAL_ERROR: + /* The file matched, but failed to load. We know it's this type of data; + * don't bother trying the other file types. */ + bKeepTrying = false; + break; + default: break; } return NULL; diff --git a/src/ScoreKeeperRave.cpp b/src/ScoreKeeperRave.cpp index 6b3b68107b..22d2e82706 100644 --- a/src/ScoreKeeperRave.cpp +++ b/src/ScoreKeeperRave.cpp @@ -83,7 +83,10 @@ void ScoreKeeperRave::HandleHoldScore( const TapNote &tn ) float fPercentToMove = 0; switch( tapScore ) { - case TNS_HitMine: fPercentToMove = g_fSuperMeterPercentChange[SE_HitMine]; break; + case TNS_HitMine: + fPercentToMove = g_fSuperMeterPercentChange[SE_HitMine]; + default: + break; } AddSuperMeterDelta( fPercentToMove ); } diff --git a/src/Screen.cpp b/src/Screen.cpp index 80624afae2..ba91803110 100644 --- a/src/Screen.cpp +++ b/src/Screen.cpp @@ -226,6 +226,7 @@ void Screen::Input( const InputEventPlus &input ) case GAME_BUTTON_START: this->MenuStart ( input ); return; case GAME_BUTTON_SELECT:this->MenuSelect( input ); return; case GAME_BUTTON_COIN: this->MenuCoin ( input ); return; + default: return; } } diff --git a/src/ScreenAttract.cpp b/src/ScreenAttract.cpp index ac16f7a5fb..c5777804b8 100644 --- a/src/ScreenAttract.cpp +++ b/src/ScreenAttract.cpp @@ -75,34 +75,36 @@ void ScreenAttract::AttractInput( const InputEventPlus &input, ScreenWithMenuEle switch( input.MenuI ) { - case GAME_BUTTON_BACK: - if( !(bool)BACK_GOES_TO_START_SCREEN ) - break; - // fall through - case GAME_BUTTON_START: - case GAME_BUTTON_COIN: - switch( GAMESTATE->GetCoinMode() ) - { - case CoinMode_Pay: - LOG->Trace("ScreenAttract::AttractInput: COIN_PAY (%i/%i, %i)", GAMESTATE->m_iCoins.Get(), PREFSMAN->m_iCoinsPerCredit.Get(), GAMESTATE->GetNumSidesJoined() ); - if( GAMESTATE->m_iCoins < PREFSMAN->m_iCoinsPerCredit && GAMESTATE->GetNumSidesJoined() == 0 ) - break; // don't fall through + case GAME_BUTTON_BACK: + if( !BACK_GOES_TO_START_SCREEN ) + break; // fall through - case CoinMode_Home: - case CoinMode_Free: - if( pScreen->IsTransitioning() ) - return; + case GAME_BUTTON_START: + case GAME_BUTTON_COIN: + switch( GAMESTATE->GetCoinMode() ) + { + case CoinMode_Pay: + LOG->Trace("ScreenAttract::AttractInput: COIN_PAY (%i/%i, %i)", + GAMESTATE->m_iCoins.Get(), + PREFSMAN->m_iCoinsPerCredit.Get(), + GAMESTATE->GetNumSidesJoined() ); + if( GAMESTATE->m_iCoins < PREFSMAN->m_iCoinsPerCredit && GAMESTATE->GetNumSidesJoined() == 0 ) + break; // don't fall through + // fall through + case CoinMode_Home: + case CoinMode_Free: + if( pScreen->IsTransitioning() ) + return; - // HandleGlobalInputs() already played the coin sound. Don't play it again. - if( input.MenuI != GAME_BUTTON_COIN ) - SCREENMAN->PlayStartSound(); + // HandleGlobalInputs() already played the coin sound. Don't play it again. + if( input.MenuI != GAME_BUTTON_COIN ) + SCREENMAN->PlayStartSound(); - pScreen->Cancel( SM_GoToStartScreen ); - break; - default: - ASSERT(0); - } - break; + pScreen->Cancel( SM_GoToStartScreen ); + break; + default: FAIL_M("Invalid Coin Mode! Aborting..."); + } + default: break; } if( pScreen->IsTransitioning() ) @@ -110,10 +112,11 @@ void ScreenAttract::AttractInput( const InputEventPlus &input, ScreenWithMenuEle switch( input.MenuI ) { - case GAME_BUTTON_LEFT: - case GAME_BUTTON_RIGHT: - SCREENMAN->PostMessageToTopScreen( SM_BeginFadingOut, 0 ); - break; + case GAME_BUTTON_LEFT: + case GAME_BUTTON_RIGHT: + SCREENMAN->PostMessageToTopScreen( SM_BeginFadingOut, 0 ); + default: + break; } // Screen::Input( input ); diff --git a/src/ScreenContinue.cpp b/src/ScreenContinue.cpp index c9da2e45fa..4c8d0cbbfb 100644 --- a/src/ScreenContinue.cpp +++ b/src/ScreenContinue.cpp @@ -63,18 +63,21 @@ void ScreenContinue::Input( const InputEventPlus &input ) { switch( input.MenuI ) { - case GAME_BUTTON_START: - case GAME_BUTTON_UP: - case GAME_BUTTON_DOWN: - case GAME_BUTTON_LEFT: - case GAME_BUTTON_RIGHT: - float fSeconds = floorf(m_MenuTimer->GetSeconds()) - 0.0001f; - fSeconds = max( fSeconds, 0.0001f ); // don't set to 0 - m_MenuTimer->SetSeconds( fSeconds ); - Message msg("HurryTimer"); - msg.SetParam( "PlayerNumber", input.pn ); - this->HandleMessage( msg ); - return; // handled + case GAME_BUTTON_START: + case GAME_BUTTON_UP: + case GAME_BUTTON_DOWN: + case GAME_BUTTON_LEFT: + case GAME_BUTTON_RIGHT: + { + float fSeconds = floorf(m_MenuTimer->GetSeconds()) - 0.0001f; + fSeconds = max( fSeconds, 0.0001f ); // don't set to 0 + m_MenuTimer->SetSeconds( fSeconds ); + Message msg("HurryTimer"); + msg.SetParam( "PlayerNumber", input.pn ); + this->HandleMessage( msg ); + return; // handled + } + default: break; } } diff --git a/src/ScreenDebugOverlay.cpp b/src/ScreenDebugOverlay.cpp index e6c731fa2c..4b698123b7 100644 --- a/src/ScreenDebugOverlay.cpp +++ b/src/ScreenDebugOverlay.cpp @@ -813,12 +813,11 @@ class DebugLineProfileSlot : public IDebugLine { switch( g_ProfileSlot ) { - case ProfileSlot_Machine: return "Machine"; - case ProfileSlot_Player1: return "Player 1"; - case ProfileSlot_Player2: return "Player 2"; + case ProfileSlot_Machine: return "Machine"; + case ProfileSlot_Player1: return "Player 1"; + case ProfileSlot_Player2: return "Player 2"; + default: return RString(); } - - return RString(); } virtual bool IsEnabled() { return IsSelectProfilePersistent(); } virtual RString GetPageName() const { return "Profiles"; } diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 0f88bf0985..600dd013d1 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -4245,6 +4245,7 @@ void ScreenEdit::HandleAlterMenuChoice(AlterMenuChoice c, const vector &iAn } break; } + default: break; } } diff --git a/src/ScreenEditMenu.cpp b/src/ScreenEditMenu.cpp index 37aba49e5c..f11da45efd 100644 --- a/src/ScreenEditMenu.cpp +++ b/src/ScreenEditMenu.cpp @@ -193,33 +193,38 @@ void ScreenEditMenu::MenuStart( const InputEventPlus &input ) switch( m_Selector.EDIT_MODE ) { - case EditMode_Full: - { - RString sDir = pSong->GetSongDir(); - RString sTempFile = sDir + TEMP_FILE_NAME; - RageFile file; - if( !file.Open( sTempFile, RageFile::WRITE ) ) + case EditMode_Full: { - ScreenPrompt::Prompt( SM_None, SONG_DIR_READ_ONLY ); - return; - } + RString sDir = pSong->GetSongDir(); + RString sTempFile = sDir + TEMP_FILE_NAME; + RageFile file; + if( !file.Open( sTempFile, RageFile::WRITE ) ) + { + ScreenPrompt::Prompt( SM_None, SONG_DIR_READ_ONLY ); + return; + } - file.Close(); - FILEMAN->Remove( sTempFile ); - break; - } + file.Close(); + FILEMAN->Remove( sTempFile ); + break; + } + default: + break; } switch( action ) { - case EditMenuAction_Delete: - ASSERT( pSteps ); - if( pSteps->IsAutogen() ) + case EditMenuAction_Delete: { - SCREENMAN->PlayInvalidSound(); - SCREENMAN->SystemMessage( DELETED_AUTOGEN_STEPS.GetValue() ); - return; + ASSERT( pSteps ); + if( pSteps->IsAutogen() ) + { + SCREENMAN->PlayInvalidSound(); + SCREENMAN->SystemMessage( DELETED_AUTOGEN_STEPS.GetValue() ); + return; + } } + default: break; } // Do work diff --git a/src/ScreenEnding.cpp b/src/ScreenEnding.cpp index 18b37a5ca8..31b92250f0 100644 --- a/src/ScreenEnding.cpp +++ b/src/ScreenEnding.cpp @@ -93,10 +93,11 @@ void ScreenEnding::Init() m_sprRemoveMemoryCard[p].Load( THEME->GetPathG("ScreenEnding",ssprintf("remove card P%d",p+1)) ); switch( MEMCARDMAN->GetCardState(p) ) { - case MemoryCardState_Removed: - case MemoryCardState_NoCard: - m_sprRemoveMemoryCard[p].SetVisible( false ); - break; + case MemoryCardState_Removed: + case MemoryCardState_NoCard: + m_sprRemoveMemoryCard[p].SetVisible( false ); + default: + break; } LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_sprRemoveMemoryCard[p] ); this->AddChild( &m_sprRemoveMemoryCard[p] ); @@ -114,9 +115,10 @@ void ScreenEnding::Input( const InputEventPlus &input ) { switch( input.MenuI ) { - case GAME_BUTTON_START: - SCREENMAN->PostMessageToTopScreen( SM_BeginFadingOut, 0 ); - break; + case GAME_BUTTON_START: + SCREENMAN->PostMessageToTopScreen( SM_BeginFadingOut, 0 ); + default: + break; } } diff --git a/src/ScreenEvaluation.cpp b/src/ScreenEvaluation.cpp index 654f1d0bb5..8d3a55d541 100644 --- a/src/ScreenEvaluation.cpp +++ b/src/ScreenEvaluation.cpp @@ -182,25 +182,26 @@ void ScreenEvaluation::Init() { switch( rc ) { - case RadarCategory_Stream: - case RadarCategory_Voltage: - case RadarCategory_Air: - case RadarCategory_Freeze: - case RadarCategory_Chaos: - ss.m_player[p].m_radarPossible[rc] = randomf( 0, 1 ); - ss.m_player[p].m_radarActual[rc] = randomf( 0, ss.m_player[p].m_radarPossible[rc] ); - break; - case RadarCategory_TapsAndHolds: - case RadarCategory_Jumps: - case RadarCategory_Holds: - case RadarCategory_Mines: - case RadarCategory_Hands: - case RadarCategory_Rolls: - case RadarCategory_Lifts: - case RadarCategory_Fakes: - ss.m_player[p].m_radarPossible[rc] = 1 + (rand() % 200); - ss.m_player[p].m_radarActual[rc] = rand() % (int)(ss.m_player[p].m_radarPossible[rc]); - break; + case RadarCategory_Stream: + case RadarCategory_Voltage: + case RadarCategory_Air: + case RadarCategory_Freeze: + case RadarCategory_Chaos: + ss.m_player[p].m_radarPossible[rc] = randomf( 0, 1 ); + ss.m_player[p].m_radarActual[rc] = randomf( 0, ss.m_player[p].m_radarPossible[rc] ); + break; + case RadarCategory_TapsAndHolds: + case RadarCategory_Jumps: + case RadarCategory_Holds: + case RadarCategory_Mines: + case RadarCategory_Hands: + case RadarCategory_Rolls: + case RadarCategory_Lifts: + case RadarCategory_Fakes: + ss.m_player[p].m_radarPossible[rc] = 1 + (rand() % 200); + ss.m_player[p].m_radarActual[rc] = rand() % (int)(ss.m_player[p].m_radarPossible[rc]); + break; + default: break; } ; // filled in by ScreenGameplay on start of notes @@ -651,11 +652,12 @@ void ScreenEvaluation::Init() switch( best_grade ) { - case Grade_Tier01: - case Grade_Tier02: - case Grade_Tier03: - this->PostScreenMessage( SM_PlayCheer, CHEER_DELAY_SECONDS ); - break; + case Grade_Tier01: + case Grade_Tier02: + case Grade_Tier03: + this->PostScreenMessage( SM_PlayCheer, CHEER_DELAY_SECONDS ); + default: + break; } } diff --git a/src/ScreenGameplay.cpp b/src/ScreenGameplay.cpp index d0ac5a1cfd..5e9ddbf5db 100644 --- a/src/ScreenGameplay.cpp +++ b/src/ScreenGameplay.cpp @@ -151,10 +151,11 @@ void PlayerInfo::Load( PlayerNumber pn, MultiPlayer mp, bool bShowNoteField, int switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_RAVE: - m_pSecondaryScoreDisplay = new ScoreDisplayRave; - m_pSecondaryScoreDisplay->SetName( "ScoreDisplayRave" ); - break; + case PLAY_MODE_RAVE: + m_pSecondaryScoreDisplay = new ScoreDisplayRave; + m_pSecondaryScoreDisplay->SetName( "ScoreDisplayRave" ); + default: + break; } if( m_pSecondaryScoreDisplay ) @@ -164,9 +165,10 @@ void PlayerInfo::Load( PlayerNumber pn, MultiPlayer mp, bool bShowNoteField, int switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_RAVE: - m_pSecondaryScoreKeeper = new ScoreKeeperRave( pPlayerState, pPlayerStageStats ); - break; + case PLAY_MODE_RAVE: + m_pSecondaryScoreKeeper = new ScoreKeeperRave( pPlayerState, pPlayerStageStats ); + default: + break; } m_ptextPlayerOptions = NULL; @@ -522,13 +524,14 @@ void ScreenGameplay::Init() // Add combined life meter switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - m_pCombinedLifeMeter = new CombinedLifeMeterTug; - m_pCombinedLifeMeter->SetName( "CombinedLife" ); - LOAD_ALL_COMMANDS_AND_SET_XY( *m_pCombinedLifeMeter ); - this->AddChild( m_pCombinedLifeMeter ); - break; + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + m_pCombinedLifeMeter = new CombinedLifeMeterTug; + m_pCombinedLifeMeter->SetName( "CombinedLife" ); + LOAD_ALL_COMMANDS_AND_SET_XY( *m_pCombinedLifeMeter ); + this->AddChild( m_pCombinedLifeMeter ); + default: + break; } // Before the lifemeter loads, if Networking is required @@ -541,25 +544,26 @@ void ScreenGameplay::Init() // Add individual life meter switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_REGULAR: - case PLAY_MODE_ONI: - case PLAY_MODE_NONSTOP: - case PLAY_MODE_ENDLESS: - FOREACH_PlayerNumberInfo( m_vPlayerInfo, pi ) - { - if( !GAMESTATE->IsPlayerEnabled(pi->m_pn) && !SHOW_LIFE_METER_FOR_DISABLED_PLAYERS ) - continue; // skip + case PLAY_MODE_REGULAR: + case PLAY_MODE_ONI: + case PLAY_MODE_NONSTOP: + case PLAY_MODE_ENDLESS: + FOREACH_PlayerNumberInfo( m_vPlayerInfo, pi ) + { + if( !GAMESTATE->IsPlayerEnabled(pi->m_pn) && !SHOW_LIFE_METER_FOR_DISABLED_PLAYERS ) + continue; // skip - pi->m_pLifeMeter = LifeMeter::MakeLifeMeter( GAMESTATE->m_SongOptions.GetStage().m_LifeType ); - pi->m_pLifeMeter->Load( pi->GetPlayerState(), pi->GetPlayerStageStats() ); - pi->m_pLifeMeter->SetName( ssprintf("Life%s",pi->GetName().c_str()) ); - LOAD_ALL_COMMANDS_AND_SET_XY( pi->m_pLifeMeter ); - this->AddChild( pi->m_pLifeMeter ); - } - break; - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - break; + pi->m_pLifeMeter = LifeMeter::MakeLifeMeter( GAMESTATE->m_SongOptions.GetStage().m_LifeType ); + pi->m_pLifeMeter->Load( pi->GetPlayerState(), pi->GetPlayerStageStats() ); + pi->m_pLifeMeter->SetName( ssprintf("Life%s",pi->GetName().c_str()) ); + LOAD_ALL_COMMANDS_AND_SET_XY( pi->m_pLifeMeter ); + this->AddChild( pi->m_pLifeMeter ); + } + break; + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + default: + break; } m_bShowScoreboard = false; @@ -718,11 +722,12 @@ void ScreenGameplay::Init() switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_BATTLE: - m_soundBattleTrickLevel1.Load( THEME->GetPathS(m_sName,"battle trick level1"), true ); - m_soundBattleTrickLevel2.Load( THEME->GetPathS(m_sName,"battle trick level2"), true ); - m_soundBattleTrickLevel3.Load( THEME->GetPathS(m_sName,"battle trick level3"), true ); - break; + case PLAY_MODE_BATTLE: + m_soundBattleTrickLevel1.Load( THEME->GetPathS(m_sName,"battle trick level1"), true ); + m_soundBattleTrickLevel2.Load( THEME->GetPathS(m_sName,"battle trick level2"), true ); + m_soundBattleTrickLevel3.Load( THEME->GetPathS(m_sName,"battle trick level3"), true ); + default: + break; } } @@ -996,9 +1001,10 @@ void ScreenGameplay::SetupSong( int iSongIndex ) RString sType; switch( GAMESTATE->m_SongOptions.GetCurrent().m_SoundEffectType ) { - case SongOptions::SOUNDEFFECT_OFF: sType = "SoundEffectControl_Off"; break; - case SongOptions::SOUNDEFFECT_SPEED: sType = "SoundEffectControl_Speed"; break; - case SongOptions::SOUNDEFFECT_PITCH: sType = "SoundEffectControl_Pitch"; break; + case SongOptions::SOUNDEFFECT_OFF: sType = "SoundEffectControl_Off"; break; + case SongOptions::SOUNDEFFECT_SPEED: sType = "SoundEffectControl_Speed"; break; + case SongOptions::SOUNDEFFECT_PITCH: sType = "SoundEffectControl_Pitch"; break; + default: break; } pi->m_SoundEffectControl.Load( sType, pi->GetPlayerState(), &pi->m_NoteData ); @@ -1630,246 +1636,250 @@ void ScreenGameplay::Update( float fDeltaTime ) switch( m_DancingState ) { - case STATE_DANCING: - /* Set STATSMAN->m_CurStageStats.bFailed for failed players. In, FAIL_IMMEDIATE, send - * SM_BeginFailed if all players failed, and kill dead Oni players. */ - FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi ) + case STATE_DANCING: { - PlayerNumber pn = pi->GetStepsAndTrailIndex(); - - PlayerOptions::FailType ft = GAMESTATE->GetPlayerFailType( pi->GetPlayerState() ); - SongOptions::LifeType lt = GAMESTATE->m_SongOptions.GetCurrent().m_LifeType; - - if( ft == PlayerOptions::FAIL_OFF || ft == PlayerOptions::FAIL_AT_END ) - continue; - - // check for individual fail - if( pi->m_pLifeMeter == NULL || !pi->m_pLifeMeter->IsFailing() ) - continue; /* isn't failing */ - if( pi->GetPlayerStageStats()->m_bFailed ) - continue; /* failed and is already dead */ - - LOG->Trace("Player %d failed", (int)pn); - pi->GetPlayerStageStats()->m_bFailed = true; // fail - + /* Set STATSMAN->m_CurStageStats.bFailed for failed players. In, FAIL_IMMEDIATE, send + * SM_BeginFailed if all players failed, and kill dead Oni players. */ + FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi ) { - Message msg("PlayerFailed"); - msg.SetParam( "PlayerNumber", pi->m_pn ); - MESSAGEMAN->Broadcast( msg ); - } + PlayerNumber pn = pi->GetStepsAndTrailIndex(); + + PlayerOptions::FailType ft = GAMESTATE->GetPlayerFailType( pi->GetPlayerState() ); + SongOptions::LifeType lt = GAMESTATE->m_SongOptions.GetCurrent().m_LifeType; + + if( ft == PlayerOptions::FAIL_OFF || ft == PlayerOptions::FAIL_AT_END ) + continue; + + // check for individual fail + if( pi->m_pLifeMeter == NULL || !pi->m_pLifeMeter->IsFailing() ) + continue; /* isn't failing */ + if( pi->GetPlayerStageStats()->m_bFailed ) + continue; /* failed and is already dead */ + + LOG->Trace("Player %d failed", (int)pn); + pi->GetPlayerStageStats()->m_bFailed = true; // fail - // Check for and do Oni die. - bool bAllowOniDie = false; - switch( lt ) - { - case SongOptions::LIFE_BATTERY: - bAllowOniDie = true; - break; - } - if( bAllowOniDie && ft == PlayerOptions::FAIL_IMMEDIATE ) - { - if( !STATSMAN->m_CurStageStats.AllFailed() ) // if not the last one to fail { - // kill them! - SOUND->PlayOnceFromDir( THEME->GetPathS(m_sName,"oni die") ); - pi->ShowOniGameOver(); - pi->m_NoteData.Init(); // remove all notes and scoring - pi->m_pPlayer->FadeToFail(); // tell the NoteField to fade to white + Message msg("PlayerFailed"); + msg.SetParam( "PlayerNumber", pi->m_pn ); + MESSAGEMAN->Broadcast( msg ); + } + + // Check for and do Oni die. + bool bAllowOniDie = false; + switch( lt ) + { + case SongOptions::LIFE_BATTERY: + bAllowOniDie = true; + default: + break; + } + if( bAllowOniDie && ft == PlayerOptions::FAIL_IMMEDIATE ) + { + if( !STATSMAN->m_CurStageStats.AllFailed() ) // if not the last one to fail + { + // kill them! + SOUND->PlayOnceFromDir( THEME->GetPathS(m_sName,"oni die") ); + pi->ShowOniGameOver(); + pi->m_NoteData.Init(); // remove all notes and scoring + pi->m_pPlayer->FadeToFail(); // tell the NoteField to fade to white + } } } - } - bool bAllFailed = true; - FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi ) - { - PlayerOptions::FailType ft = GAMESTATE->GetPlayerFailType( pi->GetPlayerState() ); - switch( ft ) + bool bAllFailed = true; + FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi ) { - case PlayerOptions::FAIL_IMMEDIATE: - if( pi->m_pLifeMeter == NULL || (pi->m_pLifeMeter && !pi->m_pLifeMeter->IsFailing()) ) - bAllFailed = false; - break; - case PlayerOptions::FAIL_IMMEDIATE_CONTINUE: - case PlayerOptions::FAIL_AT_END: - bAllFailed = false; // wait until the end of the song to fail. - break; - case PlayerOptions::FAIL_OFF: - bAllFailed = false; // never fail. - break; - default: - ASSERT(0); - } - } - - if( bAllFailed ) - { - m_pSoundMusic->StopPlaying(); - SCREENMAN->PostMessageToTopScreen( SM_NotesEnded, 0 ); - // todo: stop lyrics (m_LyricDisplay) from animating -aj - } - - // Update living players' alive time - // HACK: Don't scale alive time when using tab/tilde. Instead of accumulating time from a timer, - // this time should instead be tied to the music position. - float fUnscaledDeltaTime = m_timerGameplaySeconds.GetDeltaTime(); - - FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi ) - if( !pi->GetPlayerStageStats()->m_bFailed ) - pi->GetPlayerStageStats()->m_fAliveSeconds += fUnscaledDeltaTime * GAMESTATE->m_SongOptions.GetCurrent().m_fMusicRate; - - // update fGameplaySeconds - STATSMAN->m_CurStageStats.m_fGameplaySeconds += fUnscaledDeltaTime; - float curBeat = GAMESTATE->m_Position.m_fSongBeat; - Song &s = *GAMESTATE->m_pCurSong; - - if( curBeat >= s.GetFirstBeat() && curBeat < s.GetLastBeat() ) - { - STATSMAN->m_CurStageStats.m_fStepsSeconds += fUnscaledDeltaTime; - - if( GAMESTATE->m_SongOptions.GetCurrent().m_fHaste != 0.0f ) - { - float fHasteRate = GetHasteRate(); - GAMESTATE->m_fAccumulatedHasteSeconds += (fUnscaledDeltaTime * fHasteRate) - fUnscaledDeltaTime; - } - } - - // Check for end of song - { - float fSecondsToStartFadingOutMusic, fSecondsToStartTransitioningOut; - GetMusicEndTiming( fSecondsToStartFadingOutMusic, fSecondsToStartTransitioningOut ); - - bool bAllReallyFailed = STATSMAN->m_CurStageStats.AllFailed(); - if( bAllReallyFailed ) - fSecondsToStartTransitioningOut += BEGIN_FAILED_DELAY; - - if( GAMESTATE->m_Position.m_fMusicSeconds >= fSecondsToStartTransitioningOut && !m_NextSong.IsTransitioning() ) - this->PostScreenMessage( SM_NotesEnded, 0 ); - } - - // update 2d dancing characters - FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi ) - { - DancingCharacters *pCharacter = NULL; - if( m_pSongBackground ) - pCharacter = m_pSongBackground->GetDancingCharacters(); - if( pCharacter != NULL ) - { - TapNoteScore tns = pi->m_pPlayer->GetLastTapNoteScore(); - - ANIM_STATES_2D state = AS2D_MISS; - - switch( tns ) + PlayerOptions::FailType ft = GAMESTATE->GetPlayerFailType( pi->GetPlayerState() ); + switch( ft ) { - case TNS_W4: - case TNS_W3: - state = AS2D_GOOD; + case PlayerOptions::FAIL_IMMEDIATE: + if( pi->m_pLifeMeter == NULL || (pi->m_pLifeMeter && !pi->m_pLifeMeter->IsFailing()) ) + bAllFailed = false; break; - case TNS_W2: - case TNS_W1: - state = AS2D_GREAT; + case PlayerOptions::FAIL_IMMEDIATE_CONTINUE: + case PlayerOptions::FAIL_AT_END: + bAllFailed = false; // wait until the end of the song to fail. + break; + case PlayerOptions::FAIL_OFF: + bAllFailed = false; // never fail. break; default: - state = AS2D_MISS; - break; - } - - if( state == AS2D_GREAT && pi->GetPlayerState()->m_HealthState == HealthState_Hot ) - state = AS2D_FEVER; - - pCharacter->Change2DAnimState( pi->m_pn, state ); - } - } - - // Check for enemy death in enemy battle - static float fLastSeenEnemyHealth = 1; - if( fLastSeenEnemyHealth != GAMESTATE->m_fOpponentHealthPercent ) - { - fLastSeenEnemyHealth = GAMESTATE->m_fOpponentHealthPercent; - - if( GAMESTATE->m_fOpponentHealthPercent == 0 ) - { - // HACK: Load incorrect directory on purpose for now. - PlayAnnouncer( "gameplay battle damage level3", 0 ); - - GAMESTATE->RemoveAllActiveAttacks(); - - FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi ) - { - if( !GAMESTATE->IsCpuPlayer(pi->m_pn) ) - continue; - - SOUND->PlayOnceFromDir( THEME->GetPathS(m_sName,"oni die") ); - pi->ShowOniGameOver(); - pi->m_NoteData.Init(); // remove all notes and scoring - pi->m_pPlayer->FadeToFail(); // tell the NoteField to fade to white + FAIL_M("Invalid fail type! Aborting..."); } } - } - // update give up - bool bGiveUpTimerFired = !m_GiveUpTimer.IsZero() && m_GiveUpTimer.Ago() > 2.5f; - - - bool bAllHumanHaveBigMissCombo = true; - FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi ) - { - if (pi->GetPlayerState()->m_PlayerOptions.GetCurrent().m_FailType == PlayerOptions::FAIL_OFF || - pi->GetPlayerState()->m_HealthState < HealthState_Dead ) - { - bAllHumanHaveBigMissCombo = false; - break; - } - } - if (bAllHumanHaveBigMissCombo) // possible to get in here. - { - bAllHumanHaveBigMissCombo = FAIL_ON_MISS_COMBO.GetValue() != -1 && STATSMAN->m_CurStageStats.GetMinimumMissCombo() >= FAIL_ON_MISS_COMBO; - } - if( bGiveUpTimerFired || bAllHumanHaveBigMissCombo ) - { - STATSMAN->m_CurStageStats.m_bGaveUp = true; - FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi ) - { - pi->GetPlayerStageStats()->m_bFailed |= bAllHumanHaveBigMissCombo; - pi->GetPlayerStageStats()->m_bDisqualified |= bGiveUpTimerFired; // Don't disqualify if failing for miss combo. The player should still be eligable for a high score on courses. - } - - AbortGiveUp( false ); - - if( GIVING_UP_GOES_TO_PREV_SCREEN ) - { - BeginBackingOutFromGameplay(); - } - else + if( bAllFailed ) { m_pSoundMusic->StopPlaying(); - this->PostScreenMessage( SM_NotesEnded, 0 ); + SCREENMAN->PostMessageToTopScreen( SM_NotesEnded, 0 ); + // todo: stop lyrics (m_LyricDisplay) from animating -aj } - return; - } - // Check to see if it's time to play a ScreenGameplay comment - m_fTimeSinceLastDancingComment += fDeltaTime; + // Update living players' alive time + // HACK: Don't scale alive time when using tab/tilde. Instead of accumulating time from a timer, + // this time should instead be tied to the music position. + float fUnscaledDeltaTime = m_timerGameplaySeconds.GetDeltaTime(); - switch( GAMESTATE->m_PlayMode ) - { - case PLAY_MODE_REGULAR: - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - if( GAMESTATE->OneIsHot() ) - PlayAnnouncer( "gameplay comment hot", SECONDS_BETWEEN_COMMENTS ); - else if( GAMESTATE->AllAreInDangerOrWorse() ) - PlayAnnouncer( "gameplay comment danger", SECONDS_BETWEEN_COMMENTS ); - else - PlayAnnouncer( "gameplay comment good", SECONDS_BETWEEN_COMMENTS ); - break; - case PLAY_MODE_NONSTOP: - case PLAY_MODE_ONI: - case PLAY_MODE_ENDLESS: - PlayAnnouncer( "gameplay comment oni", SECONDS_BETWEEN_COMMENTS ); - break; - default: - ASSERT(0); - } + FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi ) + if( !pi->GetPlayerStageStats()->m_bFailed ) + pi->GetPlayerStageStats()->m_fAliveSeconds += fUnscaledDeltaTime * GAMESTATE->m_SongOptions.GetCurrent().m_fMusicRate; + + // update fGameplaySeconds + STATSMAN->m_CurStageStats.m_fGameplaySeconds += fUnscaledDeltaTime; + float curBeat = GAMESTATE->m_Position.m_fSongBeat; + Song &s = *GAMESTATE->m_pCurSong; + + if( curBeat >= s.GetFirstBeat() && curBeat < s.GetLastBeat() ) + { + STATSMAN->m_CurStageStats.m_fStepsSeconds += fUnscaledDeltaTime; + + if( GAMESTATE->m_SongOptions.GetCurrent().m_fHaste != 0.0f ) + { + float fHasteRate = GetHasteRate(); + GAMESTATE->m_fAccumulatedHasteSeconds += (fUnscaledDeltaTime * fHasteRate) - fUnscaledDeltaTime; + } + } + + // Check for end of song + { + float fSecondsToStartFadingOutMusic, fSecondsToStartTransitioningOut; + GetMusicEndTiming( fSecondsToStartFadingOutMusic, fSecondsToStartTransitioningOut ); + + bool bAllReallyFailed = STATSMAN->m_CurStageStats.AllFailed(); + if( bAllReallyFailed ) + fSecondsToStartTransitioningOut += BEGIN_FAILED_DELAY; + + if( GAMESTATE->m_Position.m_fMusicSeconds >= fSecondsToStartTransitioningOut && !m_NextSong.IsTransitioning() ) + this->PostScreenMessage( SM_NotesEnded, 0 ); + } + + // update 2d dancing characters + FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi ) + { + DancingCharacters *pCharacter = NULL; + if( m_pSongBackground ) + pCharacter = m_pSongBackground->GetDancingCharacters(); + if( pCharacter != NULL ) + { + TapNoteScore tns = pi->m_pPlayer->GetLastTapNoteScore(); + + ANIM_STATES_2D state = AS2D_MISS; + + switch( tns ) + { + case TNS_W4: + case TNS_W3: + state = AS2D_GOOD; + break; + case TNS_W2: + case TNS_W1: + state = AS2D_GREAT; + break; + default: + state = AS2D_MISS; + break; + } + + if( state == AS2D_GREAT && pi->GetPlayerState()->m_HealthState == HealthState_Hot ) + state = AS2D_FEVER; + + pCharacter->Change2DAnimState( pi->m_pn, state ); + } + } + + // Check for enemy death in enemy battle + static float fLastSeenEnemyHealth = 1; + if( fLastSeenEnemyHealth != GAMESTATE->m_fOpponentHealthPercent ) + { + fLastSeenEnemyHealth = GAMESTATE->m_fOpponentHealthPercent; + + if( GAMESTATE->m_fOpponentHealthPercent == 0 ) + { + // HACK: Load incorrect directory on purpose for now. + PlayAnnouncer( "gameplay battle damage level3", 0 ); + + GAMESTATE->RemoveAllActiveAttacks(); + + FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi ) + { + if( !GAMESTATE->IsCpuPlayer(pi->m_pn) ) + continue; + + SOUND->PlayOnceFromDir( THEME->GetPathS(m_sName,"oni die") ); + pi->ShowOniGameOver(); + pi->m_NoteData.Init(); // remove all notes and scoring + pi->m_pPlayer->FadeToFail(); // tell the NoteField to fade to white + } + } + } + + // update give up + bool bGiveUpTimerFired = !m_GiveUpTimer.IsZero() && m_GiveUpTimer.Ago() > 2.5f; + + + bool bAllHumanHaveBigMissCombo = true; + FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi ) + { + if (pi->GetPlayerState()->m_PlayerOptions.GetCurrent().m_FailType == PlayerOptions::FAIL_OFF || + pi->GetPlayerState()->m_HealthState < HealthState_Dead ) + { + bAllHumanHaveBigMissCombo = false; + break; + } + } + if (bAllHumanHaveBigMissCombo) // possible to get in here. + { + bAllHumanHaveBigMissCombo = FAIL_ON_MISS_COMBO.GetValue() != -1 && STATSMAN->m_CurStageStats.GetMinimumMissCombo() >= FAIL_ON_MISS_COMBO; + } + if( bGiveUpTimerFired || bAllHumanHaveBigMissCombo ) + { + STATSMAN->m_CurStageStats.m_bGaveUp = true; + FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi ) + { + pi->GetPlayerStageStats()->m_bFailed |= bAllHumanHaveBigMissCombo; + pi->GetPlayerStageStats()->m_bDisqualified |= bGiveUpTimerFired; // Don't disqualify if failing for miss combo. The player should still be eligable for a high score on courses. + } + + AbortGiveUp( false ); + + if( GIVING_UP_GOES_TO_PREV_SCREEN ) + { + BeginBackingOutFromGameplay(); + } + else + { + m_pSoundMusic->StopPlaying(); + this->PostScreenMessage( SM_NotesEnded, 0 ); + } + return; + } + + // Check to see if it's time to play a ScreenGameplay comment + m_fTimeSinceLastDancingComment += fDeltaTime; + + switch( GAMESTATE->m_PlayMode ) + { + case PLAY_MODE_REGULAR: + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + if( GAMESTATE->OneIsHot() ) + PlayAnnouncer( "gameplay comment hot", SECONDS_BETWEEN_COMMENTS ); + else if( GAMESTATE->AllAreInDangerOrWorse() ) + PlayAnnouncer( "gameplay comment danger", SECONDS_BETWEEN_COMMENTS ); + else + PlayAnnouncer( "gameplay comment good", SECONDS_BETWEEN_COMMENTS ); + break; + case PLAY_MODE_NONSTOP: + case PLAY_MODE_ONI: + case PLAY_MODE_ENDLESS: + PlayAnnouncer( "gameplay comment oni", SECONDS_BETWEEN_COMMENTS ); + break; + default: + ASSERT(0); + } + } + default: break; } PlayTicks(); diff --git a/src/ScreenJukebox.cpp b/src/ScreenJukebox.cpp index 5059d2ecf1..233107b35b 100644 --- a/src/ScreenJukebox.cpp +++ b/src/ScreenJukebox.cpp @@ -248,10 +248,12 @@ void ScreenJukebox::Input( const InputEventPlus &input ) switch( input.MenuI ) { - case GAME_BUTTON_LEFT: - case GAME_BUTTON_RIGHT: - SCREENMAN->PostMessageToTopScreen( SM_NotesEnded, 0 ); - return; + case GAME_BUTTON_LEFT: + case GAME_BUTTON_RIGHT: + SCREENMAN->PostMessageToTopScreen( SM_NotesEnded, 0 ); + return; + default: + break; } ScreenAttract::AttractInput( input, this ); diff --git a/src/ScreenOptions.cpp b/src/ScreenOptions.cpp index 1afe97c5ee..d9bfc480da 100644 --- a/src/ScreenOptions.cpp +++ b/src/ScreenOptions.cpp @@ -465,12 +465,13 @@ void ScreenOptions::TweenCursor( PlayerNumber pn ) bool bCanGoRight = false; switch( row.GetRowDef().m_layoutType ) { - case LAYOUT_SHOW_ONE_IN_ROW: - bCanGoLeft = iChoiceWithFocus > 0; - bCanGoRight = iChoiceWithFocus >= 0 && iChoiceWithFocus < (int) row.GetRowDef().m_vsChoices.size()-1; - break; - case LAYOUT_SHOW_ALL_IN_ROW: - break; + case LAYOUT_SHOW_ONE_IN_ROW: + bCanGoLeft = iChoiceWithFocus > 0; + bCanGoRight = iChoiceWithFocus >= 0 && iChoiceWithFocus < (int) row.GetRowDef().m_vsChoices.size()-1; + break; + case LAYOUT_SHOW_ALL_IN_ROW: + break; + default: break; } cursor.SetCanGo( bCanGoLeft, bCanGoRight ); @@ -505,13 +506,15 @@ void ScreenOptions::Input( const InputEventPlus &input ) { switch( input.MenuI ) { - case GAME_BUTTON_START: - case GAME_BUTTON_SELECT: - case GAME_BUTTON_MENURIGHT: - case GAME_BUTTON_MENULEFT: - INPUTMAPPER->ResetKeyRepeat( GAME_BUTTON_START, input.pn ); - INPUTMAPPER->ResetKeyRepeat( GAME_BUTTON_RIGHT, input.pn ); - INPUTMAPPER->ResetKeyRepeat( GAME_BUTTON_LEFT, input.pn ); + case GAME_BUTTON_START: + case GAME_BUTTON_SELECT: + case GAME_BUTTON_MENURIGHT: + case GAME_BUTTON_MENULEFT: + INPUTMAPPER->ResetKeyRepeat( GAME_BUTTON_START, input.pn ); + INPUTMAPPER->ResetKeyRepeat( GAME_BUTTON_RIGHT, input.pn ); + INPUTMAPPER->ResetKeyRepeat( GAME_BUTTON_LEFT, input.pn ); + default: + break; } } @@ -736,12 +739,13 @@ void ScreenOptions::AfterChangeValueOrRow( PlayerNumber pn ) BitmapText *pText = NULL; switch( m_InputMode ) { - case INPUTMODE_INDIVIDUAL: - pText = &m_textExplanation[pn]; - break; - case INPUTMODE_SHARE_CURSOR: - pText = &m_textExplanationTogether; - break; + case INPUTMODE_INDIVIDUAL: + pText = &m_textExplanation[pn]; + break; + case INPUTMODE_SHARE_CURSOR: + pText = &m_textExplanationTogether; + break; + default: break; } if( pText->GetText() != text ) { @@ -787,8 +791,8 @@ void ScreenOptions::MenuStart( const InputEventPlus &input ) * GAME_BUTTON_RIGHT are being held. */ switch( m_OptionsNavigation ) { - case NAV_THREE_KEY: - case NAV_TOGGLE_THREE_KEY: + case NAV_THREE_KEY: + case NAV_TOGGLE_THREE_KEY: { bool bHoldingLeftAndRight = INPUTMAPPER->IsBeingPressed( GAME_BUTTON_RIGHT, pn ) && @@ -800,6 +804,7 @@ void ScreenOptions::MenuStart( const InputEventPlus &input ) return; } } + default: break; } this->ProcessMenuStart( input ); @@ -1170,23 +1175,26 @@ void ScreenOptions::AfterChangeRow( PlayerNumber pn ) OptionRow &row = *m_pRows[iRow]; switch( m_OptionsNavigation ) { - case NAV_TOGGLE_FIVE_KEY: - if( row.GetRowDef().m_layoutType != LAYOUT_SHOW_ONE_IN_ROW ) + case NAV_TOGGLE_FIVE_KEY: { - int iSelectionDist = -1; - for( unsigned i = 0; i < row.GetTextItemsSize(); ++i ) + if( row.GetRowDef().m_layoutType != LAYOUT_SHOW_ONE_IN_ROW ) { - int iWidth, iX, iY; - GetWidthXY( pn, m_iCurrentRow[pn], i, iWidth, iX, iY ); - const int iDist = abs( iX-m_iFocusX[pn] ); - if( iSelectionDist == -1 || iDist < iSelectionDist ) + int iSelectionDist = -1; + for( unsigned i = 0; i < row.GetTextItemsSize(); ++i ) { - iSelectionDist = iDist; - row.SetChoiceInRowWithFocus( pn, i ); + int iWidth, iX, iY; + GetWidthXY( pn, m_iCurrentRow[pn], i, iWidth, iX, iY ); + const int iDist = abs( iX-m_iFocusX[pn] ); + if( iSelectionDist == -1 || iDist < iSelectionDist ) + { + iSelectionDist = iDist; + row.SetChoiceInRowWithFocus( pn, i ); + } } } + break; } - break; + default: break; } if( row.GetFirstItemGoesDown() ) diff --git a/src/ScreenPrompt.cpp b/src/ScreenPrompt.cpp index bc617679c1..5ae2ed4505 100644 --- a/src/ScreenPrompt.cpp +++ b/src/ScreenPrompt.cpp @@ -118,12 +118,13 @@ void ScreenPrompt::Input( const InputEventPlus &input ) { switch( input.DeviceI.button ) { - case KEY_LEFT: - this->MenuLeft( input ); - return; - case KEY_RIGHT: - this->MenuRight( input ); - return; + case KEY_LEFT: + this->MenuLeft( input ); + return; + case KEY_RIGHT: + this->MenuRight( input ); + return; + default: break; } } @@ -198,12 +199,13 @@ void ScreenPrompt::End( bool bCancelled ) { switch( m_Answer ) { - case ANSWER_YES: - m_smSendOnPop = SM_Success; - break; - case ANSWER_NO: - m_smSendOnPop = SM_Failure; - break; + case ANSWER_YES: + m_smSendOnPop = SM_Success; + break; + case ANSWER_NO: + m_smSendOnPop = SM_Failure; + break; + default: break; } if( bCancelled ) @@ -218,14 +220,15 @@ void ScreenPrompt::End( bool bCancelled ) switch( m_Answer ) { - case ANSWER_YES: - if( g_pOnYes ) - g_pOnYes(g_pCallbackData); - break; - case ANSWER_NO: - if( g_pOnNo ) - g_pOnNo(g_pCallbackData); - break; + case ANSWER_YES: + if( g_pOnYes ) + g_pOnYes(g_pCallbackData); + break; + case ANSWER_NO: + if( g_pOnNo ) + g_pOnNo(g_pCallbackData); + break; + default: break; } s_LastAnswer = bCancelled ? ANSWER_CANCEL : m_Answer; diff --git a/src/ScreenRanking.cpp b/src/ScreenRanking.cpp index b3df65d662..af57adc86e 100644 --- a/src/ScreenRanking.cpp +++ b/src/ScreenRanking.cpp @@ -212,14 +212,15 @@ float ScreenRanking::SetPage( const PageToShow &pts ) bool bShowTime = false; switch( RANKING_TYPE ) { - case RankingType_Category: - bShowScores = true; - break; - case RankingType_SpecificTrail: - bShowScores = !pts.pCourse->IsOni(); - bShowPoints = pts.pCourse->IsOni(); - bShowTime = pts.pCourse->IsOni(); - break; + case RankingType_Category: + bShowScores = true; + break; + case RankingType_SpecificTrail: + bShowScores = !pts.pCourse->IsOni(); + bShowPoints = pts.pCourse->IsOni(); + bShowTime = pts.pCourse->IsOni(); + break; + default: break; } for( int l=0; l apCharacters; - CHARMAN->GetCharacters( apCharacters ); - m_iSelectedCharacter[pnAffected] += deltaValue; - wrap( m_iSelectedCharacter[pnAffected], apCharacters.size() ); - AfterValueChange(pn); - m_soundChange.Play(); - break; + case CHOOSING_CPU_CHARACTER: + case CHOOSING_HUMAN_CHARACTER: + { + vector apCharacters; + CHARMAN->GetCharacters( apCharacters ); + m_iSelectedCharacter[pnAffected] += deltaValue; + wrap( m_iSelectedCharacter[pnAffected], apCharacters.size() ); + AfterValueChange(pn); + m_soundChange.Play(); + break; + } + default: break; } } @@ -332,12 +337,13 @@ void ScreenSelectCharacter::MakeSelection( PlayerNumber pn ) BeforeRowChange(pn); switch( m_SelectionRow[pn] ) { - case CHOOSING_HUMAN_CHARACTER: - m_SelectionRow[pn] = GAMESTATE->AnyPlayersAreCpu() ? CHOOSING_CPU_CHARACTER : FINISHED_CHOOSING; - break; - case CHOOSING_CPU_CHARACTER: - m_SelectionRow[pn] = FINISHED_CHOOSING; - break; + case CHOOSING_HUMAN_CHARACTER: + m_SelectionRow[pn] = GAMESTATE->AnyPlayersAreCpu() ? CHOOSING_CPU_CHARACTER : FINISHED_CHOOSING; + break; + case CHOOSING_CPU_CHARACTER: + m_SelectionRow[pn] = FINISHED_CHOOSING; + break; + default: break; } AfterRowChange(pn); AfterValueChange(pn); diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp index 4251ae73ab..dbf4882317 100644 --- a/src/ScreenSelectMusic.cpp +++ b/src/ScreenSelectMusic.cpp @@ -528,21 +528,22 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) { switch( input.MenuI ) { - case GAME_BUTTON_LEFT: - ChangeSteps( input.pn, -1 ); - m_bAcceptSelectRelease[input.pn] = false; - break; - case GAME_BUTTON_RIGHT: - ChangeSteps( input.pn, +1 ); - m_bAcceptSelectRelease[input.pn] = false; - break; - case GAME_BUTTON_START: - m_bAcceptSelectRelease[input.pn] = false; - if( MODE_MENU_AVAILABLE ) - m_MusicWheel.NextSort(); - else - m_soundLocked.Play(); - break; + case GAME_BUTTON_LEFT: + ChangeSteps( input.pn, -1 ); + m_bAcceptSelectRelease[input.pn] = false; + break; + case GAME_BUTTON_RIGHT: + ChangeSteps( input.pn, +1 ); + m_bAcceptSelectRelease[input.pn] = false; + break; + case GAME_BUTTON_START: + m_bAcceptSelectRelease[input.pn] = false; + if( MODE_MENU_AVAILABLE ) + m_MusicWheel.NextSort(); + else + m_soundLocked.Play(); + break; + default: break; } } else if( input.type == IET_FIRST_PRESS && input.MenuI != GAME_BUTTON_SELECT ) diff --git a/src/ScreenSyncOverlay.cpp b/src/ScreenSyncOverlay.cpp index a0d9f6c6a8..af5b52cf44 100644 --- a/src/ScreenSyncOverlay.cpp +++ b/src/ScreenSyncOverlay.cpp @@ -212,12 +212,16 @@ bool ScreenSyncOverlay::OverlayInput( const InputEventPlus &input ) } switch( input.type ) { - case IET_RELEASE: fDelta *= 0; break; - case IET_REPEAT: - if( INPUTFILTER->GetSecsHeld(input.DeviceI) < 1.0f ) - fDelta *= 0; - else - fDelta *= 10; + case IET_RELEASE: fDelta *= 0; break; + case IET_REPEAT: + { + if( INPUTFILTER->GetSecsHeld(input.DeviceI) < 1.0f ) + fDelta *= 0; + else + fDelta *= 10; + break; + } + default: break; } if( GAMESTATE->m_pCurSong != NULL ) { @@ -237,31 +241,39 @@ bool ScreenSyncOverlay::OverlayInput( const InputEventPlus &input ) } switch( input.type ) { - case IET_RELEASE: fDelta *= 0; break; - case IET_REPEAT: - if( INPUTFILTER->GetSecsHeld(input.DeviceI) < 1.0f ) - fDelta *= 0; - else - fDelta *= 10; + case IET_RELEASE: fDelta *= 0; break; + case IET_REPEAT: + { + if( INPUTFILTER->GetSecsHeld(input.DeviceI) < 1.0f ) + fDelta *= 0; + else + fDelta *= 10; + } + default: break; } switch( a ) { - case ChangeGlobalOffset: + case ChangeGlobalOffset: + { PREFSMAN->m_fGlobalOffsetSeconds.Set( PREFSMAN->m_fGlobalOffsetSeconds + fDelta ); break; - - case ChangeSongOffset: - if( GAMESTATE->m_pCurSong != NULL ) - { - GAMESTATE->m_pCurSong->m_SongTiming.m_fBeat0OffsetInSeconds += fDelta; - const vector& vpSteps = GAMESTATE->m_pCurSong->GetAllSteps(); - FOREACH( Steps*, const_cast&>(vpSteps), s ) - { - (*s)->m_Timing.m_fBeat0OffsetInSeconds += fDelta; - } } - break; + + case ChangeSongOffset: + { + if( GAMESTATE->m_pCurSong != NULL ) + { + GAMESTATE->m_pCurSong->m_SongTiming.m_fBeat0OffsetInSeconds += fDelta; + const vector& vpSteps = GAMESTATE->m_pCurSong->GetAllSteps(); + FOREACH( Steps*, const_cast&>(vpSteps), s ) + { + (*s)->m_Timing.m_fBeat0OffsetInSeconds += fDelta; + } + } + break; + } + default: break; } } break; diff --git a/src/ScreenTestInput.cpp b/src/ScreenTestInput.cpp index cabf9849ff..d0390babb1 100644 --- a/src/ScreenTestInput.cpp +++ b/src/ScreenTestInput.cpp @@ -95,14 +95,19 @@ void ScreenTestInput::Input( const InputEventPlus &input ) RString sMessage = input.DeviceI.ToString(); switch( input.type ) { - case IET_FIRST_PRESS: - case IET_RELEASE: - switch( input.type ) + case IET_FIRST_PRESS: + case IET_RELEASE: { - case IET_FIRST_PRESS: sMessage += "Pressed"; break; - case IET_RELEASE: sMessage += "Released"; break; + switch( input.type ) + { + case IET_FIRST_PRESS: sMessage += "Pressed"; break; + case IET_RELEASE: sMessage += "Released"; break; + default: break; + } + MESSAGEMAN->Broadcast( sMessage ); + break; } - MESSAGEMAN->Broadcast( sMessage ); + default: break; } Screen::Input( input ); // default handler diff --git a/src/ScreenTestLights.cpp b/src/ScreenTestLights.cpp index 87b0b0eb35..e83a11f6a5 100644 --- a/src/ScreenTestLights.cpp +++ b/src/ScreenTestLights.cpp @@ -59,12 +59,13 @@ void ScreenTestLights::Update( float fDeltaTime ) switch( LIGHTSMAN->GetLightsMode() ) { - case LIGHTSMODE_TEST_AUTO_CYCLE: - s += AUTO_CYCLE.GetValue()+"\n"; - break; - case LIGHTSMODE_TEST_MANUAL_CYCLE: - s += MANUAL_CYCLE.GetValue()+"\n"; - break; + case LIGHTSMODE_TEST_AUTO_CYCLE: + s += AUTO_CYCLE.GetValue()+"\n"; + break; + case LIGHTSMODE_TEST_MANUAL_CYCLE: + s += MANUAL_CYCLE.GetValue()+"\n"; + break; + default: break; } if( cl == CabinetLight_Invalid ) diff --git a/src/ScreenTestSound.cpp b/src/ScreenTestSound.cpp index 813f5cf6fa..9883f9fbec 100644 --- a/src/ScreenTestSound.cpp +++ b/src/ScreenTestSound.cpp @@ -137,68 +137,69 @@ void ScreenTestSound::Input( const InputEventPlus &input ) case DEVICE_KEYBOARD: switch( input.DeviceI.button ) { - case '1': - case '2': - case '3': - case '4': - case '5': selected = input.DeviceI.button - '0'-1; break; - case 'p': - { - /* We want to be able to read the position of copied sounds; if we let - * RageSound copy itself, then the copy will be owned by RageSoundManager - * and we won't be allowed to touch it. Copy it ourself. */ - RageSound *pCopy = new RageSound( s[selected].s ); - m_sSoundCopies[selected].push_back( pCopy ); - pCopy->Play(); - break; - } - case 's': - for( int i = 0; i < nsounds; ++i ) + case '1': + case '2': + case '3': + case '4': + case '5': selected = input.DeviceI.button - '0'-1; break; + case 'p': { - /* Stop copied sounds. */ - vector &snds = m_sSoundCopies[i]; - for( unsigned j = 0; j < snds.size(); ++j ) - snds[j]->Stop(); + /* We want to be able to read the position of copied sounds; if we let + * RageSound copy itself, then the copy will be owned by RageSoundManager + * and we won't be allowed to touch it. Copy it ourself. */ + RageSound *pCopy = new RageSound( s[selected].s ); + m_sSoundCopies[selected].push_back( pCopy ); + pCopy->Play(); + break; } - break; - case 'l': + case 's': + { + for( int i = 0; i < nsounds; ++i ) + { + /* Stop copied sounds. */ + vector &snds = m_sSoundCopies[i]; + for( unsigned j = 0; j < snds.size(); ++j ) + snds[j]->Stop(); + } + break; + } + case 'l': { RageSoundParams p = s[selected].s.GetParams(); p.StopMode = RageSoundParams::M_LOOP; s[selected].s.SetParams( p ); + break; } - - break; - case 'a': + case 'a': { RageSoundParams p = s[selected].s.GetParams(); p.StopMode = RageSoundParams::M_STOP; s[selected].s.SetParams( p ); + break; } - break; - case 'c': + case 'c': { RageSoundParams p = s[selected].s.GetParams(); p.StopMode = RageSoundParams::M_CONTINUE; s[selected].s.SetParams( p ); + break; } - break; - -/* case KEY_LEFT: - obj.SetX(obj.GetX() - 10); - break; - case KEY_RIGHT: - obj.SetX(obj.GetX() + 10); - break; - case KEY_UP: - obj.SetY(obj.GetY() - 10); - break; - case KEY_DOWN: - obj.SetY(obj.GetY() + 10); - break; +/* case KEY_LEFT: + obj.SetX(obj.GetX() - 10); + break; + case KEY_RIGHT: + obj.SetX(obj.GetX() + 10); + break; + case KEY_UP: + obj.SetY(obj.GetY() - 10); + break; + case KEY_DOWN: + obj.SetY(obj.GetY() + 10); + break; */ + default: break; } - + default: break; } } diff --git a/src/ScreenTextEntry.cpp b/src/ScreenTextEntry.cpp index ee5fa14164..620a0f7bcc 100644 --- a/src/ScreenTextEntry.cpp +++ b/src/ScreenTextEntry.cpp @@ -200,10 +200,11 @@ void ScreenTextEntry::Input( const InputEventPlus &input ) { switch( input.type ) { - case IET_FIRST_PRESS: - case IET_REPEAT: - BackspaceInAnswer(); - break; + case IET_FIRST_PRESS: + case IET_REPEAT: + BackspaceInAnswer(); + default: + break; } } else if( input.type == IET_FIRST_PRESS ) diff --git a/src/SongManager.cpp b/src/SongManager.cpp index 9550ae3c75..8fda712dff 100644 --- a/src/SongManager.cpp +++ b/src/SongManager.cpp @@ -497,7 +497,7 @@ RageColor SongManager::GetSongColor( const Song* pSong ) const int i = m_vPreferredSongSort.size(); return SONG_GROUP_COLOR.GetValue( i%NUM_SONG_GROUP_COLORS ); } - else + else // TODO: Have a better fallback plan with colors? { /* XXX: Previously, this matched all notes, which set a song to "extra" * if it had any 10-foot steps at all, even edits or doubles. @@ -516,9 +516,10 @@ RageColor SongManager::GetSongColor( const Song* pSong ) const const Steps* pSteps = vpSteps[i]; switch( pSteps->GetDifficulty() ) { - case Difficulty_Challenge: - case Difficulty_Edit: - continue; + case Difficulty_Challenge: + case Difficulty_Edit: + continue; + default: break; } //if(pSteps->m_StepsType != st) @@ -527,7 +528,7 @@ RageColor SongManager::GetSongColor( const Song* pSong ) const if( pSteps->GetMeter() >= EXTRA_COLOR_METER ) return (RageColor)EXTRA_COLOR; } - if( pSong->m_sMainTitle == "DVNO") + if( pSong->m_sMainTitle == "DVNO") // XXX: What IS this? An easter egg? -Wolfman2000 { return RageColor(1.0f,0.8f,0.0f,1.0f); } diff --git a/src/StageStats.cpp b/src/StageStats.cpp index d30e7bfe9f..28ac23f8b7 100644 --- a/src/StageStats.cpp +++ b/src/StageStats.cpp @@ -166,9 +166,10 @@ void StageStats::FinalizeScores( bool bSummary ) { switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - return; // don't save scores in battle + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + return; // don't save scores in battle + default: break; } if( PREFSMAN->m_sTestInitialScreen.Get() != "" ) diff --git a/src/StepMania.cpp b/src/StepMania.cpp index 6d1c75ea19..b5622e36b4 100644 --- a/src/StepMania.cpp +++ b/src/StepMania.cpp @@ -1273,28 +1273,29 @@ bool HandleGlobalInputs( const InputEventPlus &input ) switch( input.MenuI ) { - case GAME_BUTTON_OPERATOR: - /* Global operator key, to get quick access to the options menu. Don't - * do this if we're on a "system menu", which includes the editor - * (to prevent quitting without storing changes). */ - if( SCREENMAN->AllowOperatorMenuButton() ) - { - SCREENMAN->SystemMessage( SERVICE_SWITCH_PRESSED ); - SCREENMAN->PopAllScreens(); - GAMESTATE->Reset(); - SCREENMAN->SetNewScreen( CommonMetrics::OPERATOR_MENU_SCREEN ); - } - return true; + case GAME_BUTTON_OPERATOR: + /* Global operator key, to get quick access to the options menu. Don't + * do this if we're on a "system menu", which includes the editor + * (to prevent quitting without storing changes). */ + if( SCREENMAN->AllowOperatorMenuButton() ) + { + SCREENMAN->SystemMessage( SERVICE_SWITCH_PRESSED ); + SCREENMAN->PopAllScreens(); + GAMESTATE->Reset(); + SCREENMAN->SetNewScreen( CommonMetrics::OPERATOR_MENU_SCREEN ); + } + return true; - case GAME_BUTTON_COIN: - // Handle a coin insertion. - if( GAMESTATE->IsEditing() ) // no coins while editing - { - LOG->Trace( "Ignored coin insertion (editing)" ); - break; - } - StepMania::InsertCoin(); - return false; // Attract needs to know because it goes to TitleMenu on > 1 credit + case GAME_BUTTON_COIN: + // Handle a coin insertion. + if( GAMESTATE->IsEditing() ) // no coins while editing + { + LOG->Trace( "Ignored coin insertion (editing)" ); + break; + } + StepMania::InsertCoin(); + return false; // Attract needs to know because it goes to TitleMenu on > 1 credit + default: break; } /* Re-added for StepMania 3.9 theming veterans, plus it's just faster than diff --git a/src/UnlockManager.cpp b/src/UnlockManager.cpp index b3d045d649..e8075bbb2c 100644 --- a/src/UnlockManager.cpp +++ b/src/UnlockManager.cpp @@ -268,18 +268,20 @@ static float GetArcadePoints( const Profile *pProfile ) { switch(pm) { - case PLAY_MODE_NONSTOP: - case PLAY_MODE_ONI: - case PLAY_MODE_ENDLESS: - fAP += pProfile->m_iNumSongsPlayedByPlayMode[pm]; - break; + case PLAY_MODE_NONSTOP: + case PLAY_MODE_ONI: + case PLAY_MODE_ENDLESS: + { + fAP += pProfile->m_iNumSongsPlayedByPlayMode[pm]; + } + default: break; } - } return fAP; } +// TODO: Make this more flexible for games with many grade tiers. Lua-ize it? -Wolfman2000 static float GetSongPoints( const Profile *pProfile ) { float fSP = 0; @@ -297,6 +299,7 @@ static float GetSongPoints( const Profile *pProfile ) case Grade_Tier07:/*D*/ fSP += 1* pProfile->m_iNumStagesPassedByGrade[g]; break; case Grade_Failed: case Grade_NoData: + default: ; // no points break; } @@ -306,11 +309,13 @@ static float GetSongPoints( const Profile *pProfile ) { switch(pm) { - case PLAY_MODE_NONSTOP: - case PLAY_MODE_ONI: - case PLAY_MODE_ENDLESS: + case PLAY_MODE_NONSTOP: + case PLAY_MODE_ONI: + case PLAY_MODE_ENDLESS: + { fSP += pProfile->m_iNumSongsPlayedByPlayMode[pm]; - break; + } + default: break; } } From 6f5ebfddc112ca3b71f8fc2ba24fb90fbe1c61e2 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 11:23:49 -0400 Subject: [PATCH 052/106] [Xcode4] don't need these it seems. --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 9c07554a6f..1b97027d6c 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7845,12 +7845,10 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; - SDKROOT_i386 = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = NO; STRIP_STYLE = "non-global"; @@ -8281,12 +8279,10 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; - SDKROOT_i386 = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; @@ -8635,12 +8631,10 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; - SDKROOT_i386 = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; From 5eff51171f73175b56d993f28292eae12f4a03c6 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 13:15:49 -0400 Subject: [PATCH 053/106] [Xcode4] May as well put in better formatting. --- src/NoteTypes.h | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/NoteTypes.h b/src/NoteTypes.h index 795eef7131..7339ec1292 100644 --- a/src/NoteTypes.h +++ b/src/NoteTypes.h @@ -217,16 +217,26 @@ inline const RString TapNoteTypeToString( TapNote::Type tn ) { switch( tn ) { - case TapNote::empty: return RString("empty"); - case TapNote::tap: return RString("tap"); - case TapNote::hold_head: return RString("hold_head"); - case TapNote::hold_tail: return RString("hold_tail"); - case TapNote::mine: return RString("mine"); - case TapNote::lift: return RString("lift"); - case TapNote::attack: return RString("attack"); - case TapNote::autoKeysound: return RString("autoKeysound"); - case TapNote::fake: return RString("fake"); - default: return RString(); + case TapNote::empty: + return RString("empty"); + case TapNote::tap: + return RString("tap"); + case TapNote::hold_head: + return RString("hold_head"); + case TapNote::hold_tail: + return RString("hold_tail"); + case TapNote::mine: + return RString("mine"); + case TapNote::lift: + return RString("lift"); + case TapNote::attack: + return RString("attack"); + case TapNote::autoKeysound: + return RString("autoKeysound"); + case TapNote::fake: + return RString("fake"); + default: + return RString(""); } } From bf79c788d41b4f8096fecf8fd7c617e6b3263537 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 13:20:52 -0400 Subject: [PATCH 054/106] [Xcode4] Fix linking. --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 1b97027d6c..f828e54f60 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7790,6 +7790,10 @@ "-fno-exceptions", "-falign-loops=16", ); + OTHER_LDFLAGS = ( + "-read_only_relocs", + suppress, + ); PRODUCT_NAME = StepMania; SYMROOT = "$(SRCROOT)/.."; WRAPPER_EXTENSION = app; @@ -8331,6 +8335,10 @@ "-fno-exceptions", "-falign-loops=16", ); + OTHER_LDFLAGS = ( + "-read_only_relocs", + suppress, + ); PRODUCT_NAME = StepMania; STRIP_INSTALLED_PRODUCT = NO; SYMROOT = "$(SRCROOT)/.."; @@ -8578,6 +8586,10 @@ "-fno-exceptions", "-falign-loops=16", ); + OTHER_LDFLAGS = ( + "-read_only_relocs", + suppress, + ); PRODUCT_NAME = StepMania; SYMROOT = "$(SRCROOT)/.."; WRAPPER_EXTENSION = app; From d53d9156ad99d843b5aaa6deddab42396ed59dc7 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Wed, 20 Jul 2011 12:38:02 -0500 Subject: [PATCH 055/106] go away, warnings --- src/arch/LoadingWindow/LoadingWindow_Null.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/arch/LoadingWindow/LoadingWindow_Null.h b/src/arch/LoadingWindow/LoadingWindow_Null.h index 4b470f80b2..6d8f48b664 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Null.h +++ b/src/arch/LoadingWindow/LoadingWindow_Null.h @@ -7,7 +7,7 @@ class LoadingWindow_Null: public LoadingWindow { public: void SetText( RString str ) { } - void SetSplash( RString str ) { } + void SetSplash( const RString str ) { } }; #define USE_LOADING_WINDOW_NULL From c039975cd4dc7760143ac7f4d4036d7b671ee5bf Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 13:42:49 -0400 Subject: [PATCH 056/106] ...why did we have this file? Remove it. --- Themes/_fallback/Languages/en.ini_ | 407 ----------------------------- 1 file changed, 407 deletions(-) delete mode 100644 Themes/_fallback/Languages/en.ini_ diff --git a/Themes/_fallback/Languages/en.ini_ b/Themes/_fallback/Languages/en.ini_ deleted file mode 100644 index 8a64fd7dcc..0000000000 --- a/Themes/_fallback/Languages/en.ini_ +++ /dev/null @@ -1,407 +0,0 @@ -# 01 # Global -# 02 # System -# 03 # Attract -# 04 # Base -# 05 # -# 06 # - -# 01 # -[ScreenDebugOverlay] -Debug Menu=Debug Menu - -Multitexture=Multitexture -Assist=Assist -Visual Delay Up=Visual Delay Up -Visual Delay Down=Visual Delay Down -Rendering Stats=Rendering Stats -Volume Up=Volume Up -Volume Down=Volume Down -Reload=Reload -Reload Theme and Textures=Reload Theme and Textures -Autosync=Autosync -Halt=Halt -Slow=Slow -Uptime=Uptime -Machine=Machine -Profile=Profile -CoinMode=CoinMode -Show Masks=Show Masks -Vsync=Vertical Sync -Write Preferences=Write Preferences -Monkey Input=Hampsterblade Mode -Send Off To Screen=Send Off To Screen -Send On To Screen=Send On To Screen -Write Profiles=Write Profiles -Lights Debug=Lights Debug -Fill Profile Stats=Fill Profile Stats -off=Off -Pull Back Camera=Pull Back Camera -Force Crash=Force Crash -Song=Song -Restart=Restart -on=On -Tempo=Tempo -Screen Test Mode=Screen Test Mode -AutoPlay=AutoPlay -Clear Profile Stats=Clear Profile Stats -Flush Log=Flush Log -%s in gameplay=%s in gameplay -Send Notes Ended=Send Notes Ended -or=or -CPU=CPU -Menu Timer=Menu Timer -# 02 # -[ScreenBookkeeping] -Coin Data by Day of Week, All-Time=Coin Data by Day of Week, All-Time -Coin Data of Last %d Weeks=Coin Data of Last %d Weeks -Coin Data of Last %d Days=Coin Data of Last %d Days -Coin Data by Hour of Day, All-Time=Coin Data by Hour of Day, All-Time -All-time Coin Total:=All-time Coin Total: -Total Song Plays: %d=Total Song Plays: %d -# 03 # - -# 04 # -[ScreenEdit] -%s notes=%s notes -Can't undo - no undo data.=Can't undo - no undo data. -Do you want to revert from disk?=Do you want to revert from disk? -Do you want to revert to your last save?=Do you want to revert to your last save? -Do you want to save changes before exiting?=Do you want to save changes before exiting? -Enter a new BPM value.=Enter a new BPM value. -Enter a new Stop value.=Enter a new Stop value. -Enter a new artist transliteration.=Enter a new artist transliteration. -Enter a new artist.=Enter a new artist. -Enter a new credit.=Enter a new credit. -Enter a new description.=Enter a new description. -Enter a new last beat hint.=Enter a new last beat hint. -Enter a new main title transliteration.=Enter a new main title transliteration. -Enter a new main title.=Enter a new main title. -Enter a new sub title transliteration.=Enter a new sub title transliteration. -Enter a new sub title.=Enter a new sub title. -More than %d notes per measure is not allowed. This change has been reverted.=More than %d notes per measure is not allowed. This change has been reverted. -No backgrounds available=No backgrounds available -EditHelpText=Up/Down:\n change beat\nLeft/Right:\n change snap\nNumber keys:\n add/remove\n tap note\nCreate hold note:\n Hold a number\n while moving\n Up or Down\nSpace bar:\n Set area\n marker\nEnter:\n Area Menu\nEscape:\n Main Menu\nF1:\n Show help\n -PlayRecordHelpText=Press START to end -Save successful.=Save successful. -Saved as SM and DWI.=Saved as SM and DWI. -Saved as SM.=Saved as SM. -Switched to=Switched to -The change has been reverted.=The change has been reverted. -This change creates more than %d notes in a measure.=This change creates more than %d notes in a measure. -This change creates notes past the end of the music and is not allowed.=This change creates notes past the end of the music and is not allowed. -This will destroy all unsaved changes.=This will destroy all unsaved changes. -Undo=Undo - -Current beat=Current beat -Current second=Current second -Snap to=Snap to -Selection beat=Selection beat -Difficulty=Difficulty -Description=Description -Main title=Main title -Subtitle=Subtitle -Tap Steps=Tap Steps -Jumps=Jumps -Hands=Hands -Holds=Holds -Mines=Mines -Rolls=Rolls -Beat 0 offset=Beat 0 offset -Preview Start=Preview Start -Preview Length=Preview Length -[ScreenEditMenu] -Continue with delete?=Continue with delete? -Enter a description for this edit.=Enter a description for this edit. -ExplanationAction=In this mode, you can edit existing notes patterns, create note patterns, or synchronize notes with the music. -ExplanationGroup=In this mode, you can edit existing notes patterns, create note patterns, or synchronize notes with the music. -ExplanationSong=In this mode, you can edit existing notes patterns, create note patterns, or synchronize notes with the music. -ExplanationSourceSteps=In this mode, you can edit existing notes patterns, create note patterns, or synchronize notes with the music. -ExplanationSourceStepsType=In this mode, you can edit existing notes patterns, create note patterns, or synchronize notes with the music. -ExplanationSteps=In this mode, you can edit existing notes patterns, create note patterns, or synchronize notes with the music. -ExplanationStepsType=In this mode, you can edit existing notes patterns, create note patterns, or synchronize notes with the music. -Profile name cannot be blank.=Profile name can not be blank. -The name you chose conflicts with another profile. Please use a different name.=The name you chose conflicts with another profile. Please use a different name. -These steps are produced by autogen. You do not need to delete them.=These steps are produced by autogen. You do not need to delete them. -These steps will be lost permanently.=These steps will be lost permanently. -This song is missing a music file and cannot be edited.=This song is missing a music file and can not be edited. -The song directory is read-only and cannot be edited.=The song directory is read-only and cannot be edited. -Blank=Blank -[ScreenMapControllers] -InvalidButton=That key can not be mapped. -%s slots=%s slots -[ScreenNetRoom] -Enter a description for the room:=Enter a description for the room: -Enter a password for the room (blank, no password):=Enter a password for the room (blank, no password): -Enter Room's Password:=Enter Room's Password: -[ScreenNetworkOptions] -Disconnected from server.=Disconnected from server. -Enter a network address.=Enter a network address. -Server failed: %s Code:%d=Server failed: %s Code:%d -Use 127.0.0.1 to connect to yourself.=Use 127.0.0.1 to connect to yourself. -Connect=Connect -Disconnect=Disconnect -ScoreOn=On -ScoreOff=Off -[ScreenOptionsCourseOverview] -Course saved successfully.=Course saved successfully. -Error saving course.=Error saving course. -Enter a name for the course.=Enter a name for the course. -Error saving workout.=Error saving workout. -Workout saved successfully.=Workout saved successfully. -Enter a name for the workout.=Enter a name for the workout. -[ScreenOptionsEditCourse] --Empty-=-Empty- -Song=Song -Steps=Steps -minutes=minutes -You must enable at least %d songs.=You must enable at least %d songs. -[ScreenOptionsManageCourses] -Error renaming file.=Error renameing file. -Continue with delete?=Continue with delete? -Enter a name for the course.=Enter a name for the course. -This course will be lost permanently.=This course will be lost permanently. -You have %d, the maximum number allowed.=You have %d, the maximum number allowed. -You must delete an existing before creating a new.=You must delete an existing before creating a new. -Error deleting the file '%s'.=Error deleting the file "%s". -[ScreenOptionsManageEditSteps] -Continue with delete?=Continue with delete? -Enter a name for these steps.=Enter a name for these steps. -These steps will be lost permanently.=These steps will be lost permanently. -You have %d step edits, the maximum number allowed.=You have %d step edits, the maximum number allowed. -You must delete an existing steps edit before creating a new steps edit.=You must delete an existing steps edit before creating a new steps edit. -[ScreenOptionsManageProfiles] -Are you sure you want to clear all data in the profile '%s'?=Are you sure you want to clear all data in the profile &oq;%s&cq;? -Are you sure you want to delete the profile '%s'?=Are you sure you want to delete the profile &oq;%s&cq;? -Enter a name for the profile.=Enter a -NewProfileDefaultName=New -[ScreenOptionsMasterPrefs] -Off=Off -[ScreenOptionsMemoryCard] -Error mounting card: %s=Error mounting card: %s -[ScreenPackages] -Download cancelled.=Download cancelled. -Enter URL=Enter URL -[ScreenSaveSync] -Choosing NO will discard your changes.=Choosing NO will discard your changes. -Would you like to save these changes?=Would you like to save these changes? -You have changed the timing of=You have changed the timing of -[ScreenServiceAction] -%d added=%d added -%d copied=%d copied -%d overwritten=%d overwritten -%d deleted=%d deleted -%d edits cleared, %d errors.=%d edits cleared, %d errors. -%d failed=%d failed -%d ignored=%d ignored -Bookkeeping data cleared.=Bookkeeping data cleared. -Copied from P%d card:=Copied from P%d card: -Copied to P%d card:=Copied to P%d card: -Edits not cleared - No memory cards ready.=Edits not cleared - No memory cards ready. -Edits not copied - No memory cards ready.=Edits not copied - No memory cards ready. -Error saving machine stats to P%d card.=Error saving machine stats to P%d card. -Machine stats cleared.=Machine stats cleared. -Machine stats loaded from P%d card.=Machine stats loaded from P%d card. -Machine stats saved to P%d card.=Machine stats saved to P%d card. -Preferences reset.=Preferences reset. -Stats not loaded - No memory cards ready.=Stats not loaded - No memory cards ready. -Stats not saved - No memory cards ready.=Stats not saved - No memory cards ready. -The profile on P%d card contains corrupt or tampered data.=The profile on P%d card contains corrupt or tampered data. -There is no machine profile on P%d card.=There is no machine profile on P%d card. -[ScreenSMOnlineLogin] -Each player needs a unique Profile.=Each player needs a unique Profile. -Enter your password.=Enter your password. -No Styles are selectable.=No Styles are selectable. -You are logging on as:=You are logging on as: -You must define a Profile.=You must define a Profile. -Depending on the server you're connected to, you may have to register for an account on their website.=Depending on the server you're connected to, you may have to register for an account on their website. -[ScreenSyncOverlay] -AutoPlay=AutoPlay -AutoPlayCPU=AutoPlayCPU -AutoSync Machine=AutoSync Machine -AutoSync Song=AutoSync Song -AutoSync Tempo=AutoSync Tempo -Can't sync while playing a course.=Can't sync while playing a course. -Sync changes reverted.=Sync changes reverted. -Revert sync changes=Revert sync changes -Current BPM - smaller/larger=Current BPM - smaller/larger -Song offset - notes earlier/later=Song offset - notes earlier/later -Machine offset - notes earlier/later=Machine offset - notes earlier/later -(hold Alt for smaller increment)=(hold Alt for smaller increment) -Old offset=Old offset -New offset=New offset -Collecting sample=Collecting sample -Standard deviation=Standard deviation -[ScreenSystemLayer] -CreditsCardChanged=CARD SWITCHED -CreditsCardChecking=CARD CHECK -CreditsCardMountFailed=CARD MOUNT ERROR -CreditsCardNoName=NoName -CreditsCardReady=READY -CreditsCardRemoved=CARD GONE -CreditsCardTestFailed=CARD WRITE ERROR -CreditsCardTooLate=CARD TOO LATE -CreditsCredits=CREDIT(S) -CreditsMax=(MAX) -CreditsFreePlay=FREE PLAY -CreditsInsertCard=INSERT CARD -CreditsLoadFailed=SIGNATURE FAILED -CreditsLoadedFromLastGoodAppend= (backup) -CreditsNotPresent=NOT PRESENT -CreditsPressStart=PRESS START -[ScreenTestFonts] -# W is annoying: -Text1=WWWWWWWWWWWW -# Realistic excerpt: -Text2=The argument goes something like this: &oq;I refuse to prove that I exist,&cq; says God, &oq;for proof denies faith, and without faith I am nothing.&cq;::::&oq;But,&cq; says Man, &oq;The Babel fish is a dead giveaway, isn't it? It could not have evolved by chance. It proves you exist, and so therefore, by your own arguments, you don't. QED.&cq;::::&oq;Oh dear,&cq; says God, &oq;I hadn't thought of that,&cq; and promptly vanished in a puff of logic. -# Numbers test: -Text3=01234567890 ::100.00% 12345% 9:00 50/100 -# General symbol test, and test alignment against another font. -Text4=$50% (Test) "test's" &oq;test's&cq;, #1! 1+2-3*4/5.6::3:00 a; b; 5<6 6>5 2^3=8 Why? test@example.com::[Foo] {bar} Press &START; 3|4 &oq;1_2_3&cq; -Text5= -[ScreenTestInput] -Controller=Controller -not mapped=not mapped -secondary=secondary -[ScreenTestLights] -Auto Cycle=Auto Cycle -Manual Cycle=Manual Cycle -cabinet light=cabinet light -controller light=controller light -[ScreenTextEntry] -Backspace=Backsp -Cancel=Cancel -Done=Done -HeaderText= -Space=Space -"%s" is an invalid floating point value.="%s" is an invalid floating point value. -[ScreenTitleMenu] -%d songs in %d groups=%d songs in %d groups -%d courses in %d groups=%d courses in %d groups -%d unlocks=%d unlocks -Gametype:=Gametype: -Difficulty:=Difficulty: -Announcer=Announcer -Play Online=Network Play -Edit/Share=Edit/Share -Exit=Exit -Game Start=Game Start -Jukebox=Jukebox -Select Game=Select Game -Theme=Theme -Credits=Credits -Options=Options -[AdjustSync] -%s BPM from %.3f BPM to %.3f BPM.=%s BPM from %.3f BPM to %.3f BPM. -Autosync Machine=Autosync Machine -Autosync Song=Autosync Song -Autosync Tempo=Autosync Tempo -Autosync: Correction NOT applied. Deviation too high.=Autosync: Correction NOT applied. Deviation too high. -Autosync: Correction applied.=Autosync: Correction applied. -Global Offset from %+.3f to %+.3f (notes %s)=Global Offset from %+.3f to %+.3f (notes %s) -Song offset from %+.3f to %+.3f (notes %s)=Song offset from %+.3f to %+.3f (notes %s) -The stop segment #%d changed from %+.3fs to %+.3fs (change of %+.3f).=The stop segment number #%d changed from %+.3fs to %+.3fs (change of %+.3f). -earlier=earlier -later=later -Average Error %.5fs=Average Error %.5fs -Etc.=Etc. -%d taps ignored.=%d taps ignored. -[Common] -WindowTitle=StepMania -StepMania=StepMania -[CourseUtil] -The course name cannot contain any of the following characters: %s=The course name cannot contain any of the following characters: %s -You must supply a name for your course.=You must supply a name for your course. -The name you chose conflicts with another course. Please use a different name.=The name you chose conflicts with another course. Please use a different name. -[GameCommand] -Could not launch web browser.=Could not launch web browser. -[NotesWriterSM] -Error renaming file. Destination file '%s' already exists.=Error renaming file. Destination file '%s' already exists. -Error writing file '%s'.=Error writing file '%s'. -[OptionRowHandler] -Off=Off -[RoomInfoDisplay] -Last Round Info:=Last Round Info: -Room Name:=Name: -Room Description:=Description: -Song Title:=Title: -Song Subtitle:=Subtitle: -Song Artist:=Artist: -Players=Players -[SongUtil] -You must supply a name for your new edit.=You must supply a name for your new edit. -The name you chose conflicts with another edit. Please use a different name.=The name you chose conflicts with another edit. Please use a different name. -The edit name cannot contain any of the following characters: %s=The edit name can not contain any of the following characters: %s -[Sort] -NotAvailable=N/A -Other=Other -[StepMania] -Announcer=Announcer -Couldn't open any loading windows.=Couldn't open any loading windows. -Fullscreen=Fullscreen -Initializing %s...=Initializing %s... -No video renderers attempted.=No video renderers attempted. -NoSmoothLines=NoSmoothLines -NoVsync=NoVsync -Please do not file this error as a bug! Use the web page below to troubleshoot this problem.=Please do not file this error as a bug! Use the web page below to troubleshoot this problem. -Service switch pressed=Service switch pressed -SmoothLines=SmoothLines -There was an error while initializing your video card.=There was an error while initializing your video card. -Unknown video renderer value: %s=Unknown video renderer value: %s -Video Driver: %s=Video Driver: %s -Vsync=Vsync -Windowed=Windowed -color=color -texture=texture -[DeviceButton] -Home=Home -End=End -Up=Up -Down=Down -Space=Space -Shift=Shift -Ctrl=Ctrl -Alt=Alt -Insert=Insert -Delete=Delete -PgUp=PgUp -PgDn=PgDn -Backslash=Backslash -[Arch] -Couldn't create a movie driver.=Couldn't create a movie driver. -Input Handlers cannot be empty.=Input Handlers can not be empty. -Movie Drivers cannot be empty.=Movie Drivers can not be empty. -Sound Drivers cannot be empty.=Sound Drivers can not be empty. -[LowLevelWindow_Win32] -OpenGL hardware acceleration is not available.=OpenGL hardware acceleration is not available. -[Dialog-Prompt] -Prompt=Prompt -OK=OK -&Don't display this message again=&Don't display this message again -Error=Error -[Dialog-Uninstall Old Packages] -Uninstall Old Packages=Uninstall Old Packages -&Yes=&Yes -&No=&No -Cancel=Cancel -The following packages are already installed. It is strongly recommended that they be deleted before installing this package.=The following packages are already installed. It is strongly recommended that they be deleted before installing this package. -Delete old packages?=Delete old packages? -[EditMenu] -Blank=Blank -[EditMenuRow] -Action=Action -Group=Group -Song=Song -SourceSteps=Fill Steps -SourceStepsType=Fill Type -Steps=Steps -StepsType=Type -[RoomWheel] -Enter room name=Enter room name -[RageDisplay_OGL] -Obtain an updated driver from your video card manufacturer.=Obtain an updated driver from your video card manufacturer. -GLDirect was detected. GLDirect is not compatible with this game and should be disabled.=GLDirect was detected. GLDirect is not compatible with this game and should be disabled. -[RageDisplay_D3D] -DirectX 8.1 or greater is not installed. You can download it from:=DirectX 8.1 or greater is not installed. You can download it from: -Your system is reporting that Direct3D hardware acceleration is not available. Please obtain an updated driver from your video card manufacturer.=Your system is reporting that Direct3D hardware acceleration is not available. Please obtain an updated driver from your video card manufacturer. -[RageDisplay] -SetVideoMode failed:=SetVideoMode failed: \ No newline at end of file From b581f12ad9d86dc6725856fad1dfab63f040e8e8 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 13:49:26 -0400 Subject: [PATCH 057/106] Polish translation by John Reactor. --- Themes/_fallback/Languages/pl.ini | 2377 +++++++++++++++++++++++++++++ Themes/default/Languages/pl.ini | 183 +++ 2 files changed, 2560 insertions(+) create mode 100755 Themes/_fallback/Languages/pl.ini create mode 100755 Themes/default/Languages/pl.ini diff --git a/Themes/_fallback/Languages/pl.ini b/Themes/_fallback/Languages/pl.ini new file mode 100755 index 0000000000..639574ad01 --- /dev/null +++ b/Themes/_fallback/Languages/pl.ini @@ -0,0 +1,2377 @@ +[Common] +WindowTitle=StepMania PL +StepMania=StepMania PL + +[Arch] +Couldn't create a movie driver.=Nie udaÅ‚o siÄ™ utworzyć sterownika filmów. +Input Handlers cannot be empty.=Handlery wejÅ›ciowe nie mogÄ… być puste. +Movie Drivers cannot be empty.=Sterowniki Filmów nie mogÄ… być puste. +Sound Drivers cannot be empty.=Sterowniki DźwiÄ™ku nie mogÄ… być puste. + +[ArchHooks_Unix] +Couldn't find 'Songs'=Nie udaÅ‚o siÄ™ znaleźć 'Songs' + +[CSMPackageInstallDlg] +Could not open file '%s'.=Nie udaÅ‚o siÄ™ otworzyć pliku '%s'. +Installing. Please wait...=Instalacja. ProszÄ™ czekać... +'%s' is not a valid zip archive.='%s' nie jest prawidÅ‚owym archiwum ZIP. +Error opening source file '%s': %s=Błąd przy otwarciu pliku źródÅ‚owego '%s': %s +Error opening destination file '%s': %s=Błąd przy otwieraniu pliku docelowego '%s': %s +Error copying file '%s': %s=Błąd podczas kopiowania pliku '%s': %s +No Installations found. Exiting.=Nie znaleziono instalatorów. Przerywam. +Package installed successfully!=Pakiet zainstalowano pomyÅ›lnie! + +[CSmpackageApp] +The file Stats.xml has not yet been created. It will be created once the game is run.=Plik Stats.xml nie byÅ‚ jeszcze tworzony. Zostanie utworzony po pierwszym uruchomieniu gry. +Failed to open '%s': %s=Nie udaÅ‚o siÄ™ otworzyć '%s': %s +The file '%s' does not exist. Aborting installation.=Plik '%s' nie istnieje. Przerywam instalacjÄ™. + +[CSmpackageExportDlg] +No items are checked.=Nie zaznaczono żadnej opcji. +Successfully exported package '%s' to your Desktop.Eksport pakietu '%s' na twój Pulpit zakoÅ„czony powodzeniem. +The following packages failed to export:=Tych pakietów nie udaÅ‚o siÄ™ wyeksportować: +The following packages were exported to your Desktop:=Te pakiety zostaÅ‚y wyeksportowane na twój Pulpit: + +[CatalogXml] +Saving %s ...=Zapis %s ... + +[CustomDifficulty] +Beginner=PoczÄ…tkujÄ…cy +Easy=Åatwy +Medium=Normalny +Hard=Trudny +Challenge=Ekspert +Edit=Zmodyfikowany +Couple=Duet +Routine=UkÅ‚ad +# +Freestyle=Freestyle +Crazy=SzaleÅ„stwo +Nightmare=Koszmar +HalfDouble=Half-Double + +[CourseDifficulty] +Beginner=PoczÄ…tkujÄ…cy +Challenge=Ekspert +Hard=Trudny +Easy=Åatwy +Edit=Zmodyfikowany +Medium=Normalny + +[CourseEntryType] +Best=Najczęściej Wybierane +Fixed=Piosenka Zdefiniowana +Random=Piosenka Losowa +RandomWithinGroup=Piosenka Losowa z Grupy +Worst=Najżadziej wybierane + +[CourseType] +Endless=NieskoÅ„czony +Nonstop=Nonstop +Oni=Oni +Survival=Surwiwal + +[EditInstallations] +You must type a program directory before clicking Add.=Należy podać Å›cieżkÄ™ do katalogu programu przed wciÅ›niÄ™ciem Dodaj. +'%s' is not a valid installation directory.='%s' nie jest poprawnym katalogiem instalacyjnym. + +[EditMenuAction] +Create=Utwórz Nowy UkÅ‚ad +Delete=Skasuj IstniejÄ…cy UkÅ‚ad +Edit=Edytuj IstniejÄ…cy UkÅ‚ad +Practice=Test + +[EditMenu] +Blank=Nowy UkÅ‚ad + +[EditMenuRow] +Action=Akcja +Group=Grupa +Song=Piosenka +SourceSteps=ŹródÅ‚o Kroków Poziom +SourceStepsType=ŹródÅ‚o Kroków Typ +Steps=Poziom +StepsType=Typ Kroków + +[GameButton] +Back=Cofnij +Down=Dół +Center=Åšrodek +DownLeft=DółLewo +DownRight=DółPrawo +Coin=Wrzuć Å»eton +Left=Lewo +MenuDown=MenuDół +MenuLeft=MenuLewo +MenuRight=MenuPrawo +MenuUp=MenuGóra +Operator=Operator +EffectUp=EffectGóra +EffectDown=EffectDół +Right=Prawo +Select=Wybierz +Start=Start +Up=Góra +UpLeft=GóraLewo +UpRight=GóraPrawo +Key1=Klawisz 1 +Key2=Klawisz 2 +Key3=Klawisz 3 +Key4=Klawisz 4 +Key5=Klawisz 5 +Key6=Klawisz 6 +Key7=Klawisz 7 +Scratch up=Scratch góra +Scratch down=Scratch dół +Fret1=Próg 1 +Fret2=Próg 2 +Fret3=Próg 3 +Fret4=Próg 4 +Fret5=Próg 5 +StrumUp=Struna Góra +StrumDown=Struna Dół +Tilt=PrzechyÅ‚ +FootUpLeft=StopaGóraLewo +FootUpRight=StopaGóraPrawo +FootDown=StopaDół +HandUpLeft=RÄ™kaGóraLewo +HandUpRight=RÄ™kaGóraPrawo +HandLrLeft=RÄ™kaNiższeLewo +HandLrRight=RÄ™kaNiższePrawo + +[GameCommand] +Could not launch web browser.=Nie udaÅ‚o siÄ™ uruchomić przeglÄ…darki internetowej. + +[GameState] +CPU=CPU +Player 1=Gracz 1 +Player 2=Gracz 2 + +[Headers] +Edit Courses=Edycja Maratonów +Edit Steps=Edycja Piosenek +Jukebox=Odtwarzacz +Log In=Logowanie +Theme Options=Opcje Theme`u +Network Options=Opcje Sieciowe +Export Packages=Eksport Pakietów +Select Character=Wybierz Postać Tancerza +Select Course=Wybierz Maraton +Select Difficulty=Wybierz Poziomu TrudnoÅ›ci +Select Music=Wybierz PiosenkÄ™ +Select Style=Wybierz Tryb +Set Time=Ustaw Zegar +Summary=Podsumowanie +Test Input=Test UrzÄ…dzeÅ„ WejÅ›ciowych +Results=Rezultaty + +[HoldNoteScore] +Held=OK +LetGo=ŹLE +None=None + +[InputMapper] +Connected=Podłączony +Disconnected=Rozłączony +Auto-mapping all joysticks.=Auto-mapowanie wszystkich kontrolerów. + +[Language] +Name=Polski + +[LanguagesDlg] +Error parsing file '%s'.=Błąd przetwarzania pliku '%s'. +Error reading '%s'.=Błąd podczas odczytu '%s'. +Error reading line '%s' from '%s': Each line must have either 3 or 4 values. This row has %d values.=Błąd podczas odczytu linii '%s' z '%s': Każda linia musi mieć 3 lub 4 wartoÅ›ci. Ta linia ma %d wartość(ci). +Error reading file '%s'.=Błąd odczytu pliku '%s'. +Exported to your Desktop as '%s'.=Wyeksportowane na pulpit jako '%s'. +Failed to save '%s'.=Nie udaÅ‚o siÄ™ zapisać '%s'. +Imported %d strings into '%s'.\n - %d were added.\n - %d were modified\n - %d were unchanged\n - %d empty strings were ignored=Zaimportowano %d ciÄ…gów do '%s'.\n - %d zostaÅ‚o dodane.\n - %d zostaÅ‚o zmodyfikowanych\n - %d zostaÅ‚o zmienionych\n - %d pustych ciÄ…gów zignorowano. +Importing these strings will override all data in '%s'. Continue?=Import tych ciÄ…gów nadpisze wszystkie dane w '%s'. Kontynuować? +There are no strings to export for this language.=Brak ciÄ…gów do eksportu dla tego jÄ™zyka. +This will permanently delete '%s'. Continue?=Operacja skasuje caÅ‚kowicie '%s'. Kontynuować? + +[LowLevelWindow_X11] +Failed to establish a connection with the X server=Nie udaÅ‚o siÄ™ nawiÄ…zać połączeniem z serwerem X`ów. + +[MainMenuDlg] +'%s' cleared='%s' wyczyszczony +'%s' doesn't exist. It will be created next time you start the game.='%s' nie istnieje. Zostanie utworzony przy nastÄ™pnym uruchomieniu gry. +'%s' is already cleared.='%s' zostaÅ‚ już wyczyszczony. +Failed to copy music file '%s' to '%s': %s=Nie udaÅ‚o siÄ™ skopiować pliku z muzykÄ… '%s' do '%s': %s +Failed to create directory '%s': %s=Nie udaÅ‚o siÄ™ utworzyć katalogu '%s': %s +Failed to create song directory '%s': %s=Nie udaÅ‚o siÄ™ utworzyć katalogu piosenki '%s': %s +Failed to create the song file '%s'.=Nie udaÅ‚o siÄ™ utworzyć pliku z piosenkÄ… '%s'. +Failed to delete file '%s'.=Nie udaÅ‚o siÄ™ skasować pliku '%s'. +Failed to open '%s': %s=Nie udaÅ‚o siÄ™ otworzyć '%s': %s +Music file=Plik z muzykÄ… +Success. Created the song '%s'.=Sukces. Utworzono piosenkÄ™ '%s'. +The song directory '%s' already exists. You cannot override an existing song.=Katalog piosenki '%s' już istnieje. Nie można nadpisywać istniejÄ…cych piosenek. + +[MultiPlayer] +P1=P1 +P2=P2 +P3=P3 +P4=P4 +P5=P5 +P6=P6 +P7=P7 +P8=P8 +P9=P9 +P10=P10 +P11=P11 +P12=P12 +P13=P13 +P14=P14 +P15=P15 +P16=P16 +P17=P17 +P18=P18 +P19=P19 +P20=P20 +P21=P21 +P22=P22 +P23=P23 +P24=P24 +P25=P25 +P26=P26 +P27=P27 +P28=P28 +P29=P29 +P30=P30 +P31=P31 +P32=P32 + +[MusicWheel] +ArtistText=Artysta +BpmText=BPM +EasyMeterText=Poziom Åatwy +GenreText=Gatunek +GroupText=Grupa +HardMeterText=Poziom Trudny +ChallengeMeterText=Poziom Ekspert +DoubleEasyMeterText=Poziom Åatwy (Double) +DoubleMediumMeterText=Poziom Normalny (Double) +DoubleHardMeterText=Poziom Trudny (Double) +DoubleChallengeMeterText=Poziom Ekspert (Double) +LengthText=Czas Utworu +MediumMeterText=Poziom Normalny +PopularityText=Najczęściej wybierane! +Portal=Portal +PreferredText=Preferowane +Random=Losowa +Roulette=Ruletka +TitleText=TytuÅ‚ +RecentText=Ostatnio Wybrane +TopGradesText=Najwyższa ocena +CoursesText=Maratony +AllCoursesText=Wszystkie Maratony +NonstopText=Maratony Nonstop +OniText=Maratony Oni +EndlessText=Maratony NieskoÅ„czone +SurvivalText=Maratony Surwiwal +NormalModeText=Tryb Normalny +BattleModeText=Tryb Bitwy (Wyłączone) + +[NetworkSyncManager] +Connection failed.=Połączenie nieudane. +Connection to '%s' successful.=Połączenie do '%s' udane. +Connection to server dropped.=Połączenie z serwerem porzucone. +Initializing Client Network...=Inicjalizowanie Sieci Klienckiej... +Not Supported=Tryb nie dziaÅ‚a w trakcie gry sieciowej. + +[NoteType] +4th=4ek +8th=8ek +12th=12ek +16th=16ek +24th=24ek +32nd=32ek +48th=48ek +64th=64ek +192nd=192ek + +[OptionExplanations] +Accel=PrzyÅ›pieszanie, Spowolnienie lub innymi sÅ‚owy ustawienie prÄ™dkoÅ›ci strzaÅ‚ek. +AllowExtraStage=Włączony (nawet w trybie Impreza), pozwala by gracz mógÅ‚ zdobyć możliwoÅ›c zagrania dodatkowej piosenki po speÅ‚nieniu pewnych okreÅ›lonych wymagaÅ„. +AllowW1=Włącza/wyłącza ocenÄ™ Fantastic. NIGDY - ocena wyłączona w każdym trybie, TYLKO MARATONY - użycie tylko podczas maratonów, ZAWSZE - dziaÅ‚a w każdym trybie gry. +Announcer=Umożliwia wybór Komentatora. +Appearance=WyglÄ…d +Appearance Options=Zmiana/wybór motywu graficznego, komentatora, innych opcji stylu. +Theme Options=Zmiana opcji specyficznych dla danego motywu graficznego. +ArcadeOptionsNavigation=&oq;Styl SM&cq;: Klawisz start przesuwa na koniec, Góra/Dół przełącza pomiÄ™dzy opcjami. &oq;Tryb Automatowy&cq;: Start przesuwa kursor do nastÄ™pnej opcji (Góra/Dół ignorowane). +Assist=Asysta +Attacks=Decyduje czy ataki nie przypisane do maratonów bÄ™dÄ… pojawiać siÄ™ podczas gry. +AttractSoundFrequency=Ustawiony na ZAWSZE odgrywa muzykÄ™ na każdym ekranie prezentacyjnym. Opcja ustawiona na N-RAZY odgrywa dźwiÄ™ku tylko N razy. +AutoAdjust=AutoKorekta +AutoMapOnJoyChange=JeÅ›li ta opcja jest włączona &oq;On&cq;, gra przemapuje automatycznie wszystkie, nie podłączone wczeÅ›niej, joystiki. Włączenie Automatycznego Mapowanie nadpisze wszystkie rÄ™cznie ustawione mapowania. +AutoPlay=Ta opcja może być użyteczna dla tych którzy z jakiegoÅ› niezrozumiaÅ‚ego powodu chcÄ… grać bez maty. W trybie AutoPlay nie da siÄ™ zapisywać wyników ani zdobywać możliwoÅ›ci grania dodatkowych piosenek. +AutogenGroupCourses=Pokazuje Maratony wygenerowane przez opcjÄ™ AutoGen w grupach NonStop i NieskoÅ„czone. +AutogenSteps=Automatyczne generowanie kroków dla innych typów gier nie uwzglÄ™dnionych w stepchart`cie. +BGBrightness=Ustala poziom jasność filmów odtwarzanych w tle piosenki. Zmniejsz wartość opcji jeÅ›li masz trudnoÅ›ci z widzeniem strzaÅ‚ek. +Background=Zmienia opcje kontrolujÄ…ce tÅ‚a odtwarzanych w trakcie gry. +BarDrain=Zużycie Energii +BatLives=Ilość pasków baterii +Bookkeeping=Statystyka rzuconych żetonów/monet/kredytów. +Calibrate Machine Sync=Kalibracja synchronizacji dźwiÄ™ku. +CelShadeModels=Decyduje czy Postacie TaÅ„czÄ…ce w tle sÄ… generowane z użyciem algorytmu Cel Shading. +Center Image=Centrowanie obrazu monitora. +Characters=TaÅ„czÄ…ce Postacie +Clear Bookkeeping Data=Zerowanie statystyk wrzuconych żetonów/monet/kredytów. +Clear Machine Edits=UsuniÄ™cie wszystkich edycji kroków wgranych na maszynÄ™. +Clear USB edits=Zerowanie plików programu na pamiÄ™ci USB +Clear Machine Stats=UsuniÄ™cie wszystkich statystyk zapisanych na maszynie. +CoinMode=&oq;DOM&cq;: Opcje dostÄ™pne na ekranie tytuÅ‚owym. &oq;PÅATNY&cq;: Opcje sÄ… ukryte. By zagrać trzeba wrzucić kredyt. &oq;GRA DARMOWA&cq;: Opcje sÄ… ukryte. Nie trzeba wrzucać kredytu by zagrać. +CoinModeNoHome=Kiedy tryb jest ustawiony na PÅATNY by zagrać należy wrzucić kredyt. Kiedy tryb jest ustawinye na GRA DARMOWA można grać bez wrzucania kredytu. +CoinsPerCredit=Liczba kredytów które muszÄ… być wrzucone by móc zagrać (w trakcie trybu PÅATNY) +Connection=Połącz z serwerem +CourseSortOrder=OkreÅ›la sposób sortowania Maratonów. +CreateNew= +Create New Course=Utwórz nowy Maraton. +Create New Profile=Utwórz nowy profil gracza. +DancePointsForOni=Decyduje czy w trybie Oni wyÅ›wietlane sÄ… punkty czy procenty. +DefaultFailType=NATYCHMIAST przerywa grÄ™ kiedy graczowi skoÅ„czy siÄ™ energia. 30 MISS`ów przerywa grÄ™ po nastÄ™pujÄ…cych po sobie 30 niezaliczonych strzaÅ‚kach. NA KONIEC PIOSENKI przerywa grÄ™ dopiero po na koniec piosenki nawet jeÅ›li graczowi skoÅ„czy siÄ™ wczeÅ›niej energia. OFF wyłącza przerywanie gry. +DefaultFailTypeNoOff=NATYCHMIAST przerywa grÄ™ kiedy graczowi skoÅ„czy siÄ™ energia. 30 MISS`ów przerywa grÄ™ po nastÄ™pujÄ…cych po sobie 30 niezaliczonych strzaÅ‚kach. NA KONIEC PIOSENKI przerywa grÄ™ dopiero po na koniec piosenki nawet jeÅ›li graczowi skoÅ„czy siÄ™ wczeÅ›niej energia. +DefaultNoteSkin=Ustala domyÅ›lny wyglÄ…d strzaÅ‚ek używanych podczas gry. +DelayedBack=JeÅ›li jest &oq;On&cq;, do przerwania gry jest koniecznie przytrzymanie klawisza BACK na 0.5 sekundy. Użyteczne jeÅ›li ktoÅ› czÄ™sto przypadkowo naciska ten klawisz na swojej macie. +DelayedTextureDelete=Włączona opcja powoduje że tekstury zostanÄ… zatrzymane w pamiÄ™ci. To eliminuje czas potrzebny na zaÅ‚adowanie ich ponownie. Nie ustawiać jeÅ›li komputer posiada mniej niż 128MB RAM. +Delete= +Difficulty= +DisplayAspectRatio=Pozwala na ustawienie proporcji ekranu zastosowanego w monitorze, w celu unikniÄ™cia deformacji wyÅ›wietlanej grafiki. +DisplayColorDepth=Głębia odwzorowania przestrzeni kolorów. Może nie dziaÅ‚ać w trybie okienkowym. +DisplayResolution=Rozdzielczość ekranu. Wyższa rozdzielczość wyÅ›wietla dokÅ‚adniejszy obraz, ale wymaga szybszej karty graficznej. +EasterEggs=Włącza lub wyłącza ukryte w programie niespodzianki. +Edit Courses=Edycja Maratonów +Edit Songs/Steps=Edycja Piosenek +Practice Songs/Steps=Testowanie Piosenek +EditorShowBGChangesPlay=WyÅ›wietlanie tÅ‚a piosenki podczas gry. +Effect=Efekt +EnableAttackSounds=Włączenie opcji spowoduje że w momencie ataku bÄ™dzie odgrywany dźwiÄ™k. +EnableMineHitSound=Włączenie opcji spowoduje że w momencie nastÄ…pienia na minÄ™ bÄ™dzie odegrany dźwiÄ™k wybuchu. +EventMode=Włączona opcja spowoduje że bÄ™dzie można grać w nieskoÅ„czoność. Zaliczenie, bÄ…dź niezaliczenie piosenki, za każdym razem przeniesie na ekran wyboru piosenki. +Exit= +Fail=Porażka +FastLoad=Włączona opcja spowoduje przyÅ›pieszenie wczytywania piosenek podczas startu programu, po przez pominiÄ™cie sprawdzania ew. zmian w plikach piosenki. Należy na to zwrócić uwagÄ™ w trakcie tworzenia nowych piosenek. +Fill Machine Stats= +Game=Zmiana aktualnego trybu gry. +GetRankingName=Decyduje czy ekran wpisu do tabeli z wynikami jest włączony i w jakich sytuacjach wyÅ›wietlany. +Graphics/Sound Options=Opcje pozwalajÄ…ce na zmianÄ™ rozdzielczoÅ›ci i trybu pracy ekranu oraz opcje dzwiÄ™ku. +Group=Grupa +HiddenSongs=Niektóre piosenki sÄ… dostÄ™pne tylko podczas trybu Oni, Maratonów lub w trybie Ruletki. Ta opcja powinna być wyłączona jeÅ›li gra ma zawsze wyÅ›wietlać wszystkie piosenki. +Hide=Ukryj +Holds=Holdy +Insert=Wstaw +Insert Credit=Wrzuć Kredyt +Key Joy Mappings=Mapowanie klawiszy i przyciski padów, mat, joystików do poszczególnych funkcji oferowanych przez grÄ™. +Language=Wybierz jÄ™zyk aplikacji. +LifeDifficulty=ZwiÄ™kszenie tej wartoÅ›ci sprawia że pasek energii wyczerpuje siÄ™ szybciej i wolniej regeneruje. +LifeType=Rodzaj licznika energii. +Advanced Options=Można tu zmienić zaawansowane opcje programu takie jak system naliczania punktów, dokÅ‚adność oceniania i zużycia paska energii. +MasterVolume= +HighResolutionTextures=Decyduje o użyciu przez program tekstur o wyższej rozdzielczoÅ›ci. Ustawiony tryb Auto spowoduje włączenie tekstur o wysokiej rozdzielczoÅ›ci przy ustawieni rozdzielczoÅ›ci ekranu wyższej niż 480. +MaxTextureResolution=Ustawia wielkość użytych tekstur. Każde ustawienie poniżej 1024 spowoduje że tekstury bÄ™dÄ… rozmyte, ale dziÄ™ki temu można zwiÄ™kszyć framerate. +MenuTimer=Włącznie uruchamia licznik czasu na podjÄ™cie decyzji np. podczas wyboru piosenki. +Mines=Miny +MoveRandomToEnd=OkreÅ›la czy Maratony z losowymi piosenkami bÄ™dÄ… wyÅ›wietlane na koÅ„cu koÅ‚a wyboru. +MovieColorDepth=Ustawienie głębi odwzorowania koloru filmów. +MusicWheelSwitchSpeed=Regulacja prÄ™dkoÅ›ci obrotu koÅ‚a wyboru piosenek. +MusicWheelUsesSections=&oq;Zawsze&cq; oznacza że koÅ‚o używa podziaÅ‚u na Grupy + ABC; &oq;Nigdy&cq; brak podziaÅ‚u; &oq;Tylko TytuÅ‚y&cq; używa tylko alfabetycznego sortowania po tytuÅ‚ach piosenek. +Network Options=Podłączanie do serwera sieciowego lub zmiana jego opcji. +No Memory Card=Nie znaleziono żadnych kart USB. +NoteSkins=WyglÄ…d StrzaÅ‚ek +NumBackgrounds=OkreÅ›la maksymalnÄ… liczbÄ™ losowych teÅ‚ które sÄ… Å‚adowanych za jednym razem do pamiÄ™ci. +OnlyDedicatedMenuButtons=Pozwala na ograniczenie nawigacji programem do zdefiniowanych przycisków z pominiÄ™ciem maty. Przed włączeniem "tylko przyciski dedykowane" należy siÄ™ upewnić, że wspomniane przyciski sÄ… już prawidÅ‚owo zmapowane. +OptionsRandomJukebox= +OsMountPlayer1= +OsMountPlayer2= +Persp=Perspective +Player1Profile= +Player2Profile= +PlayerAutoPlay=PlayerAutoPlay +PreloadSounds=Włączona opcja spowoduje zaÅ‚adowanie wiÄ™kszoÅ›ci dźwiÄ™ków naraz do pamiÄ™ci. Użycie zwiÄ™ksza czas Å‚adowania i normalnie opcja powinna być wyłączona. +Premium=Ustawia rodzaj używanego bonusu (Tryb PÅ‚atny) +Profile= +Export Packages=Eksport zainstalowanych piosenek i dodatków do pakietu .smzip. +Profiles=ZarzÄ…dzanie profilami graczy. +ProgressiveLifebar=Ustawienie to ma wpÅ‚yw na to, czy pomyÅ‚ka (boo/miss) bÄ™dzie skutkowaÅ‚a coraz wiÄ™kszymi spadkami energii. OFF - Standardowe ustawienie, 8 - każda pomyÅ‚ka bÄ™dzie karana zwielokrotnionym ubytkiem energii w stosunku do pierwszej pomyÅ‚ki. +ProgressiveNonstopLifebar=Ustawienie to decyduje czy pasek energii bÄ™dzie opadaÅ‚ szybciej wraz z kolejnymi etapami w trybie NonStop. +ProgressiveStageLifebar=Ustawienie to decyduje czy pasek energii bÄ™dzie opadaÅ‚ szybciej wraz z kolejnymi zaliczanymi piosenkami. (Nie dziaÅ‚a w trybie Impreza) +ProTiming=Alternatywny, do tradycyjnego 5-cio stopniowego, sposób wyÅ›wietlania dokÅ‚adnoÅ›ci trafienia. +RandomBackgroundMode=Sposób wyÅ›wietlania tÅ‚a. &oq;Animacje&cq; używa losowych animacji z folderu BGAnimations; &oq;Losowe Filmy&cq; cyklicznie odtwarza filmy z folderu RandomMovies. +More Options=DostÄ™p do bardziej zaawansowanych opcji. +RandomModifiers= +Rate=Tempo +RefreshRate=Kontrola czÄ™stotliwoÅ›ci odÅ›wieżania ekranu. DziaÅ‚a tylko w trybie peÅ‚noekranowym. +Reload Songs=Ponowne przeÅ‚adowanie wszystkich piosenek i maratonów. +Remove=UÅ‚atwienia piosenki usuwajÄ…ce strzaÅ‚ki. +Rename= +Reset To Defaults=Przywrócenie wartoÅ›ci domyÅ›lnych dla wszystkich opcji. +SaveScores=Zapis wyników. +SaveReplays=Włączenie zapisywania powtórek. +SaveStats=Włączenie lub wyłączenie zapisywania pliku Stats.xml +ScoreDisplay=WyÅ›wietlanie wyników. +Scoreboard=WyÅ›wietlanie listy najlepszych wyników. +ScoringType=OkreÅ›lenie metody naliczania punktów. +Scroll=Przesuwanie +Select Group=Wybór grupy piosenek +Select Profile=Wybór profilu +Server=Uruchomienie lokalnego serwera stepmanii +Servers=Serwery +ShowBanners=ZarzÄ…dzanie wyÅ›wietlaniem bannerów piosenek. +ShowBeginnerHelper=Włączona opcja wyÅ›wietla podczas gry na poziomie PoczÄ…tkujÄ…cy, demonstrujÄ…cÄ… podstawowe ruchy postać tancerza. +ShowCaution=WyÅ›wietlanie ekranu z ostrzeżeniem przed każdym rozpoczÄ™ciem gry. +ShowDancingCharacters=WyÅ›wietlanie taÅ„czÄ…cych postaci w tle piosenki. +ShowDanger=WyÅ›wietlanie bÅ‚yskajÄ…cego w tle ekranu z ostrzeżeniem o niskim poziomie energii podczas gry. +ShowInstructions=WyÅ›wietlanie ekranu z Instrukcjami +ShowLyrics=WyÅ›wietlanie dołączonych do piosenek tekstów ze sÅ‚owami. (pliki .LRC) +ShowNativeLanguage=Przełączanie trybu wyÅ›wietlania tytułów piosenek. W jÄ™zyku ojczystym (日本語) lub gdzie to możliwe po przez transliteracjÄ™. +ShowSelectGroup=Włączenie wyÅ›wietlania ekranu wyboru grupy piosenek. +ShowSongOptions=Ustawienie dostÄ™pnoÅ›ci ekranu z opcjami utworu. Pozycja HIDE, opcje niedostÄ™pne. Pozycja SHOW, opcje zawsze bÄ™dÄ… pokazywane. Pozycja ASK, niewidoczne, jednakże dostepne poprzez naciÅ›niecie przycisku start w sekundÄ™ po ekranie z opcjami gracza. +ShowStats=WyÅ›wietlanie Statystyk WydajnoÅ›ci w prawym górnym rogu ekranu. FPS = liczba klatek na sec. TPF = liczba trójkÄ…tów na klatkÄ™. DPF = liczba linii na klatkÄ™. +SmoothLines=WygÅ‚adzanie krawÄ™dzi wykresu Groove Radar. +Center1Player=WyÅ›rodkowanie strzaÅ‚ek podczas gry tylko jednego gracza. +SongsPerPlay=Liczba piosenek w trakcie normalnej gry (przy wyłączonym trybie Imprezy) +SoundEffect=Efekty dźwiÄ™kowe +SoundResampleQuality=Ustawienie jakoÅ›ci resampligu. +SoundVolume=Regulacja poziomu dźwiÄ™ku w grze. +SoundVolumeAttract=Regulacja poziomu dźwiÄ™ku w trybie demonstracji. +Speed=PrÄ™dkość. +StepMania Credits=Autorzy uczestniczÄ…cy w tworzeniu programu. +Steps=Kroki +Style= +Test Input=Test poprawnoÅ›ci połączenia i mapowania mat, padów, joystików. +Test Lights=Test poprawnoÅ›ci podłączonych Å›wiateÅ‚. +TextureColorDepth=Wybór głębi odwzorowania kolorów tekstur. 32bitowe tekstry zużywajÄ… wiÄ™cej pamiÄ™ci, ale Å‚adniej wyglÄ…dajÄ…. +Theme=Wybór motywu graficznego. +TimingWindowScale=ZwiÄ™kszenie tej wartoÅ›ci spowoduje że program bÄ™dzie bardziej wymagajacy wobec graczy podczas trafiania w strzaÅ‚ki. Im wyższa wartość tym mniejsza tolerancja na pomyÅ‚kÄ™ ze strony gracza (mniej czasu na naciÅ›niÄ™cie strzaÅ‚ki). +Toggle Song=Włączenie piosenek +Turn=Obrót +Transfer Edits to USB=Transfer Zmodyfikowanych UkÅ‚adów Kroków do pamiÄ™ci USB +Transfer Edits from USB=Transfer Zmodyfikowanych UkÅ‚adów Kroków z pamiÄ™ci USB +UseUnlockSystem=Włączenie systemu odblokowywania piosenek. +VisualDelaySeconds=Kalibracja opóźnienia ekranu. +Vsync=Blokowanie framerate do czasu odÅ›wieżania ekranu, w celu uzyskania pÅ‚ynniejszego obrazu. DziaÅ‚a tylko w trybie peÅ‚noekranowym. +WideScreen16_9=Włączenie obsÅ‚ugi ekranów panoramicznych. +WideScreen16_10=Włączenie obsÅ‚ugi ekranów panoramicznych. +Windowed=Przełączanie pomiÄ™dzy trybem okienkowym a peÅ‚noekranowym. + +# +UI Options=Ustawienia różnych opcji interfejsu użytkownika. +Input Options=Ustawienia opcji takich jak opóźnienie i prÄ™dkość. +Arcade Options=Ustawienia opcji Automatowych takich jak licznik czasu w menu. +Select Game=Wybór trybu gry. +System Direction=Najczęściej zmienianie ustawienia. + +# +OnlyPreferredDifficulties=Tylko wybrane poziomy trudnoÅ›ci. + +# +PercentageScoring=Sposób wyÅ›wietlania wyników: punkty czy procenty. + +# course +Select Course=Edytuj ten maraton +Max Minutes=Jak dÅ‚ugi powinien być maraton. +Choose Song=Wybierz piosenkÄ™ do tego gniazda. +Choose Steps=Wybierz typ kroków dla tej piosenki. + + +Play=Odtwórz maraton +Save=Zapisz maraton. +Edit Course=Modyfikuj zawartość maratonu +Shuffle=Przemieszaj piosenki. + +# +GamePrefDefaultFail=Natychmiastowy tryb przegranej spowoduje Å›mierć gracza w momencie kiedy pasek energii osiÄ…gnie 0. NatychmiastowyKontynuowany pozwoli mu na dalszÄ… grÄ™. +# +UserPrefScoringMode=Wybór preferowanej metody naliczania punktacji poza trybem maratonu. + +[OptionNames] +0=0 +0.25x=0.25x +0.3x=0.3x +0.4x=0.4x +0.5x=0.5x +0.6x=0.6x +0.7x=0.7x +0.75x=0.75x +0.8x=0.8x +0.9x=0.9x +1=1 +1.0x=1.0x +1.1x=1.1x +1.2x=1.2x +1.25x=1.25x +1.3x=1.3x +1.4x=1.4x +1.5x=1.5x +1.6x=1.6x +1.7x=1.7x +1.75x=1.75x +x1.75=1.75x +1.8x=1.8x +1.9x=1.9x +x2.25=2.25x +x2.5=2.5x +10=10 +11=11 +12=12 +12th=12ki +13=13 +16bit=16bit +16th=16ki +192nd=192ki +2=2 +2 Players for 1 Credit=2 graczy za 1 Kredyt +2 Times=2 razy +2.0x=2.0x +24th=24ki +3=3 +3 Times=3 razy +32bit=32bit +32nd=32ki +4=4 +4 Times=4 razy +48th=48ki +4th=4ki +5=5 +5 Times=5 razy +6=6 +64th=64ki +7=7 +8=8 +8th=8ki +9=9 +Actual=Aktualny +Add=Addatywny +All Music=Wszystkie Piosenki +AllDifficulties=Wszystkie Poziomy +AllGroups=Wszystkie Grupy +Alternate=Alternatywne +Always=Zawsze +Animations=Animacje +Arcade Style=Styl Automatowy +Ask=Pytaj +AttackMines=Miny +Auto=Auto +Autogen To Fill Width=WypeÅ‚nij Autogeneratorem. +AutosyncMachine=Autosynch. Maszyny +Average=Åšrednia +Average Feet=Åšrednia Stópek +Backwards=Do tyÅ‚u +Baked Random=Baked Random +Bar=Pasek +Battery=Bateria +Beat=Beat +Beats=Beaty +Big=Duże +Blind=OÅ›lepienie +Blink=Miganie +BMRize=BMRize +Boomerang=Bumerang +Boost=DopaÅ‚a +Both=Oba +Brake=Hamulec +Bumpy=Nierówny +C150=C150 +C300=C300 +CPU-Controlled=Kontrolowany przez komputer +Centered=WyÅ›rodkowany +Choose=Wybierz +Clap=KlaÅ›niÄ™cie +Clear Left=Wyczyść LewÄ… +Clear Right=Wyczyść PrawÄ… +Collapse Left=Złącz do Lewej +Collapse To One=Złącz do jednego +Compress 2x=Kompresuj 2x +Compress 3->2=Kompresuj 3->2 +Compress 4->3=Kompresuj 4->3 +Confusion=Dezorientacja +Connect=Połącz... +Copy Left To Right=Kopiuj z Lewej do Prawej +Copy Right To Left=Kopiuj z Prawej do Lewej +Courses Only=Tylko Maratony +Create New=Stwórz Nowe +Cross=Krzyż +Custom=Użytkownika +Dance Points=Dance Points +Dark=Mrok +Default=DomyÅ›lny(e) +Default to Off=DomyÅ›lnie Wyłączone +Default to Random=DomyÅ›lnie Losowe +DifficultCourses=Trudność +Disconnect=Rozłącz +Distant=Daleki +Dizzy=OszoÅ‚omiony +Don'tSave=Nie Zapisuj +Double for 1 Credit=Double za 1 Kredyt +Drunk=Pijane +Dynamic Random=Losowe Dynamicznie +Echo=Echo +End of Song=Koniec Piosenki +FailAtEnd=Porażka na KoÅ„cu +EffectSpeed=PrÄ™dkość +EffectPitch=Wysokość tonu +Event=Tryb Imprezy +Exit=WyjÅ›cie +Expand=Rozszerz +Expand 2->3=Rozszerz 2->3 +Expand 2x=Rozszerz 2x +Expand 3->4=Rozszerz 3->4 +Fast=Szybko +Flat=PÅ‚asko +Flip=Przewrócone +Floored=Powalone +Free Play=Darmowa Gra +Force Off=WymuÅ› Wyłączenie +Force On=WymuÅ› Włączenie +Full Screen=PeÅ‚ny Ekran +Global BGAnimation=BGAnimation Globalnie +Global Movie=Film Globalnie +Global Movie from Song Group=Film Globalnie z Grupy Piosenek +Global Movie from Song Group and Genre=Film Globalnie z Grupy Piosenek i Gatunku +HIDE=Ukryj +Hallway=Hol +Haste=PoÅ›piech +Hidden=Ukryte +HiddenOffset=Ukryty Offset +Hide=Schowane +High Quality=Wysoka Jakość +Hold=Hold +HoldsToRolls=Holdy na Rolle +Home=Dom +Immediate=Natychmiast +ImmediateContinue=Z opóźnieniem +Incoming=NadciÄ…gajÄ…ce +Insanity=Obłęd +Insert Entry=Wstaw Wpis +Instant=Natychmiast +Invert=Odwrócone +Justice=Sprawiedliwie +Left=Lewo +LifeTime=Surwiwal +Little=MaÅ‚e +Metronome=Metronom +Mines=Miny +Mini=Mini +Mirror=Lustro +N/A=N/D +Native Language=JÄ™zyk Ojczysty +Never=Nigdy +New=Nowy +NewEdit=-Nowa edycja- +No=Nie +NoAttacks=Bez Ataków +NoHands=Bez RÄ…k +NoHolds=Bez Holdów +NoJumps=Bez Skoków +NoMines=Bez Min +NoRolls=Bez Rolls +NoQuads=Bez Quadów +NoRecover=Bez Regeneracji +NoStretch=Bez RozciÄ…gania +NoLifts=Bez Liftów +NoFakes=Bez Fakeów +None=Å»aden +Normal=Normalny +Num Songs=Num Songs +Off=Wyłącz +Old=Stare +On=Włącz +On (recommended)=Włącz (zalecane) +Only Dedicated Buttons=Tylko Dedykowane Przyciski +Overhead=Standard +Pay=PÅ‚atny +Percent=Procent +Planted=Zagnieżdżone +Press Start=NaciÅ›nij Start +Quick=Szybkie +R.Vanish=Los.Znik. +Random=Losowe +RandomAttacks=Losowe Ataki +RandomBG=Losowe TÅ‚a +Random Movies=Losowe Filmy +Ranking=Ranking +Ranking Songs=Piosenki Rankingowe +Really Fast=NaprawdÄ™ szybko +RegularCourses=Normalne +Remove=UsuÅ„ +Reverse=Odwrócenie +Right=Prawo +Roll=Roll +Romanization=Transliteracja +SHOW=Pokaż +Seconds=Sekundy +Select=Wybierz +Servers=Serwery +Shift Left=PrzesuniÄ™cie w Lewo +Shift Right=PrzesuniÄ™cie w Prawo +Show=Pokaż +Shuffle=Mieszanie +Silent=BezgÅ‚oÅ›ny +Skip=PomiÅ„ +Skippy=Pomijacz +Slow=Wolno +SN2=Supernova 2 +SongAttacks=Ataki +StepAttacks=Ataki +Song BGAnimation=BGAnimation Piosenki +Song Bitmap=Bitmapa w Piosence +Song Movie=Film Piosenki +Space=PrzestrzeÅ„ +Specified=OkreÅ›lony +Split=PodziaÅ‚ +Standard=Standard +Start=Start +StaticBG=Statyczne TÅ‚o +Stealth=Ukryty +StepMania Style=Styl StepManii +Stomp=Krok +Stop=Stop +Subtract=Substraktywne +Sudden=NagÅ‚e +SuddenDeath=NagÅ‚a Åšmierć +SuddenOffset=NagÅ‚y Offset +SuperShuffle=Betoniarka +SoftShuffle=Lekkie Mieszanie +Swap Sides=Zamiana Stronami +Sync Machine=Synch. Maszyny +Sync Song=Synch. Piosenki +Sync Tempo=Synch. Tempa +Tiny=Mini +Tipsy=Podpite +Title Only=Tylko TytuÅ‚y +Tornado=Tornado +Total Feet=Total Feet +Twirl=Wir +Twister=KrÄ™tacz +Use Gameplay Buttons=Używaj Przycisków Kontrolera +Visible=Widoczne +Wave=Fala +Wide=Szeroko +Windowed=Okno +Yes=Tak +x0.25=x0.25 +x0.50=x0.50 +x0.75=x0.75 +x1=x1 +x1.5=x1.5 +x2=x2 +x3=x3 +x4=x4 +x5=x5 +x8=x8 +PercentageScoring=Punktacja Procentowa + +Tiny=Tycie +Bumpy=Nierówny +Beat=Beat +GKS=GKS +Cover=Pokrywa +XMode=XMode +[OptionRowHandler] +Off=Wyłączone + +[OptionTitles] +Accel=PrzyÅ›pieszenie +Add/Edit Background Change=Dodaj/Edytuj ZmianÄ™ TÅ‚a +Air=Skoki +AllowExtraStage=Pozwalaj na DodatkowÄ… PiosenkÄ™ +AllowW1=Ocena Fantastic +Alter=Zmiana +Announcer=Komentator +Appearance=WyglÄ…d +Appearance Options=Opcje WyglÄ…du +Theme Options=Opcje Theme`u +ArcadeOptionsNavigation=Nawigacja po opcjach +Artist=Artysta +Artist transliteration=Transliteracja pola Artysta +Assist=Asysta +Attacks=Ataki +AttractSoundFrequency=CzÄ™stotliwość dźwiÄ™ku Ataku +AutoAdjust=Auto Korekta +AutoMapOnJoyChange=Automapowanie Joysticków +AutoPlay=AutoPlay +AutogenGroupCourses=Autogen. Grup Maratonów +AutogenSteps=Autogen. Kroków +BGBrightness=Jasność +Background=TÅ‚o +BarDrain=Zużycie Energii +BatLives=Ilość pasków Baterii +Base Difficulty=Podstawowy Poziom +Beat 0 Offset=Beat 0 Offset +Bookkeeping=Statystyka +Calibrate Machine Sync=Kalibracja Synchronizacji DźwiÄ™ku +CPUSkill=Poziom CPU +CelShadeModels=Cel-shadedowane Modele +Center Image=Centrowanie Obrazu +Chaos=Chaos +Characters=Tancerze +Chart Style=Styl Chart`a +Choose=Wybierz +Clear Bookkeeping Data=Czyść dane wyrzutnika monet +Clear Machine Edits=Czyść Zmodyfikowane UkÅ‚ady +Clear Machine Stats=Czyść dane statystyczne +Clear USB edits=Czyść Zmodyfikowane UkÅ‚ady na USB +Clear area=Czyść Pole +Clear clipboard=Czyść Schowek +CoinMode=Tryb Pracy +CoinModeNoHome=Tryb PÅ‚atny +CoinsPerCredit=Monet na Kredyt +Connection=Połączenie +Convert pause to beats=ZamieÅ„ pauzy na beat`y +Convert delay to beats=ZamieÅ„ opóźnienia na beaty`y +Convert selection to pause=ZmieÅ„ zaznaczenie na pauzÄ™ +Convert selection to delay=ZmieÅ„ zaznaczenie na opóźnienie +Convert selection to warp=ZmieÅ„ zaznaczenie na Segment Warp +Convert selection to fake=ZmieÅ„ zaznaczenie na Segment Fake +Copy=Kopiuj +Copy timing data=Kopiuj timing +CourseSortOrder=Sortowanie Maratonów +Create New=Stwórz Nowy +Create New Course=Stwórz Nowy +Create New Profile=Stwórz Nowy Profil +Credit=Kredyt +Cut=Wytnij +DancePointsForOni=WyÅ›wietlanie Punktów w Oni +DefaultFailType=DomyÅ›lny tryb Fail`a +DefaultFailTypeNoOff=DomyÅ›lny tryb Fail`a +DefaultNoteSkin=DomyÅ›lny NoteSkin +DelayedBack=Opóźnienie CofniÄ™cia +DelayedTextureDelete=Trzymaj tekstury w pamiÄ™ci +Delete=Skasuj +Delete beat and shift up=Skasuj beat i podnieÅ› do góry +Description=Opis +Designate as Music Preview=Przypisz jako PoglÄ…d Piosenki +Designate last second at current beat=Przypisz ostatniÄ… sekundÄ™ na bieżącym beat`cie +Difficulty=Poziom TrudnoÅ›ci +Display BPM=Pokaż BPM +DisplayAspectRatio=Proporcje Ekranu +DisplayColorDepth=Głębia Kolorów Ekranu +DisplayResolution=Rozdzielczość Ekranu +Duration seconds=okres sekund +EasterEggs=Niespodzianki +Edit Songs/Steps=Edycja Piosenek +Genre=Gatunek +Practice Songs/Steps=Testuj Piosenki +Edit Courses=Edycja Maratonów +Edit BPM change=Wprowadź zmianÄ™ BPM +Edit song info=Edycja informacji piosenki +Edit steps information=Edycja informacji o krokach +Exit Edit Mode=WyjÅ›cie +Edit stop=Modyfikacja Pauzy +Edit delay=Modyfikacja Opóźnienia +Edit Timing Data=Modyfikacja Timingu +Edit time signature=Modyfikacja sygnatury czasowej +Edit tickcount=Edycja tickcount +Edit combo=Edycja combo +Edit label=Edycja etykietki +Edit warp=Modyfikacja Warp`a +Edit speed (percent)=Edycja prÄ™dkoÅ›ci (procenty) +Edit speed (wait)=Edycja prÄ™dkoÅ›ci (dÅ‚ugość) +Edit speed (mode)=Edycja prÄ™dkoÅ›ci (tryb) +Edit scrolling factor=Edycja parametru przesuwania +Edit fake=Modyfikacja segmentu Fake +Editor options=Opcje +EditorShowBGChangesPlay=Pokaż tÅ‚a +Erase step timing=Skasuj timing +Effect=Efekt +EnableAttackSounds=DźwiÄ™ki Ataków +EnableMineHitSound=DźwiÄ™ki Min +Entry %d=Wpis %d +EventMode=Tryb Imprezy +Exit=Exit +Fail=Fail +FastLoad=Szybkie\nÅadowanie +File1 Global BGAnimation=Globalne BGAnimation Plik1 +File1 Global Movie=Globalny Film Plik1 +File1 Global Movie (Group + Genre)=Globalny Film Plik1 (Grupa + Gatunek) +File1 Global Movie (Group)=Globalny Film Plik1 (Grupa) +File1 Song BGAnimation=BGAnimation w Piosence Plik1 +File1 Song Movie=Film w Piosence Plik1 +File1 Song Still=Obrazek w Piosence Plik1 +File1 Type=Tekst Plik1 +File2 Global BGAnimation=Globalne BGAnimation Plik1 +File2 Global Movie=Globalny Film Plik1 +File2 Global Movie (Group + Genre)=Globalny Film Plik1 (Grupa + Gatunek) +File2 Global Movie (Group)=Globalny Film Plik1 (Grupa) +File2 Song BGAnimation=BGAnimation w Piosence Plik1 +File2 Song Movie=Film w Piosence Plik1 +File2 Song Still=Obrazek w Piosence Plik1 +File2 Type=Tekst Plik1 +Fill Machine Stats=WypeÅ‚nij Statystyki Maszyny +Force Color 1=WymuÅ› Kolor 1 +Force Color 2=WymuÅ› Kolor 2 +Force Effect=WymuÅ› Efekt +Force Transition=WymuÅ› PrzejÅ›cie +Freeze=Zatrzymanie +Game=Gra +GetRankingName=Pokaż Pole Wpisu +Graphics/Sound Options=Opcje Grafiki i DźwiÄ™ku +Group=Grupa +Hands=RÄ™ce +HiddenSongs=Ukryte Piosenki +Hide=Ukryj +High Meter=High Meter +HighResolutionTextures=Tekstury wysokiej roz. +Holds=Holdy +Insert=Wstaw +Insert Credit=Wrzuć Kredyt +Insert beat and shift down=Wstaw Beat i przesuÅ„ w dół +Insert Entry=Wstaw Pole +Jumps=Skoki +Key Joy Mappings=Mapowanie Kontrolerów +Language=JÄ™zyk +Last second hint=Wskaźnik ostatniej sekundy +Layer=Warstwa +LifeDifficulty=Zużycie Energii +LifeType=Rodzaj Energii +Low Meter=Low Meter +Advanced Options=Opcje Zaawansowane +Main title=TytuÅ‚ +Main title transliteration=Transliteracja TytuÅ‚u +Max BPM=Maks. OkreÅ›lone BPM +MaxTextureResolution=Rozdzielczość Tekstur +MenuTimer=Licznik w Menu +Meter=Licznik +Min BPM=Min. OkreÅ›lone BPM +Mines=Miny +MoveRandomToEnd=Losowa na koniec +More Options=WiÄ™cej Opcji +MovieColorDepth=Głębia kolorów filmów +MusicWheelSwitchSpeed=PrÄ™dkość KoÅ‚a +MusicWheelUsesSections=Sekcje KoÅ‚a +Network Options=Opcje Sieciowe +No USB memory cards found=Nie znaleziono karty USB +NoteSkins=NoteSkiny +NumBackgrounds=Losowe TÅ‚a +OptionsRandomJukebox=Modyfikatory +OnlyDedicatedMenuButtons=Klawisze Menu +OsMountPlayer1=OS Mount Player1 +OsMountPlayer2=OS Mount Player2 +Paste at begin marker=Wklej na poczÄ…tku zaznaczenia +Paste at current beat=Wklej na bieżącym beat`cie +Paste timing data=Wklej timing +Persp=Widok +Play current beat to end=Odtwórz bieżący beat do koÅ„ca +Play preview music=Odtwórz PodglÄ…d Muzyki +Play whole song=Odtwórz całą piosenkÄ™ +Play mods from course=Odtwórz mody z maratonu +Play selection=Odtwórz Zaznaczenie +Player1Profile=Profil 1-go Gracza +Player2Profile=Profil 2-go Gracza +PlayerAutoPlay=AutoPlay +Predicted Meter=Przewidywany Poziom TrudnoÅ›ci +Preferences=Ustawienia +PreloadSounds=Preload DźwiÄ™ków +Premium=Premium +Preview Length=DÅ‚ugość PodglÄ…du +Preview Start=PoczÄ…tek PodglÄ…du +Export Packages=Eksport Pakietów +Profile=Profil +Profiles=Profile +ProgressiveLifebar=Progresywny Pasek Energii +ProgressiveNonstopLifebar=Progresywny Pasek Energii w NonStop +ProgressiveStageLifebar=Progresywny Pasek Energii w Poziomie +ProTiming=Protiming +Quads=Quady +Quantize=Quantize +RandomBackgroundMode=Tryb TÅ‚a +RandomModifiers=Modyfikatory +Rate=Tempo +Record in selection=Nagraj w zaznaczeniu +RefreshRate=CzÄ™stotliwość odÅ›wieżania +Reload Songs=PrzeÅ‚adowanie Piosenek +Remove=UsuÅ„ +Remove Change=UsuÅ„ ZmianÄ™ +Rename=ZmieÅ„ nazwÄ™ +Reset To Defaults=Zresetuj opcje do domyÅ›lnych wartoÅ›ci +Revert from disk=Przywróć z dysku +Revert to last save=Przywróć z Cache +Save=Zapisz +SaveScores=Zapisz Wyniki +SaveReplays=Zapisz Powtórki +SaveStats=Zapisz Statystyki +ScoreDisplay=WyÅ›wietlanie Punków +Scoreboard=Wyniki na serwerze +ScoringType=Metoda Punktacji +Scroll=Przesuwanie +Secret=Sekret +Server=Serwer +Servers=Serwery +Set P1=Ustaw dla P1 +Set P2=Ustaw dla P2 +Set modifiers=Ustaw modyfikatory +Set Mods=Ustaw Mody +Set selection start=Ustaw poczÄ…tek zaznaczenia +Set selection end=Ustaw koniec zaznaczenia +Shift all timing changes down=PrzesuÅ„ wszystkie zmiany timingów w dół +Shift all timing changes up=PrzesuÅ„ wszystkie zmiany timingów w górÄ™ +ShowBanners=Pokaż Bannery +ShowBeginnerHelper=Pomoc dla PoczÄ…tkujÄ…cego +ShowCaution=Ostrzeżenie +ShowDancingCharacters=TaÅ„czÄ…ce Postacie +ShowDanger=Uwaga +ShowInstructions=Instrukcje +ShowLyrics=Teksty piosenek +ShowNativeLanguage=Translacje +ShowSelectGroup=Wybór Grupy Piosenek +ShowSongOptions=Pokaż Opcje Piosenki +ShowStats=Pokaż Statystyki +SmoothLines=WygÅ‚adzanie krawÄ™dzi +SoundEffect=Efekty DźwiÄ™kowe +StepMania Credits=PodziÄ™kowania +Center1Player=Centruj 1 Gracza +Song=Piosenka +Song Group=Grupa Piosenek +Song Options=Opcje Piosenki +SongsPerPlay=Piosenki Na GrÄ™ +Sort=Sortowanie +SoundResampleQuality=Jakość Resamplingu +SoundVolume=Poziom DźwiÄ™ku +SoundVolumeAttract=Poziom DźwiÄ™ku Demonstracji +Speed=PrÄ™dkość +Step Author=Autor Kroków +Steps=Kroki +Stream=StrumieÅ„ +Style=Styl +Sub title=PodtytuÅ‚ +Sub title transliteration=Transliteracja PodtytuÅ‚u +SuperGrowth=Super Rozrost +Tap Steps=Ilość kroków +Tempo=Tempo +Test Input=Test Kontrolerów +Test Lights=Test ÅšwiateÅ‚ +TextureColorDepth=Głębia Kolorów Tekstur +Theme=Theme +TimingWindowScale=Ocena TrafieÅ„ +Transform=Transformacja +Transfer Edits to USB=Transfer Edycji do USB +Transfer Edits from USB=Transfer Edycji z USB +Type=Typ +Turn=Obrót +Undo=Cofnij +UseUnlockSystem=System Odblokowania +VisualDelaySeconds=Opóźnienie Obrazu +Voltage=Woltaż +Vsync=Synchronizacja Pionowa +WideScreen16_9=Ekran Panoramiczny +WideScreen16_10=Ekran Panoramiczny +Windowed=Tryb WyÅ›wietlania + +# +UI Options=Opcje Interfejsu +Input Options=Opcje Kontrolerów +Arcade Options=Opcje Automatowe +Select Game=Wybór Rodzaju Gry +System Direction=Ustawienia Systemu + +# +OnlyPreferredDifficulties=Tylko Wybrane Poziomy +# +PercentageScoring=Punktacja Procentowa + +Max Minutes=Max Minut +Play=Odtwórz +Edit Course=Edycja Maratonu +Shuffle=Mieszaj +# +GamePrefDefaultFail=DomyÅ›lny Typ Fail`a +# +UserPrefScoringMode=Naliczanie Punktów +[PaneDisplay] +Steps=Kroki +Holds=Holdy +Jumps=Skoki +Mines=Miny +Rolls=Rolle +Hands=RÄ™ce +MachineHigh=Naj. Wynik +EmptyMachineHighScoreName=Best +NotAvailable=N/D + +[PlayMode] +Battle=Bitwa +Endless=NieskoÅ„czony +Nonstop=Nonstop +Oni=Oni +Rave=Rave +Regular=ZwykÅ‚y + +[AdjustSync] +%s BPM od %.3f BPM do %.3f BPM.=%s BPM od %.3f BPM do %.3f BPM. +Autosync Machine=Autosynch. Maszyny +Autosync Song=Autosynch. Piosenki +Autosync Tempo=Autosynch. Tempo +Autosync: Correction NOT applied. Deviation too high.=Autosynch.: Korekcja nienaniesiona. Zbyt duże odchylenie. +Autosync: Correction applied.=Autosynch.: Poprawka naniesiona. +Global Offset from %+.3f to %+.3f (notes %s)=Global Offset z %+.3f na %+.3f (nuty %s) +Song offset from %+.3f to %+.3f (notes %s)=Offset Piosenki z %+.3f na %+.3f (nuty %s) +The stop segment #%d changed from %+.3fs to %+.3fs (change of %+.3f).=Segment STOP o numerze #%d zmieniony z %+.3fs na %+.3fs (Zmiana %+.3f). +earlier=wczeÅ›niej +later=później +Average Error %.5fs=Åšrednia błędu %.5fs +Etc.=itp. +%d taps ignored.=%d uderzeÅ„ zignorowanych. + +[ProfileAction] +Clear=Czyść +Delete=UsuÅ„ +Edit=Modyfikuj +Rename=ZmieÅ„ nazwÄ™ +SetDefaultP1=Ustaw dla P1 +SetDefaultP2=Ustaw dla P2 + +[RadarCategory] +Air=Skoki +Chaos=Chaos +Freeze=Zatrzymania +Hands=RÄ™ce +Holds=Trzymania +Jumps=Skoki +Mines=Miny +Rolls=Rolle +Stream=CiÄ…gÅ‚ość +Taps=Kroki +TapsAndHolds=Kroki i Holdy +Voltage=Woltaż +MinMidiNote=MinMidiNote +MaxMidiNote=MaxMidiNote + +[RageSoundManager] +Couldn't find a sound driver that works=Nie udaÅ‚o siÄ™ znaleźć dziaÅ‚ajÄ…cego sterownika dźwiÄ™ku + +[RageUtil] +NumNd=nd +NumPrefix= +NumRd=rd +NumSt=st +NumTh=th + +[RoomWheel] +Enter room name=Wprowadź nazwÄ™ pokoju + +[RoomInfoDisplay] +Last Round Info:=Ostatnia runda: +Room Name:=Nazwa: +Room Description:=Opis: +Song Title:=TytuÅ‚: +Song Subtitle:=PodtytuÅ‚: +Song Artist:=Artysta: +Players=Gracze + +[SMPackageUtil] +Could not find '%s'.=Nie udaÅ‚o siÄ™ znaleźć '%s'. +[Screen] +HeaderText= +[ScreenAppearanceOptions] +HeaderText=WyglÄ…d +HeaderSubText=Dostosuj grÄ™ pod siebie + +[ScreenOptionsGraphicsSound] +HeaderText=Grafika / DzwiÄ™k +HeaderSubText=Ustaw najlepszÄ… wydajność + +[ScreenOptionsAdvanced] +HeaderText=Opcje Zaawansowane +HeaderSubText=Ustawienia przeznaczone dla zaawansowanych użytkowników + +[ScreenBookkeeping] +All-time Coin Total:=Suma Wszystkich Monet: +Total Song Plays: %d=Liczba Odegranych piosenek: %d +Coin Data by Day of Week, All-Time=Wszystkie Monety z podz. na dni tygodnia +Coin Data by Hour of Day, All-Time=Wszystkie Monety z podz. na godziny +Coin Data of Last %d Days=Monety z Ostatnich %d Dni +Coin Data of Last %d Weeks=Monety z Ostatnich %d Tygodni +HeaderText=Statystyki + +[ScreenCaution] +Caution=UWAGA! +CautionText=Zadbaj by mata taneczna znajdowaÅ‚a siÄ™ w bezpiecznej odlegÅ‚oÅ›ci od monitora i mebli.\n\nZwraóć uwagÄ™ by podczas taÅ„ca nie skrzywdzić zwierzÄ…t, dzieci i obserwatorów + + +[ScreenDebugOverlay] +%s in gameplay=%s w trakcie gry +Assist=Asysta +AutoPlay=AutoPlay +Autosync=Autosynch. +CPU=CPU +Clear Profile Stats=Wyczyść Statystki Profilu +CoinMode=Tryb Pracy +Debug Menu=Debug Menu +Fill Profile Stats=WypeÅ‚nij Statystyki Profilu +Flush Log=Zapisz Log +Force Crash=WymuÅ› Crash +Halt=Zatrzymaj +Lights Debug=Sprawdź ÅšwiatÅ‚a +Machine=Maszyna +Menu Timer=Licznik Menu +Monkey Input=Sym. MaÅ‚py +Multitexture=Multitekstura +Profile=Profil +Pull Back Camera=OdsuÅ„ KamerÄ™ +Restart=Restart +Reload=PrzeÅ‚aduj +Reload Theme and Textures=PrzeÅ‚aduj Theme i Tekstury +Rendering Stats=Statystki Renderowania +Screen Test Mode=Tryb Testu Ekranu +Send Off To Screen=WyÅ›lij Off na Ekran +Send On To Screen=WyÅ›lij On na Ekran +Send Notes Ended=WyÅ›lij Notes Ended +Show Masks=Pokaż Maski +Slow=Zwolnienie +Song=Piosenka +Tempo=Tempo +Uptime=Czas Pracy +Visual Delay Down=Zmniejsz Opóźnienie Ekranu +Visual Delay Up=ZwiÄ™ksz Opóźnienie Ekranu +Volume Down=DźwiÄ™k Ciszej +Volume Up=DźwiÄ™k GÅ‚oÅ›niej +Vsync=Synch. Pionowa +Write Preferences=Zapisz Ustawienia +Write Profiles=Zapisz Profile +off=wyłączone +on=włączone +or=lub + +[ScreenEdit] +%s notes=%s +Can't undo - no undo data.=Nie mogÄ™ cofnąć - brak wczeÅ›niejszych danych. +Do you want to revert from disk?=Czy chcesz przywrócić ukÅ‚ad z dysku? +Do you want to revert to your last save?=Czy chcesz cofnąć siÄ™ do ostatniego zapisu? +Do you want to save changes before exiting?=Czy chcesz zapisać przed wyjÅ›ciem? +Enter a new BPM value.=Wpisz nowÄ… wartość BPM.\n\nWpisz poprzedniÄ… wartość by usunąć. +Enter a new Stop value.=Wpisz nowÄ… wartość STOP.\n\nWpisz "0" by usunąć. +Enter a new Delay value.=Wpisz nowÄ… wartość DELAY.\n\nWpisz "0" by usunąć. +Enter a new Time Signature.=Wpisz nowe metrum\nUżyj formatu "x/y".\nWpisz poprzedniÄ… wartość by usunąć. +Enter a new Tickcount value.=Wpisz nowÄ… wartość Tickcount.\n\nWpisz poprzedniÄ… wartość by usunąć. +Enter a new Combo value.=Wpisz nowÄ… wartość Combo.\n\nWpisz poprzedniÄ… wartość by usunąć. +Enter a new Label value.=Wpisz nazwÄ™ tej sekcji ukÅ‚adu.\n\nWpisz poprzedniÄ… nazwÄ™ by usunąć. +Enter a new Warp value.=Wpisz liczbÄ™ beat`ów które przeWARPujesz.\n\nWpisz "0" by usunąć ten segment. +Enter a new Speed percent value.=Wpisz współczynnik prÄ™dkoÅ›ci przewijania.\nWpisz poprzedniÄ… wartość by usunąć.\nWartość "1" to przewijanie domyÅ›lne. +Enter a new Speed wait value.=Wpisz w sekundach/beatach jak dÅ‚uga ma być zmiana.\n\n0 - natychmiast. +Enter a new Speed mode value.=Wpisz jak segment ma być obsÅ‚ugiwany.\n\n Wpisz 0 dla beatów, 1 dla sekund. +Enter a new Scroll value.=Wpisz nowÄ… wartość Przewijania +Enter a new Fake value.=Wpisz liczbÄ™ beatów które nie bÄ™dÄ… podlegaÅ‚y ocenianiu.\n\nWpisz "0" by to usunąć. +Are you sure you want to erase this chart's timing data?=Czy jesteÅ› pewien, że chcesz usunąć dane timingu tego ukÅ‚adu? +Enter a new artist transliteration.=Wpisz transliteracjÄ™ pola Artysta. +Enter a new artist.=Wpisz ArtystÄ™. +Enter a new genre.=Wpisz Gatunek. +Enter a new credit.=Wpisz PodziÄ™kowania +Enter a new description.=Wpisz Opis +Enter a new chart style.=Wpisz przeznaczenie ukÅ‚adu (np. "Mata", "Klawiatura") +Enter a new meter.=Wpisz ocenÄ™ poziomu trudnoÅ›ci ukÅ‚adu. +Enter the author who made this step pattern.=Wpisz autora ukÅ‚adu kroków. +Enter the offset for the song.=Wpisz wartość offset dla tej piosenki. +Enter a new last second hint.=Wpisz wskaźnik ostatniej sekundy piosenki. +Enter a new main title transliteration.=Wpisz transliteracjÄ™ pola TytuÅ‚. +Enter a new main title.=Wpisz TytuÅ‚ piosenki. +Enter a new sub title transliteration.=Wpisz transliteracjÄ™ pola PodtytuÅ‚ +Enter a new sub title.=Wpisz PodtytuÅ‚ piosenki. +Enter a new preview start.=Wpisz moment od którego ma siÄ™ zaczynać podglÄ…d piosenki. +Enter a new preview length.=Wpisz dÅ‚ugość trwania podglÄ…du piosenki. +Enter a new min BPM.=Wpisz minimalnÄ… wartość wyÅ›wietlanÄ… przez licznik BPM +Enter a new max BPM.=Wpisz maksymalnÄ… wartość wyÅ›wietlanÄ… przez licznik BPM +More than %d notes per measure is not allowed. This change has been reverted.=Nie można tworzyć wiÄ™cej niż %d nut na pomiar. Zmiana cofniÄ™ta. +No backgrounds available=Brak dostÄ™pnych teÅ‚. +EditHelpText=Góra/Dół:\n zmiana beat`u\nPrawo/Lewo:\n zmiana skoku notacji\nKlawisze z cyframi:\n dodaj/usuÅ„\n strzaÅ‚kÄ™/nutÄ™\nklawisze N i M:\n zamiana rodzaju strzaÅ‚ek\nCtrl + N/M:\n zmiana rodzaju segmentu\nCtrl + ,/.:\n Poruszanie po segmentach\nTworzenie Hold`a:\n WciÅ›nij cyfrÄ™\n i trzymajÄ…c przeciÄ…gnij\n w GórÄ™ lub w Dół\nTworzenie Roll`a:\n Przytrzymaj Shift,\n a nastÄ™pnie utwórz\n hold`a.\nSpacja: Ustawianie\n rejonu zaznaczenia\nKlawisz T: Przełączanie Timingu\nEnter: Menu opcji zaznaczenia\nKlawisz A: Menu Modyfikacyjne\nEscape: Menu główne\nF4: Menu Timingu\nF1: Pokaż pomoc\n +PlayRecordHelpText=NaciÅ›nij Start by zakoÅ„czyć +Save successful.=Zapis zakoÅ„czony powodzeniem. +Saved as SM and DWI.=Zapisano w formacie SM i DWI. +Saved as SM.=Zapisanow w formacie SM. +Switched to=Przełączono do +The change has been reverted.=Zmiana zostaÅ‚a cofniÄ™ta. +This change creates more than %d notes in a measure.=Ta zmiana tworzy wiÄ™cej niż %d nut w pomiarze. +This change creates notes past the end of the music and is not allowed.=Ta zmiana tworzy nuty poza koÅ„cem muzyki i nie jest dozwolona. +This will destroy all unsaved changes.=Operacja zniszczy wszystkie niezapisane zmiany. +Undo=Cofnij +You must be in Song Timing Mode to edit BG Changes.=By móc modyfikować BG Changes należy przejść do tybu Timing`u. +You must have an area selected to enter the Alter Menu.=Musisz mieć jakiÅ› zaznaczony fragment by móc wejść do Menu Modyfikacyjnego + +Current beat=Bieżący Beat +Current second=Bieżąca Sekunda +Snap to=PrzyciÄ…gaj do +Selection beat=Beat Zaznaczenia +Difficulty=Poziom TrudnoÅ›ci +Description=Opis +Chart Style=Styl UkÅ‚adu +Step Author=Autor Kroków +Main title=TytuÅ‚ piosenki +Subtitle=PodtytuÅ‚ +Tap Note=Rodzaj Nuty +Segment=Segment +Tap Steps=Ilość strzaÅ‚ek +Jumps=Skoki +Hands=Handy +Holds=Holdy +Mines=Miny +Rolls=Rolle +Lifts=Lifty +Fakes=Fake`i +Timing Mode=Tryb Timingu +Step Timing=Timing Kroków +Song Timing=Timing Piosenki +Beat 0 offset=Offset +Preview Start=PoczÄ…tek PodglÄ…du +Preview Length=DÅ‚ugość PodglÄ…du +Help=Pomoc +Info=Informacja +Routine Player=Gracz + +[ScreenEditMenu] +HeaderText=Edycja Piosenki +HeaderSubText=Wypieść swojÄ… piosenkÄ™ +Continue with delete?=Kontynuować usuniÄ™cie? +Enter a description for this edit.=Wpisz opis dla tej edycji. +ExplanationAction=W tym trybie możesz modyfikować istniejÄ…ce ukÅ‚ady strzaÅ‚ek, tworzyć nowe strzaÅ‚ki i synchronizować je z muzykÄ…. +ExplanationGroup=W tym trybie możesz modyfikować istniejÄ…ce ukÅ‚ady strzaÅ‚ek, tworzyć nowe strzaÅ‚ki i synchronizować je z muzykÄ…. +ExplanationSong=W tym trybie możesz modyfikować istniejÄ…ce ukÅ‚ady strzaÅ‚ek, tworzyć nowe strzaÅ‚ki i synchronizować je z muzykÄ…. +ExplanationSourceSteps=W tym trybie możesz modyfikować istniejÄ…ce ukÅ‚ady strzaÅ‚ek, tworzyć nowe strzaÅ‚ki i synchronizować je z muzykÄ…. +ExplanationSourceStepsType=W tym trybie możesz modyfikować istniejÄ…ce ukÅ‚ady strzaÅ‚ek, tworzyć nowe strzaÅ‚ki i synchronizować je z muzykÄ…. +ExplanationSteps=W tym trybie możesz modyfikować istniejÄ…ce ukÅ‚ady strzaÅ‚ek, tworzyć nowe strzaÅ‚ki i synchronizować je z muzykÄ…. +ExplanationStepsType=W tym trybie możesz modyfikować istniejÄ…ce ukÅ‚ady strzaÅ‚ek, tworzyć nowe strzaÅ‚ki i synchronizować je z muzykÄ…. +Profile name cannot be blank.=Nazwa Profilu nie może być pusta. +The name you chose conflicts with another profile. Please use a different name.=Wybrana nazwa konfliktuje z już istniejÄ…cym profilem. ProszÄ™ użyć innej. +These steps are produced by autogen. You do not need to delete them.=Te kroki utworzyÅ‚ Autogenerator. Nie trzeba ich kasować. +These steps will be lost permanently.=Kroki zostanÄ… caÅ‚kowicie usuniÄ™te. +This song is missing a music file and cannot be edited.=Ta piosenka nie ma pliku z muzykÄ… i nie może być edytowana. +The song directory is read-only and cannot be edited.=Ten katalog piosenki jest w trybie "tylko do odczytu" i nie może być edytowany. +Blank=Pusty + +[ScreenPracticeMenu] +HeaderText=Sprawdź Piosenki + +ExplanationGroup=Wybierz GrupÄ™ piosenek. +ExplanationSong=Wybierz piosenkÄ™ którÄ… chcesz sprawdzić. +ExplanationAction=NaciÅ›nij START by zacząć. +ExplanationStepsType=Wybierz typ kroków który chcesz sprawdzić. +ExplanationSteps=Wybierz ukÅ‚ad kroków. + +[ScreenEvaluation] +HeaderText=Twoje Wyniki +HeaderSubText=Twój taniec byÅ‚ wspaniaÅ‚y! +[ScreenEvaluationSummary] +HeaderText=Ostateczne Wyniki +[ScreenGameplay] +GiveUpAbortedText=Nie poddawaj siÄ™! +GiveUpStartText=Trzymaj dalej &START; by siÄ™ poddać +GiveUpBackText=Trzymaj dalej &START; by siÄ™ poddać + +[ScreenGameplaySyncMachine] +Standard deviation=Odchylenie standardowe +New offset=Nowy offset +Old offset=Stary offset +Collecting sample=Zebrane próbki + +[ScreenInstructions] +PlayMode_Regular title=Jak Grać +PlayMode_Regular instructions=W trakcie gry należy uważać na Hold`y i Miny. +PlayMode_Nonstop title=Tryb Nonstop +PlayMode_Nonstop instructions=Tryb Nonstop pozwala na granie kilku piosenek pod rzÄ…d, (zazwyczaj 4, czasami wiÄ™cej), przy użyciu zasad normalnego trybu gry. +PlayMode_Oni title=Tryb Oni +PlayMode_Oni instructions=Tryb Oni pozwala na grÄ™ wg. dwóch zestawów zasad.\nW pierwszym pasek energii zastÄ™puje bateria z ograniczonÄ… iloÅ›ciÄ… żyć (standardowo 4). Każde niezaliczenie strzaÅ‚ki rozÅ‚adowuje jeden pasek baterii.\nW drugim trybie należy przejść piosenkÄ™ w okreÅ›lonym czasie. +PlayMode_Endless title=Tryb NieskoÅ„czony +PlayMode_Endless instructions=Tryb NieskoÅ„czony polega na przechodzeniu jednej piosenki za drugÄ… bez opcji przerwy. Gra koÅ„czy siÄ™ w momencie utraty caÅ‚ej energii. +PlayMode_Rave title=Tryb Rave +PlayMode_Rave instructions= +PlayMode_Battle title=Tryb Bitwy +PlayMode_Battle instructions= +Hold instructions=StrzaÅ‚ki typu Hold by zostaÅ‚y zaliczone, muszÄ… być przytrzymane przez okreÅ›lony czas. Poprawnie zaliczona strzaÅ‚ka da ocenÄ™ OK. NieprawidÅ‚owo - NG. +Mine instructions=Miny wybuchajÄ… i obniżajÄ… poziom energii. Zdecydowanie należny ich unikać. WłączÄ… siÄ™, jeÅ›li pozostawi siÄ™ nogÄ™ na przycisku, kiedy przelatujÄ… + +[ScreenLegal] +Warning=Ostrzeżenie +BodyText=Kod źródÅ‚owy programu Stepmania jest objÄ™ty licencjÄ… open-source\n\nNazwa i logo "Stepmania" sÄ… chronionymi znakami towarowymi.\n\nDOMYÅšLNE DZWIĘKI SCHEMATU WYGLÄ„DU STEPMANII SÄ„ WÅASNOÅšCIÄ„ ICH TWÓRCÓW. INNE ELEMENTY SCHEMATU WYGLÄ„DU SÄ„ OBJĘTE LICENCJÄ„ STEPMANII.\n\nZe szczegółami proszÄ™ zapoznać siÄ™ w pliku license.txt + + +[ScreenMapControllers] +HeaderText=Mapowanie Kontrolerów +InvalidButton=Ten klawisz nie może zostać zmapowany +%s slots=Strona gracza %s + +[ScreenNetRoom] +Enter a description for the room:=Utwórz opis pokoju: +Enter a password for the room (blank, no password):=Utwórz hasÅ‚o dla Pokoju (puste, brak hasÅ‚a): +Enter Room's Password:=Wpisz HasÅ‚o do Pokoju: +HeaderText=StepMania Online +HeaderSubText=Wybór Pokoju +HelpText=Ctrl+ENTER Wybiera &BACK; WyjÅ›cie &MENULEFT;&MENURIGHT; Poruszanie + +[ScreenNetSelectMusic] +HeaderText=Wybierz MuzykÄ™ do Gry Sieciowej. +HeaderSubText=Wybór piosenki +HelpText=Ctrl+ENTER Zatwierdź &BACK; WyjÅ›cie &MENULEFT;&MENURIGHT; Wybierz::&MENUUP; Opcje Gracza &MENUDOWN; Zmiana Poziomu Trud. + +[ScreenNetworkOptions] +Disconnected from server.=Odłączony od serwera. +Enter a network address.=Wpisz adres sieciowy. +Server failed: %s Code:%d=Błąd Serwera: %s Kod:%d +Use 127.0.0.1 to connect to yourself.=Użyj 127.0.0.1 do połączenia ze samym sobÄ…. +Connect=Połącz +Disconnect=Odłącz +ScoreOn=Włącz +ScoreOff=Wyłącz +HeaderText=Opcje Sieciowe +HeaderSubText=Konfiguracja gry sieciowej + +[ScreenOptionsEditCourse] +The maximum number of entries per course is %d. This course already has %d entries.=Maksymalna liczba wpisów na maraton: %d. Ten maraton już ma %d wpisów. +You cannot delete the last entry in a course.=Nie można kasować ostatniego wpisu w maratonie. + +[ScreenOptionsEditCourseEntry] +No songs loaded.=Nie zaÅ‚adowano żadnych piosenek. + +[ScreenOptionsManageCourses] +Continue with delete?=Kontynuować i usunąć? +Enter a name for the course.=Wpisz nazwÄ™ maratonu +You have %d, the maximum number allowed.=Istniej już %d. To jest maksymalna dozwolona liczba. +You must delete an existing before creating a new.=Trzeba skasować istniejÄ…cy nim utworzy siÄ™ nowy. +Error renaming file.=Błąd podczas zmiany nazwy pliku. +This course will be lost permanently.=Ten maraton zostanie caÅ‚kowicie usuniÄ™ty. +Error deleting the file '%s'.=Błąd podczas kasowania pliku '%s'. + +[ScreenOptionsManageEditSteps] +Enter a name for these steps.=Wprowadź nazwÄ™ dla tych kroków. +These steps will be lost permanently.=Kroki zostanÄ… caÅ‚kowicie usuniÄ™te. +You have %d step edits, the maximum number allowed.=Istnieje już %d edycji. Jest to maksymalna dozwolona liczba. +You must delete an existing steps edit before creating a new steps edit.=Należy usunąć istniejÄ…ce kroki przed utworzeniem nowych. +Continue with delete?=Kontynuować i usunąć? + +[ScreenOptionsCourseOverview] +Error saving course.=Błąd podczas zapisu maratonu. +Course saved successfully.=Maraton poprawnie zapisany. +Enter a name for the course.= +Enter a name for the course.Wpisz nazwÄ™ maratonu. +This course will be lost permanently.=Ten maraton zostanie caÅ‚kowicie usuniÄ™ty. +Continue with delete?=Kontynuować i usunąć? +Error deleting the file '%s'.=Błąd podczas usuwania pliku "%s". + +[NotesWriterSM] +Error renaming file. Destination file '%s' already exists.=Błąd podczas zmiany nazwy pliku. Docelowy plik '%s' już isnieje. +Error writing file '%s'.=Błąd podczas zapisu pliku '%s'. + +[NotesWriterSSC] +Error renaming file. Destination file '%s' already exists.=Błąd podczas zmiany nazwy pliku. Docelowy plik '%s' już isnieje. +Error writing file '%s'.=Błąd podczas zapisu pliku '%s'. + +[ScreenOptionsManageProfiles] +Are you sure you want to clear all data in the profile '%s'?=Czy na pewno chcesz wyczyÅ›cić wszystkie dane z profilu &oq;%s&cq;? +Are you sure you want to delete the profile '%s'?=Czy na pewno chcesz skasować profil &oq;%s&cq;? +Enter a name for the profile.=Wpisz nazwÄ™ profilu +NewProfileDefaultName=Nowy + +[ScreenOptionsMaster] +Exit=WyjÅ›cie + +[ScreenOptionsMasterPrefs] +Off=Wyłącz + +[ScreenOptionsMemoryCard] +Error mounting card: %s=Błąd podłączania karty: %s +(no label)=(brak nazwy) +size ???=rozmiar ??? +%dMB=%dMB + +[ScreenOptionsService] +HeaderText=Opcje +HeaderSubText=Tu można skonfigurować grÄ™. + +[ScreenPackages] +DL @ %d KB/s=DL @ %d KB/s +Download cancelled.=Pobieranie przerwane. +Enter URL=Podaj URL +Failed.=Niepowodzenie. +Failed to connect.=Nie udaÅ‚o siÄ™ nawiÄ…zać połączenia. +File Already Exists=Plik Już Istnieje +Header Sent.=WysÅ‚ano Nagłówek. +Invalid URL.=NieprawidÅ‚owy URL. +VisitURL=--Odwiedź URL-- +Waiting for header.=Oczekiwanie na nagłówek. + +[ScreenPrompt] +OK=OK +No=NIE +Yes=TAK +Cancel=PRZERWIJ + +[ScreenRanking] + +[ScreenSMOnlineLogin] +Each player needs a unique Profile.=Każdy gracz potrzebuje unikalnego Profilu. +Enter your password.=Podaj hasÅ‚o. +No Styles are selectable.=Nie można wybrać żadnego Stylu. +You are logging on as:=Logujesz siÄ™ jako: +You must define a Profile.=Musisz okreÅ›lić Profil. +HeaderText=Logowanie Do Serwera +HeaderSubText=Wybierz profil do logowania. +Depending on the server you're connected to, you may have to register for an account on their website.=W zależnoÅ›ci od serwera z którym siÄ™ łączysz, może być wymagana rejestracja na ich portalu. + +[ScreenSaveSync] +Choosing NO will discard your changes.=Wybranie NIE anuluje zmiany. +Would you like to save these changes?=Czy chciaÅ‚byÅ› zapiać te zmiany? +You have changed the timing of=ZmieniÅ‚eÅ› timing + +[ScreenWithMenuElements] +; Put all help text in this one group and have metrics look up the strings here. That will help make sure +; that strings are in a consistent style and that strings aren't duplicated. +HelpTextNormal=Użyj &MENULEFT;&MENURIGHT; by wybrać, i naciÅ›nij &START; +HelpTextSelectMusic=Użyj &MENULEFT;&MENURIGHT; by wybrać, i naciÅ›nij &START; +HelpTextDifficultyPart=&UP;&UP; Å‚atwiejszy poziom &DOWN;&DOWN; trudniejszy poziom +HelpTextOptions=&MENUUP;&MENUDOWN; wiersz &MENULEFT;&MENURIGHT; zmieÅ„ &START; zatwierdź +HelpTextOptionsAndBack=&MENUUP;&MENUDOWN; wiersz &MENULEFT;&MENURIGHT; zmieÅ„ &START; zatwierdź &BACK; cofnij +HelpTextOptionsSimple=&MENUUP;&MENUDOWN; zmieÅ„ &START; zatwierdź +HelpTextOptionsSimpleAndBack=&MENUUP;&MENUDOWN; wiersz &START; zatwierdź &BACK; cofnij +HelpTextSort=&UP;&DOWN;&UP;&DOWN; zmiana sortowania +HelpTextContinue=NaciÅ›nij dowolny klawisz. NaciÅ›nij ESCAPE by zakoÅ„czyć. +HelpTextEvaluation=NaciÅ›nij &START; by kontynuować +HelpTextScreenshot=NaciÅ›nij &SELECT; by zapisać ekran. +HelpTextTestInput=NaciÅ›nij dowolny klawisz. NaciÅ›nij ESCAPE by zakoÅ„czyć. +HelpTextTestLights=NaciÅ›nij &MENULEFT;&MENURIGHT; by zmienić Å›wiatÅ‚a. NaciÅ›nij ESCAPE by zakoÅ„czyć. +HelpTextTextEntry=Wpisz wartość przy użyciu klawiatury. NaciÅ›nij Enter by zakoÅ„czyć. +HelpTextMapControllers=Użyj klawiszy strzaÅ‚ek do nawigacji, ENTER by przydzielić, SPACJĘ by wyczyÅ›cić pole::NaciÅ›nij ESCAPE by zakoÅ„czyć. +HelpTextOnline=setepmaniaonline.eu by połączyć siÄ™z oficjalnym Europejskim Serwerem Stepmania Online.:: Sprawdź www.stepmaniaonline.eu w celu rejestracji konta. +HelpTextNetSelectMusic=Ctrl + Enter by wybrać pokój/piosenkÄ™::&UP; Opcje Gracza +HelpTextBookkeeping=NaciÅ›nij &MENULEFT;&MENURIGHT; by przeglÄ…dać dane. NaciÅ›nij ESCAPE by zakoÅ„czyć. + +[ScreenSelectGame] +HeaderText=Wybierz GrÄ™ +HeaderSubText=Dla każdego coÅ› miÅ‚ego. + +[ScreenSelectGroup] +ALL MUSIC=CAÅA MUZYKA + +[ScreenSelectMusic] +HeaderText=Wybierz MuzykÄ™ +HeaderSubText=Nie ma czego siÄ™ bać. Wybierz to co Ci siÄ™ podoba. + +[ScreenSelectCourse] +HeaderText=Wybierz Maraton + +[ScreenSelectGroup] +HeaderText=Wybierz GrupÄ™ + +[ScreenSelectStyle] +HeaderText=Wybierz Styl +HeaderSubText=Pokaż w czym jesteÅ› dobry. + +[ScreenSelectPlayMode] +NormalExplanation=WYBIERZ SWOJE\nULUBIONE PIOSENKI +NonstopExplanation=PRZEJDŹ PIOSENKI\nOD POCZÄ„TKU DO KOŃCA +ChallengeExplanation=NIE ZGUB\nZBYT WIELU KROKÓW +SurvivalExplanation=POKONAJ LICZNIK\nBY WYGRAĆ +EndlessExplanation=TAŃCZ\nAÅ» PADNIESZ +HeaderText=Wybierz Tryb +HeaderSubText=Zaczynajmy. Na pewno dasz radÄ™. + +[ScreenServiceAction] +%d added=%d dodano +%d copied=%d skopiowano +%d overwritten=%d nadpisano +%d deleted=%d skasowano +%d edits cleared, %d errors.=%d edycji wyczyszczono, %d błędów. +%d failed=%d niewczytano +%d ignored=%d zignowowano +Bookkeeping data cleared.=Statystyki wyczyszczone. +Copied from P%d card:=Skopiowane z karty P%d: +Copied to P%d card:=Skopiowane na kartÄ™ P%d: +Edits not cleared - No memory cards ready.=Edycje nieusuniÄ™te - Brak karty. +Edits not copied - No memory cards ready.=Edycje nieskopiowane - Brak karty. +Error saving machine stats to P%d card.=Błąd podczas zapisu statystyk na kartÄ™ P%d. +Machine stats cleared.=Statystyki maszyny usuniÄ™te. +Machine stats loaded from P%d card.=Statystyki maszyny wczytane z karty P%d. +Machine stats saved to P%d card.=Statystyki maszyny zapisane na kartÄ™ P%d. +Preferences reset.=Zresetowano ustawienia. +Stats not loaded - No memory cards ready.=Statystyki niewczytane - Brak karty. +Stats not saved - No memory cards ready.=Statystyki niezapisane - Brak karty. +The profile on P%d card contains corrupt or tampered data.=Profil na karcie P%d zawiera uszkodzone lub modyfikowane rÄ™cznie dane. +There is no machine profile on P%d card.=Na karcie P%d nie ma żadnych profili maszyny. + +[ScreenSyncOverlay] +AutoPlay=AutoPlay +AutoPlayCPU=AutoPlayCPU +AutoSync Machine=AutoSync. Machine +AutoSync Song=AutoSync. Song +AutoSync Tempo=AutoSync. Tempo +Can't sync while playing a course.=Nie można synchronizować podczas maratonu. +Sync changes reverted.=Przywrócono stare ustawienia synchronizacji. +Revert sync changes=Przywróć stare ustawienia synchronizacji +Current BPM - smaller/larger=Bieżące BPM - wiÄ™ksze/mniejsze +Song offset - notes earlier/later=Offset Piosenki - strzaÅ‚ki wczeÅ›niej/później +Machine offset - notes earlier/later=Offset Maszyny - strzaÅ‚ki wczeÅ›niej/później +(hold Alt for smaller increment)=(przytrzymaj Alt by zmniejszyć przyrost wartoÅ›ci) +Old offset=Stary offset +New offset=Nowy offset +Collecting sample=Zbierane próbki +Standard deviation=Odchylenie standardowe + +[ScreenSystemLayer] +CreditsCardChanged=PODMIENIONA KARTA +CreditsCardChecking=SPRAWDZANIE KARTY +CreditsCardMountFailed=BÅÄ„D PODÅÄ„CZENIA +CreditsCardNoName=Anonim +CreditsCardReady=GOTOWE +CreditsCardRemoved=KARTA WYJĘTA +CreditsCardTestFailed=BÅÄ„D ZAPISU +CreditsCardTooLate=ZA PÓŹNO WÅOÅ»ONA +CreditsCredits=KREDYT(Y) +CreditsMax=(MAX) +CreditsFreePlay=DARMOWA GRA +CreditsInsertCard=WÅÓŻ KARTĘ +CreditsLoadFailed=BÅÄ„D PODPISU +CreditsLoadedFromLastGoodAppend= (backup) +CreditsNotPresent=NIEOBECNY +CreditsPressStart=NACIÅšNIJ START + +[ScreenTestFonts] +# W is annoying: +Text1=WWWWWWWWWWWW +# Realistic excerpt: +Text2=Ta dyskusja przebiegaÅ‚a mniej wiÄ™cej tak: &oq;Odmawiam udowodnienia, że istniejÄ™&oq; mówi Bóg, &oq; dowód niszczy wiarÄ™, a bez wiary nie istniejÄ™.&cq;::::&oq;Ale,&cq; mówi CzÅ‚owiek, &oq; Rybka Babel to niezÅ‚y dowód, prawda? Nie mogÅ‚a wyewoluować przypadkiem. Dowodzi, że istniejesz i cytujÄ…c twój argument, wiÄ™c ty nie. QED.&cq;::::&oq;No masz,&cq; mówi Bóg, &oq; Nie pomyÅ›laÅ‚em o tym&cq; i szybko zniknÄ… w pufniÄ™ciu logiki. + +# Numbers test: +Text3=01234567890 ::100.00% 12345% 9:00 50/100 +# General symbol test, and test alignment against another font. +Text4=$50% (Test) "test's" &oq;test's&cq;, #1! 1+2-3*4/5.6::3:00 a; b; 5<6 6>5 2^3=8 Czemu? test@example.com::[Foo] {bar} NaciÅ›nij &START; 3|4 &oq;1_2_3&cq; +Text5= + +[ScreenTestInput] +Controller=Kontroler +not mapped=niezmapowany +secondary=drugorzÄ™dne + +[ScreenTestLights] +Auto Cycle=Automatyczne Zapalanie +Manual Cycle=RÄ™czne Zapalanie +cabinet light=Å›wiatÅ‚a automatu +controller light=Å›wiatłą mat + +[ScreenTextEntry] +Backspace=Backsp +Cancel=Cofnij +Done=Gotowe +HeaderText= +Space=Spacja +"%s" is an invalid floating point value.="%s" jest nieprawidÅ‚owÄ… wartoÅ›ciÄ… zmiennoprzecinkowÄ…. +AnswerCaret=_ +AnswerBlank= + +[ScreenTitleMenu] +%d songs in %d groups=%d piosenek w %d grupach +%d courses in %d groups=%d maratonów w %d grupach +%d unlocks=%d odblokowane +Gametype:=Rodzaj Gry: +Difficulty:=Poziom TrudnoÅ›ci: +Announcer=Komentator +Play Online=Gra Sieciowa +Edit/Share=Edycja +Exit=WyjÅ›cie +Game Start=Start +Jukebox=Odtwarzacz +Select Game=Wybór trybu gry +Theme=Motyw graficzny +Credits=Autorzy +Options=Opcje +Setup=Szybka konfiguracja + +[SmpackageExportDlg] +Error adding file '%s'.=Błąd podczas dodawania pliku '%s'. + +[SongManager] +Loading courses...=Åadowanie maratonów... +Loading songs...=Åadowanie piosenek... +Reloading...=PrzeÅ‚adowanie... +Unloading songs...=WyÅ‚adowanie piosenek... +Unloading courses...=WyÅ‚adowanie maratonów... +The folder "%s" appears to be a song folder. All song folders must reside in a group folder. For example, "Songs/Originals/My Song".=Katalog "%s" wyglÄ…da jak katalog piosenki. Wszystkie katalogi z piosenkami muszÄ… siÄ™ znajdować w kataogu Grupy. Np.: Dopiero "Songs/Moje/Moja Piosenka" może zawierać pliki muzyczne (mp3, ogg...), pliki kroków (.ssc, .sm, .dwi, .kfs) i inne powiÄ…zane pliki. + +[SongUtil] +You must supply a name for your new edit.=Musisz podać nazwÄ™ dla nowej edycji. +The name you chose conflicts with another edit. Please use a different name.=Wybrana nazwa konfliktuje z już istniejÄ…cÄ… edycjÄ…. ProszÄ™ podać nowÄ…. +The edit name cannot contain any of the following characters: %s=Nazwa edycji nie może zawierać znaków: %s +The step author's name cannot contain any of the following characters: %s=Pole Autor Kroków nie może zawierać znaków: %s + +[SongSort] +FewestPlays=Najrzadziej Wybierane +LowestGrades=Najniższe Oceny +MostPlays=Najczęściej Wybierane +Randomize=Losuj +TopGrades=Najwyższe Oceny + +[Sort] +NotAvailable=N/D +Other=Inne + +[SortOrder] +AllCourses=Wszystkie Maratony +Artist=Artysta +BPM=BPM +Endless=NieskoÅ„czony +Genre=Gatunek +Group=Grupa +ModeMenu=Tryby Sortowania +Nonstop=Nonstop +Oni=Oni +Popularity=Najczęściej Wybierane +Preferred=Preferowane +Title=TytuÅ‚ +TopGrades=Najwyższa Ocena +Roulette=Ruletka +Length=Czas Utworu +Recent=Ostatnio Wybrane +BeginnerMeter=Poziom PoczÄ…tkujÄ…cy +EasyMeter=Poziom Åatwy +MediumMeter=Poziom Normalny +HardMeter=Poziom Trudny +ChallengeMeter=Poziom Ekspert +DoubleEasyMeter=Poziom Åatwy (Double) +DoubleMediumMeter=Poziom Normalny (Double) +DoubleHardMeter=Poziom Trudny (Double) +DoubleChallengeMeter=Poziom Ekspert (Double) + +[StepMania] +Announcer=Komentator +Couldn't open any loading windows.=Nie udaÅ‚o siÄ™ otworzyć żadnego okna Å‚adowania. +Fullscreen=PeÅ‚ny Ekran +Initializing %s...=Inicjalizacja %s... +No video renderers attempted.=Nie podjÄ™to próby inicjalizacji rendererów wideo. +NoSmoothLines=Brak wygÅ‚adzania krawÄ™dzi. +NoVsync=Brak synchronizacji pionowej (Vsynch) +Please do not file this error as a bug! Use the web page below to troubleshoot this problem.=ProszÄ™ nie zgÅ‚aszać tego problemu jako błąd. Użyj informacji ze strony www by rozwiÄ…zać problem. +Service switch pressed=NaciÅ›niÄ™to przycisk serwisowy. +SmoothLines=GÅ‚adkie krawÄ™dzie. +There was an error while initializing your video card.=ZaistniaÅ‚ błąd podczas inicjalizacji twojej karty graficznej. +Unknown video renderer value: %s=Nieznana wartość renderera wideo: %s +Video Driver: %s=Sterownik Obrazu: %s +Vsync=Synchronizacja pionowa (Vsync) +Windowed=Tryb Okienkowy +color=kolor +texture=tekstura + +[StepsType] +dance-couple=couple +dance-double=double +dance-single=single +dance-solo=solo +dance-threepanel=3panel +dance-routine=routine +lights-cabinet=Lights +# SSC +Dance_Single=Single +Dance_Double=Double +Dance_Threepanel=3 Panels + +[TapNoteScore] +AvoidMine=UnikniÄ™ta Miny +HitMine=Trafiona Miny +Miss=Puszczona +CheckpointMiss=Puszczony Hold +CheckpointHit=Trafiony Hold +None=Å»adna +W1=Flawless +W2=Perfect +W3=Great +W4=Good +W5=Boo + +[ThemeManager] +Reloaded metrics=PrzeÅ‚adowano parametry +Reloaded metrics and textures=PrzeÅ‚adowano parametry i tekstury +Reloaded scripts=PrzeÅ‚adowano skrypty +Reloaded overlay screens=PrzeÅ‚adowano ekrany nakÅ‚adki + +[WorkoutManager] +You must supply a name for your workout.=Musisz nadać nazwÄ™ dla treningu. +The name you chose conflicts with another workout. Please use a different name.=Wybrana nazwa konfliktuje z już istniejÄ…cÄ…. ProszÄ™ podać innÄ…. +The workout name cannot contain any of the following characters: %s=Nazwa treningu nie może zawierać znaków: %s +%d/%d songs enabled=%d/%d włączonych piosenek + +[Dialog-Add A Comment] +Add A Comment=Dodaj Komentarz +Cancel=Przerwij +OK=OK +Package Comment=Komentarz Pakietu +You can add a message to display before a user installs your package.=Możesz dodać wiadomość, która siÄ™ wyÅ›wietli dla użytkownika przed instalacjÄ… pakietu. +Show a comment=Pokaż komentarz +Don't display this dialog in the future=Nie pokazuj wiÄ™cej tego komunikatu + +[Dialog-Change Game Settings] +Cancel=Przerwij +Change Game Settings=ZmieÅ„ Ustawienia Gry +Default (recommended)=DomyÅ›lne (zalecane) +Direct3D=Direct3D +DirectSound Hardware=SprzÄ™t DirectSound +DirectSound Software=Oprogramowanie DirectSound +Graphics API=API Grafiki +Log to Disk=Loguj na dysk +Other=Inne +Force 60Hz Refresh=WymuÅ› 60Hz OdÅ›wieżanie +Null (no sound)=Null (bez dźwiÄ™ku) +OK=OK +OpenGL=OpenGL +Show Log Window=Pokaż okno log`a +Sound API=API DźwiÄ™ku +Tip: Change these only if you experience problems when using the default settings.=Sugestia: Te opcje zmieniaj tylko jeÅ›li wystÄ…piÄ… problemy z domyÅ›lnymi ustawieniami. +WaveOut=WaveOut + +[Dialog-Create Language] +Cancel=Przerwij +Choose a language=Wybierz jÄ™zyk +Create Language=Stwórz jÄ™zyk +OK=OK + +[Dialog-Edit Installations] +Add=Dodaj +Add New Installation=Dodaj nowÄ… InstalacjÄ™ +Cancel=Przerwij +Current Installations=Bieżące Instalacje +Current Installations (the top installation is the default)=Bieżące Instalacje (najwyższa instalacja jest domyÅ›lna) +Edit Installations=Edytuj Instalacje +Enter the complete path to a StepMania or DWI installation\ne.g. "C:\Program Files\StepMania"=Podaj kompletnÄ… Å›cieżkÄ™ do zainstalowanej instancji Stepmanii lub DWI, np.: "C:\Program Files\StepMania" +Make Default=Ustaw jako domyÅ›lny +OK=OK +Remove=UsuÅ„ +The top installation is the default.=Najwyższa instalacja jest domyÅ›lna. + +[Dialog-Export Packages] +Close=Zamknij +Edit Installations=Edytuj Instalacje +Export As Individual=Eksportuj Pojedynczo +Export As One=Eksportuj do Jednego Pakietu +Export Packages=Eksportuj Pakiety +Installation=Instalacja +Launch Game=Uruchom GrÄ™ +Open Program Folder=Otwórz Folder Programu +Select Installation:=Wybierz InstalacjÄ™: +Tree2=Drzewo2 + +[Dialog-Language Translations] +1) Create a new language\n2) Export the theme strings to a CSV\n3) Edit the CSV using Excel or a text editor\n4) Import the CSV file back into the same language=1) Stwórz nowy jÄ™zyk\n2) Wyeksportuj ciÄ…gi z Theme`u do CSV\n3)Edytuj CSV przy pomocy Excel`a lub edytora tekstu\n4) Zaimportuj plik CSV do jÄ™zyka +Check Language=Sprawdź JÄ™zyk +Close=Zamknij +Create Language=Stwórz JÄ™zyk +Delete Language=Skasuj JÄ™zyk +Export CSV=Eksport do CSV +Export already translated strings=Eksportuj już przetÅ‚umaczone ciÄ…gi +Import CSV=Import z CSV +Language Translations=PrzetÅ‚umaczone JÄ™zyki +Languages=JÄ™zyki +Need translation:=Potrzebne tÅ‚umaczenie: +Selection details=Szczegóły zaznaczenia +Themes=Theme`y +Total Strings:=Wszystkie CiÄ…gi: + +[Dialog-StepMania Tools] +Close=Zamknij +Export As Individual=Eksportuj Pojedynczo +Export As One=Eksportuj do Jednego Pakietu +Export Packages=Eksportuj Pakiety +Launch Game=Uruchom GrÄ™ +Open Program Folder=Otwórz Folder Programu +Select Installation:=Wybierz InstalacjÄ™: +StepMania Tools=NarzÄ™dzia Stepmanii +Tree2=Drzewo2 + +[Dialog-StepMania Tools Main Menu] +Change Preferences=ZmieÅ„ Ustawienia +Change the graphics API, sound API, and other settings that the game will use.=ZmieÅ„ API Graficzne, API DźwiÄ™kowe i inne ustawienia używane przez grÄ™. +Clear Mappings=Wyczyść Mapowanie +Clear Preferences=Wyczyść Ustawienia +Clear all preferences if you've made changes and the game won't start.=Przywraca wszystkie ustawienia jeÅ›li po wprowadzonych zmianach gra nie startuje. +Create .smzip package files to share with other users.=Tworzy pakiet .smzip do wymiany z innymi użytkownikami. +Create .smzip package files to share with other users. Packages can contain songs, courses, themes, backgrounds, and more.=Tworzy pakiet .smzip do wymiany z innymi użytkownikami. Pakiety mogÄ… zawierać piosenki, maratony, theme`y, tÅ‚a, itp. +Create Song=Utwórz PiosenkÄ™ +Create a new or manage existing language translations.=Tworzy nowe lub zarzÄ…dza istniejÄ…cymi tÅ‚umaczeniami. +Create a new song in from your favorite mp3 or ogg music file.=Tworzy nowÄ… piosenkÄ™ z pliku mp3 lub ogg. +Create and Share=Tworzenie i Wymiana +Edit Installations=Edycja Instalacji +Erase all of your keyboard and joystick mappings if you've made a mistake.=Wymazanie wszystkich ustawieÅ„ i mapowaÅ„ joystików, padów i mat. +Exit=WyjÅ›cie +Export Packages=Eksport Pakietów +Installation=Instalacja +Languages=JÄ™zyki +Launch Game=Uruchom GrÄ™ +Open Preferences=Otwórz Ustawienia +Open the preferences file to make changes by hand.=Otwiera plik z ustawieniami, które można nanieść rÄ™cznie. +StepMania Tools Main Menu=NarzÄ™dzia Stepmanii Menu Główne +Troubleshooting=RozwiÄ…zywanie Problemów + +[ChangeGameSettings] +Error writing file '%s': %s=Błąd podczas zapisu pliku '%s': %s + +[Dialog-Name Your Package] +Name Your Package=Nazwij swój pakiet +Enter a name for your new package:=Wprowadź nazwÄ™ nowego pakietu: +OK=OK +Cancel=Przerwij +Note: leave off the ".smzip" extention=Uwaga: wpisz bez rozszerzenia ".smzip" + +[Dialog-Install a package] +Finish >=ZakoÅ„cz > +Cancel=Przerwij +< Back=< Cofnij +Install a package=Instaluj pakiet +Edit Installations=Edytuj Instalacje +You have chosen to install the package:=WybraÅ‚eÅ› do zainstalowania pakiet: +This package contains the following files:=Ten pakiet zawiera nastÄ™pujÄ…ce pliki: +The package will be installed in the following program folder:=Pakiet zostanie zainstalowany do folderu: + +[PlayerNumber] +P1=P1 +P2=P2 + +[UnlockRewardType] +Song=Piosenka +Steps=Kroki +StepsType=TypKroków +Course=Maraton +Modifier=Modyfikator + +[RageDisplay_Legacy] +Obtain an updated driver from your video card manufacturer.=ZdobÄ…dź aktualny sterownik od producenta twojej karty graficznej. +GLDirect was detected. GLDirect is not compatible with this game and should be disabled.=Wykryto GLDirect. GLDirect nie jest kompatybilny z tÄ… grÄ… i powinien zostać wyłączony. + +[RageDisplay_D3D] +DirectX 8.1 or greater is not installed. You can download it from:=Brak zainstalowanego DirectX 8.1 (lub wyższego). Można go pobrać z: +Your system is reporting that Direct3D hardware acceleration is not available. Please obtain an updated driver from your video card manufacturer.=Twój system raportuje brak dostÄ™pnej akceleracji Direct3D. ZdobÄ…dź aktualny sterownik od producenta twojej karty graficznej. + +[RageDisplay] +SetVideoMode failed:=SetVideoMode nie udane: + +[Dialog-Prompt] +Prompt=Linia poleceÅ„ +OK=OK +&Don't display this message again=&Nie wyÅ›wietlaj tej informacji ponownie +Error=Błąd + +[Dialog-Uninstall Old Packages] +Uninstall Old Packages=Odinstaluj Stare Pakiety +&Yes=&Tak +&No=&Nie +Cancel=Przerwij +The following packages are already installed. It is strongly recommended that they be deleted before installing this package.=Poniższe pakiety sÄ… już zainstalowane. Mocno zalecane jest ich wczeÅ›niejsze skasowanie przed instalacja tego pakietu. +Delete old packages?=Skasować stare pakiety? + +[DeviceButton] +Home=Home +End=End +Up=Góra +Down=Dół +Space=Spacja +Shift=Shift +Ctrl=Ctrl +Alt=Alt +Insert=Insert +Delete=Delete +PgUp=PgUp +PgDn=PgDn +Backslash=Backslash + +[EditHelpDescription] +Move cursor=Przesuwanie kursora +Jump measure=Przeskocz pomiar +Select region=Zaznacz region +Jump to first/last beat=Skocz do pierwszego/ostatniego beat`u +Change zoom=ZmieÅ„ powiÄ™kszenie +Play=Odtwórz +Play current beat to end=Odtwórz od bieżącego beat`u do koÅ„ca +Play whole song=Odtwórz całą piosenkÄ™ +Record=Nagraj +Set selection=Ustaw zaznaczenie +Toggle assist tick=Włącz tykniÄ™cie pomocnicze +Next/prev steps of same StepsType=NastÄ™pne/Poprzednie kroki tego samego Typu +Decrease/increase BPM at cur beat=Zmniejsz/ZwiÄ™ksz BPM na bieżącym beat`cie +Decrease/increase stop at cur beat=Zmniejsz/ZwiÄ™ksz PauzÄ™ na bieżącym beat`cie +Decrease/increase music offset=Zmniejsz/ZwiÄ™ksz Offset +Decrease/increase sample music start=Zmniejsz/ZwiÄ™ksz poczÄ…tek podglÄ…du +Decrease/increase sample music length=Zmniejsz/ZwiÄ™ksz dÅ‚ugość podglÄ…du +Play sample music=Odtwórz podglÄ…d +Add/Edit Background Change=Dodaj/Edytuj ZmianÄ™ TÅ‚a (Tylko w trybie Timing Piosenki) +Insert beat and shift down=Wstaw beat i przesuÅ„ w dół. +Shift BPM changes and stops down one beat=PrzesuÅ„ zmiany BPM i przesuÅ„ w dół o jeden beat +Delete beat and shift up=Skasuj beat i przesuÅ„ w górÄ™ +Shift BPM changes and stops up one beat=PrzesuÅ„ zmiany BPM i przesuÅ„ w górÄ™ o jeden beat +Cycle between tap notes=Przełącz rodzaj nuty +Lay mine=Stwórz minÄ™ +Lay lift=Stwórz lift +Add to/remove from right half=Dodaj/UsuÅ„ z prawej poÅ‚owy +Switch Timing=Przełącz Timing +Switch player (Routine only)=Przełącz gracza (tylko w trybie Routine) + +[Grade] +Tier01=AAAA +Tier02=AAA +Tier03=AA +Tier04=A +Tier05=B +Tier06=C +Tier07=D +Tier08=D +Failed=F +None= + +[ScreenOptionsEditCourse] +-Empty-=-Puste- +Song=Piosenka +Steps=Kroki +minutes=minuty +You must enable at least %d songs.=Musisz włączyć przynajmniej %d piosenki. + +[LowLevelWindow_Win32] +OpenGL hardware acceleration is not available.=SprzÄ™towe przyspieszenie OpenGL niedostÄ™pne. + +[Premium] +Off=Wyłącz +DoubleFor1Credit=Double za 1 kredyt +2PlayersFor1Credit=2 Graczy z 1 kredyt + +[Stage] +1st=1sza +2nd=2ga +3rd=3cia +4th=4ta +5th=5ta +6th=6ta +Next=NastÄ™pna +Final=FinaÅ‚ +Extra1=Ekstra +Extra2=Dodatkowa +Nonstop=Nonstop +Oni=Oni +Endless=NieskoÅ„czony +Event=Impreza +Demo=Demonstracja + +[JudgmentLine] +W1=Flawless +W2=Perfect +W3=Great +W4=Good +W5=Boo +Held=Held +MaxCombo=Max Combo +Miss=Miss + +[NativeLanguageNames] +Afar=Afar +Abkhazian=????? ?????? +Afrikaans=Afrikaans +Amharic=Amharic +Arabic=??????? +Assamese=Assamese +Aymara=Aymara +Azerbaijani=az?rbaycan +Bashkir=Bashkir +Byelorussian=?????????? +Bulgarian=????????? +Bihari=Bihari +Bislama=Bislama +Bengali=Bengali +Tibetan=Tibetan +Breton=Breton +Catalan=Catala +Corsican=Corsican +Czech=ÄeÅ¡tina +Welsh=Cymraeg +Danish=Dansk +German=Deutsch +Bhutani=Bhutani +Greek=???????? +English=English +Esperanto=Esperanto +Spanish=Espanol +Estonian=Eesti +Basque=euskera +Persian=????? +Finnish=Suomi +Fiji=Fiji +Faeroese=Faeroese +French=Français +Frisian=Frisian +Irish=Gaeilge +Gaelic=Gaelic +Galician=Galego +Guarani=Guarani +Gujarati=Gujarati +Hausa=Hausa +Hebrew=????? +Hindi=????? +Croatian=Hrvatski +Hungarian=Magyar +Armenian=??????? +Interlingua=Interlingua +Indonesian=Bahasa indonesia +Interlingue=Interlingue +Inupiak=Inupiak +Indonesian=Bahasa indonesia +Icelandic=Ãslenska +Italian=Italiano +Hebrew=????? +Japanese=??? +Yiddish=Yiddish +Javanese=Javanese +Georgian=Georgian +Kazakh=????? +Greenlandic=Greenlandic +Cambodian=Cambodian +Kannada=????? +Korean=??? +Kashmiri=Kashmiri +Kurdish=Kurdish +Kirghiz=?????? +Latin=Latin +Lingala=Lingala +Laothian=Laothian +Lithuanian=LietuviÅ¡kai +Latvian=LatvieÅ¡u +Malagasy=Malagasy +Maori=Maori +Macedonian=?????????? +Malayalam=Malayalam +Mongolian=Mongolian +Moldavian=Moldavian +Marathi=Marathi +Malay=Bahasa melayu +Maltese=Malti +Burmese=Burmese +Nauru=Nauru +Nepali=Nepali +Dutch=Nederlands +Norwegian=Norsk +Occitan=Occitan +Oromo=Oromo +Oriya=Oriya +Punjabi=Punjabi +Polish=Polski +Pashto=???? +Portuguese=portugues +Quechua=Quechua +Rhaeto-Romance=Rhaeto-Romance +Kirundi=Kirundi +Romanian=Română +Russian=Pycc??? +Kinyarwanda=Kinyarwanda +Sanskrit=Sanskrit +Sindhi=Sindhi +Sangro=Sangro +Serbo-Croatian=Serbo-Croatian +Singhalese=Singhalese +Slovak=SlovenÄina +Slovenian=SlovenÅ¡Äina +Samoan=Samoan +Shona=Shona +Somali=Somali +Albanian=Shqip +Serbian=Srpski +Siswati=Siswati +Sesotho=Sesotho +Sudanese=Sudanese +Swedish=svenska +Swahili=Kiswahili +Tamil=Tamil +Tegulu=?????? +Tajik=Tajik +Thai=??????? +Tigrinya=Tigrinya +Turkmen=Turkmen +Tagalog=Tagalog +Setswana=Setswana +Tonga=Tonga +Turkish=T?rkçe +Tsonga=Tsonga +Tatar=Tatar +Twi=Twi +Ukrainian=?????????? +Urdu=???? +Uzbek=o'zbek +Vietnamese=Tie´ng Vie?t +Volapuk=Volapuk +Wolof=Wolof +Xhosa=isiXhosa +Yiddish=Yiddish +Yoruba=Yorubá +Chinese=?? +Zulu=isiZulu + +[ScreenPlayerOptions] +HeaderText=Wybierz modyfikatory +HeaderSubText=Utrudnij grÄ™ by sprawdzić swoje umiejÄ™tnoÅ›ci! + +[ScreenSongOptions] +HeaderText=Opcje piosenki +HeaderSubText=WybraÅ‚eÅ› Å›wietnÄ… piosenkÄ™... teraz zataÅ„czmy! + +[StageAward] +FullComboW3=PeÅ‚ne Combo! +SingleDigitW3=Pojedyncza Cyfra\nGreat`ów! +OneW3=Jeden Great! +FullComboW2=PeÅ‚ne Combo\nna Perfect`ach!! +SingleDigitW2=Pojedyncza Cyfra\nPerfectów`ów! +OneW2=Jeden Perfect!! +FullComboW1=PeÅ‚ne Combo\nna Fantastic`ach !!! +80PercentW3=80% Great`ów! +90PercentW3=90% Great`ów!! +100PercentW3=100% Great`ów!!! + +[PeakComboAward] +1000=Szczytowe Combo 1000! +2000=Szczytowe Combo 2000! +3000=Szczytowe Combo 3000! +4000=Szczytowe Combo 4000! +5000=Szczytowe Combo 5000!! +6000=Szczytowe Combo 6000!! +7000=Szczytowe Combo 7000!! +8000=Szczytowe Combo 8000!! +9000=Szczytowe Combo 9000!! +10000=Szczytowe Combo 10000!!! + +[ScreenOptionsExportPackage] +HeaderText=Eksport Pakietów +HeaderSubText=Podziel siÄ™ swojÄ… twórczoÅ›ciÄ… z innymi + +[ScreenOptionsEdit] +HeaderText=Edycja Piosenek +HeaderSubText=Pokaż swoja kreatywność + +[ScreenMiniMenuEditHelp] +HeaderText=Pomoc do Edycji + +[ScreenMiniMenuMainMenu] +HeaderText=Menu Główne + +[ScreenMiniMenuAreaMenu] +HeaderText=Menu Zaznaczenia + +[ScreenMiniMenuStepsInformation] +HeaderText=Informacje o krokach + +[ScreenMiniMenuSongInformation] +HeaderText=Informacji Piosenki + +[ScreenMiniMenuBackgroundChange] +HeaderText=Zmiana TÅ‚a + +[ScreenMiniMenuInsertTapAttack] +HeaderText=Wstaw Atak + +[ScreenMiniMenuInsertCourseAttack] +HeaderText=Wstaw Atak + +[ScreenMiniMenuCourseDisplay] +HeaderText=WyÅ›wietl Maratony + +[CourseUtil] +You must supply a name for your course.=Musisz nadać nazwÄ™ dla maratonu +The course name cannot contain any of the following characters: %s=Nazwa maratonu nie może zawierać znaków: %s +The name you chose conflicts with another course. Please use a different name.=Podana nazwa konfliktuje z już istniejÄ…cÄ…. ProszÄ™ podać innÄ…. +[ScreenProfileSave] +HeaderText= +[ScreenTestInput] +HeaderText=Test Kontrolerów +[ScreenMiniMenuContext] +HeaderText=! +[ScreenOptionsManageProfiles] +HeaderText=Profile +[ScreenOptionsSystemDirection] +HeaderText=Ustawienia Systemu +[ScreenOptionsUI] +HeaderText=Ustawienia Interfejsu +[ScreenOptionsArcade] +HeaderText=Opcje Automatowe +[ScreenOptionsInput] +HeaderText=Opcje WejÅ›cia +[ScreenOptionsTheme] +HeaderText=Opcje Motywu Graficznego +[ScreenOptionsManageCourses] +HeaderText=Maratony +[ScreenEditOptions] +HeaderText= +[ScreenOptionsEditCourse] +HeaderText=Edycja Maratonów +HelpText=&MENUUP;&MENUDOWN; Poruszanie &MENULEFT;&MENURIGHT; Zmiana wartoÅ›ci +[ScreenOptionsCourseOverview] +HeaderText=PrzeglÄ…d Maratonów +[ScreenSelectProfile] +HeaderText=Wybierz Profil +[ScreenSelectPlayStyle] +HeaderText=Wybierz Styl +[ScreenGameInformation] +HeaderText=Informacje +[StepsDisplay StepsType] +Dance_Single=Single +Dance_Double=Double +Dance_Couple=Couple +Dance_Solo=Solo +Dance_Routine=Routine +Dance_Threepanel=3 Panels +Pump_Single=Single +Pump_Double=Double +Pump_Halfdouble=Half-Double +Pump_Couple=Couple +Pump_Routine=Routine +Kb7_Single=KB7 +Ez2_Single=Single +Ez2_Double=Double +Ez2_Real=Real +Para_Single=Single +Ds3ddx_Single=Single +Bm_Single5=5 Klawiszy +Bm_Double5=10 Klawiszy +Bm_Single7=7 Klawiszy +Bm_Double7=14 Klawiszy +Maniax_Single=Single +Maniax_Double=Double +Techno_Single4=Single 4 +Techno_Single5=Single 5 +Techno_Single8=Single 8 +Techno_Double4=Double 4 +Techno_Double5=Double 5 +Pnm_Five=5 Przycisków +Pnm_Nine=9 Przycisków +Guitar_Five=5 Progów +Karaoke=Karaoke +Lights_Cabinet=ÅšwiatÅ‚a +[StepsListDisplayRow StepsType] +Dance_Single=Single +Dance_Double=Double +Dance_Couple=Couple +Dance_Solo=Solo +Dance_Routine=Routine +Dance_Threepanel=3panel +Pump_Single=Single +Pump_Double=Double +Pump_Halfdouble=Half-Double +Pump_Couple=Couple +Pump_Routine=Routine +Kb7_Single=KB7 +Ez2_Single=Single +Ez2_Double=Double +Ez2_Real=Real +Para_Single=Single +Ds3ddx_Single=Single +Bm_Single5=5 Keys +Bm_Double5=10 Keys +Bm_Single7=7 Keys +Bm_Double7=14 Keys +Maniax_Single=Single +Maniax_Double=Double +Techno_Single4=Single 4 +Techno_Single5=Single 5 +Techno_Single8=Single 8 +Techno_Double4=Double 4 +Techno_Double5=Double 5 +Pnm_Five=5 Button +Pnm_Nine=9 Button +Guitar_Five=5 Frets +Karaoke=Karaoke +Lights_Cabinet=ÅšwiatÅ‚a + +[ScreenHowToInstallSongs] +HeaderText=Instalowanie Piosenek + +[ThemePrefs] +IniFileMissing=Brak pliku ini. Nie mogÄ™ czytać ani zapisywać na dysk :( +UnknownPreference=Nieznane ustawienie "%s" + +[ThemePrefsRows] +ChoicesSizeMismatch=Opcje i WartoÅ›ci majÄ… różne rozmiary (%d, %d) +NoDefaultInValues=Ustawienie "%s" nie posiada wartoÅ›ci odpowiadajÄ…cej domyÅ›lnej. +TypeMismatch=Niezgodność typów pomiÄ™dzy domyÅ›lnÄ… (%s) i wartoÅ›ciÄ… %d (%s) +>>>>>>> inne \ No newline at end of file diff --git a/Themes/default/Languages/pl.ini b/Themes/default/Languages/pl.ini new file mode 100755 index 0000000000..1416b30994 --- /dev/null +++ b/Themes/default/Languages/pl.ini @@ -0,0 +1,183 @@ +[Screen] +HelpText=&BACK; WyjÅ›cie &START; Zatwierdź &SELECT; Opcje &MENULEFT;&MENURIGHT;&MENUUP;&MENUDOWN; Wybierz + +[ScreenWithMenuElements] +HelpText=&BACK; WyjÅ›cie &START; Zatwierdź &MENULEFT;&MENURIGHT; Wybierz + +[ScreenTitleMenu] +HelpText=&BACK; WyjÅ›cie &START; Zatwierdź &MENUUP;&MENUDOWN; Wybierz +Network OK=Sieć OK +Offline=Brak połączenia +Connected to %s=Podłączony do %s +CurrentGametype=Tryb gry: %s +LifeDifficulty=Zużycie energii: %s +TimingDifficulty=Ocena trafieÅ„: %s + +[ScreenTitleJoin] +HelpText=NaciÅ›nij &START; by rozpocząć grÄ™ +HelpTextJoin=NaciÅ›nij &START; by rozpocząć grÄ™ +HelpTextWait=Wrzuć żeton... +EventMode=Tryb Imprezy +JointPremiumMain=Premia ÅÄ…czona +JointPremiumSecondary=Dwóch graczy może grac za jeden kredyt! +DoublesPremiumMain=Podwójna Premia +DoublesPremiumSecondary=Graj w trybie Double za jeden kredyt! + +[ScreenDemonstration] +Demonstration=Demonstracja + +[ScreenQuickSetupOverview] +Explanation=Podstawowe ustawienia umożliwiajÄ… szybkie skonfigurowanie najczęściej używanych opcji + +[ScreenProfileLoad] +HelpText=... Åadowanie profili, proszÄ™ czekać ... + +[ScreenSelectProfile] +HelpText=&MENUUP;&MENUDOWN; ZmieÅ„ profil &START; Wybierz/Dołącz &BACK; Odznacz + +[ScreenSelectMaster] +HelpText=&BACK; WyjÅ›cie &START; Zatwierdź / Dołącz &MENULEFT;&MENURIGHT; Wybierz + +[ScreenSelectPlayMode] +HelpText=&BACK; WyjÅ›cie &START; Zatwierdź / Dołącz &MENULEFT;&MENURIGHT; Wybierz +EasyExplanation=Tryb dla poczÄ…tkujÄ…cych +HardExplanation=Dla ekspertów. +OldNormalExplanation=Nie za Å‚atwo, nie za trudno. +NormalExplanation=Graj w swoje ulubione piosenki! +RaveExplanation=Bitwa dwóch graczy przeciwko sobie. +ExtendedExplanation=Kilka piosenek pod rzÄ…d. +OniExplanation=Prawdziwy test umiejÄ™tnoÅ›ci. +EndlessExplanation=TaÅ„cz aż padniesz. + +[ScreenSelectPlayStyle] +HelpText=&BACK; WyjÅ›cie &START; Zatwierdź &MENULEFT;&MENURIGHT; Wybierz + +[ScreenGameInformation] +HelpText=&BACK; WyjÅ›cie &START; PomiÅ„ + +[ScreenSelectMusic] +HelpText=&BACK; WyjÅ›cie &START; Zatwierdź / Dołącz &SELECT; Magiczne kody &MENULEFT;&MENURIGHT; Wybierz::&AUXWHITE;+[LITERA] Sortowanie wg. [LITERY] +AlternateHelpText=&SELECT;+&MENULEFT;&MENURIGHT; Zmiana poziomu trudnoÅ›ci &SELECT;+&START; Wybór trybu sortowania + +[ScreenSelectCourse] +HelpText=&BACK; WyjÅ›cie &START; Zatwierdź / Dołącz &SELECT; Magiczne kody &MENULEFT;&MENURIGHT; Sekwencja ::&UP;&DOWN;&UP;&DOWN; - inne tryby maratonu. + +[ScreenOptions] +HelpText=&BACK; WyjÅ›cie &START; Zatwierdź &MENULEFT;&MENURIGHT;&MENUUP;&MENUDOWN; Wybierz + +[ScreenStageInformation] +HelpText= + +[ScreenGameplay] +HelpText= + +[ScreenEvaluation] +HelpText=&BACK; WyjÅ›cie &START; Dalej &MENULEFT;+&MENURIGHT; or &SELECT; Screenshot +LifeDifficulty=Zużycie energii: %s +TimingDifficulty=Ocena trafieÅ„: %s + +[OptionTitles] +UserPrefAutoSetStyle=Automatycznie Ustaw Styl +UserPrefNotePosition=Pozycja StrzaÅ‚ek +UserPrefComboOnRolls=NarastajÄ…ce combo w Rolls +UserPrefComboUnderField=Combo Pod StrzaÅ‚kami + +UserPrefGameplayShowScore=Pokazuj wyniki +UserPrefGameplayShowStepsDisplay=Pokazuj Kroki +UserPrefShowLotsaOptions=Ilość opcji +UserPrefLongFail=Tryb Fail`a +UserPrefFlashyCombo=BÅ‚yskajÄ…ce Combo +UserPrefGameplayFooter=Stopka Na Ekranie Gry + +[OptionExplanations] +UserPrefAutoSetStyle=Pozwala grze jednoczesne wyÅ›wietlenie trybów dla dwóch graczy a nie tylko dla jednego. Wprowadzenie zmiany możne wymagać restartu Stepmanii (lub naciÅ›niÄ™cia klawisza F2) +UserPrefNotePosition=OkreÅ›la pozycje receptorów strzaÅ‚ek podczas gry. +UserPrefComboOnRolls=Włącza naliczanie licznika Combo w sposób narastajÄ…cy dla strzaÅ‚ek typu ROLL. +UserPrefComboUnderField=OkreÅ›la czy wskaźnik Combo powinien być wyÅ›wietlany nad czy pod strzaÅ‚kami. + + +UserPrefGameplayShowScore=WyÅ›wietla lub ukrywa licznik punktów podczas gry. +UserPrefGameplayShowStepsDisplay=WyÅ›wietla lub ukrywa statystykÄ™ strzaÅ‚ek podczas gry. +UserPrefShowLotsaOptions=OkreÅ›la jak dużo modyfikatorów wyÅ›wietlić na ekranie opcji piosenki. +UserPrefLongFail=OkreÅ›la dÅ‚ugość czasu animacji ogrywanej po niezaliczanej piosence. Oryginalny (DÅ‚ugi) z SM-SSC, nowy (Krotki) +UserPrefFlashyCombo=OkreÅ›la czy licznik Combo może bÅ‚yskać czy nie. +UserPrefGameplayFooter=Włączona opcja wyÅ›wietla, ograniczajÄ…ca widoczność nadlatujÄ…cych strzaÅ‚ek, stopkÄ™ u doÅ‚u ekranu. + +ScoringType=Opcja pozwala na okreÅ›lenie metody naliczania punktacji. +Speed=Regulacja prÄ™dkoÅ›ci nadlatujÄ…cych strzaÅ‚ek. +Accel=Zmiana Å›cieżki trasy która lecÄ… strzaÅ‚ki. +Effect=Zmiana rozmiaru lub rodzaju ruchu strzaÅ‚ek lub ich receptorów/celów. +Appearance=Kontrola widocznoÅ›ci strzaÅ‚ek. +Turn=Zmiana choreografii stepchart`a po przez modyfikacje pozycji istniejÄ…cych strzaÅ‚ek. +Insert=Zmiana choreografii stepchart`a po przez proceduralne dodanie nowych strzaÅ‚ek. +Holds=Zmienia cześć strzaÅ‚ki w HOLD`y +Mines=Dodanie lub usuniecie min. +PlayerAutoPlay=Program odgrywa piosenkÄ™ automatycznie +ScoreDisplay=Zmiana sposobu wyÅ›wietlania punktacji. +ProTiming=Zmiana sposobu wyÅ›wietlania dokÅ‚adnoÅ›ci trafienia w strzaÅ‚kÄ™. +Scroll=Modyfikacje kierunku ruchu strzaÅ‚ek. +NoteSkins=Wybór wyglÄ…du grafiki strzaÅ‚ek/nut. +Remove=Usuwanie strzaÅ‚ek ze stepchart`a. Opcje uÅ‚atwiajÄ…ce ukoÅ„czenie piosenki. Użycie dyskwalifikuje z rankingu. +Hide=Modyfikacja widocznoÅ›ci receptorów/strzaÅ‚ek celu +Persp=Tryby widoku nadlatujÄ…cych strzaÅ‚ek. +Steps=Ustawienie poziomu trudnoÅ›ci piosenki. +Characters=Wybór modelu taÅ„czÄ…cej postaci w tle. +SaveToProfileHelp=Wymaga włączonego profilu, karty pamiÄ™ci lub pendrive`a. +MusicRateHelp=PrÄ™dkość odtwarzania muzyki. +Attacks=OkreÅ›la czy podczas gry bÄ™dÄ… użyte, nie bÄ™dÄ…ce częściÄ… Maratonu, zdefiniowane w piosence, Ataki Modyfikatorowe. + +[StepsListDisplayRow StepsType] +Dance_Single=4 +Dance_Double=8 +Dance_Couple=8 +Dance_Solo=6 +Dance_Routine=8 +Dance_Threepanel=3 +Pump_Single=5 +Pump_Double=10 +Pump_Halfdouble=6 +Pump_Couple=5 +Pump_Routine=10 +Kb7_Single=7 +Ez2_Single=ES +Ez2_Double=ED +Ez2_Real=ER +Para_Single=PS +Ds3ddx_Single=XS +Bm_Single5=5 +Bm_Double5=10 +Bm_Single7=7 +Bm_Double7=14 +Maniax_Single=MS +Maniax_Double=MD +Techno_Single4=4 +Techno_Single5=5 +Techno_Single8=8 +Techno_Double4=D4 +Techno_Double5=D5 +Pnm_Five=5 +Pnm_Nine=9 +Guitar_Five=5 +Karaoke=V +Lights_Cabinet=! + +[ScreenHowToInstallSongs] +BodyHeader=Jak Zdobyć i Zainstalować Piosenki do Stepmanii +Finding Songs=Gdzie Znaleźć Piosenki +Installing Songs=Jak Zainstalować Piosenki +Importing Songs=Importowanie piosenek z zainstalowanych wczeÅ›niej wersji Stepmanii +Reload Songs=PrzeÅ‚adowanie Piosenek +Exit=Powrót do Ekranu Startowego + + +Explanation-WhereToFind=Uruchamia stronÄ™ www z informacja miejscach i sposobach na znalezienie piosenek. +Explanation-HowToInstall=Uruchamia stronÄ™ www z instrukcja instalacji piosenek. +Explanation-AdditionalFolders=JeÅ›li masz zainstalowane inne instancje Stepmanii, możesz użyć opcji AdditionalFolder z pliku ustawieÅ„ by zaÅ‚adować je bez koniecznoÅ›ci ich kopiowania. +Explanation-ReloadSongs=Ta czynność jest konieczna jeÅ›li dodano/zmieniono/osuniÄ™to piosenki w trakcie pracy programu. +Explanation-Exit=Powrót do Ekranu Startowego. + +[OptionNames] +Custom=Specjalny + +[ScreenTestInput] +HelpText=Przytrzymaj &BACK; lub &START; aby wyjść. \ No newline at end of file From 59686a46b0afcad8c5c6bb1d6f2c86bd720d41bf Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 15:29:24 -0400 Subject: [PATCH 058/106] Fix out of bounds error. --- src/TimingData.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 8c3961c0ca..90fec98da5 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -139,7 +139,6 @@ void TimingData::SetStopAtRow( int iRow, float fSeconds, bool bDelay ) static_cast(stops[i])->GetDelay() == bDelay ) break; - StopSegment *ss = static_cast(stops[i]); if( i == stops.size() ) // there is no Stop/Delay Segment at the current beat { // create a new StopSegment @@ -150,6 +149,7 @@ void TimingData::SetStopAtRow( int iRow, float fSeconds, bool bDelay ) } else // StopSegment being modified is m_StopSegments[i] { + StopSegment *ss = static_cast(stops[i]); if( fSeconds > 0 ) { ss->SetPause(fSeconds); From 7bd6462929f3fc34b3fc8ebb7c5ae426e68e44b0 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Wed, 20 Jul 2011 16:20:41 -0500 Subject: [PATCH 059/106] fix compile on windows --- .../LoadingWindow/LoadingWindow_Win32.cpp | 716 +++++++++--------- src/arch/LoadingWindow/LoadingWindow_Win32.h | 4 +- 2 files changed, 368 insertions(+), 352 deletions(-) diff --git a/src/arch/LoadingWindow/LoadingWindow_Win32.cpp b/src/arch/LoadingWindow/LoadingWindow_Win32.cpp index 96b043c3d4..613f293262 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Win32.cpp +++ b/src/arch/LoadingWindow/LoadingWindow_Win32.cpp @@ -1,351 +1,365 @@ -#include "global.h" -#include "RageUtil.h" - -#include "LoadingWindow_Win32.h" -#include "RageFileManager.h" -#include "archutils/win32/WindowsResources.h" -#include "archutils/win32/WindowIcon.h" -#include "archutils/win32/ErrorStrings.h" -#include "arch/ArchHooks/ArchHooks.h" -#include -#include "CommCtrl.h" -#include "RageSurface_Load.h" -#include "RageSurface.h" -#include "RageSurfaceUtils.h" -#include "RageLog.h" -#include "ProductInfo.h" -#include "LocalizedString.h" - - -#include "RageSurfaceUtils_Zoom.h" -static HBITMAP g_hBitmap = NULL; - -#pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") - -// Load a RageSurface into a GDI surface. -static HBITMAP LoadWin32Surface( RageSurface *&s ) -{ - RageSurfaceUtils::ConvertSurface( s, s->w, s->h, 32, 0xFF000000, 0x00FF0000, 0x0000FF00, 0 ); - - HDC hScreen = GetDC(NULL); - ASSERT_M( hScreen, werr_ssprintf(GetLastError(), "hScreen") ); - - HBITMAP bitmap = CreateCompatibleBitmap( hScreen, s->w, s->h ); - ASSERT_M( bitmap, werr_ssprintf(GetLastError(), "CreateCompatibleBitmap") ); - - HDC BitmapDC = CreateCompatibleDC( hScreen ); - SelectObject( BitmapDC, bitmap ); - - // This is silly, but simple. We only do this once, on a small image. - for( int y = 0; y < s->h; ++y ) - { - unsigned const char *line = ((unsigned char *) s->pixels) + (y * s->pitch); - for( int x = 0; x < s->w; ++x ) - { - unsigned const char *data = line + (x*s->format->BytesPerPixel); - - SetPixelV( BitmapDC, x, y, RGB( data[3], data[2], data[1] ) ); - } - } - - SelectObject( BitmapDC, NULL ); - DeleteObject( BitmapDC ); - - ReleaseDC( NULL, hScreen ); - - return bitmap; -} - -static HBITMAP LoadWin32Surface( RString sFile, HWND hWnd ) -{ - RString error; - RageSurface *pSurface = RageSurfaceUtils::LoadFile( sFile, error ); - if( pSurface == NULL ) - return NULL; - - /* Resize the splash image to fit the dialog. Stretch to fit horizontally, - * maintaining aspect ratio. */ - { - RECT r; - GetClientRect( hWnd, &r ); - - int iWidth = r.right; - float fRatio = (float) iWidth / pSurface->w; - int iHeight = lrintf( pSurface->h * fRatio ); - - RageSurfaceUtils::Zoom( pSurface, iWidth, iHeight ); - } - - HBITMAP ret = LoadWin32Surface( pSurface ); - delete pSurface; - return ret; -} - -INT_PTR CALLBACK LoadingWindow_Win32::DlgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) -{ - LoadingWindow_Win32 *self; - - if(msg==WM_INITDIALOG) { - self=(LoadingWindow_Win32 *)lParam; - SetWindowLong(hWnd,DWL_USER,(LONG)self); - } else { - self=(LoadingWindow_Win32 *)GetWindowLong(hWnd,DWL_USER); - } - -#if(WINVER >= 0x0601) - if (self && msg == self->taskbarCreatedEvent && !self->pTaskbarList) { - HRESULT hr = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&self->pTaskbarList)); - if (SUCCEEDED(hr)) { - self->pTaskbarList->HrInit(); - if (FAILED(hr)) { - self->pTaskbarList->Release(); - self->pTaskbarList = NULL; - } else { - - - if(self->m_indeterminate) { - self->pTaskbarList->SetProgressState(hWnd, TBPF_INDETERMINATE); - } else { - self->pTaskbarList->SetProgressState(hWnd, TBPF_NORMAL); - self->pTaskbarList->SetProgressValue(hWnd, self->m_progress, self->m_totalWork); - } - } - } - - - } -#endif - - switch( msg ) - { - case WM_INITDIALOG: - { - vector vs; - GetDirListing( "Data/splash*.png", vs, false, true ); - if( !vs.empty() ) - g_hBitmap = LoadWin32Surface( vs[0], hWnd ); - } - if( g_hBitmap == NULL ) - g_hBitmap = LoadWin32Surface( "Data/splash.bmp", hWnd ); - SendMessage( - GetDlgItem(hWnd,IDC_SPLASH), - STM_SETIMAGE, - (WPARAM) IMAGE_BITMAP, - (LPARAM) (HANDLE) g_hBitmap ); - SetWindowTextA( hWnd, PRODUCT_ID ); - - break; - - case WM_CLOSE: - HOOKS->SetUserQuit(); - return FALSE; - - case WM_DESTROY: - -#if(WINVER >= 0x0601) - if (self->pTaskbarList) { - self->pTaskbarList->Release(); - self->pTaskbarList = NULL; - } -#endif - - DeleteObject( g_hBitmap ); - g_hBitmap = NULL; - self->runMessageLoop=false; - self->hwnd=NULL; - return TRUE; - break; - - case WM_APP: - DestroyWindow(hWnd); - self->runMessageLoop=false; - ExitThread(0); - return TRUE; - break; - } - - return FALSE; -} - -void LoadingWindow_Win32::SetIcon( const RageSurface *pIcon ) -{ - if( g_hBitmap != NULL ) - DestroyIcon( m_hIcon ); - - m_hIcon = IconFromSurface( pIcon ); - if( m_hIcon != NULL ) - SetClassLong( hwnd, GCL_HICON, (LONG) m_hIcon ); -} - -void LoadingWindow_Win32::SetSplash( const RString sPath ) -{ - if( g_hBitmap != NULL ) - { - DeleteObject( g_hBitmap ); - g_hBitmap = NULL; - } - - g_hBitmap = LoadWin32Surface( sPath, hwnd ); - if( g_hBitmap != NULL ) - { - SendDlgItemMessage( - hwnd, IDC_SPLASH, - STM_SETIMAGE, - (WPARAM) IMAGE_BITMAP, - (LPARAM) (HANDLE) g_hBitmap - ); - } -} - -LoadingWindow_Win32::LoadingWindow_Win32() -{ - - INITCOMMONCONTROLSEX cceData; - cceData.dwSize=sizeof(INITCOMMONCONTROLSEX); - cceData.dwICC=ICC_PROGRESS_CLASS; - InitCommonControlsEx(&cceData); - -#if(WINVER >= 0x0601) - pTaskbarList=NULL; - - taskbarCreatedEvent=RegisterWindowMessage("TaskbarButtonCreated"); -#endif - - m_hIcon = NULL; - - runMessageLoop=true; - - guiReadyEvent=CreateEvent(NULL,FALSE,FALSE,NULL); - - pumpThread=CreateThread(NULL, NULL, MessagePump, (void *)this, 0, &pumpThreadId); - - WaitForSingleObject(guiReadyEvent,INFINITE); - - for( unsigned i = 0; i < 3; ++i ) - text[i] = "ABC"; /* always set on first call */ - SetText( "" ); -} - -LoadingWindow_Win32::~LoadingWindow_Win32() -{ - SendMessage(hwnd,WM_APP,0,0); - //SendMessage(hwnd,WM_NULL,0,0); - WaitForSingleObject(pumpThread,INFINITE); - if(guiReadyEvent) - CloseHandle(guiReadyEvent); - if( m_hIcon != NULL ) - DestroyIcon( m_hIcon ); -} - -DWORD WINAPI LoadingWindow_Win32::MessagePump(LPVOID thisAsVoidPtr) -{ - LoadingWindow_Win32 *self=(LoadingWindow_Win32 *)thisAsVoidPtr; - - self->hwnd = CreateDialogParam( self->handle.Get(), MAKEINTRESOURCE(IDD_LOADING_DIALOG), NULL, DlgProc, (LPARAM)thisAsVoidPtr); - - SetEvent(self->guiReadyEvent); - - // Run the message loop in a separate thread to keep the gui responsive during the loading - MSG msg; - while(self->runMessageLoop && GetMessage(&msg, self->hwnd, 0, 0 ) ) - { - if(IsDialogMessage(self->hwnd,&msg)) continue; - DispatchMessage( &msg ); - } - - return msg.wParam; -} - -void LoadingWindow_Win32::SetText( RString sText ) -{ - vector asMessageLines; - split( sText, "\n", asMessageLines, false ); - while( asMessageLines.size() < 3 ) - asMessageLines.push_back( "" ); - - const int msgid[] = { IDC_STATIC_MESSAGE1, IDC_STATIC_MESSAGE2, IDC_STATIC_MESSAGE3 }; - for( unsigned i = 0; i < 3; ++i ) - { - if( text[i] == asMessageLines[i] ) - continue; - text[i] = asMessageLines[i]; - - HWND hwndItem = ::GetDlgItem( hwnd, msgid[i] ); - - ::SetWindowText( hwndItem, ConvertUTF8ToACP(asMessageLines[i]).c_str() ); - } -} - -void LoadingWindow_Win32::SetProgress(const int progress) -{ - m_progress=progress; - HWND hwndItem = ::GetDlgItem( hwnd, IDC_PROGRESS ); - ::SendMessage(hwndItem,PBM_SETPOS,progress,0); -#if(WINVER >= 0x0601) - if(pTaskbarList) { - pTaskbarList->SetProgressValue(hwnd, m_progress, m_totalWork); - } -#endif -} - -void LoadingWindow_Win32::SetTotalWork(const int totalWork) -{ - m_totalWork=totalWork; - HWND hwndItem = ::GetDlgItem( hwnd, IDC_PROGRESS ); - SendMessage(hwndItem,PBM_SETRANGE32,0,totalWork); -#if(WINVER >= 0x0601) - if(pTaskbarList) { - pTaskbarList->SetProgressValue(hwnd, m_progress, m_totalWork); - } -#endif -} - -void LoadingWindow_Win32::SetIndeterminate(bool indeterminate) { - m_indeterminate=indeterminate; - - HWND hwndItem = ::GetDlgItem( hwnd, IDC_PROGRESS ); - - if(indeterminate) { -#if(WINVER >= 0x0601) - if(pTaskbarList) { - pTaskbarList->SetProgressState(hwnd, TBPF_INDETERMINATE); - } -#endif - SetWindowLong(hwndItem,GWL_STYLE, PBS_MARQUEE | GetWindowLong(hwndItem,GWL_STYLE)); - SendMessage(hwndItem,PBM_SETMARQUEE,1,0); - } else { - SendMessage(hwndItem,PBM_SETMARQUEE,0,0); - SetWindowLong(hwndItem,GWL_STYLE, (~PBS_MARQUEE) & GetWindowLong(hwndItem,GWL_STYLE)); -#if(WINVER >= 0x0601) - if(pTaskbarList) { - pTaskbarList->SetProgressState(hwnd, TBPF_NORMAL); - } -#endif - } - -} - -/* - * (c) 2001-2004 Chris Danford, Glenn Maynard - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ +#include "global.h" +#include "RageUtil.h" + +#include "LoadingWindow_Win32.h" +#include "RageFileManager.h" +#include "archutils/win32/WindowsResources.h" +#include "archutils/win32/WindowIcon.h" +#include "archutils/win32/ErrorStrings.h" +#include "arch/ArchHooks/ArchHooks.h" +#include +#include "CommCtrl.h" +#include "RageSurface_Load.h" +#include "RageSurface.h" +#include "RageSurfaceUtils.h" +#include "RageLog.h" +#include "ProductInfo.h" +#include "LocalizedString.h" + + +#include "RageSurfaceUtils_Zoom.h" +static HBITMAP g_hBitmap = NULL; + +#pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") + +// Load a RageSurface into a GDI surface. +static HBITMAP LoadWin32Surface( RageSurface *&s ) +{ + RageSurfaceUtils::ConvertSurface( s, s->w, s->h, 32, 0xFF000000, 0x00FF0000, 0x0000FF00, 0 ); + + HDC hScreen = GetDC(NULL); + ASSERT_M( hScreen, werr_ssprintf(GetLastError(), "hScreen") ); + + HBITMAP bitmap = CreateCompatibleBitmap( hScreen, s->w, s->h ); + ASSERT_M( bitmap, werr_ssprintf(GetLastError(), "CreateCompatibleBitmap") ); + + HDC BitmapDC = CreateCompatibleDC( hScreen ); + SelectObject( BitmapDC, bitmap ); + + // This is silly, but simple. We only do this once, on a small image. + for( int y = 0; y < s->h; ++y ) + { + unsigned const char *line = ((unsigned char *) s->pixels) + (y * s->pitch); + for( int x = 0; x < s->w; ++x ) + { + unsigned const char *data = line + (x*s->format->BytesPerPixel); + + SetPixelV( BitmapDC, x, y, RGB( data[3], data[2], data[1] ) ); + } + } + + SelectObject( BitmapDC, NULL ); + DeleteObject( BitmapDC ); + + ReleaseDC( NULL, hScreen ); + + return bitmap; +} + +static HBITMAP LoadWin32Surface( RString sFile, HWND hWnd ) +{ + RString error; + RageSurface *pSurface = RageSurfaceUtils::LoadFile( sFile, error ); + if( pSurface == NULL ) + return NULL; + + /* Resize the splash image to fit the dialog. Stretch to fit horizontally, + * maintaining aspect ratio. */ + { + RECT r; + GetClientRect( hWnd, &r ); + + int iWidth = r.right; + float fRatio = (float) iWidth / pSurface->w; + int iHeight = lrintf( pSurface->h * fRatio ); + + RageSurfaceUtils::Zoom( pSurface, iWidth, iHeight ); + } + + HBITMAP ret = LoadWin32Surface( pSurface ); + delete pSurface; + return ret; +} + +INT_PTR CALLBACK LoadingWindow_Win32::DlgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) +{ + LoadingWindow_Win32 *self; + + if(msg==WM_INITDIALOG) { + self=(LoadingWindow_Win32 *)lParam; + SetWindowLong(hWnd,DWL_USER,(LONG)self); + } else { + self=(LoadingWindow_Win32 *)GetWindowLong(hWnd,DWL_USER); + } + +/* +#if WINVER >= 0x0601 + if (self && msg == self->taskbarCreatedEvent && !self->pTaskbarList) { + HRESULT hr = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&self->pTaskbarList)); + if (SUCCEEDED(hr)) { + self->pTaskbarList->HrInit(); + if (FAILED(hr)) { + self->pTaskbarList->Release(); + self->pTaskbarList = NULL; + } else { + + + if(self->m_indeterminate) { + self->pTaskbarList->SetProgressState(hWnd, TBPF_INDETERMINATE); + } else { + self->pTaskbarList->SetProgressState(hWnd, TBPF_NORMAL); + self->pTaskbarList->SetProgressValue(hWnd, self->m_progress, self->m_totalWork); + } + } + } + + + } +#endif +*/ + + switch( msg ) + { + case WM_INITDIALOG: + { + vector vs; + GetDirListing( "Data/splash*.png", vs, false, true ); + if( !vs.empty() ) + g_hBitmap = LoadWin32Surface( vs[0], hWnd ); + } + if( g_hBitmap == NULL ) + g_hBitmap = LoadWin32Surface( "Data/splash.bmp", hWnd ); + SendMessage( + GetDlgItem(hWnd,IDC_SPLASH), + STM_SETIMAGE, + (WPARAM) IMAGE_BITMAP, + (LPARAM) (HANDLE) g_hBitmap ); + SetWindowTextA( hWnd, PRODUCT_ID ); + + break; + + case WM_CLOSE: + HOOKS->SetUserQuit(); + return FALSE; + + case WM_DESTROY: + +/* +#if(WINVER >= 0x0601) + if (self->pTaskbarList) { + self->pTaskbarList->Release(); + self->pTaskbarList = NULL; + } +#endif +*/ + + DeleteObject( g_hBitmap ); + g_hBitmap = NULL; + self->runMessageLoop=false; + self->hwnd=NULL; + return TRUE; + break; + + case WM_APP: + DestroyWindow(hWnd); + self->runMessageLoop=false; + ExitThread(0); + return TRUE; + break; + } + + return FALSE; +} + +void LoadingWindow_Win32::SetIcon( const RageSurface *pIcon ) +{ + if( g_hBitmap != NULL ) + DestroyIcon( m_hIcon ); + + m_hIcon = IconFromSurface( pIcon ); + if( m_hIcon != NULL ) + SetClassLong( hwnd, GCL_HICON, (LONG) m_hIcon ); +} + +void LoadingWindow_Win32::SetSplash( const RString sPath ) +{ + if( g_hBitmap != NULL ) + { + DeleteObject( g_hBitmap ); + g_hBitmap = NULL; + } + + g_hBitmap = LoadWin32Surface( sPath, hwnd ); + if( g_hBitmap != NULL ) + { + SendDlgItemMessage( + hwnd, IDC_SPLASH, + STM_SETIMAGE, + (WPARAM) IMAGE_BITMAP, + (LPARAM) (HANDLE) g_hBitmap + ); + } +} + +LoadingWindow_Win32::LoadingWindow_Win32() +{ + + INITCOMMONCONTROLSEX cceData; + cceData.dwSize=sizeof(INITCOMMONCONTROLSEX); + cceData.dwICC=ICC_PROGRESS_CLASS; + InitCommonControlsEx(&cceData); + +/* +#if(WINVER >= 0x0601) + pTaskbarList=NULL; + + taskbarCreatedEvent=RegisterWindowMessage("TaskbarButtonCreated"); +#endif +*/ + + m_hIcon = NULL; + + runMessageLoop=true; + + guiReadyEvent=CreateEvent(NULL,FALSE,FALSE,NULL); + + pumpThread=CreateThread(NULL, NULL, MessagePump, (void *)this, 0, &pumpThreadId); + + WaitForSingleObject(guiReadyEvent,INFINITE); + + for( unsigned i = 0; i < 3; ++i ) + text[i] = "ABC"; /* always set on first call */ + SetText( "" ); +} + +LoadingWindow_Win32::~LoadingWindow_Win32() +{ + SendMessage(hwnd,WM_APP,0,0); + //SendMessage(hwnd,WM_NULL,0,0); + WaitForSingleObject(pumpThread,INFINITE); + if(guiReadyEvent) + CloseHandle(guiReadyEvent); + if( m_hIcon != NULL ) + DestroyIcon( m_hIcon ); +} + +DWORD WINAPI LoadingWindow_Win32::MessagePump(LPVOID thisAsVoidPtr) +{ + LoadingWindow_Win32 *self=(LoadingWindow_Win32 *)thisAsVoidPtr; + + self->hwnd = CreateDialogParam( self->handle.Get(), MAKEINTRESOURCE(IDD_LOADING_DIALOG), NULL, DlgProc, (LPARAM)thisAsVoidPtr); + + SetEvent(self->guiReadyEvent); + + // Run the message loop in a separate thread to keep the gui responsive during the loading + MSG msg; + while(self->runMessageLoop && GetMessage(&msg, self->hwnd, 0, 0 ) ) + { + if(IsDialogMessage(self->hwnd,&msg)) continue; + DispatchMessage( &msg ); + } + + return msg.wParam; +} + +void LoadingWindow_Win32::SetText( RString sText ) +{ + vector asMessageLines; + split( sText, "\n", asMessageLines, false ); + while( asMessageLines.size() < 3 ) + asMessageLines.push_back( "" ); + + const int msgid[] = { IDC_STATIC_MESSAGE1, IDC_STATIC_MESSAGE2, IDC_STATIC_MESSAGE3 }; + for( unsigned i = 0; i < 3; ++i ) + { + if( text[i] == asMessageLines[i] ) + continue; + text[i] = asMessageLines[i]; + + HWND hwndItem = ::GetDlgItem( hwnd, msgid[i] ); + + ::SetWindowText( hwndItem, ConvertUTF8ToACP(asMessageLines[i]).c_str() ); + } +} + +void LoadingWindow_Win32::SetProgress(const int progress) +{ + m_progress=progress; + HWND hwndItem = ::GetDlgItem( hwnd, IDC_PROGRESS ); + ::SendMessage(hwndItem,PBM_SETPOS,progress,0); +/* +#if(WINVER >= 0x0601) + if(pTaskbarList) { + pTaskbarList->SetProgressValue(hwnd, m_progress, m_totalWork); + } +#endif +*/ +} + +void LoadingWindow_Win32::SetTotalWork(const int totalWork) +{ + m_totalWork=totalWork; + HWND hwndItem = ::GetDlgItem( hwnd, IDC_PROGRESS ); + SendMessage(hwndItem,PBM_SETRANGE32,0,totalWork); +/* +#if(WINVER >= 0x0601) + if(pTaskbarList) { + pTaskbarList->SetProgressValue(hwnd, m_progress, m_totalWork); + } +#endif +*/ +} + +void LoadingWindow_Win32::SetIndeterminate(bool indeterminate) { + m_indeterminate=indeterminate; + + HWND hwndItem = ::GetDlgItem( hwnd, IDC_PROGRESS ); + + if(indeterminate) { +/* +#if(WINVER >= 0x0601) + if(pTaskbarList) { + pTaskbarList->SetProgressState(hwnd, TBPF_INDETERMINATE); + } +#endif +*/ + SetWindowLong(hwndItem,GWL_STYLE, PBS_MARQUEE | GetWindowLong(hwndItem,GWL_STYLE)); + SendMessage(hwndItem,PBM_SETMARQUEE,1,0); + } else { + SendMessage(hwndItem,PBM_SETMARQUEE,0,0); + SetWindowLong(hwndItem,GWL_STYLE, (~PBS_MARQUEE) & GetWindowLong(hwndItem,GWL_STYLE)); +/* +#if(WINVER >= 0x0601) + if(pTaskbarList) { + pTaskbarList->SetProgressState(hwnd, TBPF_NORMAL); + } +#endif +*/ + } + +} + +/* + * (c) 2001-2004 Chris Danford, Glenn Maynard + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/src/arch/LoadingWindow/LoadingWindow_Win32.h b/src/arch/LoadingWindow/LoadingWindow_Win32.h index 491137aa99..cac230bfcb 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Win32.h +++ b/src/arch/LoadingWindow/LoadingWindow_Win32.h @@ -35,10 +35,12 @@ private: DWORD pumpThreadId; HANDLE guiReadyEvent; -#if(WINVER >= 0x0601) +/* +#if WINVER >= 0x0601 UINT taskbarCreatedEvent; ITaskbarList3 *pTaskbarList; #endif +*/ volatile bool runMessageLoop; From d20501c547d434c159bb08ed889fafeac3508797 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Wed, 20 Jul 2011 16:25:48 -0500 Subject: [PATCH 060/106] attempt to fix a crash when pressing ctrl+letter during the transition --- src/ScreenSelectMusic.cpp | 66 +++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp index dbf4882317..40c387634f 100644 --- a/src/ScreenSelectMusic.cpp +++ b/src/ScreenSelectMusic.cpp @@ -384,39 +384,6 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) { // LOG->Trace( "ScreenSelectMusic::Input()" ); - bool bHoldingCtrl = - INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL)) || - INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL)); - - wchar_t c = INPUTMAN->DeviceInputToChar(input.DeviceI,false); - MakeUpper( &c, 1 ); - - if( bHoldingCtrl && ( c >= 'A' ) && ( c <= 'Z' ) ) - { - // Only allow changing the sort order if the wheel is not locked - // and we're not in course mode. -aj - if( !m_MusicWheel.WheelIsLocked() && !GAMESTATE->IsCourseMode() ) - { - SortOrder so = GAMESTATE->m_SortOrder; - // When in Artist sort, this means first letter of the artist. - // Otherwise, if not in Title sort already, switch to Title sort. - if ( so != SORT_ARTIST ) - so = SORT_TITLE; - - GAMESTATE->m_PreferredSortOrder = so; - GAMESTATE->m_SortOrder.Set( so ); - // Odd, changing the sort order requires us to call SetOpenSection more than once - m_MusicWheel.ChangeSort( so ); - m_MusicWheel.SetOpenSection( ssprintf("%c", c ) ); - - m_MusicWheel.SelectSection( ssprintf("%c", c ) ); - m_MusicWheel.ChangeSort( so ); - m_MusicWheel.SetOpenSection( ssprintf("%c", c ) ); - AfterMusicChange(); - return; - } - } - // debugging? // I just like being able to see untransliterated titles occasionally. if( input.DeviceI.device == DEVICE_KEYBOARD && input.DeviceI.button == KEY_F9 ) @@ -470,6 +437,39 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) if( IsTransitioning() ) return; // ignore + bool bHoldingCtrl = + INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL)) || + INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL)); + + wchar_t c = INPUTMAN->DeviceInputToChar(input.DeviceI,false); + MakeUpper( &c, 1 ); + + if( bHoldingCtrl && ( c >= 'A' ) && ( c <= 'Z' ) ) + { + // Only allow changing the sort order if the wheel is not locked + // and we're not in course mode. -aj + if( !m_MusicWheel.WheelIsLocked() && !GAMESTATE->IsCourseMode() ) + { + SortOrder so = GAMESTATE->m_SortOrder; + // When in Artist sort, this means first letter of the artist. + // Otherwise, if not in Title sort already, switch to Title sort. + if ( so != SORT_ARTIST ) + so = SORT_TITLE; + + GAMESTATE->m_PreferredSortOrder = so; + GAMESTATE->m_SortOrder.Set( so ); + // Odd, changing the sort order requires us to call SetOpenSection more than once + m_MusicWheel.ChangeSort( so ); + m_MusicWheel.SetOpenSection( ssprintf("%c", c ) ); + + m_MusicWheel.SelectSection( ssprintf("%c", c ) ); + m_MusicWheel.ChangeSort( so ); + m_MusicWheel.SetOpenSection( ssprintf("%c", c ) ); + AfterMusicChange(); + return; + } + } + // Handle unselect steps // xxx: select button could conflict with OptionsList here -aj if( m_SelectionState == SelectionState_SelectingSteps && m_bStepsChosen[input.pn] From abced485999ec3bbd8dbf48a240219d648f45358 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Wed, 20 Jul 2011 16:26:01 -0500 Subject: [PATCH 061/106] add installer icon --- _assets/installer-icon.psd | Bin 0 -> 452791 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 _assets/installer-icon.psd diff --git a/_assets/installer-icon.psd b/_assets/installer-icon.psd new file mode 100644 index 0000000000000000000000000000000000000000..ce9fa032b779ea2ce944f88be762f91516abc1c2 GIT binary patch literal 452791 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�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

    *3gO4BFQpIT1SjysZ=<}&Vhn9^7P~#G}6Sf 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