[
  {
    "path": ".gitignore",
    "content": ".hg\nbuild\n*.mode1v3\n*.pbxuser\n*.orig\n.DS_Store\n.metadata\n.project\n.settings\n*.perspectivev3\nxcuserdata\nproject.xcworkspace\nrelease/AFCacheLib.h\n# emacs noise\n*~\n*#\n\\#*\n.#*\n\n# vi noise \n.*.swp\n.idea\nHeaders\ndemo/Pods\n"
  },
  {
    "path": "AFCache-iOS.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXAggregateTarget section */\n\t\t379B6926177CAEA8001174E8 /* AFCache_universal */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = 379B692A177CAEA8001174E8 /* Build configuration list for PBXAggregateTarget \"AFCache_universal\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t379B692D177CAFF9001174E8 /* ShellScript */,\n\t\t\t\t379B692E177CB01B001174E8 /* CopyFiles */,\n\t\t\t\t0511702717D0EA72003EABBA /* CopyFiles */,\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t379B692C177CAFCA001174E8 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = AFCache_universal;\n\t\t\tproductName = AFCache;\n\t\t};\n/* End PBXAggregateTarget section */\n\n/* Begin PBXBuildFile section */\n\t\t0511702817D0EA85003EABBA /* libAFCache-iOS.a in CopyFiles */ = {isa = PBXBuildFile; fileRef = 051B386D1328AACA0057F2F5 /* libAFCache-iOS.a */; };\n\t\t051B38711328AACA0057F2F5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051B38701328AACA0057F2F5 /* Foundation.framework */; };\n\t\t051B387C1328AACA0057F2F5 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051B387B1328AACA0057F2F5 /* UIKit.framework */; };\n\t\t051B387D1328AACA0057F2F5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051B38701328AACA0057F2F5 /* Foundation.framework */; };\n\t\t051B387F1328AACA0057F2F5 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051B387E1328AACA0057F2F5 /* CoreGraphics.framework */; };\n\t\t051B38821328AACA0057F2F5 /* libAFCache-iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 051B386D1328AACA0057F2F5 /* libAFCache-iOS.a */; };\n\t\t0544C870150F57980057EC39 /* AFMediaTypeParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 0544C86E150F57980057EC39 /* AFMediaTypeParser.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0544C871150F57980057EC39 /* AFMediaTypeParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 0544C86F150F57980057EC39 /* AFMediaTypeParser.m */; };\n\t\t0566AE021332D6B500583E6A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051B387B1328AACA0057F2F5 /* UIKit.framework */; };\n\t\t0566AE031332D6B500583E6A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051B38701328AACA0057F2F5 /* Foundation.framework */; };\n\t\t0566AE041332D6B500583E6A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051B387E1328AACA0057F2F5 /* CoreGraphics.framework */; };\n\t\t0566AE311332D6FD00583E6A /* DemoAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 0566AE281332D6FD00583E6A /* DemoAppDelegate.m */; };\n\t\t0566AE321332D6FD00583E6A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 0566AE291332D6FD00583E6A /* main.m */; };\n\t\t0566AE331332D6FD00583E6A /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0566AE2A1332D6FD00583E6A /* MainWindow.xib */; };\n\t\t0566AE341332D6FD00583E6A /* NSURLRequest.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0566AE2B1332D6FD00583E6A /* NSURLRequest.xib */; };\n\t\t0566AE351332D6FD00583E6A /* Packaging.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0566AE2C1332D6FD00583E6A /* Packaging.xib */; };\n\t\t0566AE361332D6FD00583E6A /* PackagingDemoController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0566AE2E1332D6FD00583E6A /* PackagingDemoController.m */; };\n\t\t0566AE391332D7A900583E6A /* libAFCache-iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 051B386D1328AACA0057F2F5 /* libAFCache-iOS.a */; };\n\t\t0566AE3B1332D7E300583E6A /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0566AE3A1332D7E300583E6A /* SystemConfiguration.framework */; };\n\t\t0566AE411332D85600583E6A /* CacheableItemDemoController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0566AE3D1332D85600583E6A /* CacheableItemDemoController.m */; };\n\t\t0566AE421332D85600583E6A /* CacheableItemDemoController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0566AE3E1332D85600583E6A /* CacheableItemDemoController.xib */; };\n\t\t0566AE431332D85600583E6A /* NSURLRequestDemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0566AE401332D85600583E6A /* NSURLRequestDemoViewController.m */; };\n\t\t0566AE541332D98200583E6A /* Icon57x57.png in Resources */ = {isa = PBXBuildFile; fileRef = 0566AE511332D98200583E6A /* Icon57x57.png */; };\n\t\t0566AE551332D98200583E6A /* Icon72x72.png in Resources */ = {isa = PBXBuildFile; fileRef = 0566AE521332D98200583E6A /* Icon72x72.png */; };\n\t\t0566AE561332D98200583E6A /* Icon114x114.png in Resources */ = {isa = PBXBuildFile; fileRef = 0566AE531332D98200583E6A /* Icon114x114.png */; };\n\t\t0566AE581332DA2500583E6A /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0566AE571332DA2500583E6A /* libz.dylib */; };\n\t\t0569DE611328AD5B00B3D016 /* AFCache_iOSTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE5C1328AD5B00B3D016 /* AFCache_iOSTests.m */; };\n\t\t0569DE621328AD5B00B3D016 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0569DE5D1328AD5B00B3D016 /* InfoPlist.strings */; };\n\t\t0569DE941328AD9C00B3D016 /* AFRegexString.h in Headers */ = {isa = PBXBuildFile; fileRef = 0569DE671328AD9C00B3D016 /* AFRegexString.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0569DE951328AD9C00B3D016 /* AFRegexString.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE681328AD9C00B3D016 /* AFRegexString.m */; };\n\t\t0569DE961328AD9C00B3D016 /* AFRegexString.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE681328AD9C00B3D016 /* AFRegexString.m */; };\n\t\t0569DEAA1328AD9C00B3D016 /* AFCache-iOS-Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = 0569DE781328AD9C00B3D016 /* AFCache-iOS-Prefix.pch */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0569DEAF1328AD9C00B3D016 /* AFCache+Mimetypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 0569DE7F1328AD9C00B3D016 /* AFCache+Mimetypes.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0569DEB01328AD9C00B3D016 /* AFCache+Mimetypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE801328AD9C00B3D016 /* AFCache+Mimetypes.m */; };\n\t\t0569DEB11328AD9C00B3D016 /* AFCache+Mimetypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE801328AD9C00B3D016 /* AFCache+Mimetypes.m */; };\n\t\t0569DEB51328AD9C00B3D016 /* AFCache+PrivateAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 0569DE831328AD9C00B3D016 /* AFCache+PrivateAPI.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0569DEB61328AD9C00B3D016 /* AFCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 0569DE841328AD9C00B3D016 /* AFCache.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0569DEB71328AD9C00B3D016 /* AFCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE851328AD9C00B3D016 /* AFCache.m */; };\n\t\t0569DEB81328AD9C00B3D016 /* AFCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE851328AD9C00B3D016 /* AFCache.m */; };\n\t\t0569DEB91328AD9C00B3D016 /* AFCache_Logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 0569DE861328AD9C00B3D016 /* AFCache_Logging.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0569DEBD1328AD9C00B3D016 /* AFCacheableItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 0569DE891328AD9C00B3D016 /* AFCacheableItem.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0569DEBE1328AD9C00B3D016 /* AFCacheableItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE8A1328AD9C00B3D016 /* AFCacheableItem.m */; };\n\t\t0569DEBF1328AD9C00B3D016 /* AFCacheableItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE8A1328AD9C00B3D016 /* AFCacheableItem.m */; };\n\t\t0569DEC01328AD9C00B3D016 /* AFCacheableItemInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0569DE8B1328AD9C00B3D016 /* AFCacheableItemInfo.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0569DEC11328AD9C00B3D016 /* AFCacheableItemInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE8C1328AD9C00B3D016 /* AFCacheableItemInfo.m */; };\n\t\t0569DEC21328AD9C00B3D016 /* AFCacheableItemInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE8C1328AD9C00B3D016 /* AFCacheableItemInfo.m */; };\n\t\t0569DEC31328AD9C00B3D016 /* AFPackageInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0569DE8D1328AD9C00B3D016 /* AFPackageInfo.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0569DEC41328AD9C00B3D016 /* AFPackageInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE8E1328AD9C00B3D016 /* AFPackageInfo.m */; };\n\t\t0569DEC51328AD9C00B3D016 /* AFPackageInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE8E1328AD9C00B3D016 /* AFPackageInfo.m */; };\n\t\t0569DEC61328AD9C00B3D016 /* AFURLCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 0569DE8F1328AD9C00B3D016 /* AFURLCache.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0569DEC71328AD9C00B3D016 /* AFURLCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE901328AD9C00B3D016 /* AFURLCache.m */; };\n\t\t0569DEC81328AD9C00B3D016 /* AFURLCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE901328AD9C00B3D016 /* AFURLCache.m */; };\n\t\t0569DECA1328AD9C00B3D016 /* DateParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 0569DE921328AD9C00B3D016 /* DateParser.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0569DECB1328AD9C00B3D016 /* DateParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE931328AD9C00B3D016 /* DateParser.m */; };\n\t\t0569DECC1328AD9C00B3D016 /* DateParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 0569DE931328AD9C00B3D016 /* DateParser.m */; };\n\t\t058339CD150CB747005A6D55 /* AFHTTPURLProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 058339CB150CB747005A6D55 /* AFHTTPURLProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t058339CE150CB747005A6D55 /* AFHTTPURLProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = 058339CC150CB747005A6D55 /* AFHTTPURLProtocol.m */; };\n\t\t05F1D1CA182F9D0400C2D295 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0566AE3A1332D7E300583E6A /* SystemConfiguration.framework */; };\n\t\t05F1D1CB182F9D0B00C2D295 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0566AE571332DA2500583E6A /* libz.dylib */; };\n\t\t379B6936177CBC38001174E8 /* AFMediaTypeParser.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0544C86E150F57980057EC39 /* AFMediaTypeParser.h */; };\n\t\t379B6937177CBC38001174E8 /* AFCache+Mimetypes.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0569DE7F1328AD9C00B3D016 /* AFCache+Mimetypes.h */; };\n\t\t379B6939177CBC38001174E8 /* AFCache+PrivateAPI.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0569DE831328AD9C00B3D016 /* AFCache+PrivateAPI.h */; };\n\t\t379B693A177CBC38001174E8 /* AFCache.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0569DE841328AD9C00B3D016 /* AFCache.h */; };\n\t\t379B693B177CBC38001174E8 /* AFCache_Logging.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0569DE861328AD9C00B3D016 /* AFCache_Logging.h */; };\n\t\t379B693D177CBC38001174E8 /* AFCacheableItem.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0569DE891328AD9C00B3D016 /* AFCacheableItem.h */; };\n\t\t379B693E177CBC38001174E8 /* AFCacheableItemInfo.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0569DE8B1328AD9C00B3D016 /* AFCacheableItemInfo.h */; };\n\t\t379B693F177CBC38001174E8 /* AFPackageInfo.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0569DE8D1328AD9C00B3D016 /* AFPackageInfo.h */; };\n\t\t379B6940177CBC38001174E8 /* AFURLCache.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0569DE8F1328AD9C00B3D016 /* AFURLCache.h */; };\n\t\t379B6941177CBC38001174E8 /* Constants.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0569DE911328AD9C00B3D016 /* Constants.h */; };\n\t\t379B6942177CBC38001174E8 /* DateParser.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0569DE921328AD9C00B3D016 /* DateParser.h */; };\n\t\t379B6943177CBC38001174E8 /* AFHTTPURLProtocol.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 058339CB150CB747005A6D55 /* AFHTTPURLProtocol.h */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t051B38801328AACA0057F2F5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 051B38641328AACA0057F2F5 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 051B386C1328AACA0057F2F5;\n\t\t\tremoteInfo = \"AFCache-iOS\";\n\t\t};\n\t\t0566AE371332D79C00583E6A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 051B38641328AACA0057F2F5 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 051B386C1328AACA0057F2F5;\n\t\t\tremoteInfo = \"AFCache-iOS\";\n\t\t};\n\t\t379B692B177CAFCA001174E8 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 051B38641328AACA0057F2F5 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 051B386C1328AACA0057F2F5;\n\t\t\tremoteInfo = \"AFCache-iOS\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t0511702717D0EA72003EABBA /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"~/build_libs\";\n\t\t\tdstSubfolderSpec = 0;\n\t\t\tfiles = (\n\t\t\t\t0511702817D0EA85003EABBA /* libAFCache-iOS.a in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t379B692E177CB01B001174E8 /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"${SRCROOT}/$DEPLOYMENT_TARGET/$LIB_BASE_NAME\";\n\t\t\tdstSubfolderSpec = 0;\n\t\t\tfiles = (\n\t\t\t\t379B6936177CBC38001174E8 /* AFMediaTypeParser.h in CopyFiles */,\n\t\t\t\t379B6937177CBC38001174E8 /* AFCache+Mimetypes.h in CopyFiles */,\n\t\t\t\t379B6939177CBC38001174E8 /* AFCache+PrivateAPI.h in CopyFiles */,\n\t\t\t\t379B693A177CBC38001174E8 /* AFCache.h in CopyFiles */,\n\t\t\t\t379B693B177CBC38001174E8 /* AFCache_Logging.h in CopyFiles */,\n\t\t\t\t379B693D177CBC38001174E8 /* AFCacheableItem.h in CopyFiles */,\n\t\t\t\t379B693E177CBC38001174E8 /* AFCacheableItemInfo.h in CopyFiles */,\n\t\t\t\t379B693F177CBC38001174E8 /* AFPackageInfo.h in CopyFiles */,\n\t\t\t\t379B6940177CBC38001174E8 /* AFURLCache.h in CopyFiles */,\n\t\t\t\t379B6941177CBC38001174E8 /* Constants.h in CopyFiles */,\n\t\t\t\t379B6942177CBC38001174E8 /* DateParser.h in CopyFiles */,\n\t\t\t\t379B6943177CBC38001174E8 /* AFHTTPURLProtocol.h in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t051B386D1328AACA0057F2F5 /* libAFCache-iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libAFCache-iOS.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t051B38701328AACA0057F2F5 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t051B387A1328AACA0057F2F5 /* AFCache-iOSTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"AFCache-iOSTests.octest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t051B387B1328AACA0057F2F5 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\t051B387E1328AACA0057F2F5 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };\n\t\t0544C86E150F57980057EC39 /* AFMediaTypeParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFMediaTypeParser.h; sourceTree = \"<group>\"; };\n\t\t0544C86F150F57980057EC39 /* AFMediaTypeParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFMediaTypeParser.m; sourceTree = \"<group>\"; };\n\t\t0566AE001332D6B500583E6A /* AFCacheDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AFCacheDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t0566AE251332D6FD00583E6A /* Demo_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Demo_Prefix.pch; path = src/Examples/Demo_Prefix.pch; sourceTree = SOURCE_ROOT; };\n\t\t0566AE261332D6FD00583E6A /* Demo-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = \"Demo-Info.plist\"; path = \"src/Examples/Demo-Info.plist\"; sourceTree = SOURCE_ROOT; };\n\t\t0566AE271332D6FD00583E6A /* DemoAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DemoAppDelegate.h; path = src/Examples/DemoAppDelegate.h; sourceTree = SOURCE_ROOT; };\n\t\t0566AE281332D6FD00583E6A /* DemoAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DemoAppDelegate.m; path = src/Examples/DemoAppDelegate.m; sourceTree = SOURCE_ROOT; };\n\t\t0566AE291332D6FD00583E6A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = src/Examples/main.m; sourceTree = SOURCE_ROOT; };\n\t\t0566AE2A1332D6FD00583E6A /* MainWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = MainWindow.xib; path = src/Examples/MainWindow.xib; sourceTree = SOURCE_ROOT; };\n\t\t0566AE2B1332D6FD00583E6A /* NSURLRequest.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = NSURLRequest.xib; path = src/Examples/NSURLRequest.xib; sourceTree = SOURCE_ROOT; };\n\t\t0566AE2C1332D6FD00583E6A /* Packaging.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = Packaging.xib; path = src/Examples/Packaging.xib; sourceTree = SOURCE_ROOT; };\n\t\t0566AE2D1332D6FD00583E6A /* PackagingDemoController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PackagingDemoController.h; path = src/Examples/PackagingDemoController.h; sourceTree = SOURCE_ROOT; };\n\t\t0566AE2E1332D6FD00583E6A /* PackagingDemoController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PackagingDemoController.m; path = src/Examples/PackagingDemoController.m; sourceTree = SOURCE_ROOT; };\n\t\t0566AE3A1332D7E300583E6A /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };\n\t\t0566AE3C1332D85600583E6A /* CacheableItemDemoController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CacheableItemDemoController.h; path = src/Examples/CacheableItemDemoController.h; sourceTree = SOURCE_ROOT; };\n\t\t0566AE3D1332D85600583E6A /* CacheableItemDemoController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CacheableItemDemoController.m; path = src/Examples/CacheableItemDemoController.m; sourceTree = SOURCE_ROOT; };\n\t\t0566AE3E1332D85600583E6A /* CacheableItemDemoController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CacheableItemDemoController.xib; path = src/Examples/CacheableItemDemoController.xib; sourceTree = SOURCE_ROOT; };\n\t\t0566AE3F1332D85600583E6A /* NSURLRequestDemoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSURLRequestDemoViewController.h; path = src/Examples/NSURLRequestDemoViewController.h; sourceTree = SOURCE_ROOT; };\n\t\t0566AE401332D85600583E6A /* NSURLRequestDemoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSURLRequestDemoViewController.m; path = src/Examples/NSURLRequestDemoViewController.m; sourceTree = SOURCE_ROOT; };\n\t\t0566AE511332D98200583E6A /* Icon57x57.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon57x57.png; sourceTree = SOURCE_ROOT; };\n\t\t0566AE521332D98200583E6A /* Icon72x72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon72x72.png; sourceTree = SOURCE_ROOT; };\n\t\t0566AE531332D98200583E6A /* Icon114x114.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon114x114.png; sourceTree = SOURCE_ROOT; };\n\t\t0566AE571332DA2500583E6A /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };\n\t\t0569DE591328AD5B00B3D016 /* AFCache-iOSTests-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = \"AFCache-iOSTests-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t0569DE5A1328AD5B00B3D016 /* AFCache-iOSTests-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"AFCache-iOSTests-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t0569DE5B1328AD5B00B3D016 /* AFCache_iOSTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFCache_iOSTests.h; sourceTree = \"<group>\"; };\n\t\t0569DE5C1328AD5B00B3D016 /* AFCache_iOSTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFCache_iOSTests.m; sourceTree = \"<group>\"; };\n\t\t0569DE5E1328AD5B00B3D016 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t0569DE671328AD9C00B3D016 /* AFRegexString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFRegexString.h; sourceTree = \"<group>\"; };\n\t\t0569DE681328AD9C00B3D016 /* AFRegexString.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFRegexString.m; sourceTree = \"<group>\"; };\n\t\t0569DE781328AD9C00B3D016 /* AFCache-iOS-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"AFCache-iOS-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t0569DE7F1328AD9C00B3D016 /* AFCache+Mimetypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"AFCache+Mimetypes.h\"; sourceTree = \"<group>\"; };\n\t\t0569DE801328AD9C00B3D016 /* AFCache+Mimetypes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"AFCache+Mimetypes.m\"; sourceTree = \"<group>\"; };\n\t\t0569DE831328AD9C00B3D016 /* AFCache+PrivateAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"AFCache+PrivateAPI.h\"; sourceTree = \"<group>\"; };\n\t\t0569DE841328AD9C00B3D016 /* AFCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFCache.h; sourceTree = \"<group>\"; };\n\t\t0569DE851328AD9C00B3D016 /* AFCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFCache.m; sourceTree = \"<group>\"; };\n\t\t0569DE861328AD9C00B3D016 /* AFCache_Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFCache_Logging.h; sourceTree = \"<group>\"; };\n\t\t0569DE891328AD9C00B3D016 /* AFCacheableItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFCacheableItem.h; sourceTree = \"<group>\"; };\n\t\t0569DE8A1328AD9C00B3D016 /* AFCacheableItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFCacheableItem.m; sourceTree = \"<group>\"; };\n\t\t0569DE8B1328AD9C00B3D016 /* AFCacheableItemInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFCacheableItemInfo.h; sourceTree = \"<group>\"; };\n\t\t0569DE8C1328AD9C00B3D016 /* AFCacheableItemInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFCacheableItemInfo.m; sourceTree = \"<group>\"; };\n\t\t0569DE8D1328AD9C00B3D016 /* AFPackageInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFPackageInfo.h; sourceTree = \"<group>\"; };\n\t\t0569DE8E1328AD9C00B3D016 /* AFPackageInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFPackageInfo.m; sourceTree = \"<group>\"; };\n\t\t0569DE8F1328AD9C00B3D016 /* AFURLCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLCache.h; sourceTree = \"<group>\"; };\n\t\t0569DE901328AD9C00B3D016 /* AFURLCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLCache.m; sourceTree = \"<group>\"; };\n\t\t0569DE911328AD9C00B3D016 /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constants.h; sourceTree = \"<group>\"; };\n\t\t0569DE921328AD9C00B3D016 /* DateParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DateParser.h; sourceTree = \"<group>\"; };\n\t\t0569DE931328AD9C00B3D016 /* DateParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DateParser.m; sourceTree = \"<group>\"; };\n\t\t058339CB150CB747005A6D55 /* AFHTTPURLProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPURLProtocol.h; sourceTree = \"<group>\"; };\n\t\t058339CC150CB747005A6D55 /* AFHTTPURLProtocol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPURLProtocol.m; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t051B386A1328AACA0057F2F5 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t051B38711328AACA0057F2F5 /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t051B38761328AACA0057F2F5 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t05F1D1CB182F9D0B00C2D295 /* libz.dylib in Frameworks */,\n\t\t\t\t05F1D1CA182F9D0400C2D295 /* SystemConfiguration.framework in Frameworks */,\n\t\t\t\t051B387C1328AACA0057F2F5 /* UIKit.framework in Frameworks */,\n\t\t\t\t051B387D1328AACA0057F2F5 /* Foundation.framework in Frameworks */,\n\t\t\t\t051B387F1328AACA0057F2F5 /* CoreGraphics.framework in Frameworks */,\n\t\t\t\t051B38821328AACA0057F2F5 /* libAFCache-iOS.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t0566ADFD1332D6B500583E6A /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0566AE581332DA2500583E6A /* libz.dylib in Frameworks */,\n\t\t\t\t0566AE3B1332D7E300583E6A /* SystemConfiguration.framework in Frameworks */,\n\t\t\t\t0566AE391332D7A900583E6A /* libAFCache-iOS.a in Frameworks */,\n\t\t\t\t0566AE021332D6B500583E6A /* UIKit.framework in Frameworks */,\n\t\t\t\t0566AE031332D6B500583E6A /* Foundation.framework in Frameworks */,\n\t\t\t\t0566AE041332D6B500583E6A /* CoreGraphics.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t051B38621328AACA0057F2F5 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0566AE571332DA2500583E6A /* libz.dylib */,\n\t\t\t\t0566AE3A1332D7E300583E6A /* SystemConfiguration.framework */,\n\t\t\t\t051B386D1328AACA0057F2F5 /* libAFCache-iOS.a */,\n\t\t\t\t0569DE641328AD9C00B3D016 /* src */,\n\t\t\t\t0569DE571328AD5B00B3D016 /* test */,\n\t\t\t\t0566AE051332D6B500583E6A /* AFCacheDemo */,\n\t\t\t\t051B386F1328AACA0057F2F5 /* Frameworks */,\n\t\t\t\t051B386E1328AACA0057F2F5 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t051B386E1328AACA0057F2F5 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t051B387A1328AACA0057F2F5 /* AFCache-iOSTests.octest */,\n\t\t\t\t0566AE001332D6B500583E6A /* AFCacheDemo.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t051B386F1328AACA0057F2F5 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t051B38701328AACA0057F2F5 /* Foundation.framework */,\n\t\t\t\t051B387B1328AACA0057F2F5 /* UIKit.framework */,\n\t\t\t\t051B387E1328AACA0057F2F5 /* CoreGraphics.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0566AE051332D6B500583E6A /* AFCacheDemo */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0566AE451332D89000583E6A /* Resources */,\n\t\t\t\t0566AE441332D88D00583E6A /* src */,\n\t\t\t);\n\t\t\tpath = AFCacheDemo;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0566AE441332D88D00583E6A /* src */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0566AE3C1332D85600583E6A /* CacheableItemDemoController.h */,\n\t\t\t\t0566AE3D1332D85600583E6A /* CacheableItemDemoController.m */,\n\t\t\t\t0566AE3E1332D85600583E6A /* CacheableItemDemoController.xib */,\n\t\t\t\t0566AE3F1332D85600583E6A /* NSURLRequestDemoViewController.h */,\n\t\t\t\t0566AE401332D85600583E6A /* NSURLRequestDemoViewController.m */,\n\t\t\t\t0566AE251332D6FD00583E6A /* Demo_Prefix.pch */,\n\t\t\t\t0566AE261332D6FD00583E6A /* Demo-Info.plist */,\n\t\t\t\t0566AE271332D6FD00583E6A /* DemoAppDelegate.h */,\n\t\t\t\t0566AE281332D6FD00583E6A /* DemoAppDelegate.m */,\n\t\t\t\t0566AE291332D6FD00583E6A /* main.m */,\n\t\t\t\t0566AE2D1332D6FD00583E6A /* PackagingDemoController.h */,\n\t\t\t\t0566AE2E1332D6FD00583E6A /* PackagingDemoController.m */,\n\t\t\t);\n\t\t\tname = src;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0566AE451332D89000583E6A /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0566AE461332D8AC00583E6A /* img */,\n\t\t\t\t0566AE2A1332D6FD00583E6A /* MainWindow.xib */,\n\t\t\t\t0566AE2B1332D6FD00583E6A /* NSURLRequest.xib */,\n\t\t\t\t0566AE2C1332D6FD00583E6A /* Packaging.xib */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0566AE461332D8AC00583E6A /* img */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0566AE511332D98200583E6A /* Icon57x57.png */,\n\t\t\t\t0566AE521332D98200583E6A /* Icon72x72.png */,\n\t\t\t\t0566AE531332D98200583E6A /* Icon114x114.png */,\n\t\t\t);\n\t\t\tname = img;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0569DE571328AD5B00B3D016 /* test */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0569DE581328AD5B00B3D016 /* iOS */,\n\t\t\t);\n\t\t\tpath = test;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0569DE581328AD5B00B3D016 /* iOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0569DE591328AD5B00B3D016 /* AFCache-iOSTests-Info.plist */,\n\t\t\t\t0569DE5A1328AD5B00B3D016 /* AFCache-iOSTests-Prefix.pch */,\n\t\t\t\t0569DE5B1328AD5B00B3D016 /* AFCache_iOSTests.h */,\n\t\t\t\t0569DE5C1328AD5B00B3D016 /* AFCache_iOSTests.m */,\n\t\t\t\t0569DE5D1328AD5B00B3D016 /* InfoPlist.strings */,\n\t\t\t);\n\t\t\tpath = iOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0569DE641328AD9C00B3D016 /* src */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0569DE651328AD9C00B3D016 /* 3rdparty */,\n\t\t\t\t0569DE771328AD9C00B3D016 /* iOS */,\n\t\t\t\t0569DE7E1328AD9C00B3D016 /* shared */,\n\t\t\t);\n\t\t\tpath = src;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0569DE651328AD9C00B3D016 /* 3rdparty */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0569DE661328AD9C00B3D016 /* AFRegexString */,\n\t\t\t);\n\t\t\tpath = 3rdparty;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0569DE661328AD9C00B3D016 /* AFRegexString */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0569DE671328AD9C00B3D016 /* AFRegexString.h */,\n\t\t\t\t0569DE681328AD9C00B3D016 /* AFRegexString.m */,\n\t\t\t);\n\t\t\tpath = AFRegexString;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0569DE771328AD9C00B3D016 /* iOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0569DE781328AD9C00B3D016 /* AFCache-iOS-Prefix.pch */,\n\t\t\t);\n\t\t\tpath = iOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0569DE7E1328AD9C00B3D016 /* shared */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0544C86E150F57980057EC39 /* AFMediaTypeParser.h */,\n\t\t\t\t0544C86F150F57980057EC39 /* AFMediaTypeParser.m */,\n\t\t\t\t0569DE7F1328AD9C00B3D016 /* AFCache+Mimetypes.h */,\n\t\t\t\t0569DE801328AD9C00B3D016 /* AFCache+Mimetypes.m */,\n\t\t\t\t0569DE831328AD9C00B3D016 /* AFCache+PrivateAPI.h */,\n\t\t\t\t0569DE841328AD9C00B3D016 /* AFCache.h */,\n\t\t\t\t0569DE851328AD9C00B3D016 /* AFCache.m */,\n\t\t\t\t0569DE861328AD9C00B3D016 /* AFCache_Logging.h */,\n\t\t\t\t0569DE891328AD9C00B3D016 /* AFCacheableItem.h */,\n\t\t\t\t0569DE8A1328AD9C00B3D016 /* AFCacheableItem.m */,\n\t\t\t\t0569DE8B1328AD9C00B3D016 /* AFCacheableItemInfo.h */,\n\t\t\t\t0569DE8C1328AD9C00B3D016 /* AFCacheableItemInfo.m */,\n\t\t\t\t0569DE8D1328AD9C00B3D016 /* AFPackageInfo.h */,\n\t\t\t\t0569DE8E1328AD9C00B3D016 /* AFPackageInfo.m */,\n\t\t\t\t0569DE8F1328AD9C00B3D016 /* AFURLCache.h */,\n\t\t\t\t0569DE901328AD9C00B3D016 /* AFURLCache.m */,\n\t\t\t\t0569DE911328AD9C00B3D016 /* Constants.h */,\n\t\t\t\t0569DE921328AD9C00B3D016 /* DateParser.h */,\n\t\t\t\t0569DE931328AD9C00B3D016 /* DateParser.m */,\n\t\t\t\t058339CB150CB747005A6D55 /* AFHTTPURLProtocol.h */,\n\t\t\t\t058339CC150CB747005A6D55 /* AFHTTPURLProtocol.m */,\n\t\t\t);\n\t\t\tpath = shared;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t051B386B1328AACA0057F2F5 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0569DE941328AD9C00B3D016 /* AFRegexString.h in Headers */,\n\t\t\t\t0569DEAA1328AD9C00B3D016 /* AFCache-iOS-Prefix.pch in Headers */,\n\t\t\t\t0569DEAF1328AD9C00B3D016 /* AFCache+Mimetypes.h in Headers */,\n\t\t\t\t0569DEB51328AD9C00B3D016 /* AFCache+PrivateAPI.h in Headers */,\n\t\t\t\t0569DEB61328AD9C00B3D016 /* AFCache.h in Headers */,\n\t\t\t\t0569DEB91328AD9C00B3D016 /* AFCache_Logging.h in Headers */,\n\t\t\t\t0569DEBD1328AD9C00B3D016 /* AFCacheableItem.h in Headers */,\n\t\t\t\t0569DEC01328AD9C00B3D016 /* AFCacheableItemInfo.h in Headers */,\n\t\t\t\t0569DEC31328AD9C00B3D016 /* AFPackageInfo.h in Headers */,\n\t\t\t\t0569DEC61328AD9C00B3D016 /* AFURLCache.h in Headers */,\n\t\t\t\t0569DECA1328AD9C00B3D016 /* DateParser.h in Headers */,\n\t\t\t\t058339CD150CB747005A6D55 /* AFHTTPURLProtocol.h in Headers */,\n\t\t\t\t0544C870150F57980057EC39 /* AFMediaTypeParser.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t051B386C1328AACA0057F2F5 /* AFCache-iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 051B38901328AACA0057F2F5 /* Build configuration list for PBXNativeTarget \"AFCache-iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t051B38691328AACA0057F2F5 /* Sources */,\n\t\t\t\t051B386A1328AACA0057F2F5 /* Frameworks */,\n\t\t\t\t051B386B1328AACA0057F2F5 /* Headers */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"AFCache-iOS\";\n\t\t\tproductName = \"AFCache-iOS\";\n\t\t\tproductReference = 051B386D1328AACA0057F2F5 /* libAFCache-iOS.a */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t051B38791328AACA0057F2F5 /* AFCache-iOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 051B38931328AACA0057F2F5 /* Build configuration list for PBXNativeTarget \"AFCache-iOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t051B38751328AACA0057F2F5 /* Sources */,\n\t\t\t\t051B38761328AACA0057F2F5 /* Frameworks */,\n\t\t\t\t051B38771328AACA0057F2F5 /* Resources */,\n\t\t\t\t051B38781328AACA0057F2F5 /* ShellScript */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t051B38811328AACA0057F2F5 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"AFCache-iOSTests\";\n\t\t\tproductName = \"AFCache-iOSTests\";\n\t\t\tproductReference = 051B387A1328AACA0057F2F5 /* AFCache-iOSTests.octest */;\n\t\t\tproductType = \"com.apple.product-type.bundle\";\n\t\t};\n\t\t0566ADFF1332D6B500583E6A /* AFCacheDemo */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 0566AE221332D6B500583E6A /* Build configuration list for PBXNativeTarget \"AFCacheDemo\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t0566ADFC1332D6B500583E6A /* Sources */,\n\t\t\t\t0566ADFD1332D6B500583E6A /* Frameworks */,\n\t\t\t\t0566ADFE1332D6B500583E6A /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t0566AE381332D79C00583E6A /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = AFCacheDemo;\n\t\t\tproductName = AFCacheDemo;\n\t\t\tproductReference = 0566AE001332D6B500583E6A /* AFCacheDemo.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t051B38641328AACA0057F2F5 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0510;\n\t\t\t\tORGANIZATIONNAME = \"Artifacts - Fine Software Development\";\n\t\t\t};\n\t\t\tbuildConfigurationList = 051B38671328AACA0057F2F5 /* Build configuration list for PBXProject \"AFCache-iOS\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 051B38621328AACA0057F2F5;\n\t\t\tproductRefGroup = 051B386E1328AACA0057F2F5 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t051B386C1328AACA0057F2F5 /* AFCache-iOS */,\n\t\t\t\t051B38791328AACA0057F2F5 /* AFCache-iOSTests */,\n\t\t\t\t0566ADFF1332D6B500583E6A /* AFCacheDemo */,\n\t\t\t\t379B6926177CAEA8001174E8 /* AFCache_universal */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t051B38771328AACA0057F2F5 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0569DE621328AD5B00B3D016 /* InfoPlist.strings in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t0566ADFE1332D6B500583E6A /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0566AE331332D6FD00583E6A /* MainWindow.xib in Resources */,\n\t\t\t\t0566AE341332D6FD00583E6A /* NSURLRequest.xib in Resources */,\n\t\t\t\t0566AE351332D6FD00583E6A /* Packaging.xib in Resources */,\n\t\t\t\t0566AE421332D85600583E6A /* CacheableItemDemoController.xib in Resources */,\n\t\t\t\t0566AE541332D98200583E6A /* Icon57x57.png in Resources */,\n\t\t\t\t0566AE551332D98200583E6A /* Icon72x72.png in Resources */,\n\t\t\t\t0566AE561332D98200583E6A /* Icon114x114.png in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t051B38781328AACA0057F2F5 /* ShellScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"# Run the unit tests in this test bundle.\\n\\\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\\\"\\n\";\n\t\t};\n\t\t379B692D177CAFF9001174E8 /* ShellScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"sh scripts/createFatLib.sh\";\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t051B38691328AACA0057F2F5 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0569DE951328AD9C00B3D016 /* AFRegexString.m in Sources */,\n\t\t\t\t0569DEB01328AD9C00B3D016 /* AFCache+Mimetypes.m in Sources */,\n\t\t\t\t0569DEB71328AD9C00B3D016 /* AFCache.m in Sources */,\n\t\t\t\t0569DEBE1328AD9C00B3D016 /* AFCacheableItem.m in Sources */,\n\t\t\t\t0569DEC11328AD9C00B3D016 /* AFCacheableItemInfo.m in Sources */,\n\t\t\t\t0569DEC41328AD9C00B3D016 /* AFPackageInfo.m in Sources */,\n\t\t\t\t0569DEC71328AD9C00B3D016 /* AFURLCache.m in Sources */,\n\t\t\t\t0569DECB1328AD9C00B3D016 /* DateParser.m in Sources */,\n\t\t\t\t058339CE150CB747005A6D55 /* AFHTTPURLProtocol.m in Sources */,\n\t\t\t\t0544C871150F57980057EC39 /* AFMediaTypeParser.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t051B38751328AACA0057F2F5 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0569DE611328AD5B00B3D016 /* AFCache_iOSTests.m in Sources */,\n\t\t\t\t0569DE961328AD9C00B3D016 /* AFRegexString.m in Sources */,\n\t\t\t\t0569DEB11328AD9C00B3D016 /* AFCache+Mimetypes.m in Sources */,\n\t\t\t\t0569DEB81328AD9C00B3D016 /* AFCache.m in Sources */,\n\t\t\t\t0569DEBF1328AD9C00B3D016 /* AFCacheableItem.m in Sources */,\n\t\t\t\t0569DEC21328AD9C00B3D016 /* AFCacheableItemInfo.m in Sources */,\n\t\t\t\t0569DEC51328AD9C00B3D016 /* AFPackageInfo.m in Sources */,\n\t\t\t\t0569DEC81328AD9C00B3D016 /* AFURLCache.m in Sources */,\n\t\t\t\t0569DECC1328AD9C00B3D016 /* DateParser.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t0566ADFC1332D6B500583E6A /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0566AE311332D6FD00583E6A /* DemoAppDelegate.m in Sources */,\n\t\t\t\t0566AE321332D6FD00583E6A /* main.m in Sources */,\n\t\t\t\t0566AE361332D6FD00583E6A /* PackagingDemoController.m in Sources */,\n\t\t\t\t0566AE411332D85600583E6A /* CacheableItemDemoController.m in Sources */,\n\t\t\t\t0566AE431332D85600583E6A /* NSURLRequestDemoViewController.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t051B38811328AACA0057F2F5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 051B386C1328AACA0057F2F5 /* AFCache-iOS */;\n\t\t\ttargetProxy = 051B38801328AACA0057F2F5 /* PBXContainerItemProxy */;\n\t\t};\n\t\t0566AE381332D79C00583E6A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 051B386C1328AACA0057F2F5 /* AFCache-iOS */;\n\t\t\ttargetProxy = 0566AE371332D79C00583E6A /* PBXContainerItemProxy */;\n\t\t};\n\t\t379B692C177CAFCA001174E8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 051B386C1328AACA0057F2F5 /* AFCache-iOS */;\n\t\t\ttargetProxy = 379B692B177CAFCA001174E8 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t0569DE5D1328AD5B00B3D016 /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t0569DE5E1328AD5B00B3D016 /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t04A29CFD147C080700B264EF /* Adhoc */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvmgcc42;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 5.0;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Adhoc;\n\t\t};\n\t\t04A29CFE147C080700B264EF /* Adhoc */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tDSTROOT = /tmp/AFCache_iOS.dst;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"src/iOS/AFCache-iOS-Prefix.pch\";\n\t\t\t\tGCC_THUMB_SUPPORT = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tOTHER_LDFLAGS = \"-ObjC\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = ../../Headers/AFCache;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Adhoc;\n\t\t};\n\t\t04A29CFF147C080700B264EF /* Adhoc */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"test/iOS/AFCache-iOSTests-Prefix.pch\";\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tINFOPLIST_FILE = \"test/iOS/AFCache-iOSTests-Info.plist\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tSenTestingKit,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = octest;\n\t\t\t};\n\t\t\tname = Adhoc;\n\t\t};\n\t\t04A29D00147C080700B264EF /* Adhoc */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = src/Examples/Demo_Prefix.pch;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tINFOPLIST_FILE = \"src/Examples/Demo-Info.plist\";\n\t\t\t\tOTHER_CFLAGS = \"-DNS_BLOCK_ASSERTIONS=1\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-all_load\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Adhoc;\n\t\t};\n\t\t051B388E1328AACA0057F2F5 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEPLOYMENT_TARGET = ../sharedLib/;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = DEBUG;\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvmgcc42;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 5.0;\n\t\t\t\tLIB_BASE_NAME = ERBeans;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t051B388F1328AACA0057F2F5 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEPLOYMENT_TARGET = ../sharedLib/;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvmgcc42;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 5.0;\n\t\t\t\tLIB_BASE_NAME = ERBeans;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t051B38911328AACA0057F2F5 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tDSTROOT = /tmp/AFCache_iOS.dst;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"src/iOS/AFCache-iOS-Prefix.pch\";\n\t\t\t\tGCC_THUMB_SUPPORT = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tOTHER_LDFLAGS = \"-ObjC\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = ../../Headers/AFCache;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t051B38921328AACA0057F2F5 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tDSTROOT = /tmp/AFCache_iOS.dst;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"src/iOS/AFCache-iOS-Prefix.pch\";\n\t\t\t\tGCC_THUMB_SUPPORT = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tOTHER_LDFLAGS = \"-ObjC\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = ../../Headers/AFCache;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t051B38941328AACA0057F2F5 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"test/iOS/AFCache-iOSTests-Prefix.pch\";\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tINFOPLIST_FILE = \"test/iOS/AFCache-iOSTests-Info.plist\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tSenTestingKit,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = octest;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t051B38951328AACA0057F2F5 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"test/iOS/AFCache-iOSTests-Prefix.pch\";\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tINFOPLIST_FILE = \"test/iOS/AFCache-iOSTests-Info.plist\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tSenTestingKit,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = octest;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t0566AE201332D6B500583E6A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = src/Examples/Demo_Prefix.pch;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tINFOPLIST_FILE = \"src/Examples/Demo-Info.plist\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-all_load\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t0566AE211332D6B500583E6A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = src/Examples/Demo_Prefix.pch;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tINFOPLIST_FILE = \"src/Examples/Demo-Info.plist\";\n\t\t\t\tOTHER_CFLAGS = \"-DNS_BLOCK_ASSERTIONS=1\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-all_load\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t379B6927177CAEA8001174E8 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEPLOYMENT_TARGET = ../sharedLib;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tLIB_BASE_NAME = AFCache;\n\t\t\t\tPRODUCT_NAME = \"AFCache-iOS\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t379B6928177CAEA8001174E8 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEPLOYMENT_TARGET = ../sharedLib;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tLIB_BASE_NAME = AFCache;\n\t\t\t\tPRODUCT_NAME = \"AFCache-iOS\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t379B6929177CAEA8001174E8 /* Adhoc */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEPLOYMENT_TARGET = ../sharedLib;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tLIB_BASE_NAME = AFCache;\n\t\t\t\tPRODUCT_NAME = \"AFCache-iOS\";\n\t\t\t};\n\t\t\tname = Adhoc;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t051B38671328AACA0057F2F5 /* Build configuration list for PBXProject \"AFCache-iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t051B388E1328AACA0057F2F5 /* Debug */,\n\t\t\t\t051B388F1328AACA0057F2F5 /* Release */,\n\t\t\t\t04A29CFD147C080700B264EF /* Adhoc */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t051B38901328AACA0057F2F5 /* Build configuration list for PBXNativeTarget \"AFCache-iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t051B38911328AACA0057F2F5 /* Debug */,\n\t\t\t\t051B38921328AACA0057F2F5 /* Release */,\n\t\t\t\t04A29CFE147C080700B264EF /* Adhoc */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t051B38931328AACA0057F2F5 /* Build configuration list for PBXNativeTarget \"AFCache-iOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t051B38941328AACA0057F2F5 /* Debug */,\n\t\t\t\t051B38951328AACA0057F2F5 /* Release */,\n\t\t\t\t04A29CFF147C080700B264EF /* Adhoc */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t0566AE221332D6B500583E6A /* Build configuration list for PBXNativeTarget \"AFCacheDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t0566AE201332D6B500583E6A /* Debug */,\n\t\t\t\t0566AE211332D6B500583E6A /* Release */,\n\t\t\t\t04A29D00147C080700B264EF /* Adhoc */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t379B692A177CAEA8001174E8 /* Build configuration list for PBXAggregateTarget \"AFCache_universal\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t379B6927177CAEA8001174E8 /* Debug */,\n\t\t\t\t379B6928177CAEA8001174E8 /* Release */,\n\t\t\t\t379B6929177CAEA8001174E8 /* Adhoc */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 051B38641328AACA0057F2F5 /* Project object */;\n}\n"
  },
  {
    "path": "AFCache.podspec",
    "content": "Pod::Spec.new do |s|\n\n  s.name         = \"AFCache\"\n  s.version      = \"0.13.0\"\n  s.summary      = \"AFCache is an HTTP disk cache for use on iPhone/iPad and OSX.\"\n\n  s.description  = <<-DESC\n\tAFCache is an HTTP disk cache for use on iPhone/iPad and OSX. It can be linked as a static library or as a framework. \n\tThe cache was initially written because on iOS, NSURLCache ignores NSURLCacheStorageAllowed and instead treats it as \n\tNSURLCacheStorageAllowedInMemoryOnly which is pretty useless for a persistent cache.\n                   DESC\n\n  s.homepage     = \"https://github.com/artifacts/AFCache\"\n  s.license      = 'Apache'\n\n  s.authors      = { \"Michael Markowski\" => \"m.markowski@artifacts.de\", \"Lars Blumberg\" => \"lars.blumberg@sprylab.com\", \"Nico Schmidt\" => \"\", \"Björn Kriews\" => \"bkr@jumper.org\", \"Christian Menschel\" => \"post@cmenschel.de\" }\n\n  s.ios.deployment_target = '7.0'\n  s.osx.deployment_target = '10.7'\n\n  s.source       = { :git => \"https://github.com/artifacts/AFCache.git\", :tag => s.version.to_s }\n\n  s.source_files  = 'src/shared/**/*.{h,m}', 'src/3rdparty/AFRegexString/**/*.{h,m}'\n  s.ios.source_files  = 'src/iOS/**/*.{h,m}'\n  s.osx.source_files  = 'src/OSX/**/*.{h,m}'\n\n  s.exclude_files = 'src/OSX/afcpkg_main*', '**/main.{h,m}'\n\n  s.requires_arc = true\n\n  s.dependency 'ZipArchive', '~> 1.3.0'\n  s.dependency 'VersionIntrospection', '~> 0.4.0'\nend\n"
  },
  {
    "path": "AFCache.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t04007352153242D400335735 /* AFCache+Mimetypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BADF132A291B0087CEA1 /* AFCache+Mimetypes.h */; };\n\t\t046BEFAB152D180A00FE16B8 /* AFCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BADD132A291B0087CEA1 /* AFCache.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t046BEFAC152D180A00FE16B8 /* AFCacheableItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BAE4132A291B0087CEA1 /* AFCacheableItem.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t046BEFAD152D180A00FE16B8 /* AFCacheableItemInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BAE8132A291B0087CEA1 /* AFCacheableItemInfo.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t046BEFAE152D180A00FE16B8 /* AFMediaTypeParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C491F8150F9CB1009EDA8F /* AFMediaTypeParser.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t046BEFAF152D180A00FE16B8 /* AFURLCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BAEC132A291B0087CEA1 /* AFURLCache.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t046BEFB0152D180A00FE16B8 /* AFHTTPURLProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C491FC150F9CBA009EDA8F /* AFHTTPURLProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t046BEFB4152D180A00FE16B8 /* AFPackageInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BAEA132A291B0087CEA1 /* AFPackageInfo.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t050D30B5132A276A003809FC /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 050D30B4132A276A003809FC /* Cocoa.framework */; };\n\t\t050D30C7132A276A003809FC /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 050D30B4132A276A003809FC /* Cocoa.framework */; };\n\t\t050D30CA132A276A003809FC /* AFCache.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 050D30B1132A276A003809FC /* AFCache.framework */; };\n\t\t0511C97815AC480500369FE4 /* AFCacheTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0511C97615AC480500369FE4 /* AFCacheTests.m */; };\n\t\t0527099617CE587C00CFFE63 /* AFCache.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 050D30B1132A276A003809FC /* AFCache.framework */; };\n\t\t055AAF5A13575581006E1CF9 /* AFCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BADE132A291B0087CEA1 /* AFCache.m */; };\n\t\t055AAF5B13575581006E1CF9 /* AFCache+Mimetypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BAE0132A291B0087CEA1 /* AFCache+Mimetypes.m */; };\n\t\t055AAF5D13575581006E1CF9 /* AFCacheableItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BAE5132A291B0087CEA1 /* AFCacheableItem.m */; };\n\t\t055AAF5E13575581006E1CF9 /* AFCacheableItem+Packaging.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BAE7132A291B0087CEA1 /* AFCacheableItem+Packaging.m */; };\n\t\t055AAF5F13575581006E1CF9 /* AFCacheableItemInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BAE9132A291B0087CEA1 /* AFCacheableItemInfo.m */; };\n\t\t055AAF6013575581006E1CF9 /* AFPackageInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BAEB132A291B0087CEA1 /* AFPackageInfo.m */; };\n\t\t055AAF6113575581006E1CF9 /* AFURLCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BAED132A291B0087CEA1 /* AFURLCache.m */; };\n\t\t055AAF6213575581006E1CF9 /* DateParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BAF0132A291B0087CEA1 /* DateParser.m */; };\n\t\t055AAF6513575640006E1CF9 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 055AAF6413575640006E1CF9 /* Cocoa.framework */; };\n\t\t055AAF671357565B006E1CF9 /* AFRegexString.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BB09132A29370087CEA1 /* AFRegexString.m */; };\n\t\t056DD4CD1859AE0E004C7134 /* AFCachePackageCreator.m in Sources */ = {isa = PBXBuildFile; fileRef = 05238D0D151B6D880015D70E /* AFCachePackageCreator.m */; };\n\t\t056DD4CE1859AE13004C7134 /* AFCache+Packaging.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BAE2132A291B0087CEA1 /* AFCache+Packaging.m */; };\n\t\t05C491FB150F9CB1009EDA8F /* AFMediaTypeParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C491F9150F9CB1009EDA8F /* AFMediaTypeParser.m */; };\n\t\t05C491FF150F9CBA009EDA8F /* AFHTTPURLProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C491FD150F9CBA009EDA8F /* AFHTTPURLProtocol.m */; };\n\t\t05C49201150F9D5C009EDA8F /* AFMediaTypeParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C491F8150F9CB1009EDA8F /* AFMediaTypeParser.h */; };\n\t\t05C49202150F9D67009EDA8F /* AFMediaTypeParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C491F9150F9CB1009EDA8F /* AFMediaTypeParser.m */; };\n\t\t05C9BAF3132A291B0087CEA1 /* AFCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BADE132A291B0087CEA1 /* AFCache.m */; };\n\t\t05C9BAF5132A291B0087CEA1 /* AFCache+Mimetypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BAE0132A291B0087CEA1 /* AFCache+Mimetypes.m */; };\n\t\t05C9BAFA132A291B0087CEA1 /* AFCacheableItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BAE5132A291B0087CEA1 /* AFCacheableItem.m */; };\n\t\t05C9BAFC132A291B0087CEA1 /* AFCacheableItem+Packaging.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BAE7132A291B0087CEA1 /* AFCacheableItem+Packaging.m */; };\n\t\t05C9BAFE132A291B0087CEA1 /* AFCacheableItemInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BAE9132A291B0087CEA1 /* AFCacheableItemInfo.m */; };\n\t\t05C9BB00132A291B0087CEA1 /* AFPackageInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BAEB132A291B0087CEA1 /* AFPackageInfo.m */; };\n\t\t05C9BB02132A291B0087CEA1 /* AFURLCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BAED132A291B0087CEA1 /* AFURLCache.m */; };\n\t\t05C9BB05132A291B0087CEA1 /* DateParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BAF0132A291B0087CEA1 /* DateParser.m */; };\n\t\t05C9BB19132A29370087CEA1 /* AFRegexString.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C9BB09132A29370087CEA1 /* AFRegexString.m */; };\n\t\t05C9BB28132A2A540087CEA1 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05C9BB27132A2A540087CEA1 /* SystemConfiguration.framework */; };\n\t\t05C9BB2A132A2A880087CEA1 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 05C9BB29132A2A880087CEA1 /* libz.dylib */; };\n\t\t05C9BB6F132A30E60087CEA1 /* AFCacheLib.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BB6E132A30E60087CEA1 /* AFCacheLib.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t05FA233D1357515400050BCB /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05FA233C1357515400050BCB /* CoreFoundation.framework */; };\n\t\t05FA234A135751E100050BCB /* afcpkg_main.m in Sources */ = {isa = PBXBuildFile; fileRef = 05FA2349135751E100050BCB /* afcpkg_main.m */; };\n\t\t05FA23581357535400050BCB /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05FA23571357535400050BCB /* SystemConfiguration.framework */; };\n\t\t05FA235A1357536600050BCB /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 05FA23591357536600050BCB /* libz.dylib */; };\n\t\t05FA23601357539B00050BCB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 050D30B4132A276A003809FC /* Cocoa.framework */; };\n\t\t05FA236A1357539C00050BCB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 050D30B4132A276A003809FC /* Cocoa.framework */; };\n\t\t05FA236D1357539C00050BCB /* libAFCacheOSXStatic.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 05FA235F1357539B00050BCB /* libAFCacheOSXStatic.a */; };\n\t\t05FA23731357539C00050BCB /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 05FA23711357539C00050BCB /* InfoPlist.strings */; };\n\t\t05FA23761357539C00050BCB /* AFCacheOSXStaticTests.h in Resources */ = {isa = PBXBuildFile; fileRef = 05FA23751357539C00050BCB /* AFCacheOSXStaticTests.h */; };\n\t\t05FA23781357539C00050BCB /* AFCacheOSXStaticTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 05FA23771357539C00050BCB /* AFCacheOSXStaticTests.m */; };\n\t\t05FA2380135753C500050BCB /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05FA237F135753C500050BCB /* SystemConfiguration.framework */; };\n\t\t05FA23831357540400050BCB /* AFCacheLib.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BB6E132A30E60087CEA1 /* AFCacheLib.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t05FA23841357543A00050BCB /* AFCache_Logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BADC132A291B0087CEA1 /* AFCache_Logging.h */; };\n\t\t05FA23851357543D00050BCB /* AFCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BADD132A291B0087CEA1 /* AFCache.h */; };\n\t\t05FA23861357543F00050BCB /* AFCache+Mimetypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BADF132A291B0087CEA1 /* AFCache+Mimetypes.h */; };\n\t\t05FA23881357544200050BCB /* AFCache+PrivateAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BAE3132A291B0087CEA1 /* AFCache+PrivateAPI.h */; };\n\t\t05FA23891357544400050BCB /* AFCacheableItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BAE4132A291B0087CEA1 /* AFCacheableItem.h */; };\n\t\t05FA238B1357544B00050BCB /* AFCacheableItemInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BAE8132A291B0087CEA1 /* AFCacheableItemInfo.h */; };\n\t\t05FA238C1357544C00050BCB /* AFPackageInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BAEA132A291B0087CEA1 /* AFPackageInfo.h */; };\n\t\t05FA238D1357544D00050BCB /* AFURLCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BAEC132A291B0087CEA1 /* AFURLCache.h */; };\n\t\t05FA238F1357545000050BCB /* DateParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C9BAEF132A291B0087CEA1 /* DateParser.h */; };\n\t\t05FA23901357548D00050BCB /* libAFCacheOSXStatic.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 05FA235F1357539B00050BCB /* libAFCacheOSXStatic.a */; };\n\t\tC73C71CC19816F13008EDA23 /* AFRequestConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = C73C71CA19816F13008EDA23 /* AFRequestConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tC73C71CD19816F13008EDA23 /* AFRequestConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = C73C71CA19816F13008EDA23 /* AFRequestConfiguration.h */; };\n\t\tC73C71CE19816F13008EDA23 /* AFRequestConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = C73C71CB19816F13008EDA23 /* AFRequestConfiguration.m */; };\n\t\tC73C71CF19816F13008EDA23 /* AFRequestConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = C73C71CB19816F13008EDA23 /* AFRequestConfiguration.m */; };\n\t\tC7503D46198640AA0032E451 /* AFDownloadOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C7503D44198640AA0032E451 /* AFDownloadOperation.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tC7503D47198640AA0032E451 /* AFDownloadOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C7503D44198640AA0032E451 /* AFDownloadOperation.h */; };\n\t\tC7503D48198640AA0032E451 /* AFDownloadOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = C7503D45198640AA0032E451 /* AFDownloadOperation.m */; };\n\t\tC7503D49198640AA0032E451 /* AFDownloadOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = C7503D45198640AA0032E451 /* AFDownloadOperation.m */; };\n\t\tC765AB591CEB39F200A47B4A /* AFCache+FileAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = C765AB571CEB39F200A47B4A /* AFCache+FileAttributes.h */; };\n\t\tC765AB5A1CEB39F200A47B4A /* AFCache+FileAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = C765AB581CEB39F200A47B4A /* AFCache+FileAttributes.m */; };\n\t\tC765AB5D1CEB3BD500A47B4A /* AFCacheableItem+FileAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = C765AB5B1CEB3BD500A47B4A /* AFCacheableItem+FileAttributes.h */; };\n\t\tC765AB5E1CEB3BD500A47B4A /* AFCacheableItem+FileAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = C765AB5C1CEB3BD500A47B4A /* AFCacheableItem+FileAttributes.m */; };\n\t\tE369E20919B0711700EAC9FE /* AFCache+DeprecatedAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = E369E20719B0711700EAC9FE /* AFCache+DeprecatedAPI.h */; };\n\t\tE369E20A19B0711700EAC9FE /* AFCache+DeprecatedAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = E369E20819B0711700EAC9FE /* AFCache+DeprecatedAPI.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t050D30C8132A276A003809FC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 050D30A7132A276A003809FC /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 050D30B0132A276A003809FC;\n\t\t\tremoteInfo = AFCache;\n\t\t};\n\t\t05FA236B1357539C00050BCB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 050D30A7132A276A003809FC /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 05FA235E1357539B00050BCB;\n\t\t\tremoteInfo = AFCacheOSXStatic;\n\t\t};\n\t\t05FA2391135754BE00050BCB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 050D30A7132A276A003809FC /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 05FA235E1357539B00050BCB;\n\t\t\tremoteInfo = AFCacheOSXStatic;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t0527099517CE586500CFFE63 /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"~/build_frameworks\";\n\t\t\tdstSubfolderSpec = 0;\n\t\t\tfiles = (\n\t\t\t\t0527099617CE587C00CFFE63 /* AFCache.framework in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t05FA23381357515400050BCB /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = /usr/share/man/man1/;\n\t\t\tdstSubfolderSpec = 0;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 1;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t050D30B1132A276A003809FC /* AFCache.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AFCache.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t050D30B4132A276A003809FC /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };\n\t\t050D30B7132A276A003809FC /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };\n\t\t050D30B8132A276A003809FC /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };\n\t\t050D30B9132A276A003809FC /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t050D30C6132A276A003809FC /* AFCacheTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AFCacheTests.octest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t050D30E4132A2821003809FC /* AFCache-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = \"AFCache-Info.plist\"; path = \"src/OSX/AFCache-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t050D30E5132A2821003809FC /* AFCache-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"AFCache-Prefix.pch\"; path = \"src/OSX/AFCache-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t0511C97315AC480500369FE4 /* AFCacheTests-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = \"AFCacheTests-Info.plist\"; path = \"AFCacheTests/AFCacheTests-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t0511C97415AC480500369FE4 /* AFCacheTests-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"AFCacheTests-Prefix.pch\"; path = \"AFCacheTests/AFCacheTests-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t0511C97515AC480500369FE4 /* AFCacheTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFCacheTests.h; path = AFCacheTests/AFCacheTests.h; sourceTree = \"<group>\"; };\n\t\t0511C97615AC480500369FE4 /* AFCacheTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFCacheTests.m; path = AFCacheTests/AFCacheTests.m; sourceTree = \"<group>\"; };\n\t\t05238D0C151B6D880015D70E /* AFCachePackageCreator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFCachePackageCreator.h; path = src/shared/AFCachePackageCreator.h; sourceTree = \"<group>\"; };\n\t\t05238D0D151B6D880015D70E /* AFCachePackageCreator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFCachePackageCreator.m; path = src/shared/AFCachePackageCreator.m; sourceTree = \"<group>\"; };\n\t\t055AAF6413575640006E1CF9 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };\n\t\t05C491F8150F9CB1009EDA8F /* AFMediaTypeParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFMediaTypeParser.h; path = src/shared/AFMediaTypeParser.h; sourceTree = \"<group>\"; };\n\t\t05C491F9150F9CB1009EDA8F /* AFMediaTypeParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFMediaTypeParser.m; path = src/shared/AFMediaTypeParser.m; sourceTree = \"<group>\"; };\n\t\t05C491FC150F9CBA009EDA8F /* AFHTTPURLProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFHTTPURLProtocol.h; path = src/shared/AFHTTPURLProtocol.h; sourceTree = \"<group>\"; };\n\t\t05C491FD150F9CBA009EDA8F /* AFHTTPURLProtocol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFHTTPURLProtocol.m; path = src/shared/AFHTTPURLProtocol.m; sourceTree = \"<group>\"; };\n\t\t05C9BADC132A291B0087CEA1 /* AFCache_Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFCache_Logging.h; path = src/shared/AFCache_Logging.h; sourceTree = \"<group>\"; };\n\t\t05C9BADD132A291B0087CEA1 /* AFCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFCache.h; path = src/shared/AFCache.h; sourceTree = \"<group>\"; };\n\t\t05C9BADE132A291B0087CEA1 /* AFCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFCache.m; path = src/shared/AFCache.m; sourceTree = \"<group>\"; };\n\t\t05C9BADF132A291B0087CEA1 /* AFCache+Mimetypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"AFCache+Mimetypes.h\"; path = \"src/shared/AFCache+Mimetypes.h\"; sourceTree = \"<group>\"; };\n\t\t05C9BAE0132A291B0087CEA1 /* AFCache+Mimetypes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = \"AFCache+Mimetypes.m\"; path = \"src/shared/AFCache+Mimetypes.m\"; sourceTree = \"<group>\"; };\n\t\t05C9BAE1132A291B0087CEA1 /* AFCache+Packaging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"AFCache+Packaging.h\"; path = \"src/shared/AFCache+Packaging.h\"; sourceTree = \"<group>\"; };\n\t\t05C9BAE2132A291B0087CEA1 /* AFCache+Packaging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = \"AFCache+Packaging.m\"; path = \"src/shared/AFCache+Packaging.m\"; sourceTree = \"<group>\"; };\n\t\t05C9BAE3132A291B0087CEA1 /* AFCache+PrivateAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"AFCache+PrivateAPI.h\"; path = \"src/shared/AFCache+PrivateAPI.h\"; sourceTree = \"<group>\"; };\n\t\t05C9BAE4132A291B0087CEA1 /* AFCacheableItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFCacheableItem.h; path = src/shared/AFCacheableItem.h; sourceTree = \"<group>\"; };\n\t\t05C9BAE5132A291B0087CEA1 /* AFCacheableItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFCacheableItem.m; path = src/shared/AFCacheableItem.m; sourceTree = \"<group>\"; };\n\t\t05C9BAE6132A291B0087CEA1 /* AFCacheableItem+Packaging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"AFCacheableItem+Packaging.h\"; path = \"src/shared/AFCacheableItem+Packaging.h\"; sourceTree = \"<group>\"; };\n\t\t05C9BAE7132A291B0087CEA1 /* AFCacheableItem+Packaging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = \"AFCacheableItem+Packaging.m\"; path = \"src/shared/AFCacheableItem+Packaging.m\"; sourceTree = \"<group>\"; };\n\t\t05C9BAE8132A291B0087CEA1 /* AFCacheableItemInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFCacheableItemInfo.h; path = src/shared/AFCacheableItemInfo.h; sourceTree = \"<group>\"; };\n\t\t05C9BAE9132A291B0087CEA1 /* AFCacheableItemInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFCacheableItemInfo.m; path = src/shared/AFCacheableItemInfo.m; sourceTree = \"<group>\"; };\n\t\t05C9BAEA132A291B0087CEA1 /* AFPackageInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFPackageInfo.h; path = src/shared/AFPackageInfo.h; sourceTree = \"<group>\"; };\n\t\t05C9BAEB132A291B0087CEA1 /* AFPackageInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFPackageInfo.m; path = src/shared/AFPackageInfo.m; sourceTree = \"<group>\"; };\n\t\t05C9BAEC132A291B0087CEA1 /* AFURLCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFURLCache.h; path = src/shared/AFURLCache.h; sourceTree = \"<group>\"; };\n\t\t05C9BAED132A291B0087CEA1 /* AFURLCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFURLCache.m; path = src/shared/AFURLCache.m; sourceTree = \"<group>\"; };\n\t\t05C9BAEF132A291B0087CEA1 /* DateParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DateParser.h; path = src/shared/DateParser.h; sourceTree = \"<group>\"; };\n\t\t05C9BAF0132A291B0087CEA1 /* DateParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DateParser.m; path = src/shared/DateParser.m; sourceTree = \"<group>\"; };\n\t\t05C9BB08132A29370087CEA1 /* AFRegexString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFRegexString.h; sourceTree = \"<group>\"; };\n\t\t05C9BB09132A29370087CEA1 /* AFRegexString.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFRegexString.m; sourceTree = \"<group>\"; };\n\t\t05C9BB27132A2A540087CEA1 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };\n\t\t05C9BB29132A2A880087CEA1 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };\n\t\t05C9BB6E132A30E60087CEA1 /* AFCacheLib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFCacheLib.h; path = release/AFCacheLib.h; sourceTree = \"<group>\"; };\n\t\t05FA233A1357515400050BCB /* afcpkg */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = afcpkg; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t05FA233C1357515400050BCB /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };\n\t\t05FA2348135751E100050BCB /* afcpkg_main.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = afcpkg_main.h; path = src/OSX/afcpkg_main.h; sourceTree = \"<group>\"; };\n\t\t05FA2349135751E100050BCB /* afcpkg_main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = afcpkg_main.m; path = src/OSX/afcpkg_main.m; sourceTree = \"<group>\"; };\n\t\t05FA23571357535400050BCB /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };\n\t\t05FA23591357536600050BCB /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };\n\t\t05FA235F1357539B00050BCB /* libAFCacheOSXStatic.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAFCacheOSXStatic.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t05FA23631357539C00050BCB /* AFCacheOSXStatic-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"AFCacheOSXStatic-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t05FA23691357539C00050BCB /* AFCacheOSXStaticTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AFCacheOSXStaticTests.octest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t05FA23701357539C00050BCB /* AFCacheOSXStaticTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"AFCacheOSXStaticTests-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t05FA23721357539C00050BCB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t05FA23741357539C00050BCB /* AFCacheOSXStaticTests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"AFCacheOSXStaticTests-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t05FA23751357539C00050BCB /* AFCacheOSXStaticTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AFCacheOSXStaticTests.h; sourceTree = \"<group>\"; };\n\t\t05FA23771357539C00050BCB /* AFCacheOSXStaticTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AFCacheOSXStaticTests.m; sourceTree = \"<group>\"; };\n\t\t05FA237F135753C500050BCB /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };\n\t\tC73C71CA19816F13008EDA23 /* AFRequestConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFRequestConfiguration.h; path = src/shared/AFRequestConfiguration.h; sourceTree = \"<group>\"; };\n\t\tC73C71CB19816F13008EDA23 /* AFRequestConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFRequestConfiguration.m; path = src/shared/AFRequestConfiguration.m; sourceTree = \"<group>\"; };\n\t\tC7503D44198640AA0032E451 /* AFDownloadOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFDownloadOperation.h; path = src/shared/AFDownloadOperation.h; sourceTree = \"<group>\"; };\n\t\tC7503D45198640AA0032E451 /* AFDownloadOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFDownloadOperation.m; path = src/shared/AFDownloadOperation.m; sourceTree = \"<group>\"; };\n\t\tC765AB571CEB39F200A47B4A /* AFCache+FileAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"AFCache+FileAttributes.h\"; path = \"src/shared/AFCache+FileAttributes.h\"; sourceTree = \"<group>\"; };\n\t\tC765AB581CEB39F200A47B4A /* AFCache+FileAttributes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = \"AFCache+FileAttributes.m\"; path = \"src/shared/AFCache+FileAttributes.m\"; sourceTree = \"<group>\"; };\n\t\tC765AB5B1CEB3BD500A47B4A /* AFCacheableItem+FileAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"AFCacheableItem+FileAttributes.h\"; path = \"src/shared/AFCacheableItem+FileAttributes.h\"; sourceTree = \"<group>\"; };\n\t\tC765AB5C1CEB3BD500A47B4A /* AFCacheableItem+FileAttributes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = \"AFCacheableItem+FileAttributes.m\"; path = \"src/shared/AFCacheableItem+FileAttributes.m\"; sourceTree = \"<group>\"; };\n\t\tE369E20719B0711700EAC9FE /* AFCache+DeprecatedAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"AFCache+DeprecatedAPI.h\"; path = \"src/shared/AFCache+DeprecatedAPI.h\"; sourceTree = \"<group>\"; };\n\t\tE369E20819B0711700EAC9FE /* AFCache+DeprecatedAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = \"AFCache+DeprecatedAPI.m\"; path = \"src/shared/AFCache+DeprecatedAPI.m\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t050D30AD132A276A003809FC /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t05C9BB2A132A2A880087CEA1 /* libz.dylib in Frameworks */,\n\t\t\t\t05C9BB28132A2A540087CEA1 /* SystemConfiguration.framework in Frameworks */,\n\t\t\t\t050D30B5132A276A003809FC /* Cocoa.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t050D30C2132A276A003809FC /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t050D30C7132A276A003809FC /* Cocoa.framework in Frameworks */,\n\t\t\t\t050D30CA132A276A003809FC /* AFCache.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t05FA23371357515400050BCB /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t055AAF6513575640006E1CF9 /* Cocoa.framework in Frameworks */,\n\t\t\t\t05FA23901357548D00050BCB /* libAFCacheOSXStatic.a in Frameworks */,\n\t\t\t\t05FA235A1357536600050BCB /* libz.dylib in Frameworks */,\n\t\t\t\t05FA23581357535400050BCB /* SystemConfiguration.framework in Frameworks */,\n\t\t\t\t05FA233D1357515400050BCB /* CoreFoundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t05FA235C1357539B00050BCB /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t05FA2380135753C500050BCB /* SystemConfiguration.framework in Frameworks */,\n\t\t\t\t05FA23601357539B00050BCB /* Cocoa.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t05FA23651357539C00050BCB /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t05FA236A1357539C00050BCB /* Cocoa.framework in Frameworks */,\n\t\t\t\t05FA236D1357539C00050BCB /* libAFCacheOSXStatic.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t050D30A5132A276A003809FC = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05A098F713C43BEF00BC9572 /* afcpkg */,\n\t\t\t\t05A098F113C43BCE00BC9572 /* AFCacheTests */,\n\t\t\t\t05A098EA13C43B8E00BC9572 /* src */,\n\t\t\t\t055AAF6413575640006E1CF9 /* Cocoa.framework */,\n\t\t\t\t05FA235F1357539B00050BCB /* libAFCacheOSXStatic.a */,\n\t\t\t\t05FA237F135753C500050BCB /* SystemConfiguration.framework */,\n\t\t\t\t05FA23591357536600050BCB /* libz.dylib */,\n\t\t\t\t05FA23571357535400050BCB /* SystemConfiguration.framework */,\n\t\t\t\t05C9BB6D132A30DA0087CEA1 /* api */,\n\t\t\t\t05C9BB29132A2A880087CEA1 /* libz.dylib */,\n\t\t\t\t05C9BB27132A2A540087CEA1 /* SystemConfiguration.framework */,\n\t\t\t\t05FA23611357539B00050BCB /* AFCacheOSXStatic */,\n\t\t\t\t05FA236E1357539C00050BCB /* AFCacheOSXStaticTests */,\n\t\t\t\t050D30B3132A276A003809FC /* Frameworks */,\n\t\t\t\t050D30B2132A276A003809FC /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t050D30B2132A276A003809FC /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t050D30B1132A276A003809FC /* AFCache.framework */,\n\t\t\t\t050D30C6132A276A003809FC /* AFCacheTests.octest */,\n\t\t\t\t05FA233A1357515400050BCB /* afcpkg */,\n\t\t\t\t05FA23691357539C00050BCB /* AFCacheOSXStaticTests.octest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t050D30B3132A276A003809FC /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t050D30B4132A276A003809FC /* Cocoa.framework */,\n\t\t\t\t05FA233C1357515400050BCB /* CoreFoundation.framework */,\n\t\t\t\t050D30B6132A276A003809FC /* Other Frameworks */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t050D30B6132A276A003809FC /* Other Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t050D30B7132A276A003809FC /* AppKit.framework */,\n\t\t\t\t050D30B8132A276A003809FC /* CoreData.framework */,\n\t\t\t\t050D30B9132A276A003809FC /* Foundation.framework */,\n\t\t\t);\n\t\t\tname = \"Other Frameworks\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05238D10151B6DB90015D70E /* packaging */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05238D0C151B6D880015D70E /* AFCachePackageCreator.h */,\n\t\t\t\t05238D0D151B6D880015D70E /* AFCachePackageCreator.m */,\n\t\t\t\t05C9BAE1132A291B0087CEA1 /* AFCache+Packaging.h */,\n\t\t\t\t05C9BAE2132A291B0087CEA1 /* AFCache+Packaging.m */,\n\t\t\t\t05C9BAE6132A291B0087CEA1 /* AFCacheableItem+Packaging.h */,\n\t\t\t\t05C9BAE7132A291B0087CEA1 /* AFCacheableItem+Packaging.m */,\n\t\t\t\t05C9BAEA132A291B0087CEA1 /* AFPackageInfo.h */,\n\t\t\t\t05C9BAEB132A291B0087CEA1 /* AFPackageInfo.m */,\n\t\t\t);\n\t\t\tname = packaging;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05238D11151B6DC60015D70E /* URLProtocol */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05C491FC150F9CBA009EDA8F /* AFHTTPURLProtocol.h */,\n\t\t\t\t05C491FD150F9CBA009EDA8F /* AFHTTPURLProtocol.m */,\n\t\t\t);\n\t\t\tname = URLProtocol;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05238D12151B6DED0015D70E /* URL Cache */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05C9BAEC132A291B0087CEA1 /* AFURLCache.h */,\n\t\t\t\t05C9BAED132A291B0087CEA1 /* AFURLCache.m */,\n\t\t\t);\n\t\t\tname = \"URL Cache\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05238D13151B6E2D0015D70E /* MimeTypes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05C491F8150F9CB1009EDA8F /* AFMediaTypeParser.h */,\n\t\t\t\t05C491F9150F9CB1009EDA8F /* AFMediaTypeParser.m */,\n\t\t\t\t05C9BADF132A291B0087CEA1 /* AFCache+Mimetypes.h */,\n\t\t\t\t05C9BAE0132A291B0087CEA1 /* AFCache+Mimetypes.m */,\n\t\t\t);\n\t\t\tname = MimeTypes;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05238D14151B6E470015D70E /* core */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05C9BADD132A291B0087CEA1 /* AFCache.h */,\n\t\t\t\t05C9BADE132A291B0087CEA1 /* AFCache.m */,\n\t\t\t\tC765AB571CEB39F200A47B4A /* AFCache+FileAttributes.h */,\n\t\t\t\tC765AB581CEB39F200A47B4A /* AFCache+FileAttributes.m */,\n\t\t\t\t05C9BAE3132A291B0087CEA1 /* AFCache+PrivateAPI.h */,\n\t\t\t\t05C9BAE4132A291B0087CEA1 /* AFCacheableItem.h */,\n\t\t\t\t05C9BAE5132A291B0087CEA1 /* AFCacheableItem.m */,\n\t\t\t\tC765AB5B1CEB3BD500A47B4A /* AFCacheableItem+FileAttributes.h */,\n\t\t\t\tC765AB5C1CEB3BD500A47B4A /* AFCacheableItem+FileAttributes.m */,\n\t\t\t\t05C9BAE8132A291B0087CEA1 /* AFCacheableItemInfo.h */,\n\t\t\t\t05C9BAE9132A291B0087CEA1 /* AFCacheableItemInfo.m */,\n\t\t\t\tC73C71CA19816F13008EDA23 /* AFRequestConfiguration.h */,\n\t\t\t\tC73C71CB19816F13008EDA23 /* AFRequestConfiguration.m */,\n\t\t\t\tC7503D44198640AA0032E451 /* AFDownloadOperation.h */,\n\t\t\t\tC7503D45198640AA0032E451 /* AFDownloadOperation.m */,\n\t\t\t);\n\t\t\tname = core;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05238D15151B6E5C0015D70E /* util */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05C9BADC132A291B0087CEA1 /* AFCache_Logging.h */,\n\t\t\t\t05C9BAEF132A291B0087CEA1 /* DateParser.h */,\n\t\t\t\t05C9BAF0132A291B0087CEA1 /* DateParser.m */,\n\t\t\t);\n\t\t\tname = util;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05A098EA13C43B8E00BC9572 /* src */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05A098ED13C43BA200BC9572 /* shared */,\n\t\t\t\t05A098EE13C43BB100BC9572 /* OSX */,\n\t\t\t\t05C9BB06132A29370087CEA1 /* 3rdparty */,\n\t\t\t);\n\t\t\tname = src;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05A098ED13C43BA200BC9572 /* shared */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE369E20619B070FB00EAC9FE /* Deprecated */,\n\t\t\t\t05238D15151B6E5C0015D70E /* util */,\n\t\t\t\t05238D14151B6E470015D70E /* core */,\n\t\t\t\t05238D13151B6E2D0015D70E /* MimeTypes */,\n\t\t\t\t05238D12151B6DED0015D70E /* URL Cache */,\n\t\t\t\t05238D11151B6DC60015D70E /* URLProtocol */,\n\t\t\t\t05238D10151B6DB90015D70E /* packaging */,\n\t\t\t);\n\t\t\tname = shared;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05A098EE13C43BB100BC9572 /* OSX */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t050D30E4132A2821003809FC /* AFCache-Info.plist */,\n\t\t\t\t050D30E5132A2821003809FC /* AFCache-Prefix.pch */,\n\t\t\t);\n\t\t\tname = OSX;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05A098F113C43BCE00BC9572 /* AFCacheTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0511C97315AC480500369FE4 /* AFCacheTests-Info.plist */,\n\t\t\t\t0511C97415AC480500369FE4 /* AFCacheTests-Prefix.pch */,\n\t\t\t\t0511C97515AC480500369FE4 /* AFCacheTests.h */,\n\t\t\t\t0511C97615AC480500369FE4 /* AFCacheTests.m */,\n\t\t\t);\n\t\t\tname = AFCacheTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05A098F713C43BEF00BC9572 /* afcpkg */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05FA2348135751E100050BCB /* afcpkg_main.h */,\n\t\t\t\t05FA2349135751E100050BCB /* afcpkg_main.m */,\n\t\t\t);\n\t\t\tname = afcpkg;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05C9BB06132A29370087CEA1 /* 3rdparty */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05C9BB07132A29370087CEA1 /* AFRegexString */,\n\t\t\t);\n\t\t\tname = 3rdparty;\n\t\t\tpath = src/3rdparty;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05C9BB07132A29370087CEA1 /* AFRegexString */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05C9BB08132A29370087CEA1 /* AFRegexString.h */,\n\t\t\t\t05C9BB09132A29370087CEA1 /* AFRegexString.m */,\n\t\t\t);\n\t\t\tpath = AFRegexString;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05C9BB6D132A30DA0087CEA1 /* api */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05C9BB6E132A30E60087CEA1 /* AFCacheLib.h */,\n\t\t\t);\n\t\t\tname = api;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05FA23611357539B00050BCB /* AFCacheOSXStatic */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05FA23621357539C00050BCB /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = AFCacheOSXStatic;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05FA23621357539C00050BCB /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05FA23631357539C00050BCB /* AFCacheOSXStatic-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05FA236E1357539C00050BCB /* AFCacheOSXStaticTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05FA23751357539C00050BCB /* AFCacheOSXStaticTests.h */,\n\t\t\t\t05FA23771357539C00050BCB /* AFCacheOSXStaticTests.m */,\n\t\t\t\t05FA236F1357539C00050BCB /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = AFCacheOSXStaticTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05FA236F1357539C00050BCB /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05FA23701357539C00050BCB /* AFCacheOSXStaticTests-Info.plist */,\n\t\t\t\t05FA23711357539C00050BCB /* InfoPlist.strings */,\n\t\t\t\t05FA23741357539C00050BCB /* AFCacheOSXStaticTests-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE369E20619B070FB00EAC9FE /* Deprecated */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE369E20719B0711700EAC9FE /* AFCache+DeprecatedAPI.h */,\n\t\t\t\tE369E20819B0711700EAC9FE /* AFCache+DeprecatedAPI.m */,\n\t\t\t);\n\t\t\tname = Deprecated;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t050D30AE132A276A003809FC /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t05C9BB6F132A30E60087CEA1 /* AFCacheLib.h in Headers */,\n\t\t\t\t046BEFAB152D180A00FE16B8 /* AFCache.h in Headers */,\n\t\t\t\tC765AB5D1CEB3BD500A47B4A /* AFCacheableItem+FileAttributes.h in Headers */,\n\t\t\t\t046BEFAC152D180A00FE16B8 /* AFCacheableItem.h in Headers */,\n\t\t\t\t046BEFAD152D180A00FE16B8 /* AFCacheableItemInfo.h in Headers */,\n\t\t\t\t046BEFAE152D180A00FE16B8 /* AFMediaTypeParser.h in Headers */,\n\t\t\t\t046BEFAF152D180A00FE16B8 /* AFURLCache.h in Headers */,\n\t\t\t\t046BEFB0152D180A00FE16B8 /* AFHTTPURLProtocol.h in Headers */,\n\t\t\t\t046BEFB4152D180A00FE16B8 /* AFPackageInfo.h in Headers */,\n\t\t\t\tC7503D46198640AA0032E451 /* AFDownloadOperation.h in Headers */,\n\t\t\t\tC73C71CC19816F13008EDA23 /* AFRequestConfiguration.h in Headers */,\n\t\t\t\t04007352153242D400335735 /* AFCache+Mimetypes.h in Headers */,\n\t\t\t\tE369E20919B0711700EAC9FE /* AFCache+DeprecatedAPI.h in Headers */,\n\t\t\t\tC765AB591CEB39F200A47B4A /* AFCache+FileAttributes.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t05FA235D1357539B00050BCB /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t05FA23831357540400050BCB /* AFCacheLib.h in Headers */,\n\t\t\t\tC73C71CD19816F13008EDA23 /* AFRequestConfiguration.h in Headers */,\n\t\t\t\t05FA23841357543A00050BCB /* AFCache_Logging.h in Headers */,\n\t\t\t\t05FA23891357544400050BCB /* AFCacheableItem.h in Headers */,\n\t\t\t\t05FA238B1357544B00050BCB /* AFCacheableItemInfo.h in Headers */,\n\t\t\t\t05FA238C1357544C00050BCB /* AFPackageInfo.h in Headers */,\n\t\t\t\t05FA238F1357545000050BCB /* DateParser.h in Headers */,\n\t\t\t\t05FA238D1357544D00050BCB /* AFURLCache.h in Headers */,\n\t\t\t\tC7503D47198640AA0032E451 /* AFDownloadOperation.h in Headers */,\n\t\t\t\t05FA23881357544200050BCB /* AFCache+PrivateAPI.h in Headers */,\n\t\t\t\t05FA23851357543D00050BCB /* AFCache.h in Headers */,\n\t\t\t\t05C49201150F9D5C009EDA8F /* AFMediaTypeParser.h in Headers */,\n\t\t\t\t05FA23861357543F00050BCB /* AFCache+Mimetypes.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t050D30B0132A276A003809FC /* AFCache */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 050D30D8132A276A003809FC /* Build configuration list for PBXNativeTarget \"AFCache\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t050D30AC132A276A003809FC /* Sources */,\n\t\t\t\t050D30AD132A276A003809FC /* Frameworks */,\n\t\t\t\t05C9BB70132A310B0087CEA1 /* ShellScript */,\n\t\t\t\t050D30AE132A276A003809FC /* Headers */,\n\t\t\t\t050D30AF132A276A003809FC /* Resources */,\n\t\t\t\t0527099517CE586500CFFE63 /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = AFCache;\n\t\t\tproductName = AFCache;\n\t\t\tproductReference = 050D30B1132A276A003809FC /* AFCache.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t050D30C5132A276A003809FC /* AFCacheTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 050D30DB132A276A003809FC /* Build configuration list for PBXNativeTarget \"AFCacheTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t050D30C1132A276A003809FC /* Sources */,\n\t\t\t\t050D30C2132A276A003809FC /* Frameworks */,\n\t\t\t\t050D30C3132A276A003809FC /* Resources */,\n\t\t\t\t050D30C4132A276A003809FC /* ShellScript */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t050D30C9132A276A003809FC /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = AFCacheTests;\n\t\t\tproductName = AFCacheTests;\n\t\t\tproductReference = 050D30C6132A276A003809FC /* AFCacheTests.octest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.ocunit-test\";\n\t\t};\n\t\t05FA23391357515400050BCB /* afcpkg */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 05FA23441357515400050BCB /* Build configuration list for PBXNativeTarget \"afcpkg\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t05FA23361357515400050BCB /* Sources */,\n\t\t\t\t05FA23371357515400050BCB /* Frameworks */,\n\t\t\t\t05FA23381357515400050BCB /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t05FA2392135754BE00050BCB /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = afcpkg;\n\t\t\tproductName = afcpkg;\n\t\t\tproductReference = 05FA233A1357515400050BCB /* afcpkg */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n\t\t05FA235E1357539B00050BCB /* AFCacheOSXStatic */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 05FA23791357539C00050BCB /* Build configuration list for PBXNativeTarget \"AFCacheOSXStatic\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t05FA235B1357539B00050BCB /* Sources */,\n\t\t\t\t05FA2382135753E800050BCB /* ShellScript */,\n\t\t\t\t05FA235C1357539B00050BCB /* Frameworks */,\n\t\t\t\t05FA235D1357539B00050BCB /* Headers */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = AFCacheOSXStatic;\n\t\t\tproductName = AFCacheOSXStatic;\n\t\t\tproductReference = 05FA235F1357539B00050BCB /* libAFCacheOSXStatic.a */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t05FA23681357539C00050BCB /* AFCacheOSXStaticTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 05FA237C1357539C00050BCB /* Build configuration list for PBXNativeTarget \"AFCacheOSXStaticTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t05FA23641357539C00050BCB /* Sources */,\n\t\t\t\t05FA23651357539C00050BCB /* Frameworks */,\n\t\t\t\t05FA23661357539C00050BCB /* Resources */,\n\t\t\t\t05FA23671357539C00050BCB /* ShellScript */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t05FA236C1357539C00050BCB /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = AFCacheOSXStaticTests;\n\t\t\tproductName = AFCacheOSXStaticTests;\n\t\t\tproductReference = 05FA23691357539C00050BCB /* AFCacheOSXStaticTests.octest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.ocunit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t050D30A7132A276A003809FC /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0460;\n\t\t\t\tORGANIZATIONNAME = \"Artifacts - Fine Software Development\";\n\t\t\t};\n\t\t\tbuildConfigurationList = 050D30AA132A276A003809FC /* Build configuration list for PBXProject \"AFCache\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 050D30A5132A276A003809FC;\n\t\t\tproductRefGroup = 050D30B2132A276A003809FC /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t050D30B0132A276A003809FC /* AFCache */,\n\t\t\t\t050D30C5132A276A003809FC /* AFCacheTests */,\n\t\t\t\t05FA23391357515400050BCB /* afcpkg */,\n\t\t\t\t05FA235E1357539B00050BCB /* AFCacheOSXStatic */,\n\t\t\t\t05FA23681357539C00050BCB /* AFCacheOSXStaticTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t050D30AF132A276A003809FC /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t050D30C3132A276A003809FC /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t05FA23661357539C00050BCB /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t05FA23731357539C00050BCB /* InfoPlist.strings in Resources */,\n\t\t\t\t05FA23761357539C00050BCB /* AFCacheOSXStaticTests.h in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t050D30C4132A276A003809FC /* ShellScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"# Run the unit tests in this test bundle.\\n\\\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\\\"\\n\";\n\t\t};\n\t\t05C9BB70132A310B0087CEA1 /* ShellScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"$(SRCROOT)/src/shared/AFCacheableItemInfo.h\",\n\t\t\t\t\"$(SRCROOT)/src/shared/AFCache.h\",\n\t\t\t\t\"$(SRCROOT)/src/shared/AFCacheableItem.h\",\n\t\t\t\t\"$(SRCROOT)/src/shared/AFURLCache.h\",\n\t\t\t\t\"$(SRCROOT)/src/shared/AFCacheableItem+Packaging.h\",\n\t\t\t\t\"$(SRCROOT)/src/shared/AFPackageInfo.h\",\n\t\t\t\t\"$(SRCROOT)/src/shared/AFCache+Packaging.h\",\n\t\t\t\t\"$(SRCROOT)/src/shared/AFMediaTypeParser.h\",\n\t\t\t\t\"$(SRCROOT)/src/shared/AFCachePackageCreator.h\",\n\t\t\t\t\"$(SRCROOT)/src/shared/AFHTTPURLProtocol.h\",\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(SRCROOT)/release/AFCacheLib.h\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"cd scripts\\n./updateAPI.sh\";\n\t\t};\n\t\t05FA23671357539C00050BCB /* ShellScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"# Run the unit tests in this test bundle.\\n\\\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\\\"\\n\";\n\t\t};\n\t\t05FA2382135753E800050BCB /* ShellScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"cd scripts\\n./updateAPI.sh\";\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t050D30AC132A276A003809FC /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC765AB5E1CEB3BD500A47B4A /* AFCacheableItem+FileAttributes.m in Sources */,\n\t\t\t\tC765AB5A1CEB39F200A47B4A /* AFCache+FileAttributes.m in Sources */,\n\t\t\t\t05C9BAF3132A291B0087CEA1 /* AFCache.m in Sources */,\n\t\t\t\t05C9BAF5132A291B0087CEA1 /* AFCache+Mimetypes.m in Sources */,\n\t\t\t\t05C9BAFA132A291B0087CEA1 /* AFCacheableItem.m in Sources */,\n\t\t\t\t05C9BAFC132A291B0087CEA1 /* AFCacheableItem+Packaging.m in Sources */,\n\t\t\t\t05C9BAFE132A291B0087CEA1 /* AFCacheableItemInfo.m in Sources */,\n\t\t\t\t05C9BB00132A291B0087CEA1 /* AFPackageInfo.m in Sources */,\n\t\t\t\t05C9BB02132A291B0087CEA1 /* AFURLCache.m in Sources */,\n\t\t\t\tE369E20A19B0711700EAC9FE /* AFCache+DeprecatedAPI.m in Sources */,\n\t\t\t\tC7503D48198640AA0032E451 /* AFDownloadOperation.m in Sources */,\n\t\t\t\t05C9BB05132A291B0087CEA1 /* DateParser.m in Sources */,\n\t\t\t\t05C9BB19132A29370087CEA1 /* AFRegexString.m in Sources */,\n\t\t\t\t05C491FB150F9CB1009EDA8F /* AFMediaTypeParser.m in Sources */,\n\t\t\t\t05C491FF150F9CBA009EDA8F /* AFHTTPURLProtocol.m in Sources */,\n\t\t\t\tC73C71CE19816F13008EDA23 /* AFRequestConfiguration.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t050D30C1132A276A003809FC /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0511C97815AC480500369FE4 /* AFCacheTests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t05FA23361357515400050BCB /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t05FA234A135751E100050BCB /* afcpkg_main.m in Sources */,\n\t\t\t\t056DD4CE1859AE13004C7134 /* AFCache+Packaging.m in Sources */,\n\t\t\t\t056DD4CD1859AE0E004C7134 /* AFCachePackageCreator.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t05FA235B1357539B00050BCB /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC7503D49198640AA0032E451 /* AFDownloadOperation.m in Sources */,\n\t\t\t\t055AAF5A13575581006E1CF9 /* AFCache.m in Sources */,\n\t\t\t\t055AAF5B13575581006E1CF9 /* AFCache+Mimetypes.m in Sources */,\n\t\t\t\t055AAF5D13575581006E1CF9 /* AFCacheableItem.m in Sources */,\n\t\t\t\t055AAF5E13575581006E1CF9 /* AFCacheableItem+Packaging.m in Sources */,\n\t\t\t\tC73C71CF19816F13008EDA23 /* AFRequestConfiguration.m in Sources */,\n\t\t\t\t055AAF5F13575581006E1CF9 /* AFCacheableItemInfo.m in Sources */,\n\t\t\t\t055AAF6013575581006E1CF9 /* AFPackageInfo.m in Sources */,\n\t\t\t\t055AAF671357565B006E1CF9 /* AFRegexString.m in Sources */,\n\t\t\t\t055AAF6113575581006E1CF9 /* AFURLCache.m in Sources */,\n\t\t\t\t05C49202150F9D67009EDA8F /* AFMediaTypeParser.m in Sources */,\n\t\t\t\t055AAF6213575581006E1CF9 /* DateParser.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t05FA23641357539C00050BCB /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t05FA23781357539C00050BCB /* AFCacheOSXStaticTests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t050D30C9132A276A003809FC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 050D30B0132A276A003809FC /* AFCache */;\n\t\t\ttargetProxy = 050D30C8132A276A003809FC /* PBXContainerItemProxy */;\n\t\t};\n\t\t05FA236C1357539C00050BCB /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 05FA235E1357539B00050BCB /* AFCacheOSXStatic */;\n\t\t\ttargetProxy = 05FA236B1357539C00050BCB /* PBXContainerItemProxy */;\n\t\t};\n\t\t05FA2392135754BE00050BCB /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 05FA235E1357539B00050BCB /* AFCacheOSXStatic */;\n\t\t\ttargetProxy = 05FA2391135754BE00050BCB /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t05FA23711357539C00050BCB /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t05FA23721357539C00050BCB /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t050D30D6132A276A003809FC /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = DEBUG;\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tINSTALL_PATH = \"@rpath\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = \"\";\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t050D30D7132A276A003809FC /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tINSTALL_PATH = \"@rpath\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = \"\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t050D30D9132A276A003809FC /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"src/OSX/AFCache-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"src/OSX/AFCache-Info.plist\";\n\t\t\t\tINSTALL_PATH = \"@rpath\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.8;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = \"\";\n\t\t\t\tWRAPPER_EXTENSION = framework;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t050D30DA132A276A003809FC /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"src/OSX/AFCache-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"src/OSX/AFCache-Info.plist\";\n\t\t\t\tINSTALL_PATH = \"@rpath\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.8;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = \"\";\n\t\t\t\tWRAPPER_EXTENSION = framework;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t050D30DC132A276A003809FC /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(DEVELOPER_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"AFCacheTests/AFCacheTests-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"AFCacheTests/AFCacheTests-Info.plist\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tSenTestingKit,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = octest;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t050D30DD132A276A003809FC /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(DEVELOPER_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"AFCacheTests/AFCacheTests-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"AFCacheTests/AFCacheTests-Info.plist\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tSenTestingKit,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = octest;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t05FA23421357515400050BCB /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-all_load\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t05FA23431357515400050BCB /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-all_load\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t05FA237A1357539C00050BCB /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"AFCacheOSXStatic/AFCacheOSXStatic-Prefix.pch\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t05FA237B1357539C00050BCB /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"AFCacheOSXStatic/AFCacheOSXStatic-Prefix.pch\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t05FA237D1357539C00050BCB /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(DEVELOPER_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"AFCacheOSXStaticTests/AFCacheOSXStaticTests-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"AFCacheOSXStaticTests/AFCacheOSXStaticTests-Info.plist\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tSenTestingKit,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = octest;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t05FA237E1357539C00050BCB /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(DEVELOPER_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"AFCacheOSXStaticTests/AFCacheOSXStaticTests-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"AFCacheOSXStaticTests/AFCacheOSXStaticTests-Info.plist\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tSenTestingKit,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = octest;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t050D30AA132A276A003809FC /* Build configuration list for PBXProject \"AFCache\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t050D30D6132A276A003809FC /* Debug */,\n\t\t\t\t050D30D7132A276A003809FC /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t050D30D8132A276A003809FC /* Build configuration list for PBXNativeTarget \"AFCache\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t050D30D9132A276A003809FC /* Debug */,\n\t\t\t\t050D30DA132A276A003809FC /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t050D30DB132A276A003809FC /* Build configuration list for PBXNativeTarget \"AFCacheTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t050D30DC132A276A003809FC /* Debug */,\n\t\t\t\t050D30DD132A276A003809FC /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t05FA23441357515400050BCB /* Build configuration list for PBXNativeTarget \"afcpkg\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t05FA23421357515400050BCB /* Debug */,\n\t\t\t\t05FA23431357515400050BCB /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t05FA23791357539C00050BCB /* Build configuration list for PBXNativeTarget \"AFCacheOSXStatic\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t05FA237A1357539C00050BCB /* Debug */,\n\t\t\t\t05FA237B1357539C00050BCB /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t05FA237C1357539C00050BCB /* Build configuration list for PBXNativeTarget \"AFCacheOSXStaticTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t05FA237D1357539C00050BCB /* Debug */,\n\t\t\t\t05FA237E1357539C00050BCB /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 050D30A7132A276A003809FC /* Project object */;\n}\n"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestTool/AFAppDelegate.h",
    "content": "//\n//  AFAppDelegate.h\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 01/08/14.\n//  Copyright (c) 2014 artifacts Software GmbH & Co KG. All rights reserved.\n//\n\n#import <Cocoa/Cocoa.h>\n\n@interface AFAppDelegate : NSObject <NSApplicationDelegate>\n\n@property (assign) IBOutlet NSWindow *window;\n@property (strong) IBOutlet NSTextField *URLTextField;\n@property (strong) IBOutlet NSTextView *responseTextView;\n@property (strong) IBOutlet NSButton *requestButton;\n@property (strong) IBOutlet NSArrayController *requestArrayController;\n@property (strong) IBOutlet NSTextField *numberOfRequestsTextField;\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestTool/AFAppDelegate.m",
    "content": "//\n//  AFAppDelegate.m\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 01/08/14.\n//  Copyright (c) 2014 artifacts Software GmbH & Co KG. All rights reserved.\n//\n\n#import \"AFAppDelegate.h\"\n#import <AFCache/AFCache.h>\n#import \"AFRequestInfo.h\"\n\n#define kLastURL @\"lastURL\"\n\n@implementation AFAppDelegate\n\n- (void)applicationDidFinishLaunching:(NSNotification *)aNotification\n{\n    NSInteger num = [[[NSUserDefaults standardUserDefaults] valueForKey:@\"numberOfRequests\"] integerValue];\n    if (num == 0) {\n        [[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithInteger:1] forKey:@\"numberOfRequests\"];\n    }\n}\n\n- (void)applicationWillTerminate:(NSNotification *)notification {\n    [[AFCache sharedInstance] archiveNow];    \n}\n\n- (IBAction)clearCacheAction:(id)sender {\n    [[AFCache sharedInstance] invalidateAll];\n    [[AFCache sharedInstance] archiveNow];\n}\n\n- (IBAction)performRequestAction:(id)sender {\n    AFCache *cache = [AFCache sharedInstance];\n    NSString *URLString = [self.URLTextField stringValue];\n    if ([URLString length] == 0) {\n        [[NSAlert alertWithMessageText:@\"No URL given\" defaultButton:@\"OK\" alternateButton:nil otherButton:nil informativeTextWithFormat:@\"Please provide an URL\"] runModal];\n        return;\n    }\n    NSURL *URL = [NSURL URLWithString:URLString];\n    if ([[URL absoluteString] length] == 0) {\n        [[NSAlert alertWithMessageText:@\"Invalid URL\" defaultButton:@\"OK\" alternateButton:nil otherButton:nil informativeTextWithFormat:@\"Please provide a valid URL\"] runModal];\n        return;\n    }\n    \n    NSInteger numberOfRequests = [[self.numberOfRequestsTextField stringValue] integerValue];\n    \n    for (NSInteger i=0; i<numberOfRequests; i++) {\n        AFRequestInfo *requestInfo = [[AFRequestInfo alloc] init];\n        requestInfo.requestTimestamp = [NSDate date];\n        requestInfo.requestURL = URL;\n\n        [self.requestArrayController addObject:requestInfo];\n        \n        [cache cacheItemForURL:URL urlCredential:nil completionBlock:^(AFCacheableItem *item) {\n            requestInfo.responseData = item.data;\n            requestInfo.responseTimestamp = [NSDate dateWithTimeIntervalSinceReferenceDate:item.info.responseTimestamp];\n            requestInfo.successful = [NSNumber numberWithBool:YES];\n            if (item.IMSRequest) {\n                requestInfo.internalRequestType = @\"IMS\";\n            }\n            requestInfo.levelIndicatorValue = [NSNumber numberWithBool:1];\n            requestInfo.servedFromCache = [NSNumber numberWithBool:item.servedFromCache];\n            requestInfo.responseHeader = [item.info.response description];\n            [self updateCacheStatusForRequestInfo:requestInfo withItem:item];\n        } failBlock:^(AFCacheableItem *item) {\n            requestInfo.responseTimestamp = [NSDate dateWithTimeIntervalSinceReferenceDate:item.info.responseTimestamp];\n            requestInfo.successful = [NSNumber numberWithBool:NO];\n            requestInfo.responseHeader = [item.info.response description];\n            requestInfo.levelIndicatorValue = [NSNumber numberWithBool:2];\n            [self updateCacheStatusForRequestInfo:requestInfo withItem:item];\n        }];\n    }\n}\n\n- (void)updateCacheStatusForRequestInfo:(AFRequestInfo*)requestInfo withItem:(AFCacheableItem*)item {\n    switch (item.cacheStatus) {\n        case kCacheStatusDownloading:\n            requestInfo.cacheStatus = @\"Downloading\";\n            break;\n        case kCacheStatusFresh:\n            requestInfo.cacheStatus = @\"Fresh\";\n            break;\n        case kCacheStatusModified:\n            requestInfo.cacheStatus = @\"Modified\";\n            break;\n        case kCacheStatusNew:\n            requestInfo.cacheStatus = @\"New\";\n            break;\n        case kCacheStatusNotModified:\n            requestInfo.cacheStatus = @\"NotModified\";\n            break;\n        case kCacheStatusRevalidationPending:\n            requestInfo.cacheStatus = @\"RevalidationPending\";\n            break;\n        case kCacheStatusStale:\n            requestInfo.cacheStatus = @\"Stale\";\n            break;\n    }\n}\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestTool/AFCacheTestTool-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>de.artifacts.${PRODUCT_NAME:rfc1034identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>${MACOSX_DEPLOYMENT_TARGET}</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2014 artifacts Software GmbH &amp; Co KG. All rights reserved.</string>\n\t<key>NSMainNibFile</key>\n\t<string>MainMenu</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestTool/AFCacheTestTool-Prefix.pch",
    "content": "//\n//  Prefix header\n//\n//  The contents of this file are implicitly included at the beginning of every source file.\n//\n\n#ifdef __OBJC__\n    #import <Cocoa/Cocoa.h>\n#endif\n"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestTool/AFRequestInfo.h",
    "content": "//\n//  AFRequestInfo.h\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 01/08/14.\n//  Copyright (c) 2014 artifacts Software GmbH & Co KG. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface AFRequestInfo : NSObject\n\n@property (nonatomic, strong) NSURL *requestURL;\n@property (nonatomic, strong) NSDate *requestTimestamp;\n@property (nonatomic, strong) NSString *requestHeader;\n@property (nonatomic, strong) NSDate *responseTimestamp;\n@property (nonatomic, strong) NSString *responseHeader;\n@property (nonatomic, strong) NSData *responseData;\n@property (nonatomic, strong) NSNumber *successful;\n@property (nonatomic, strong) NSString *cacheStatus;\n@property (nonatomic, strong) NSString *internalRequestType;\n@property (nonatomic, strong) NSNumber *servedFromCache;\n@property (nonatomic, strong) NSNumber *levelIndicatorValue;\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestTool/AFRequestInfo.m",
    "content": "//\n//  AFRequestInfo.m\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 01/08/14.\n//  Copyright (c) 2014 artifacts Software GmbH & Co KG. All rights reserved.\n//\n\n#import \"AFRequestInfo.h\"\n\n@implementation AFRequestInfo\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestTool/Base.lproj/MainMenu.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"3.0\" toolsVersion=\"5056\" systemVersion=\"13D65\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" useAutolayout=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"5056\"/>\n    </dependencies>\n    <objects>\n        <customObject id=\"-2\" userLabel=\"File's Owner\" customClass=\"NSApplication\">\n            <connections>\n                <outlet property=\"delegate\" destination=\"Voe-Tx-rLC\" id=\"GzC-gU-4Uq\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"-1\" userLabel=\"First Responder\" customClass=\"FirstResponder\"/>\n        <customObject id=\"-3\" userLabel=\"Application\"/>\n        <customObject id=\"Voe-Tx-rLC\" customClass=\"AFAppDelegate\">\n            <connections>\n                <outlet property=\"URLTextField\" destination=\"EoI-15-p9r\" id=\"zIy-EV-DGZ\"/>\n                <outlet property=\"numberOfRequestsTextField\" destination=\"nw6-lI-dz0\" id=\"4Hc-J8-pTC\"/>\n                <outlet property=\"requestArrayController\" destination=\"gS6-H9-bSa\" id=\"byp-IA-0sd\"/>\n                <outlet property=\"requestButton\" destination=\"joY-M3-8Ue\" id=\"oaI-O4-Wgm\"/>\n                <outlet property=\"responseTextView\" destination=\"q3p-NR-Yll\" id=\"qFY-Kh-yZ3\"/>\n                <outlet property=\"window\" destination=\"QvC-M9-y7g\" id=\"gIp-Ho-8D9\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"YLy-65-1bz\" customClass=\"NSFontManager\"/>\n        <menu title=\"Main Menu\" systemMenu=\"main\" id=\"AYu-sK-qS6\">\n            <items>\n                <menuItem title=\"AFCacheTestTool\" id=\"1Xt-HY-uBw\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"AFCacheTestTool\" systemMenu=\"apple\" id=\"uQy-DD-JDr\">\n                        <items>\n                            <menuItem title=\"About AFCacheTestTool\" id=\"5kV-Vb-QxS\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"orderFrontStandardAboutPanel:\" target=\"-1\" id=\"Exp-CZ-Vem\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"VOq-y0-SEH\"/>\n                            <menuItem title=\"Preferences…\" keyEquivalent=\",\" id=\"BOF-NM-1cW\"/>\n                            <menuItem isSeparatorItem=\"YES\" id=\"wFC-TO-SCJ\"/>\n                            <menuItem title=\"Services\" id=\"NMo-om-nkz\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Services\" systemMenu=\"services\" id=\"hz9-B4-Xy5\"/>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"4je-JR-u6R\"/>\n                            <menuItem title=\"Hide AFCacheTestTool\" keyEquivalent=\"h\" id=\"Olw-nP-bQN\">\n                                <connections>\n                                    <action selector=\"hide:\" target=\"-1\" id=\"PnN-Uc-m68\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Hide Others\" keyEquivalent=\"h\" id=\"Vdr-fp-XzO\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"hideOtherApplications:\" target=\"-1\" id=\"VT4-aY-XCT\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Show All\" id=\"Kd2-mp-pUS\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"unhideAllApplications:\" target=\"-1\" id=\"Dhg-Le-xox\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"kCx-OE-vgT\"/>\n                            <menuItem title=\"Quit AFCacheTestTool\" keyEquivalent=\"q\" id=\"4sb-4s-VLi\">\n                                <connections>\n                                    <action selector=\"terminate:\" target=\"-1\" id=\"Te7-pn-YzF\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"File\" id=\"dMs-cI-mzQ\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"File\" id=\"bib-Uj-vzu\">\n                        <items>\n                            <menuItem title=\"New\" keyEquivalent=\"n\" id=\"Was-JA-tGl\">\n                                <connections>\n                                    <action selector=\"newDocument:\" target=\"-1\" id=\"4Si-XN-c54\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Open…\" keyEquivalent=\"o\" id=\"IAo-SY-fd9\">\n                                <connections>\n                                    <action selector=\"openDocument:\" target=\"-1\" id=\"bVn-NM-KNZ\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Open Recent\" id=\"tXI-mr-wws\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Open Recent\" systemMenu=\"recentDocuments\" id=\"oas-Oc-fiZ\">\n                                    <items>\n                                        <menuItem title=\"Clear Menu\" id=\"vNY-rz-j42\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"clearRecentDocuments:\" target=\"-1\" id=\"Daa-9d-B3U\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"m54-Is-iLE\"/>\n                            <menuItem title=\"Close\" keyEquivalent=\"w\" id=\"DVo-aG-piG\">\n                                <connections>\n                                    <action selector=\"performClose:\" target=\"-1\" id=\"HmO-Ls-i7Q\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Save…\" keyEquivalent=\"s\" id=\"pxx-59-PXV\">\n                                <connections>\n                                    <action selector=\"saveDocument:\" target=\"-1\" id=\"teZ-XB-qJY\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Save As…\" keyEquivalent=\"S\" id=\"Bw7-FT-i3A\">\n                                <connections>\n                                    <action selector=\"saveDocumentAs:\" target=\"-1\" id=\"mDf-zr-I0C\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Revert to Saved\" id=\"KaW-ft-85H\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"revertDocumentToSaved:\" target=\"-1\" id=\"iJ3-Pv-kwq\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"aJh-i4-bef\"/>\n                            <menuItem title=\"Page Setup…\" keyEquivalent=\"P\" id=\"qIS-W8-SiK\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" shift=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"runPageLayout:\" target=\"-1\" id=\"Din-rz-gC5\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Print…\" keyEquivalent=\"p\" id=\"aTl-1u-JFS\">\n                                <connections>\n                                    <action selector=\"print:\" target=\"-1\" id=\"qaZ-4w-aoO\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Edit\" id=\"5QF-Oa-p0T\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Edit\" id=\"W48-6f-4Dl\">\n                        <items>\n                            <menuItem title=\"Undo\" keyEquivalent=\"z\" id=\"dRJ-4n-Yzg\">\n                                <connections>\n                                    <action selector=\"undo:\" target=\"-1\" id=\"M6e-cu-g7V\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Redo\" keyEquivalent=\"Z\" id=\"6dh-zS-Vam\">\n                                <connections>\n                                    <action selector=\"redo:\" target=\"-1\" id=\"oIA-Rs-6OD\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"WRV-NI-Exz\"/>\n                            <menuItem title=\"Cut\" keyEquivalent=\"x\" id=\"uRl-iY-unG\">\n                                <connections>\n                                    <action selector=\"cut:\" target=\"-1\" id=\"YJe-68-I9s\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Copy\" keyEquivalent=\"c\" id=\"x3v-GG-iWU\">\n                                <connections>\n                                    <action selector=\"copy:\" target=\"-1\" id=\"G1f-GL-Joy\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Paste\" keyEquivalent=\"v\" id=\"gVA-U4-sdL\">\n                                <connections>\n                                    <action selector=\"paste:\" target=\"-1\" id=\"UvS-8e-Qdg\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Paste and Match Style\" keyEquivalent=\"V\" id=\"WeT-3V-zwk\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"pasteAsPlainText:\" target=\"-1\" id=\"cEh-KX-wJQ\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Delete\" id=\"pa3-QI-u2k\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"delete:\" target=\"-1\" id=\"0Mk-Ml-PaM\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Select All\" keyEquivalent=\"a\" id=\"Ruw-6m-B2m\">\n                                <connections>\n                                    <action selector=\"selectAll:\" target=\"-1\" id=\"VNm-Mi-diN\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"uyl-h8-XO2\"/>\n                            <menuItem title=\"Find\" id=\"4EN-yA-p0u\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Find\" id=\"1b7-l0-nxx\">\n                                    <items>\n                                        <menuItem title=\"Find…\" tag=\"1\" keyEquivalent=\"f\" id=\"Xz5-n4-O0W\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"cD7-Qs-BN4\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Find and Replace…\" tag=\"12\" keyEquivalent=\"f\" id=\"YEy-JH-Tfz\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"WD3-Gg-5AJ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Find Next\" tag=\"2\" keyEquivalent=\"g\" id=\"q09-fT-Sye\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"NDo-RZ-v9R\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Find Previous\" tag=\"3\" keyEquivalent=\"G\" id=\"OwM-mh-QMV\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"HOh-sY-3ay\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Use Selection for Find\" tag=\"7\" keyEquivalent=\"e\" id=\"buJ-ug-pKt\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"U76-nv-p5D\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Jump to Selection\" keyEquivalent=\"j\" id=\"S0p-oC-mLd\">\n                                            <connections>\n                                                <action selector=\"centerSelectionInVisibleArea:\" target=\"-1\" id=\"IOG-6D-g5B\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Spelling and Grammar\" id=\"Dv1-io-Yv7\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Spelling\" id=\"3IN-sU-3Bg\">\n                                    <items>\n                                        <menuItem title=\"Show Spelling and Grammar\" keyEquivalent=\":\" id=\"HFo-cy-zxI\">\n                                            <connections>\n                                                <action selector=\"showGuessPanel:\" target=\"-1\" id=\"vFj-Ks-hy3\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Check Document Now\" keyEquivalent=\";\" id=\"hz2-CU-CR7\">\n                                            <connections>\n                                                <action selector=\"checkSpelling:\" target=\"-1\" id=\"fz7-VC-reM\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"bNw-od-mp5\"/>\n                                        <menuItem title=\"Check Spelling While Typing\" id=\"rbD-Rh-wIN\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleContinuousSpellChecking:\" target=\"-1\" id=\"7w6-Qz-0kB\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Check Grammar With Spelling\" id=\"mK6-2p-4JG\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleGrammarChecking:\" target=\"-1\" id=\"muD-Qn-j4w\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Correct Spelling Automatically\" id=\"78Y-hA-62v\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticSpellingCorrection:\" target=\"-1\" id=\"2lM-Qi-WAP\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Substitutions\" id=\"9ic-FL-obx\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Substitutions\" id=\"FeM-D8-WVr\">\n                                    <items>\n                                        <menuItem title=\"Show Substitutions\" id=\"z6F-FW-3nz\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"orderFrontSubstitutionsPanel:\" target=\"-1\" id=\"oku-mr-iSq\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"gPx-C9-uUO\"/>\n                                        <menuItem title=\"Smart Copy/Paste\" id=\"9yt-4B-nSM\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleSmartInsertDelete:\" target=\"-1\" id=\"3IJ-Se-DZD\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smart Quotes\" id=\"hQb-2v-fYv\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticQuoteSubstitution:\" target=\"-1\" id=\"ptq-xd-QOA\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smart Dashes\" id=\"rgM-f4-ycn\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticDashSubstitution:\" target=\"-1\" id=\"oCt-pO-9gS\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smart Links\" id=\"cwL-P1-jid\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticLinkDetection:\" target=\"-1\" id=\"Gip-E3-Fov\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Data Detectors\" id=\"tRr-pd-1PS\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticDataDetection:\" target=\"-1\" id=\"R1I-Nq-Kbl\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Text Replacement\" id=\"HFQ-gK-NFA\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticTextReplacement:\" target=\"-1\" id=\"DvP-Fe-Py6\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Transformations\" id=\"2oI-Rn-ZJC\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Transformations\" id=\"c8a-y6-VQd\">\n                                    <items>\n                                        <menuItem title=\"Make Upper Case\" id=\"vmV-6d-7jI\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"uppercaseWord:\" target=\"-1\" id=\"sPh-Tk-edu\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Make Lower Case\" id=\"d9M-CD-aMd\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"lowercaseWord:\" target=\"-1\" id=\"iUZ-b5-hil\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Capitalize\" id=\"UEZ-Bs-lqG\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"capitalizeWord:\" target=\"-1\" id=\"26H-TL-nsh\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Speech\" id=\"xrE-MZ-jX0\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Speech\" id=\"3rS-ZA-NoH\">\n                                    <items>\n                                        <menuItem title=\"Start Speaking\" id=\"Ynk-f8-cLZ\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"startSpeaking:\" target=\"-1\" id=\"654-Ng-kyl\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Stop Speaking\" id=\"Oyz-dy-DGm\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"stopSpeaking:\" target=\"-1\" id=\"dX8-6p-jy9\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Format\" id=\"jxT-CU-nIS\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Format\" id=\"GEO-Iw-cKr\">\n                        <items>\n                            <menuItem title=\"Font\" id=\"Gi5-1S-RQB\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Font\" systemMenu=\"font\" id=\"aXa-aM-Jaq\">\n                                    <items>\n                                        <menuItem title=\"Show Fonts\" keyEquivalent=\"t\" id=\"Q5e-8K-NDq\">\n                                            <connections>\n                                                <action selector=\"orderFrontFontPanel:\" target=\"YLy-65-1bz\" id=\"WHr-nq-2xA\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Bold\" tag=\"2\" keyEquivalent=\"b\" id=\"GB9-OM-e27\">\n                                            <connections>\n                                                <action selector=\"addFontTrait:\" target=\"YLy-65-1bz\" id=\"hqk-hr-sYV\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Italic\" tag=\"1\" keyEquivalent=\"i\" id=\"Vjx-xi-njq\">\n                                            <connections>\n                                                <action selector=\"addFontTrait:\" target=\"YLy-65-1bz\" id=\"IHV-OB-c03\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Underline\" keyEquivalent=\"u\" id=\"WRG-CD-K1S\">\n                                            <connections>\n                                                <action selector=\"underline:\" target=\"-1\" id=\"FYS-2b-JAY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"5gT-KC-WSO\"/>\n                                        <menuItem title=\"Bigger\" tag=\"3\" keyEquivalent=\"+\" id=\"Ptp-SP-VEL\">\n                                            <connections>\n                                                <action selector=\"modifyFont:\" target=\"YLy-65-1bz\" id=\"Uc7-di-UnL\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smaller\" tag=\"4\" keyEquivalent=\"-\" id=\"i1d-Er-qST\">\n                                            <connections>\n                                                <action selector=\"modifyFont:\" target=\"YLy-65-1bz\" id=\"HcX-Lf-eNd\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"kx3-Dk-x3B\"/>\n                                        <menuItem title=\"Kern\" id=\"jBQ-r6-VK2\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Kern\" id=\"tlD-Oa-oAM\">\n                                                <items>\n                                                    <menuItem title=\"Use Default\" id=\"GUa-eO-cwY\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"useStandardKerning:\" target=\"-1\" id=\"6dk-9l-Ckg\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use None\" id=\"cDB-IK-hbR\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"turnOffKerning:\" target=\"-1\" id=\"U8a-gz-Maa\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Tighten\" id=\"46P-cB-AYj\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"tightenKerning:\" target=\"-1\" id=\"hr7-Nz-8ro\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Loosen\" id=\"ogc-rX-tC1\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"loosenKerning:\" target=\"-1\" id=\"8i4-f9-FKE\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Ligatures\" id=\"o6e-r0-MWq\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Ligatures\" id=\"w0m-vy-SC9\">\n                                                <items>\n                                                    <menuItem title=\"Use Default\" id=\"agt-UL-0e3\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"useStandardLigatures:\" target=\"-1\" id=\"7uR-wd-Dx6\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use None\" id=\"J7y-lM-qPV\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"turnOffLigatures:\" target=\"-1\" id=\"iX2-gA-Ilz\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use All\" id=\"xQD-1f-W4t\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"useAllLigatures:\" target=\"-1\" id=\"KcB-kA-TuK\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Baseline\" id=\"OaQ-X3-Vso\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Baseline\" id=\"ijk-EB-dga\">\n                                                <items>\n                                                    <menuItem title=\"Use Default\" id=\"3Om-Ey-2VK\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"unscript:\" target=\"-1\" id=\"0vZ-95-Ywn\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Superscript\" id=\"Rqc-34-cIF\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"superscript:\" target=\"-1\" id=\"3qV-fo-wpU\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Subscript\" id=\"I0S-gh-46l\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"subscript:\" target=\"-1\" id=\"Q6W-4W-IGz\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Raise\" id=\"2h7-ER-AoG\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"raiseBaseline:\" target=\"-1\" id=\"4sk-31-7Q9\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Lower\" id=\"1tx-W0-xDw\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"lowerBaseline:\" target=\"-1\" id=\"OF1-bc-KW4\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"Ndw-q3-faq\"/>\n                                        <menuItem title=\"Show Colors\" keyEquivalent=\"C\" id=\"bgn-CT-cEk\">\n                                            <connections>\n                                                <action selector=\"orderFrontColorPanel:\" target=\"-1\" id=\"mSX-Xz-DV3\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"iMs-zA-UFJ\"/>\n                                        <menuItem title=\"Copy Style\" keyEquivalent=\"c\" id=\"5Vv-lz-BsD\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"copyFont:\" target=\"-1\" id=\"GJO-xA-L4q\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste Style\" keyEquivalent=\"v\" id=\"vKC-jM-MkH\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"pasteFont:\" target=\"-1\" id=\"JfD-CL-leO\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Text\" id=\"Fal-I4-PZk\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Text\" id=\"d9c-me-L2H\">\n                                    <items>\n                                        <menuItem title=\"Align Left\" keyEquivalent=\"{\" id=\"ZM1-6Q-yy1\">\n                                            <connections>\n                                                <action selector=\"alignLeft:\" target=\"-1\" id=\"zUv-R1-uAa\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Center\" keyEquivalent=\"|\" id=\"VIY-Ag-zcb\">\n                                            <connections>\n                                                <action selector=\"alignCenter:\" target=\"-1\" id=\"spX-mk-kcS\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Justify\" id=\"J5U-5w-g23\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"alignJustified:\" target=\"-1\" id=\"ljL-7U-jND\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Align Right\" keyEquivalent=\"}\" id=\"wb2-vD-lq4\">\n                                            <connections>\n                                                <action selector=\"alignRight:\" target=\"-1\" id=\"r48-bG-YeY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"4s2-GY-VfK\"/>\n                                        <menuItem title=\"Writing Direction\" id=\"H1b-Si-o9J\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Writing Direction\" id=\"8mr-sm-Yjd\">\n                                                <items>\n                                                    <menuItem title=\"Paragraph\" enabled=\"NO\" id=\"ZvO-Gk-QUH\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                    </menuItem>\n                                                    <menuItem id=\"YGs-j5-SAR\">\n                                                        <string key=\"title\">\tDefault</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeBaseWritingDirectionNatural:\" target=\"-1\" id=\"qtV-5e-UBP\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem id=\"Lbh-J2-qVU\">\n                                                        <string key=\"title\">\tLeft to Right</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeBaseWritingDirectionLeftToRight:\" target=\"-1\" id=\"S0X-9S-QSf\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem id=\"jFq-tB-4Kx\">\n                                                        <string key=\"title\">\tRight to Left</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeBaseWritingDirectionRightToLeft:\" target=\"-1\" id=\"5fk-qB-AqJ\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"swp-gr-a21\"/>\n                                                    <menuItem title=\"Selection\" enabled=\"NO\" id=\"cqv-fj-IhA\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                    </menuItem>\n                                                    <menuItem id=\"Nop-cj-93Q\">\n                                                        <string key=\"title\">\tDefault</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeTextWritingDirectionNatural:\" target=\"-1\" id=\"lPI-Se-ZHp\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem id=\"BgM-ve-c93\">\n                                                        <string key=\"title\">\tLeft to Right</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeTextWritingDirectionLeftToRight:\" target=\"-1\" id=\"caW-Bv-w94\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem id=\"RB4-Sm-HuC\">\n                                                        <string key=\"title\">\tRight to Left</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeTextWritingDirectionRightToLeft:\" target=\"-1\" id=\"EXD-6r-ZUu\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"fKy-g9-1gm\"/>\n                                        <menuItem title=\"Show Ruler\" id=\"vLm-3I-IUL\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleRuler:\" target=\"-1\" id=\"FOx-HJ-KwY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Copy Ruler\" keyEquivalent=\"c\" id=\"MkV-Pr-PK5\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"copyRuler:\" target=\"-1\" id=\"71i-fW-3W2\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste Ruler\" keyEquivalent=\"v\" id=\"LVM-kO-fVI\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"pasteRuler:\" target=\"-1\" id=\"cSh-wd-qM2\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"View\" id=\"H8h-7b-M4v\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"View\" id=\"HyV-fh-RgO\">\n                        <items>\n                            <menuItem title=\"Show Toolbar\" keyEquivalent=\"t\" id=\"snW-S8-Cw5\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"toggleToolbarShown:\" target=\"-1\" id=\"BXY-wc-z0C\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Customize Toolbar…\" id=\"1UK-8n-QPP\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"runToolbarCustomizationPalette:\" target=\"-1\" id=\"pQI-g3-MTW\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Window\" id=\"aUF-d1-5bR\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Window\" systemMenu=\"window\" id=\"Td7-aD-5lo\">\n                        <items>\n                            <menuItem title=\"Minimize\" keyEquivalent=\"m\" id=\"OY7-WF-poV\">\n                                <connections>\n                                    <action selector=\"performMiniaturize:\" target=\"-1\" id=\"VwT-WD-YPe\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Zoom\" id=\"R4o-n2-Eq4\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"performZoom:\" target=\"-1\" id=\"DIl-cC-cCs\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"eu3-7i-yIM\"/>\n                            <menuItem title=\"Bring All to Front\" id=\"LE2-aR-0XJ\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"arrangeInFront:\" target=\"-1\" id=\"DRN-fu-gQh\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Help\" id=\"wpr-3q-Mcd\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Help\" systemMenu=\"help\" id=\"F2S-fz-NVQ\">\n                        <items>\n                            <menuItem title=\"AFCacheTestTool Help\" keyEquivalent=\"?\" id=\"FKE-Sm-Kum\">\n                                <connections>\n                                    <action selector=\"showHelp:\" target=\"-1\" id=\"y7X-2Q-9no\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n            </items>\n        </menu>\n        <window title=\"AFCacheTestTool\" allowsToolTipsWhenApplicationIsInactive=\"NO\" autorecalculatesKeyViewLoop=\"NO\" releasedWhenClosed=\"NO\" animationBehavior=\"default\" id=\"QvC-M9-y7g\">\n            <windowStyleMask key=\"styleMask\" titled=\"YES\" closable=\"YES\" miniaturizable=\"YES\" resizable=\"YES\"/>\n            <windowPositionMask key=\"initialPositionMask\" leftStrut=\"YES\" rightStrut=\"YES\" topStrut=\"YES\" bottomStrut=\"YES\"/>\n            <rect key=\"contentRect\" x=\"335\" y=\"390\" width=\"1175\" height=\"734\"/>\n            <rect key=\"screenRect\" x=\"0.0\" y=\"0.0\" width=\"2560\" height=\"1578\"/>\n            <view key=\"contentView\" id=\"EiT-Mj-1SZ\">\n                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"1175\" height=\"734\"/>\n                <autoresizingMask key=\"autoresizingMask\"/>\n                <subviews>\n                    <textField verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"EoI-15-p9r\">\n                        <rect key=\"frame\" x=\"20\" y=\"667\" width=\"1135\" height=\"22\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                        <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" state=\"on\" borderStyle=\"bezel\" drawsBackground=\"YES\" id=\"dsu-vf-bDf\">\n                            <font key=\"font\" metaFont=\"system\"/>\n                            <color key=\"textColor\" name=\"textColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                            <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                        </textFieldCell>\n                        <connections>\n                            <binding destination=\"UKP-8f-Uqw\" name=\"value\" keyPath=\"values.lastURL\" id=\"vft-dY-fmo\"/>\n                        </connections>\n                    </textField>\n                    <textField horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"aLB-Lk-tpQ\">\n                        <rect key=\"frame\" x=\"18\" y=\"697\" width=\"29\" height=\"17\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                        <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" title=\"URL\" id=\"7LQ-h0-hee\">\n                            <font key=\"font\" metaFont=\"system\"/>\n                            <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                            <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                        </textFieldCell>\n                    </textField>\n                    <textField horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"lUz-fT-yVO\">\n                        <rect key=\"frame\" x=\"18\" y=\"230\" width=\"163\" height=\"17\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                        <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" title=\"Original cached response\" id=\"1Lw-Ld-D8w\">\n                            <font key=\"font\" metaFont=\"system\"/>\n                            <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                            <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                        </textFieldCell>\n                    </textField>\n                    <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"joY-M3-8Ue\">\n                        <rect key=\"frame\" x=\"1071\" y=\"601\" width=\"90\" height=\"32\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                        <buttonCell key=\"cell\" type=\"push\" title=\"Request\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"8Ca-fc-nmI\">\n                            <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                            <font key=\"font\" metaFont=\"system\"/>\n                        </buttonCell>\n                        <connections>\n                            <action selector=\"performRequestAction:\" target=\"Voe-Tx-rLC\" id=\"Mq1-Qm-FcF\"/>\n                        </connections>\n                    </button>\n                    <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"xkg-JO-HVb\">\n                        <rect key=\"frame\" x=\"1046\" y=\"13\" width=\"115\" height=\"32\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                        <buttonCell key=\"cell\" type=\"push\" title=\"Clear Cache\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"jgk-70-U9Z\">\n                            <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                            <font key=\"font\" metaFont=\"system\"/>\n                        </buttonCell>\n                        <connections>\n                            <action selector=\"clearCacheAction:\" target=\"Voe-Tx-rLC\" id=\"nHc-RX-xDL\"/>\n                        </connections>\n                    </button>\n                    <scrollView horizontalLineScroll=\"10\" horizontalPageScroll=\"10\" verticalLineScroll=\"10\" verticalPageScroll=\"10\" hasHorizontalScroller=\"NO\" usesPredominantAxisScrolling=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"o2V-ic-3xe\">\n                        <rect key=\"frame\" x=\"20\" y=\"82\" width=\"1135\" height=\"140\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <clipView key=\"contentView\" id=\"exb-LM-Gwv\">\n                            <rect key=\"frame\" x=\"1\" y=\"1\" width=\"1118\" height=\"138\"/>\n                            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                            <subviews>\n                                <textView importsGraphics=\"NO\" findStyle=\"panel\" continuousSpellChecking=\"YES\" allowsUndo=\"YES\" usesRuler=\"YES\" usesFontPanel=\"YES\" verticallyResizable=\"YES\" allowsNonContiguousLayout=\"YES\" quoteSubstitution=\"YES\" dashSubstitution=\"YES\" spellingCorrection=\"YES\" smartInsertDelete=\"YES\" id=\"q3p-NR-Yll\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"1118\" height=\"138\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                    <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                    <size key=\"minSize\" width=\"1118\" height=\"138\"/>\n                                    <size key=\"maxSize\" width=\"1191\" height=\"10000000\"/>\n                                    <color key=\"insertionPointColor\" white=\"0.0\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                    <size key=\"minSize\" width=\"1118\" height=\"138\"/>\n                                    <size key=\"maxSize\" width=\"1191\" height=\"10000000\"/>\n                                    <connections>\n                                        <binding destination=\"gS6-H9-bSa\" name=\"attributedString\" keyPath=\"selection.responseHeader\" id=\"2RS-GI-BAd\"/>\n                                    </connections>\n                                </textView>\n                            </subviews>\n                            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        </clipView>\n                        <scroller key=\"horizontalScroller\" hidden=\"YES\" verticalHuggingPriority=\"750\" doubleValue=\"1\" horizontal=\"YES\" id=\"Bhv-IE-qbB\">\n                            <rect key=\"frame\" x=\"-100\" y=\"-100\" width=\"87\" height=\"18\"/>\n                            <autoresizingMask key=\"autoresizingMask\"/>\n                        </scroller>\n                        <scroller key=\"verticalScroller\" verticalHuggingPriority=\"750\" doubleValue=\"1\" horizontal=\"NO\" id=\"vTF-Ha-HwL\">\n                            <rect key=\"frame\" x=\"1119\" y=\"1\" width=\"15\" height=\"138\"/>\n                            <autoresizingMask key=\"autoresizingMask\"/>\n                        </scroller>\n                    </scrollView>\n                    <scrollView autohidesScrollers=\"YES\" horizontalLineScroll=\"19\" horizontalPageScroll=\"10\" verticalLineScroll=\"19\" verticalPageScroll=\"10\" usesPredominantAxisScrolling=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"bZJ-iT-cLf\">\n                        <rect key=\"frame\" x=\"20\" y=\"255\" width=\"1135\" height=\"303\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                        <clipView key=\"contentView\" id=\"LFR-fF-Qge\">\n                            <rect key=\"frame\" x=\"1\" y=\"17\" width=\"1133\" height=\"285\"/>\n                            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                            <subviews>\n                                <tableView verticalHuggingPriority=\"750\" allowsExpansionToolTips=\"YES\" columnAutoresizingStyle=\"lastColumnOnly\" columnSelection=\"YES\" multipleSelection=\"NO\" autosaveColumns=\"NO\" headerView=\"Ojb-kd-kMV\" id=\"qtn-Tl-qvN\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"1133\" height=\"285\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <size key=\"intercellSpacing\" width=\"3\" height=\"2\"/>\n                                    <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                    <color key=\"gridColor\" name=\"gridColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <tableColumns>\n                                        <tableColumn width=\"51\" minWidth=\"10\" maxWidth=\"3.4028234663852886e+38\" id=\"7oI-MM-32U\">\n                                            <tableHeaderCell key=\"headerCell\" lineBreakMode=\"truncatingTail\" borderStyle=\"border\" alignment=\"left\" title=\"Pending\">\n                                                <font key=\"font\" metaFont=\"smallSystem\"/>\n                                                <color key=\"textColor\" name=\"headerTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                <color key=\"backgroundColor\" name=\"headerColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            </tableHeaderCell>\n                                            <levelIndicatorCell key=\"dataCell\" state=\"on\" alignment=\"left\" doubleValue=\"1\" maxValue=\"2\" warningValue=\"2\" criticalValue=\"1\" id=\"BlZ-cK-6KQ\">\n                                                <font key=\"font\" metaFont=\"system\"/>\n                                                <connections>\n                                                    <binding destination=\"gS6-H9-bSa\" name=\"value\" keyPath=\"selection.levelIndicatorValue\" id=\"6Oa-nL-o9Q\"/>\n                                                </connections>\n                                            </levelIndicatorCell>\n                                            <tableColumnResizingMask key=\"resizingMask\" resizeWithTable=\"YES\" userResizable=\"YES\"/>\n                                            <connections>\n                                                <binding destination=\"gS6-H9-bSa\" name=\"value\" keyPath=\"arrangedObjects.responseTimestamp\" id=\"Lmn-Pj-7WR\"/>\n                                            </connections>\n                                        </tableColumn>\n                                        <tableColumn width=\"40\" minWidth=\"40\" maxWidth=\"1000\" id=\"kQZ-T1-7Pz\">\n                                            <tableHeaderCell key=\"headerCell\" lineBreakMode=\"truncatingTail\" borderStyle=\"border\" alignment=\"left\" title=\"URL\">\n                                                <font key=\"font\" metaFont=\"smallSystem\"/>\n                                                <color key=\"textColor\" name=\"headerTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                <color key=\"backgroundColor\" white=\"0.33333298560000002\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                            </tableHeaderCell>\n                                            <textFieldCell key=\"dataCell\" lineBreakMode=\"truncatingTail\" selectable=\"YES\" editable=\"YES\" alignment=\"left\" title=\"Text Cell\" id=\"svN-as-Z79\">\n                                                <font key=\"font\" metaFont=\"system\"/>\n                                                <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                <color key=\"backgroundColor\" name=\"controlBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            </textFieldCell>\n                                            <tableColumnResizingMask key=\"resizingMask\" resizeWithTable=\"YES\" userResizable=\"YES\"/>\n                                            <connections>\n                                                <binding destination=\"gS6-H9-bSa\" name=\"value\" keyPath=\"arrangedObjects.requestURL\" id=\"79g-eQ-1ie\"/>\n                                            </connections>\n                                        </tableColumn>\n                                        <tableColumn width=\"113\" minWidth=\"40\" maxWidth=\"1000\" id=\"GPj-5O-7sr\">\n                                            <tableHeaderCell key=\"headerCell\" lineBreakMode=\"truncatingTail\" borderStyle=\"border\" alignment=\"left\" title=\"Request Timestamp\">\n                                                <font key=\"font\" metaFont=\"smallSystem\"/>\n                                                <color key=\"textColor\" name=\"headerTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                <color key=\"backgroundColor\" white=\"0.33333298560000002\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                            </tableHeaderCell>\n                                            <textFieldCell key=\"dataCell\" lineBreakMode=\"truncatingTail\" selectable=\"YES\" editable=\"YES\" alignment=\"left\" title=\"Text Cell\" id=\"SZe-2n-uem\">\n                                                <font key=\"font\" metaFont=\"system\"/>\n                                                <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                <color key=\"backgroundColor\" name=\"controlBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            </textFieldCell>\n                                            <tableColumnResizingMask key=\"resizingMask\" resizeWithTable=\"YES\" userResizable=\"YES\"/>\n                                            <connections>\n                                                <binding destination=\"gS6-H9-bSa\" name=\"value\" keyPath=\"arrangedObjects.requestTimestamp\" id=\"53q-nl-ynJ\"/>\n                                            </connections>\n                                        </tableColumn>\n                                        <tableColumn width=\"120\" minWidth=\"10\" maxWidth=\"3.4028234663852886e+38\" id=\"UF0-gQ-619\">\n                                            <tableHeaderCell key=\"headerCell\" lineBreakMode=\"truncatingTail\" borderStyle=\"border\" alignment=\"left\" title=\"Response Timestamp\">\n                                                <font key=\"font\" metaFont=\"smallSystem\"/>\n                                                <color key=\"textColor\" name=\"headerTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                <color key=\"backgroundColor\" name=\"headerColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            </tableHeaderCell>\n                                            <textFieldCell key=\"dataCell\" lineBreakMode=\"truncatingTail\" selectable=\"YES\" editable=\"YES\" alignment=\"left\" title=\"Text Cell\" id=\"H2O-HX-3Hd\">\n                                                <font key=\"font\" metaFont=\"system\"/>\n                                                <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                <color key=\"backgroundColor\" name=\"controlBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            </textFieldCell>\n                                            <tableColumnResizingMask key=\"resizingMask\" resizeWithTable=\"YES\" userResizable=\"YES\"/>\n                                            <connections>\n                                                <binding destination=\"gS6-H9-bSa\" name=\"value\" keyPath=\"arrangedObjects.responseTimestamp\" id=\"U5T-gM-WBH\"/>\n                                            </connections>\n                                        </tableColumn>\n                                        <tableColumn width=\"49\" minWidth=\"10\" maxWidth=\"3.4028234663852886e+38\" id=\"E0Q-oh-bEe\">\n                                            <tableHeaderCell key=\"headerCell\" lineBreakMode=\"truncatingTail\" borderStyle=\"border\" alignment=\"left\" title=\"Success\">\n                                                <font key=\"font\" metaFont=\"smallSystem\"/>\n                                                <color key=\"textColor\" name=\"headerTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                <color key=\"backgroundColor\" name=\"headerColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            </tableHeaderCell>\n                                            <buttonCell key=\"dataCell\" type=\"check\" bezelStyle=\"regularSquare\" imagePosition=\"left\" enabled=\"NO\" inset=\"2\" id=\"9ti-pY-qv6\">\n                                                <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                                <font key=\"font\" metaFont=\"system\"/>\n                                            </buttonCell>\n                                            <tableColumnResizingMask key=\"resizingMask\" resizeWithTable=\"YES\" userResizable=\"YES\"/>\n                                            <connections>\n                                                <binding destination=\"gS6-H9-bSa\" name=\"value\" keyPath=\"arrangedObjects.successful\" id=\"VZA-1k-THP\"/>\n                                            </connections>\n                                        </tableColumn>\n                                        <tableColumn width=\"72\" minWidth=\"10\" maxWidth=\"3.4028234663852886e+38\" id=\"yZj-ng-kod\">\n                                            <tableHeaderCell key=\"headerCell\" lineBreakMode=\"truncatingTail\" borderStyle=\"border\" alignment=\"left\" title=\"From Cache\">\n                                                <font key=\"font\" metaFont=\"smallSystem\"/>\n                                                <color key=\"textColor\" name=\"headerTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                <color key=\"backgroundColor\" name=\"headerColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            </tableHeaderCell>\n                                            <buttonCell key=\"dataCell\" type=\"check\" bezelStyle=\"regularSquare\" imagePosition=\"left\" enabled=\"NO\" inset=\"2\" id=\"JIt-1G-a2g\">\n                                                <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                                <font key=\"font\" metaFont=\"system\"/>\n                                            </buttonCell>\n                                            <tableColumnResizingMask key=\"resizingMask\" resizeWithTable=\"YES\" userResizable=\"YES\"/>\n                                            <connections>\n                                                <binding destination=\"gS6-H9-bSa\" name=\"value\" keyPath=\"arrangedObjects.servedFromCache\" id=\"F6Y-cx-AUS\"/>\n                                            </connections>\n                                        </tableColumn>\n                                        <tableColumn width=\"79\" minWidth=\"10\" maxWidth=\"3.4028234663852886e+38\" id=\"7W3-SE-GBp\">\n                                            <tableHeaderCell key=\"headerCell\" lineBreakMode=\"truncatingTail\" borderStyle=\"border\" alignment=\"left\" title=\"kCacheStatus\">\n                                                <font key=\"font\" metaFont=\"smallSystem\"/>\n                                                <color key=\"textColor\" name=\"headerTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                <color key=\"backgroundColor\" name=\"headerColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            </tableHeaderCell>\n                                            <textFieldCell key=\"dataCell\" lineBreakMode=\"truncatingTail\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" title=\"Text\" id=\"ndb-Hm-c7l\">\n                                                <font key=\"font\" metaFont=\"system\"/>\n                                                <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            </textFieldCell>\n                                            <tableColumnResizingMask key=\"resizingMask\" resizeWithTable=\"YES\" userResizable=\"YES\"/>\n                                            <connections>\n                                                <binding destination=\"gS6-H9-bSa\" name=\"value\" keyPath=\"arrangedObjects.cacheStatus\" id=\"9Xj-Ci-j94\"/>\n                                            </connections>\n                                        </tableColumn>\n                                        <tableColumn width=\"123\" minWidth=\"10\" maxWidth=\"3.4028234663852886e+38\" id=\"Q5F-yB-TnF\">\n                                            <tableHeaderCell key=\"headerCell\" lineBreakMode=\"truncatingTail\" borderStyle=\"border\" alignment=\"left\" title=\"Internal Request Type\">\n                                                <font key=\"font\" metaFont=\"smallSystem\"/>\n                                                <color key=\"textColor\" name=\"headerTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                <color key=\"backgroundColor\" name=\"headerColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            </tableHeaderCell>\n                                            <textFieldCell key=\"dataCell\" lineBreakMode=\"truncatingTail\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" title=\"Text\" id=\"DiF-At-2QS\">\n                                                <font key=\"font\" metaFont=\"system\"/>\n                                                <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            </textFieldCell>\n                                            <tableColumnResizingMask key=\"resizingMask\" resizeWithTable=\"YES\" userResizable=\"YES\"/>\n                                            <connections>\n                                                <binding destination=\"gS6-H9-bSa\" name=\"value\" keyPath=\"arrangedObjects.internalRequestType\" id=\"Sea-0w-XSC\"/>\n                                            </connections>\n                                        </tableColumn>\n                                    </tableColumns>\n                                </tableView>\n                            </subviews>\n                            <color key=\"backgroundColor\" name=\"controlBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                        </clipView>\n                        <scroller key=\"horizontalScroller\" hidden=\"YES\" verticalHuggingPriority=\"750\" horizontal=\"YES\" id=\"WnA-6l-87P\">\n                            <rect key=\"frame\" x=\"-7\" y=\"2\" width=\"0.0\" height=\"15\"/>\n                            <autoresizingMask key=\"autoresizingMask\"/>\n                        </scroller>\n                        <scroller key=\"verticalScroller\" hidden=\"YES\" verticalHuggingPriority=\"750\" horizontal=\"NO\" id=\"H1Q-Ur-URZ\">\n                            <rect key=\"frame\" x=\"-14\" y=\"9\" width=\"15\" height=\"0.0\"/>\n                            <autoresizingMask key=\"autoresizingMask\"/>\n                        </scroller>\n                        <tableHeaderView key=\"headerView\" id=\"Ojb-kd-kMV\">\n                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"1133\" height=\"17\"/>\n                            <autoresizingMask key=\"autoresizingMask\"/>\n                        </tableHeaderView>\n                    </scrollView>\n                    <textField horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"JmX-8R-VF1\">\n                        <rect key=\"frame\" x=\"938\" y=\"640\" width=\"133\" height=\"17\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                        <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" title=\"Number of requests:\" id=\"2iz-k1-44U\">\n                            <font key=\"font\" metaFont=\"system\"/>\n                            <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                            <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                        </textFieldCell>\n                    </textField>\n                    <textField verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"nw6-lI-dz0\">\n                        <rect key=\"frame\" x=\"1077\" y=\"637\" width=\"57\" height=\"22\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                        <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" state=\"on\" borderStyle=\"bezel\" drawsBackground=\"YES\" id=\"YyE-ia-k9D\">\n                            <font key=\"font\" metaFont=\"system\"/>\n                            <color key=\"textColor\" name=\"textColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                            <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                        </textFieldCell>\n                        <connections>\n                            <binding destination=\"UKP-8f-Uqw\" name=\"value\" keyPath=\"values.numberOfRequests\" id=\"gCb-u5-RPT\"/>\n                        </connections>\n                    </textField>\n                    <stepper horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"7PU-9E-v6Q\">\n                        <rect key=\"frame\" x=\"1139\" y=\"634\" width=\"19\" height=\"27\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                        <stepperCell key=\"cell\" continuous=\"YES\" alignment=\"left\" maxValue=\"100\" id=\"Hiq-Ek-llg\"/>\n                        <connections>\n                            <binding destination=\"UKP-8f-Uqw\" name=\"value\" keyPath=\"values.numberOfRequests\" id=\"QEG-a7-LXe\"/>\n                        </connections>\n                    </stepper>\n                </subviews>\n                <constraints>\n                    <constraint firstItem=\"o2V-ic-3xe\" firstAttribute=\"top\" secondItem=\"EiT-Mj-1SZ\" secondAttribute=\"top\" constant=\"512\" id=\"28g-yj-JxW\"/>\n                    <constraint firstItem=\"lUz-fT-yVO\" firstAttribute=\"leading\" secondItem=\"o2V-ic-3xe\" secondAttribute=\"leading\" id=\"3uc-MK-Rty\"/>\n                    <constraint firstAttribute=\"trailing\" secondItem=\"EoI-15-p9r\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"6bO-tB-iNp\"/>\n                    <constraint firstItem=\"joY-M3-8Ue\" firstAttribute=\"top\" secondItem=\"EoI-15-p9r\" secondAttribute=\"bottom\" constant=\"38\" id=\"AN9-By-DHQ\"/>\n                    <constraint firstItem=\"EoI-15-p9r\" firstAttribute=\"top\" secondItem=\"aLB-Lk-tpQ\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"Bhb-Un-ofO\"/>\n                    <constraint firstItem=\"EoI-15-p9r\" firstAttribute=\"leading\" secondItem=\"bZJ-iT-cLf\" secondAttribute=\"leading\" id=\"DJl-JK-MKc\"/>\n                    <constraint firstAttribute=\"bottom\" secondItem=\"o2V-ic-3xe\" secondAttribute=\"bottom\" constant=\"82\" id=\"Gf1-X5-Zdj\"/>\n                    <constraint firstItem=\"7PU-9E-v6Q\" firstAttribute=\"leading\" secondItem=\"nw6-lI-dz0\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"IVg-9t-wZ9\"/>\n                    <constraint firstItem=\"bZJ-iT-cLf\" firstAttribute=\"leading\" secondItem=\"lUz-fT-yVO\" secondAttribute=\"leading\" id=\"Mtv-3V-Qee\"/>\n                    <constraint firstItem=\"7PU-9E-v6Q\" firstAttribute=\"trailing\" secondItem=\"joY-M3-8Ue\" secondAttribute=\"trailing\" id=\"OsG-X2-SwW\"/>\n                    <constraint firstItem=\"nw6-lI-dz0\" firstAttribute=\"leading\" secondItem=\"JmX-8R-VF1\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"Rfk-ZC-gbk\"/>\n                    <constraint firstItem=\"7PU-9E-v6Q\" firstAttribute=\"top\" secondItem=\"EoI-15-p9r\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"Sfm-dt-4i7\"/>\n                    <constraint firstItem=\"bZJ-iT-cLf\" firstAttribute=\"top\" secondItem=\"joY-M3-8Ue\" secondAttribute=\"bottom\" constant=\"50\" id=\"Uq3-4k-kGT\"/>\n                    <constraint firstItem=\"nw6-lI-dz0\" firstAttribute=\"leading\" secondItem=\"joY-M3-8Ue\" secondAttribute=\"leading\" id=\"X7t-9N-fgh\"/>\n                    <constraint firstItem=\"o2V-ic-3xe\" firstAttribute=\"top\" secondItem=\"lUz-fT-yVO\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"XJ7-aW-aky\"/>\n                    <constraint firstItem=\"bZJ-iT-cLf\" firstAttribute=\"trailing\" secondItem=\"o2V-ic-3xe\" secondAttribute=\"trailing\" id=\"ZW2-a8-gV2\"/>\n                    <constraint firstItem=\"EoI-15-p9r\" firstAttribute=\"trailing\" secondItem=\"joY-M3-8Ue\" secondAttribute=\"trailing\" id=\"aEh-ch-qEL\"/>\n                    <constraint firstItem=\"bZJ-iT-cLf\" firstAttribute=\"trailing\" secondItem=\"joY-M3-8Ue\" secondAttribute=\"trailing\" id=\"bFO-pJ-fb1\"/>\n                    <constraint firstItem=\"xkg-JO-HVb\" firstAttribute=\"leading\" secondItem=\"joY-M3-8Ue\" secondAttribute=\"leading\" constant=\"-25\" id=\"e8p-dB-bFz\"/>\n                    <constraint firstItem=\"joY-M3-8Ue\" firstAttribute=\"top\" secondItem=\"nw6-lI-dz0\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"eo4-dd-P1u\"/>\n                    <constraint firstItem=\"aLB-Lk-tpQ\" firstAttribute=\"top\" secondItem=\"EiT-Mj-1SZ\" secondAttribute=\"top\" constant=\"20\" symbolic=\"YES\" id=\"gst-dv-kPi\"/>\n                    <constraint firstItem=\"aLB-Lk-tpQ\" firstAttribute=\"leading\" secondItem=\"EiT-Mj-1SZ\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"jS3-e8-fxF\"/>\n                    <constraint firstItem=\"aLB-Lk-tpQ\" firstAttribute=\"leading\" secondItem=\"EoI-15-p9r\" secondAttribute=\"leading\" id=\"pOm-q6-Ah4\"/>\n                    <constraint firstAttribute=\"bottom\" secondItem=\"xkg-JO-HVb\" secondAttribute=\"bottom\" constant=\"20\" symbolic=\"YES\" id=\"shr-DR-pko\"/>\n                    <constraint firstItem=\"lUz-fT-yVO\" firstAttribute=\"top\" secondItem=\"bZJ-iT-cLf\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"wbw-Zr-h5R\"/>\n                    <constraint firstItem=\"JmX-8R-VF1\" firstAttribute=\"centerY\" secondItem=\"nw6-lI-dz0\" secondAttribute=\"centerY\" id=\"yvs-I7-30F\"/>\n                </constraints>\n            </view>\n        </window>\n        <arrayController id=\"gS6-H9-bSa\" userLabel=\"Request Array Controller\"/>\n        <userDefaultsController id=\"ljb-3b-Apb\"/>\n        <userDefaultsController representsSharedInstance=\"YES\" id=\"UKP-8f-Uqw\"/>\n    </objects>\n</document>\n"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestTool/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"16x16\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"16x16\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"32x32\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"32x32\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"128x128\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"128x128\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"256x256\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"256x256\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"512x512\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"512x512\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestTool/en.lproj/Credits.rtf",
    "content": "{\\rtf0\\ansi{\\fonttbl\\f0\\fswiss Helvetica;}\n{\\colortbl;\\red255\\green255\\blue255;}\n\\paperw9840\\paperh8400\n\\pard\\tx560\\tx1120\\tx1680\\tx2240\\tx2800\\tx3360\\tx3920\\tx4480\\tx5040\\tx5600\\tx6160\\tx6720\\ql\\qnatural\n\n\\f0\\b\\fs24 \\cf0 Engineering:\n\\b0 \\\n\tSome people\\\n\\\n\n\\b Human Interface Design:\n\\b0 \\\n\tSome other people\\\n\\\n\n\\b Testing:\n\\b0 \\\n\tHopefully not nobody\\\n\\\n\n\\b Documentation:\n\\b0 \\\n\tWhoever\\\n\\\n\n\\b With special thanks to:\n\\b0 \\\n\tMom\\\n}\n"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestTool/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestTool/main.m",
    "content": "//\n//  main.m\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 01/08/14.\n//  Copyright (c) 2014 artifacts Software GmbH & Co KG. All rights reserved.\n//\n\n#import <Cocoa/Cocoa.h>\n\nint main(int argc, const char * argv[])\n{\n    return NSApplicationMain(argc, argv);\n}\n"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestTool.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t051A9826198B9CC0002B8F2C /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051A9825198B9CC0002B8F2C /* Cocoa.framework */; };\n\t\t051A9830198B9CC0002B8F2C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 051A982E198B9CC0002B8F2C /* InfoPlist.strings */; };\n\t\t051A9832198B9CC0002B8F2C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 051A9831198B9CC0002B8F2C /* main.m */; };\n\t\t051A9836198B9CC0002B8F2C /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 051A9834198B9CC0002B8F2C /* Credits.rtf */; };\n\t\t051A9839198B9CC0002B8F2C /* AFAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 051A9838198B9CC0002B8F2C /* AFAppDelegate.m */; };\n\t\t051A983C198B9CC0002B8F2C /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 051A983A198B9CC0002B8F2C /* MainMenu.xib */; };\n\t\t051A983E198B9CC0002B8F2C /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 051A983D198B9CC0002B8F2C /* Images.xcassets */; };\n\t\t051A9845198B9CC0002B8F2C /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051A9844198B9CC0002B8F2C /* XCTest.framework */; };\n\t\t051A9846198B9CC0002B8F2C /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051A9825198B9CC0002B8F2C /* Cocoa.framework */; };\n\t\t051A984E198B9CC0002B8F2C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 051A984C198B9CC0002B8F2C /* InfoPlist.strings */; };\n\t\t051A9850198B9CC0002B8F2C /* AFCacheTestToolTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 051A984F198B9CC0002B8F2C /* AFCacheTestToolTests.m */; };\n\t\t051A985B198B9EC6002B8F2C /* AFRequestInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 051A985A198B9EC6002B8F2C /* AFRequestInfo.m */; };\n\t\tEA6AD3EEFC7B470998844126 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 74368053065E4745B9ADC686 /* libPods.a */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t051A9847198B9CC0002B8F2C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 051A981A198B9CC0002B8F2C /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 051A9821198B9CC0002B8F2C;\n\t\t\tremoteInfo = AFCacheTestTool;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t051A9822198B9CC0002B8F2C /* AFCacheTestTool.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AFCacheTestTool.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t051A9825198B9CC0002B8F2C /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };\n\t\t051A9828198B9CC0002B8F2C /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };\n\t\t051A9829198B9CC0002B8F2C /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };\n\t\t051A982A198B9CC0002B8F2C /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t051A982D198B9CC0002B8F2C /* AFCacheTestTool-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"AFCacheTestTool-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t051A982F198B9CC0002B8F2C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t051A9831198B9CC0002B8F2C /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t051A9833198B9CC0002B8F2C /* AFCacheTestTool-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"AFCacheTestTool-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t051A9835198B9CC0002B8F2C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = \"<group>\"; };\n\t\t051A9837198B9CC0002B8F2C /* AFAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AFAppDelegate.h; sourceTree = \"<group>\"; };\n\t\t051A9838198B9CC0002B8F2C /* AFAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AFAppDelegate.m; sourceTree = \"<group>\"; };\n\t\t051A983B198B9CC0002B8F2C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = \"<group>\"; };\n\t\t051A983D198B9CC0002B8F2C /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = \"<group>\"; };\n\t\t051A9843198B9CC0002B8F2C /* AFCacheTestToolTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AFCacheTestToolTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t051A9844198B9CC0002B8F2C /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };\n\t\t051A984B198B9CC0002B8F2C /* AFCacheTestToolTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"AFCacheTestToolTests-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t051A984D198B9CC0002B8F2C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t051A984F198B9CC0002B8F2C /* AFCacheTestToolTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AFCacheTestToolTests.m; sourceTree = \"<group>\"; };\n\t\t051A9859198B9EC6002B8F2C /* AFRequestInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFRequestInfo.h; sourceTree = \"<group>\"; };\n\t\t051A985A198B9EC6002B8F2C /* AFRequestInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFRequestInfo.m; sourceTree = \"<group>\"; };\n\t\t74368053065E4745B9ADC686 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE925080856E94B16B60CE852 /* Pods.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.xcconfig; path = Pods/Pods.xcconfig; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t051A981F198B9CC0002B8F2C /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t051A9826198B9CC0002B8F2C /* Cocoa.framework in Frameworks */,\n\t\t\t\tEA6AD3EEFC7B470998844126 /* libPods.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t051A9840198B9CC0002B8F2C /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t051A9846198B9CC0002B8F2C /* Cocoa.framework in Frameworks */,\n\t\t\t\t051A9845198B9CC0002B8F2C /* XCTest.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t051A9819198B9CC0002B8F2C = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t051A982B198B9CC0002B8F2C /* AFCacheTestTool */,\n\t\t\t\t051A9849198B9CC0002B8F2C /* AFCacheTestToolTests */,\n\t\t\t\t051A9824198B9CC0002B8F2C /* Frameworks */,\n\t\t\t\t051A9823198B9CC0002B8F2C /* Products */,\n\t\t\t\tE925080856E94B16B60CE852 /* Pods.xcconfig */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t051A9823198B9CC0002B8F2C /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t051A9822198B9CC0002B8F2C /* AFCacheTestTool.app */,\n\t\t\t\t051A9843198B9CC0002B8F2C /* AFCacheTestToolTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t051A9824198B9CC0002B8F2C /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t051A9825198B9CC0002B8F2C /* Cocoa.framework */,\n\t\t\t\t051A9844198B9CC0002B8F2C /* XCTest.framework */,\n\t\t\t\t051A9827198B9CC0002B8F2C /* Other Frameworks */,\n\t\t\t\t74368053065E4745B9ADC686 /* libPods.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t051A9827198B9CC0002B8F2C /* Other Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t051A9828198B9CC0002B8F2C /* AppKit.framework */,\n\t\t\t\t051A9829198B9CC0002B8F2C /* CoreData.framework */,\n\t\t\t\t051A982A198B9CC0002B8F2C /* Foundation.framework */,\n\t\t\t);\n\t\t\tname = \"Other Frameworks\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t051A982B198B9CC0002B8F2C /* AFCacheTestTool */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t051A9837198B9CC0002B8F2C /* AFAppDelegate.h */,\n\t\t\t\t051A9838198B9CC0002B8F2C /* AFAppDelegate.m */,\n\t\t\t\t051A983A198B9CC0002B8F2C /* MainMenu.xib */,\n\t\t\t\t051A983D198B9CC0002B8F2C /* Images.xcassets */,\n\t\t\t\t051A982C198B9CC0002B8F2C /* Supporting Files */,\n\t\t\t\t051A9859198B9EC6002B8F2C /* AFRequestInfo.h */,\n\t\t\t\t051A985A198B9EC6002B8F2C /* AFRequestInfo.m */,\n\t\t\t);\n\t\t\tpath = AFCacheTestTool;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t051A982C198B9CC0002B8F2C /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t051A982D198B9CC0002B8F2C /* AFCacheTestTool-Info.plist */,\n\t\t\t\t051A982E198B9CC0002B8F2C /* InfoPlist.strings */,\n\t\t\t\t051A9831198B9CC0002B8F2C /* main.m */,\n\t\t\t\t051A9833198B9CC0002B8F2C /* AFCacheTestTool-Prefix.pch */,\n\t\t\t\t051A9834198B9CC0002B8F2C /* Credits.rtf */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t051A9849198B9CC0002B8F2C /* AFCacheTestToolTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t051A984F198B9CC0002B8F2C /* AFCacheTestToolTests.m */,\n\t\t\t\t051A984A198B9CC0002B8F2C /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = AFCacheTestToolTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t051A984A198B9CC0002B8F2C /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t051A984B198B9CC0002B8F2C /* AFCacheTestToolTests-Info.plist */,\n\t\t\t\t051A984C198B9CC0002B8F2C /* InfoPlist.strings */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t051A9821198B9CC0002B8F2C /* AFCacheTestTool */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 051A9853198B9CC0002B8F2C /* Build configuration list for PBXNativeTarget \"AFCacheTestTool\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tB4B24EA3ADB74570BDDBE37D /* Check Pods Manifest.lock */,\n\t\t\t\t051A981E198B9CC0002B8F2C /* Sources */,\n\t\t\t\t051A981F198B9CC0002B8F2C /* Frameworks */,\n\t\t\t\t051A9820198B9CC0002B8F2C /* Resources */,\n\t\t\t\tF4D6B24304744A7DA823A9BF /* Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = AFCacheTestTool;\n\t\t\tproductName = AFCacheTestTool;\n\t\t\tproductReference = 051A9822198B9CC0002B8F2C /* AFCacheTestTool.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t051A9842198B9CC0002B8F2C /* AFCacheTestToolTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 051A9856198B9CC0002B8F2C /* Build configuration list for PBXNativeTarget \"AFCacheTestToolTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t051A983F198B9CC0002B8F2C /* Sources */,\n\t\t\t\t051A9840198B9CC0002B8F2C /* Frameworks */,\n\t\t\t\t051A9841198B9CC0002B8F2C /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t051A9848198B9CC0002B8F2C /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = AFCacheTestToolTests;\n\t\t\tproductName = AFCacheTestToolTests;\n\t\t\tproductReference = 051A9843198B9CC0002B8F2C /* AFCacheTestToolTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t051A981A198B9CC0002B8F2C /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tCLASSPREFIX = AF;\n\t\t\t\tLastUpgradeCheck = 0510;\n\t\t\t\tORGANIZATIONNAME = \"artifacts Software GmbH & Co KG\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t051A9842198B9CC0002B8F2C = {\n\t\t\t\t\t\tTestTargetID = 051A9821198B9CC0002B8F2C;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 051A981D198B9CC0002B8F2C /* Build configuration list for PBXProject \"AFCacheTestTool\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 051A9819198B9CC0002B8F2C;\n\t\t\tproductRefGroup = 051A9823198B9CC0002B8F2C /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t051A9821198B9CC0002B8F2C /* AFCacheTestTool */,\n\t\t\t\t051A9842198B9CC0002B8F2C /* AFCacheTestToolTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t051A9820198B9CC0002B8F2C /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t051A9830198B9CC0002B8F2C /* InfoPlist.strings in Resources */,\n\t\t\t\t051A983E198B9CC0002B8F2C /* Images.xcassets in Resources */,\n\t\t\t\t051A9836198B9CC0002B8F2C /* Credits.rtf in Resources */,\n\t\t\t\t051A983C198B9CC0002B8F2C /* MainMenu.xib in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t051A9841198B9CC0002B8F2C /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t051A984E198B9CC0002B8F2C /* InfoPlist.strings in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\tB4B24EA3ADB74570BDDBE37D /* Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_ROOT}/../Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [[ $? != 0 ]] ; then\\n    cat << EOM\\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\nEOM\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tF4D6B24304744A7DA823A9BF /* Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Pods-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t051A981E198B9CC0002B8F2C /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t051A9832198B9CC0002B8F2C /* main.m in Sources */,\n\t\t\t\t051A9839198B9CC0002B8F2C /* AFAppDelegate.m in Sources */,\n\t\t\t\t051A985B198B9EC6002B8F2C /* AFRequestInfo.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t051A983F198B9CC0002B8F2C /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t051A9850198B9CC0002B8F2C /* AFCacheTestToolTests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t051A9848198B9CC0002B8F2C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 051A9821198B9CC0002B8F2C /* AFCacheTestTool */;\n\t\t\ttargetProxy = 051A9847198B9CC0002B8F2C /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t051A982E198B9CC0002B8F2C /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t051A982F198B9CC0002B8F2C /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t051A9834198B9CC0002B8F2C /* Credits.rtf */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t051A9835198B9CC0002B8F2C /* en */,\n\t\t\t);\n\t\t\tname = Credits.rtf;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t051A983A198B9CC0002B8F2C /* MainMenu.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t051A983B198B9CC0002B8F2C /* Base */,\n\t\t\t);\n\t\t\tname = MainMenu.xib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t051A984C198B9CC0002B8F2C /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t051A984D198B9CC0002B8F2C /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t051A9851198B9CC0002B8F2C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t051A9852198B9CC0002B8F2C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t051A9854198B9CC0002B8F2C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E925080856E94B16B60CE852 /* Pods.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"AFCacheTestTool/AFCacheTestTool-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"AFCacheTestTool/AFCacheTestTool-Info.plist\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t051A9855198B9CC0002B8F2C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E925080856E94B16B60CE852 /* Pods.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"AFCacheTestTool/AFCacheTestTool-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"AFCacheTestTool/AFCacheTestTool-Info.plist\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t051A9857198B9CC0002B8F2C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(BUILT_PRODUCTS_DIR)/AFCacheTestTool.app/Contents/MacOS/AFCacheTestTool\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"AFCacheTestTool/AFCacheTestTool-Prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = \"AFCacheTestToolTests/AFCacheTestToolTests-Info.plist\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUNDLE_LOADER)\";\n\t\t\t\tWRAPPER_EXTENSION = xctest;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t051A9858198B9CC0002B8F2C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(BUILT_PRODUCTS_DIR)/AFCacheTestTool.app/Contents/MacOS/AFCacheTestTool\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"AFCacheTestTool/AFCacheTestTool-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"AFCacheTestToolTests/AFCacheTestToolTests-Info.plist\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUNDLE_LOADER)\";\n\t\t\t\tWRAPPER_EXTENSION = xctest;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t051A981D198B9CC0002B8F2C /* Build configuration list for PBXProject \"AFCacheTestTool\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t051A9851198B9CC0002B8F2C /* Debug */,\n\t\t\t\t051A9852198B9CC0002B8F2C /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t051A9853198B9CC0002B8F2C /* Build configuration list for PBXNativeTarget \"AFCacheTestTool\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t051A9854198B9CC0002B8F2C /* Debug */,\n\t\t\t\t051A9855198B9CC0002B8F2C /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t051A9856198B9CC0002B8F2C /* Build configuration list for PBXNativeTarget \"AFCacheTestToolTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t051A9857198B9CC0002B8F2C /* Debug */,\n\t\t\t\t051A9858198B9CC0002B8F2C /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 051A981A198B9CC0002B8F2C /* Project object */;\n}\n"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestTool.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version='1.0' encoding='UTF-8'?><Workspace version='1.0'><FileRef location='group:AFCacheTestTool.xcodeproj'/><FileRef location='group:Pods/Pods.xcodeproj'/></Workspace>"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestTool.xcworkspace/xcshareddata/AFCacheTestTool.xccheckout",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDESourceControlProjectFavoriteDictionaryKey</key>\n\t<false/>\n\t<key>IDESourceControlProjectIdentifier</key>\n\t<string>29FA1447-CDD4-463F-A188-DF885F812EBE</string>\n\t<key>IDESourceControlProjectName</key>\n\t<string>AFCacheTestTool</string>\n\t<key>IDESourceControlProjectOriginsDictionary</key>\n\t<dict>\n\t\t<key>7A487629-3C5A-4DE8-A9C5-F518AD6494D8</key>\n\t\t<string>ssh://github.com/artifacts/AFCache.git</string>\n\t</dict>\n\t<key>IDESourceControlProjectPath</key>\n\t<string>AFCacheTestTool-OSX/AFCacheTestTool.xcworkspace</string>\n\t<key>IDESourceControlProjectRelativeInstallPathDictionary</key>\n\t<dict>\n\t\t<key>7A487629-3C5A-4DE8-A9C5-F518AD6494D8</key>\n\t\t<string>../..</string>\n\t</dict>\n\t<key>IDESourceControlProjectURL</key>\n\t<string>ssh://github.com/artifacts/AFCache.git</string>\n\t<key>IDESourceControlProjectVersion</key>\n\t<integer>110</integer>\n\t<key>IDESourceControlProjectWCCIdentifier</key>\n\t<string>7A487629-3C5A-4DE8-A9C5-F518AD6494D8</string>\n\t<key>IDESourceControlProjectWCConfigurations</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>IDESourceControlRepositoryExtensionIdentifierKey</key>\n\t\t\t<string>public.vcs.git</string>\n\t\t\t<key>IDESourceControlWCCIdentifierKey</key>\n\t\t\t<string>7A487629-3C5A-4DE8-A9C5-F518AD6494D8</string>\n\t\t\t<key>IDESourceControlWCCName</key>\n\t\t\t<string>AFCache</string>\n\t\t</dict>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestToolTests/AFCacheTestToolTests-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>de.artifacts.${PRODUCT_NAME:rfc1034identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestToolTests/AFCacheTestToolTests.m",
    "content": "//\n//  AFCacheTestToolTests.m\n//  AFCacheTestToolTests\n//\n//  Created by Michael Markowski on 01/08/14.\n//  Copyright (c) 2014 artifacts Software GmbH & Co KG. All rights reserved.\n//\n\n#import <XCTest/XCTest.h>\n\n@interface AFCacheTestToolTests : XCTestCase\n\n@end\n\n@implementation AFCacheTestToolTests\n\n- (void)setUp\n{\n    [super setUp];\n    // Put setup code here. This method is called before the invocation of each test method in the class.\n}\n\n- (void)tearDown\n{\n    // Put teardown code here. This method is called after the invocation of each test method in the class.\n    [super tearDown];\n}\n\n- (void)testExample\n{\n    XCTFail(@\"No implementation for \\\"%s\\\"\", __PRETTY_FUNCTION__);\n}\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-OSX/AFCacheTestToolTests/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "AFCacheTestTool-OSX/Podfile",
    "content": "platform :osx, '10.9'\n\npod 'AFCache', :path => '..'\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheTestTool/AFCacheTestTool/AFCacheTestTool-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFiles</key>\n\t<array/>\n\t<key>CFBundleIdentifier</key>\n\t<string>de.artifacts.${PRODUCT_NAME:rfc1034identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UIMainStoryboardFile</key>\n\t<string>MainStoryboard</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheTestTool/AFCacheTestTool/AFCacheTestTool-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'AFCacheTestTool' target in the 'AFCacheTestTool' project\n//\n\n#import <Availability.h>\n\n#ifndef __IPHONE_5_0\n#warning \"This project uses features only available in iOS SDK 5.0 and later.\"\n#endif\n\n#ifdef __OBJC__\n    #import <UIKit/UIKit.h>\n    #import <Foundation/Foundation.h>\n#endif\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheTestTool/AFCacheTestTool/AppDelegate.h",
    "content": "//\n//  AppDelegate.h\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 11.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheTestTool/AFCacheTestTool/AppDelegate.m",
    "content": "//\n//  AppDelegate.m\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 11.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import \"AppDelegate.h\"\n\n@implementation AppDelegate\n\n@synthesize window = _window;\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n    // Override point for customization after application launch.\n    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;\n    UINavigationController *navigationController = [splitViewController.viewControllers lastObject];\n    splitViewController.delegate = (id)navigationController.topViewController;\n    return YES;\n}\n\t\t\t\t\t\t\t\n- (void)applicationWillResignActive:(UIApplication *)application\n{\n    /*\n     Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n     Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n     */\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application\n{\n    /*\n     Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. \n     If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n     */\n}\n\n- (void)applicationWillEnterForeground:(UIApplication *)application\n{\n    /*\n     Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n     */\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application\n{\n    /*\n     Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n     */\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application\n{\n    /*\n     Called when the application is about to terminate.\n     Save data if appropriate.\n     See also applicationDidEnterBackground:.\n     */\n}\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheTestTool/AFCacheTestTool/DetailViewController.h",
    "content": "//\n//  DetailViewController.h\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 11.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface DetailViewController : UIViewController <UISplitViewControllerDelegate>\n\n@property (strong, nonatomic) id detailItem;\n\n@property (strong, nonatomic) IBOutlet UILabel *detailDescriptionLabel;\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheTestTool/AFCacheTestTool/DetailViewController.m",
    "content": "//\n//  DetailViewController.m\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 11.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import \"DetailViewController.h\"\n\n@interface DetailViewController ()\n@property (strong, nonatomic) UIPopoverController *masterPopoverController;\n- (void)configureView;\n@end\n\n@implementation DetailViewController\n\n@synthesize detailItem = _detailItem;\n@synthesize detailDescriptionLabel = _detailDescriptionLabel;\n@synthesize masterPopoverController = _masterPopoverController;\n\n#pragma mark - Managing the detail item\n\n- (void)setDetailItem:(id)newDetailItem\n{\n    if (_detailItem != newDetailItem) {\n        _detailItem = newDetailItem;\n        \n        // Update the view.\n        [self configureView];\n    }\n\n    if (self.masterPopoverController != nil) {\n        [self.masterPopoverController dismissPopoverAnimated:YES];\n    }        \n}\n\n- (void)configureView\n{\n    // Update the user interface for the detail item.\n\n    if (self.detailItem) {\n        self.detailDescriptionLabel.text = [self.detailItem description];\n    }\n}\n\n- (void)didReceiveMemoryWarning\n{\n    [super didReceiveMemoryWarning];\n    // Release any cached data, images, etc that aren't in use.\n}\n\n#pragma mark - View lifecycle\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n\t// Do any additional setup after loading the view, typically from a nib.\n    [self configureView];\n}\n\n- (void)viewDidUnload\n{\n    [super viewDidUnload];\n    // Release any retained subviews of the main view.\n    // e.g. self.myOutlet = nil;\n}\n\n- (void)viewWillAppear:(BOOL)animated\n{\n    [super viewWillAppear:animated];\n}\n\n- (void)viewDidAppear:(BOOL)animated\n{\n    [super viewDidAppear:animated];\n}\n\n- (void)viewWillDisappear:(BOOL)animated\n{\n\t[super viewWillDisappear:animated];\n}\n\n- (void)viewDidDisappear:(BOOL)animated\n{\n\t[super viewDidDisappear:animated];\n}\n\n- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation\n{\n    // Return YES for supported orientations\n    return YES;\n}\n\n#pragma mark - Split view\n\n- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController\n{\n    barButtonItem.title = NSLocalizedString(@\"Master\", @\"Master\");\n    [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];\n    self.masterPopoverController = popoverController;\n}\n\n- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem\n{\n    // Called when the view is shown again in the split view, invalidating the button and popover controller.\n    [self.navigationItem setLeftBarButtonItem:nil animated:YES];\n    self.masterPopoverController = nil;\n}\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheTestTool/AFCacheTestTool/MasterViewController.h",
    "content": "//\n//  MasterViewController.h\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 11.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class DetailViewController;\n\n@interface MasterViewController : UITableViewController\n\n@property (strong, nonatomic) DetailViewController *detailViewController;\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheTestTool/AFCacheTestTool/MasterViewController.m",
    "content": "//\n//  MasterViewController.m\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 11.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import \"MasterViewController.h\"\n\n#import \"DetailViewController.h\"\n\n@implementation MasterViewController\n\n@synthesize detailViewController = _detailViewController;\n\n- (void)awakeFromNib\n{\n    self.clearsSelectionOnViewWillAppear = NO;\n    self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0);\n    [super awakeFromNib];\n}\n\n- (void)didReceiveMemoryWarning\n{\n    [super didReceiveMemoryWarning];\n    // Release any cached data, images, etc that aren't in use.\n}\n\n#pragma mark - View lifecycle\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n\t// Do any additional setup after loading the view, typically from a nib.\n    self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];\n    [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionMiddle];\n}\n\n- (void)viewDidUnload\n{\n    [super viewDidUnload];\n    // Release any retained subviews of the main view.\n    // e.g. self.myOutlet = nil;\n}\n\n- (void)viewWillAppear:(BOOL)animated\n{\n    [super viewWillAppear:animated];\n}\n\n- (void)viewDidAppear:(BOOL)animated\n{\n    [super viewDidAppear:animated];\n}\n\n- (void)viewWillDisappear:(BOOL)animated\n{\n\t[super viewWillDisappear:animated];\n}\n\n- (void)viewDidDisappear:(BOOL)animated\n{\n\t[super viewDidDisappear:animated];\n}\n\n- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation\n{\n    // Return YES for supported orientations\n    return YES;\n}\n\n/*\n// Override to support conditional editing of the table view.\n- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    // Return NO if you do not want the specified item to be editable.\n    return YES;\n}\n*/\n\n/*\n// Override to support editing the table view.\n- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    if (editingStyle == UITableViewCellEditingStyleDelete) {\n        // Delete the row from the data source.\n        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];\n    } else if (editingStyle == UITableViewCellEditingStyleInsert) {\n        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.\n    }   \n}\n*/\n\n/*\n// Override to support rearranging the table view.\n- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath\n{\n}\n*/\n\n/*\n// Override to support conditional rearranging of the table view.\n- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    // Return NO if you do not want the item to be re-orderable.\n    return YES;\n}\n*/\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheTestTool/AFCacheTestTool/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheTestTool/AFCacheTestTool/en.lproj/MainStoryboard.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"1.0\" toolsVersion=\"1926\" systemVersion=\"11C36\" targetRuntime=\"iOS.CocoaTouch.iPad\" propertyAccessControl=\"none\" initialViewController=\"5\">\n    <dependencies>\n        <development defaultVersion=\"4200\" identifier=\"xcode\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"922\"/>\n    </dependencies>\n    <scenes>\n        <scene sceneID=\"14\">\n            <objects>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"13\" sceneMemberID=\"firstResponder\"/>\n                <navigationController id=\"3\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" id=\"6\">\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"19\" kind=\"relationship\" relationship=\"rootViewController\" id=\"25\"/>\n                    </connections>\n                </navigationController>\n            </objects>\n            <point key=\"canvasLocation\" x=\"432\" y=\"-178\"/>\n        </scene>\n        <scene sceneID=\"16\">\n            <objects>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"15\" sceneMemberID=\"firstResponder\"/>\n                <viewController storyboardIdentifier=\"\" title=\"Detail\" id=\"4\" customClass=\"DetailViewController\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"26\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"703\" height=\"704\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <label clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" text=\"Detail view content goes here\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" id=\"27\">\n                                <rect key=\"frame\" x=\"20\" y=\"341\" width=\"663\" height=\"21\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMinY=\"YES\" flexibleMaxY=\"YES\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" size=\"system\"/>\n                                <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                        <simulatedOrientationMetrics key=\"simulatedOrientationMetrics\" orientation=\"landscapeRight\"/>\n                    </view>\n                    <toolbarItems/>\n                    <navigationItem key=\"navigationItem\" title=\"Detail\" id=\"52\"/>\n                    <connections>\n                        <outlet property=\"detailDescriptionLabel\" destination=\"27\" id=\"29\"/>\n                    </connections>\n                </viewController>\n            </objects>\n            <point key=\"canvasLocation\" x=\"432\" y=\"686\"/>\n        </scene>\n        <scene sceneID=\"18\">\n            <objects>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"17\" sceneMemberID=\"firstResponder\"/>\n                <splitViewController id=\"5\" sceneMemberID=\"viewController\">\n                    <toolbarItems/>\n                    <simulatedStatusBarMetrics key=\"simulatedStatusBarMetrics\" statusBarStyle=\"blackTranslucent\"/>\n                    <simulatedOrientationMetrics key=\"simulatedOrientationMetrics\" orientation=\"landscapeRight\"/>\n                    <connections>\n                        <segue destination=\"3\" kind=\"relationship\" relationship=\"masterViewController\" id=\"9\"/>\n                        <segue destination=\"42\" kind=\"relationship\" relationship=\"detailViewController\" id=\"53\"/>\n                    </connections>\n                </splitViewController>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-711\" y=\"-178\"/>\n        </scene>\n        <scene sceneID=\"24\">\n            <objects>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"23\" sceneMemberID=\"firstResponder\"/>\n                <tableViewController storyboardIdentifier=\"\" title=\"Master\" clearsSelectionOnViewWillAppear=\"NO\" id=\"19\" customClass=\"MasterViewController\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"static\" style=\"plain\" rowHeight=\"44\" sectionHeaderHeight=\"22\" sectionFooterHeight=\"22\" id=\"20\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"320\" height=\"704\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <simulatedOrientationMetrics key=\"simulatedOrientationMetrics\" orientation=\"landscapeRight\"/>\n                        <sections>\n                            <tableViewSection id=\"33\">\n                                <cells>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"blue\" hidesAccessoryWhenEditing=\"NO\" indentationLevel=\"1\" indentationWidth=\"0.0\" reuseIdentifier=\"Cell\" textLabel=\"z13-93-fbN\" style=\"IBUITableViewCellStyleDefault\" id=\"34\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <view key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"768\" height=\"43\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" text=\"Detail\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"z13-93-fbN\">\n                                                    <rect key=\"frame\" x=\"10\" y=\"0.0\" width=\"748\" height=\"43\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"20\"/>\n                                                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                                                    <color key=\"highlightedColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                </label>\n                                            </subviews>\n                                            <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                        </view>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                        </sections>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"19\" id=\"22\"/>\n                            <outlet property=\"delegate\" destination=\"19\" id=\"21\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" title=\"Master\" id=\"39\"/>\n                </tableViewController>\n            </objects>\n            <point key=\"canvasLocation\" x=\"843\" y=\"-179\"/>\n        </scene>\n        <scene sceneID=\"50\">\n            <objects>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"49\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n                <navigationController id=\"42\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" id=\"43\">\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"4\" kind=\"relationship\" relationship=\"rootViewController\" id=\"51\"/>\n                    </connections>\n                </navigationController>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-390\" y=\"686\"/>\n        </scene>\n    </scenes>\n    <simulatedMetricsContainer key=\"defaultSimulatedMetrics\">\n        <simulatedStatusBarMetrics key=\"statusBar\" statusBarStyle=\"blackTranslucent\"/>\n        <simulatedOrientationMetrics key=\"orientation\"/>\n        <simulatedScreenMetrics key=\"destination\"/>\n    </simulatedMetricsContainer>\n</document>"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheTestTool/AFCacheTestTool/main.m",
    "content": "//\n//  main.m\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 11.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n#import \"AppDelegate.h\"\n\nint main(int argc, char *argv[])\n{\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheTestTool/AFCacheTestTool.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t058339DF150CBE63005A6D55 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 058339DE150CBE63005A6D55 /* UIKit.framework */; };\n\t\t058339E1150CBE63005A6D55 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 058339E0150CBE63005A6D55 /* Foundation.framework */; };\n\t\t058339E3150CBE63005A6D55 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 058339E2150CBE63005A6D55 /* CoreGraphics.framework */; };\n\t\t058339E9150CBE63005A6D55 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 058339E7150CBE63005A6D55 /* InfoPlist.strings */; };\n\t\t058339EB150CBE63005A6D55 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 058339EA150CBE63005A6D55 /* main.m */; };\n\t\t058339EF150CBE63005A6D55 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 058339EE150CBE63005A6D55 /* AppDelegate.m */; };\n\t\t058339F2150CBE63005A6D55 /* MainStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 058339F0150CBE63005A6D55 /* MainStoryboard.storyboard */; };\n\t\t058339F5150CBE63005A6D55 /* MasterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 058339F4150CBE63005A6D55 /* MasterViewController.m */; };\n\t\t058339F8150CBE63005A6D55 /* DetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 058339F7150CBE63005A6D55 /* DetailViewController.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t058339DA150CBE63005A6D55 /* AFCacheTestTool.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AFCacheTestTool.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t058339DE150CBE63005A6D55 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\t058339E0150CBE63005A6D55 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t058339E2150CBE63005A6D55 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };\n\t\t058339E6150CBE63005A6D55 /* AFCacheTestTool-Info.plist */ = {isa = PBXFileReference; path = \"AFCacheTestTool-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t058339E8150CBE63005A6D55 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t058339EA150CBE63005A6D55 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t058339EC150CBE63005A6D55 /* AFCacheTestTool-Prefix.pch */ = {isa = PBXFileReference; path = \"AFCacheTestTool-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t058339ED150CBE63005A6D55 /* AppDelegate.h */ = {isa = PBXFileReference; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t058339EE150CBE63005A6D55 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t058339F1150CBE63005A6D55 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard.storyboard; sourceTree = \"<group>\"; };\n\t\t058339F3150CBE63005A6D55 /* MasterViewController.h */ = {isa = PBXFileReference; path = MasterViewController.h; sourceTree = \"<group>\"; };\n\t\t058339F4150CBE63005A6D55 /* MasterViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MasterViewController.m; sourceTree = \"<group>\"; };\n\t\t058339F6150CBE63005A6D55 /* DetailViewController.h */ = {isa = PBXFileReference; path = DetailViewController.h; sourceTree = \"<group>\"; };\n\t\t058339F7150CBE63005A6D55 /* DetailViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DetailViewController.m; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t058339D7150CBE63005A6D55 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t058339DF150CBE63005A6D55 /* UIKit.framework in Frameworks */,\n\t\t\t\t058339E1150CBE63005A6D55 /* Foundation.framework in Frameworks */,\n\t\t\t\t058339E3150CBE63005A6D55 /* CoreGraphics.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t058339CF150CBE63005A6D55 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t058339E4150CBE63005A6D55 /* AFCacheTestTool */,\n\t\t\t\t058339DD150CBE63005A6D55 /* Frameworks */,\n\t\t\t\t058339DB150CBE63005A6D55 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t058339DB150CBE63005A6D55 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t058339DA150CBE63005A6D55 /* AFCacheTestTool.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t058339DD150CBE63005A6D55 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t058339DE150CBE63005A6D55 /* UIKit.framework */,\n\t\t\t\t058339E0150CBE63005A6D55 /* Foundation.framework */,\n\t\t\t\t058339E2150CBE63005A6D55 /* CoreGraphics.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t058339E4150CBE63005A6D55 /* AFCacheTestTool */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t058339ED150CBE63005A6D55 /* AppDelegate.h */,\n\t\t\t\t058339EE150CBE63005A6D55 /* AppDelegate.m */,\n\t\t\t\t058339F0150CBE63005A6D55 /* MainStoryboard.storyboard */,\n\t\t\t\t058339F3150CBE63005A6D55 /* MasterViewController.h */,\n\t\t\t\t058339F4150CBE63005A6D55 /* MasterViewController.m */,\n\t\t\t\t058339F6150CBE63005A6D55 /* DetailViewController.h */,\n\t\t\t\t058339F7150CBE63005A6D55 /* DetailViewController.m */,\n\t\t\t\t058339E5150CBE63005A6D55 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = AFCacheTestTool;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t058339E5150CBE63005A6D55 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t058339E6150CBE63005A6D55 /* AFCacheTestTool-Info.plist */,\n\t\t\t\t058339E7150CBE63005A6D55 /* InfoPlist.strings */,\n\t\t\t\t058339EA150CBE63005A6D55 /* main.m */,\n\t\t\t\t058339EC150CBE63005A6D55 /* AFCacheTestTool-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t058339D9150CBE63005A6D55 /* AFCacheTestTool */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 058339FB150CBE63005A6D55 /* Build configuration list for PBXNativeTarget \"AFCacheTestTool\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t058339D6150CBE63005A6D55 /* Sources */,\n\t\t\t\t058339D7150CBE63005A6D55 /* Frameworks */,\n\t\t\t\t058339D8150CBE63005A6D55 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = AFCacheTestTool;\n\t\t\tproductName = AFCacheTestTool;\n\t\t\tproductReference = 058339DA150CBE63005A6D55 /* AFCacheTestTool.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t058339D1150CBE63005A6D55 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0420;\n\t\t\t\tORGANIZATIONNAME = \"artifacts Software GmbH & Co. KG\";\n\t\t\t};\n\t\t\tbuildConfigurationList = 058339D4150CBE63005A6D55 /* Build configuration list for PBXProject \"AFCacheTestTool\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 058339CF150CBE63005A6D55;\n\t\t\tproductRefGroup = 058339DB150CBE63005A6D55 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t058339D9150CBE63005A6D55 /* AFCacheTestTool */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t058339D8150CBE63005A6D55 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t058339E9150CBE63005A6D55 /* InfoPlist.strings in Resources */,\n\t\t\t\t058339F2150CBE63005A6D55 /* MainStoryboard.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t058339D6150CBE63005A6D55 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t058339EB150CBE63005A6D55 /* main.m in Sources */,\n\t\t\t\t058339EF150CBE63005A6D55 /* AppDelegate.m in Sources */,\n\t\t\t\t058339F5150CBE63005A6D55 /* MasterViewController.m in Sources */,\n\t\t\t\t058339F8150CBE63005A6D55 /* DetailViewController.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t058339E7150CBE63005A6D55 /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t058339E8150CBE63005A6D55 /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t058339F0150CBE63005A6D55 /* MainStoryboard.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t058339F1150CBE63005A6D55 /* en */,\n\t\t\t);\n\t\t\tname = MainStoryboard.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t058339F9150CBE63005A6D55 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 5.0;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 2;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t058339FA150CBE63005A6D55 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 5.0;\n\t\t\t\tOTHER_CFLAGS = \"-DNS_BLOCK_ASSERTIONS=1\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 2;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t058339FC150CBE63005A6D55 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"AFCacheTestTool/AFCacheTestTool-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"AFCacheTestTool/AFCacheTestTool-Info.plist\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t058339FD150CBE63005A6D55 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"AFCacheTestTool/AFCacheTestTool-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"AFCacheTestTool/AFCacheTestTool-Info.plist\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t058339D4150CBE63005A6D55 /* Build configuration list for PBXProject \"AFCacheTestTool\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t058339F9150CBE63005A6D55 /* Debug */,\n\t\t\t\t058339FA150CBE63005A6D55 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t058339FB150CBE63005A6D55 /* Build configuration list for PBXNativeTarget \"AFCacheTestTool\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t058339FC150CBE63005A6D55 /* Debug */,\n\t\t\t\t058339FD150CBE63005A6D55 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 058339D1150CBE63005A6D55 /* Project object */;\n}\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheTestTool-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFiles</key>\n\t<array/>\n\t<key>CFBundleIdentifier</key>\n\t<string>de.artifacts.${PRODUCT_NAME:rfc1034identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UIMainStoryboardFile</key>\n\t<string>MainStoryboard</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheTestTool-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'AFCacheTestTool' target in the 'AFCacheTestTool' project\n//\n\n#import <Availability.h>\n\n#ifndef __IPHONE_5_0\n#warning \"This project uses features only available in iOS SDK 5.0 and later.\"\n#endif\n\n#ifdef __OBJC__\n    #import <UIKit/UIKit.h>\n    #import <Foundation/Foundation.h>\n#endif\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheTestToolAppDelegate.h",
    "content": "//\n//  AppDelegate.h\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 11.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface AFCacheTestToolAppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n- (void)reinitIncomingResponses;\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheTestToolAppDelegate.m",
    "content": "//\n//  AppDelegate.m\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 11.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import \"AFCacheTestToolAppDelegate.h\"\n#import \"AFCache.h\"\n#import \"AFDebugHTTPURLProtocol.h\"\n#import \"MasterViewController.h\"\n\n@implementation AFCacheTestToolAppDelegate\n\n@synthesize window = _window;\n\n- (void)reinitIncomingResponses {\n    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;\n    UINavigationController *masterNavigationController = [splitViewController.viewControllers objectAtIndex:0];\n    MasterViewController *masterViewController = (MasterViewController*)masterNavigationController.topViewController;\n    masterViewController.incomingResponses = [[NSMutableArray alloc] init];\n    [masterViewController.tableView reloadData];\n    [AFDebugHTTPURLProtocol setDebugDelegate:masterViewController];\n}\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n    [NSURLProtocol registerClass:[AFDebugHTTPURLProtocol class]];\n    // Override point for customization after application launch.\n    [self reinitIncomingResponses];\n    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;\n    UINavigationController *navigationController = [splitViewController.viewControllers lastObject];\n    splitViewController.delegate = (id)navigationController.topViewController;\n    return YES;\n}\n\t\t\t\t\t\t\t\n- (void)applicationWillResignActive:(UIApplication *)application\n{\n    /*\n     Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n     Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n     */\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application\n{\n    /*\n     Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. \n     If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n     */\n}\n\n- (void)applicationWillEnterForeground:(UIApplication *)application\n{\n    /*\n     Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n     */\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application\n{\n    /*\n     Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n     */\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application\n{\n    /*\n     Called when the application is about to terminate.\n     Save data if appropriate.\n     See also applicationDidEnterBackground:.\n     */\n}\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheableItemCell.h",
    "content": "//\n//  AFCachableItemCell.h\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 12.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface AFCacheableItemCell : UITableViewCell\n\n@property (strong, nonatomic) IBOutlet UILabel *keyLabel;\n@property (strong, nonatomic) IBOutlet UILabel *valueLabel;\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFCacheableItemCell.m",
    "content": "//\n//  AFCachableItemCell.m\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 12.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import \"AFCacheableItemCell.h\"\n\n@implementation AFCacheableItemCell\n\n@synthesize keyLabel, valueLabel;\n\n- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier\n{\n    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];\n    if (self) {\n        // Initialization code\n    }\n    return self;\n}\n\n- (void)setSelected:(BOOL)selected animated:(BOOL)animated\n{\n    [super setSelected:selected animated:animated];\n\n    // Configure the view for the selected state\n}\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFDebugHTTPURLProtocol.h",
    "content": "//\n//  AFDebugHTTPURLProtocol.h\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 12.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import \"AFHTTPURLProtocol.h\"\n#import \"AFCache.h\"\n\nstatic id<AFCacheableItemDelegate> staticDebugDelegate;\n\n@interface AFDebugHTTPURLProtocol : AFHTTPURLProtocol\n\n+ (void)setDebugDelegate:(id<AFCacheableItemDelegate>)aDelegate;\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-iOS/AFDebugHTTPURLProtocol.m",
    "content": "//\n//  AFDebugHTTPURLProtocol.m\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 12.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import \"AFDebugHTTPURLProtocol.h\"\n\n@implementation AFDebugHTTPURLProtocol\n\n+ (void)setDebugDelegate:(id<AFCacheableItemDelegate>)aDelegate {\n    staticDebugDelegate = aDelegate;\n}\n\n- (void) connectionDidFail: (AFCacheableItem *) cacheableItem {\n    [staticDebugDelegate connectionDidFail: cacheableItem];\n    [super connectionDidFail:cacheableItem];\n}\n\n- (void) connectionDidFinish: (AFCacheableItem *) cacheableItem {\n    [staticDebugDelegate connectionDidFinish: cacheableItem];\n    [super connectionDidFinish:cacheableItem];\n}\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-iOS/DetailViewController.h",
    "content": "//\n//  DetailViewController.h\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 11.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface DetailViewController : UIViewController <UISplitViewControllerDelegate, UIWebViewDelegate, UITableViewDelegate, UITableViewDataSource>\n\n@property (strong, nonatomic) id detailItem;\n\n@property (strong, nonatomic) IBOutlet UILabel *detailDescriptionLabel;\n\n@property (strong, nonatomic) IBOutlet UIWebView *webView;\n\n@property (strong, nonatomic) IBOutlet UITableView *tableView;\n\n@property (strong, nonatomic) IBOutlet UILabel *cacheHitLabel;\n@property (strong, nonatomic) IBOutlet UILabel *imsLabel;\n\n- (IBAction)reloadAction:(id)sender;\n- (IBAction)clearCacheAction:(id)sender;\n- (IBAction)setOfflineAction:(id)sender;\n- (IBAction)requestCurrentCacheableItem:(id)sender;\n- (IBAction)persistCacheAction:(id)sender;\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-iOS/DetailViewController.m",
    "content": "//\n//  DetailViewController.m\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 11.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import \"DetailViewController.h\"\n#import \"AFCache.h\"\n#import \"AFCacheableItemCell.h\"\n#import \"AFCacheTestToolAppDelegate.h\"\n#import \"MasterViewController.h\"\n\nenum TableSections {\n    TableSectionCacheableItem = 0,\n    TableSectionCacheableItemInfo = 1,\n    TableSectionRequest = 2,\n    TableSectionResponse = 3,\n};\n\nenum TableRowsCacheableItem {\n    TableRowUrl,\n    TableRowPersistable,\n    TableRowIgnoreErrors,\n    TableRowError,\n    TableRowValidUntil,\n    TableRowCacheStatus,\n    TableRowUserData,\n    TableRowIsPackageArchive,\n    TableRowCurrentContentLength,\n    TableRowUsername,\n    TableRowPassword,\n    TableRowIsRevalidating,\n    TableRowIMSRequest,\n}; NSUInteger TableRowsCacheableItemNumberOfRows = 13;\n\nenum TableRowsCacheableItemInfo {\n    InfoRequestTimestamp,\n    InfoResponseTimestamp,\n    InfoServerDate,\n    InfoLastModified, \n    InfoAge, \n    InfoMaxAge, \n    InfoExpireDate, \n    InfoETag, \n    InfoStatusCode, \n    InfoContentLength, \n    InfoMimeType, \n    InfoResponseURL, \n    InfoRequest, \n    InfoResponse\n}; NSUInteger TableRowsCacheableItemInfoNumberOfRows = 14;\n\nNSUInteger TableRowsRequestNumberOfRows = 1;\nNSUInteger TableRowsResponseNumberOfRows = 1;\n\n@interface DetailViewController ()\n@property (strong, nonatomic) UIPopoverController *masterPopoverController;\n- (void)configureView;\n@end\n\n@implementation DetailViewController\n\n@synthesize detailItem = _detailItem;\n@synthesize detailDescriptionLabel = _detailDescriptionLabel;\n@synthesize masterPopoverController = _masterPopoverController;\n@synthesize webView = _webView;\n@synthesize tableView = _tableView;\n@synthesize cacheHitLabel = _cacheHitLabel;\n@synthesize imsLabel = _imsLabel;\n\n#pragma mark - Actions\n\n- (IBAction)reloadAction:(id)sender {\n    [((AFCacheTestToolAppDelegate*)[UIApplication sharedApplication].delegate) reinitIncomingResponses];\n        \n    //NSURL *url = [NSURL URLWithString:@\"http://www.artifacts.de/302a.html\"]; // this won't work in flight mode, don't know why yet\n    NSURL *url = [NSURL URLWithString:@\"http://www.artifacts.de/index_en.html\"]; // this one works (no redirect)\n\n    NSURLRequest *request = [NSURLRequest requestWithURL:url];\n    [_webView loadRequest:request];\n}\n\n#pragma mark - WebView delegate methods\n\n- (void)webViewDidFinishLoad:(UIWebView *)webView {\n    [self configureView];\n}\n\n#pragma mark - Managing the detail item\n\n- (void)setDetailItem:(id)newDetailItem\n{\n    if (_detailItem != newDetailItem) {\n        _detailItem = newDetailItem;\n        \n        // Update the view.\n        [self configureView];\n    }\n\n    if (self.masterPopoverController != nil) {\n        [self.masterPopoverController dismissPopoverAnimated:YES];\n    }        \n}\n\n- (void)configureView\n{    \n    // Update the user interface for the detail item.\n    if (![_detailItem isKindOfClass:[AFCacheableItem class]]) return;\n    AFCacheableItem *item = _detailItem;\n    \n    if (self.detailItem) {        \n        self.imsLabel.text = (item.IMSRequest != nil)?@\"YES\":@\"NO\";\n        self.cacheHitLabel.text = (item.servedFromCache==YES)?@\"YES\":@\"NO\";\n        [self.tableView reloadData];\n    }\n}\n\n- (void)didReceiveMemoryWarning\n{\n    [super didReceiveMemoryWarning];\n    // Release any cached data, images, etc that aren't in use.\n}\n\n#pragma mark - View lifecycle\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n\t// Do any additional setup after loading the view, typically from a nib.\n    [self configureView];\n}\n\n- (void)viewDidUnload\n{\n    [super viewDidUnload];\n    // Release any retained subviews of the main view.\n    // e.g. self.myOutlet = nil;\n}\n\n- (void)viewWillAppear:(BOOL)animated\n{\n    [super viewWillAppear:animated];\n}\n\n- (void)viewDidAppear:(BOOL)animated\n{\n    [super viewDidAppear:animated];\n}\n\n- (void)viewWillDisappear:(BOOL)animated\n{\n\t[super viewWillDisappear:animated];\n}\n\n- (void)viewDidDisappear:(BOOL)animated\n{\n\t[super viewDidDisappear:animated];\n}\n\n- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation\n{\n    // Return YES for supported orientations\n    return YES;\n}\n\n#pragma mark - Split view\n\n- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController\n{\n    barButtonItem.title = NSLocalizedString(@\"Master\", @\"Master\");\n    [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];\n    self.masterPopoverController = popoverController;\n}\n\n- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem\n{\n    // Called when the view is shown again in the split view, invalidating the button and popover controller.\n    [self.navigationItem setLeftBarButtonItem:nil animated:YES];\n    self.masterPopoverController = nil;\n}\n\n#pragma mark - Table View\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {\n    AFCacheableItem *cacheableItem = self.detailItem;\n    switch (section) {\n        case TableSectionCacheableItem:\n            return TableRowsCacheableItemNumberOfRows;\n            break;\n        case TableSectionCacheableItemInfo:\n            return TableRowsCacheableItemInfoNumberOfRows;\n            break;\n        case TableSectionRequest:\n            return [[[cacheableItem.info.request allHTTPHeaderFields] allValues] count];\n            break;\n        case TableSectionResponse:\n            if ([cacheableItem.info.response isKindOfClass:[NSHTTPURLResponse class]]) {\n                return [[[((NSHTTPURLResponse*)cacheableItem.info.response) allHeaderFields] allValues] count];\n            } else {\n                return 0;\n            }\n            break;            \n    }\n    return 0;\n}\n\n- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {\n    return 4;\n}\n\n- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {\n    static NSString *reuseIdentifier = @\"AFCacheableItemCell\";\n    AFCacheableItemCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];\n    AFCacheableItem *cacheableItem = self.detailItem;\n\n    if (cell == nil) {\n        cell = [[AFCacheableItemCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];\n    }\n    \n    cell.keyLabel.text = @\"\";\n    cell.valueLabel.text = @\"\";\n\n    switch (indexPath.section) {\n        case TableSectionCacheableItem:\n            switch (indexPath.row) {\n                case TableRowUrl:\n                    cell.keyLabel.text = @\"URL\";\n                    cell.valueLabel.text = [cacheableItem.url absoluteString];                     \n                    break;                    \n                case TableRowPersistable:                    \n                    cell.keyLabel.text = @\"Persistable\";\n                    cell.valueLabel.text = cacheableItem.persistable?@\"YES\":@\"NO\";\n                    break;                    \n                case TableRowIgnoreErrors:                    \n                    cell.keyLabel.text = @\"IgnoreErrors\";\n                    cell.valueLabel.text = cacheableItem.ignoreErrors?@\"YES\":@\"NO\";\n                    break;                    \n                case TableRowError:                    \n                    cell.keyLabel.text = @\"Error\";\n                    cell.valueLabel.text = [cacheableItem.error description];\n                    break;                    \n                case TableRowValidUntil:                    \n                    cell.keyLabel.text = @\"ValidUntil\";\n                    cell.valueLabel.text = [cacheableItem.validUntil description];\n                    break;                    \n                case TableRowCacheStatus:                    \n                    cell.keyLabel.text = @\"Cache Status\";\n                    cell.valueLabel.text = [NSString stringWithFormat:@\"%d\", cacheableItem.cacheStatus];\n                    break;                    \n                case TableRowUserData:                    \n                    cell.keyLabel.text = @\"UserData\";\n                    cell.valueLabel.text = cacheableItem.userData;\n                    break;                    \n                case TableRowIsPackageArchive:                    \n                    cell.keyLabel.text = @\"Is Package Archive\";\n                    cell.valueLabel.text = cacheableItem.isPackageArchive?@\"YES\":@\"NO\";\n                    break;                    \n                case TableRowCurrentContentLength:                    \n                    cell.keyLabel.text = @\"CurentContentLength\";\n                    cell.valueLabel.text = [NSString stringWithFormat:@\"%d\", cacheableItem.currentContentLength];\n                    break;                    \n                case TableRowUsername:                    \n                    cell.keyLabel.text = @\"Username\";\n                    cell.valueLabel.text = cacheableItem.username;\n                    break;                    \n                case TableRowPassword:                    \n                    cell.keyLabel.text = @\"Password\";\n                    cell.valueLabel.text = cacheableItem.password;\n                    break;                    \n                case TableRowIsRevalidating:                    \n                    cell.keyLabel.text = @\"Is Revalidating\";\n                    cell.valueLabel.text = cacheableItem.isRevalidating?@\"YES\":@\"NO\";\n                    break;                                       \n                case TableRowIMSRequest:\n                    cell.keyLabel.text = @\"If-Modified-Since Request\";\n                    cell.valueLabel.text = [cacheableItem.IMSRequest description];\n                    break;                                                           \n            }\n            break;\n        case TableSectionCacheableItemInfo:\n            switch (indexPath.row) {\n                case InfoRequestTimestamp:\n                    cell.keyLabel.text = @\"Request Timestamp\";\n                    cell.valueLabel.text = [NSString stringWithFormat:@\"%f\", cacheableItem.info.requestTimestamp];\n                    break;                    \n                case InfoResponseTimestamp:                    \n                    cell.keyLabel.text = @\"Response Timestamp\";\n                    cell.valueLabel.text = [NSString stringWithFormat:@\"%f\", cacheableItem.info.responseTimestamp];\n                    break;                    \n                case InfoServerDate:                    \n                    cell.keyLabel.text = @\"Server Date\";\n                    cell.valueLabel.text = [cacheableItem.info.serverDate description];\n                    break;                    \n                case InfoLastModified:                    \n                    cell.keyLabel.text = @\"Last Modified\";\n                    cell.valueLabel.text = [cacheableItem.info.lastModified description];\n                    break;                    \n                case InfoAge:                    \n                    cell.keyLabel.text = @\"Age\";\n                    cell.valueLabel.text = [NSString stringWithFormat:@\"%d\", cacheableItem.info.age];\n                    break;                    \n                case InfoMaxAge:                    \n                    cell.keyLabel.text = @\"Max Age\";\n                    cell.valueLabel.text = [NSString stringWithFormat:@\"%d\", cacheableItem.info.maxAge];\n                    break;                    \n                case InfoExpireDate:                    \n                    cell.keyLabel.text = @\"Expire Date\";\n                    cell.valueLabel.text = [cacheableItem.info.expireDate description];\n                    break;                    \n                case InfoETag:                    \n                    cell.keyLabel.text = @\"ETag\";\n                    cell.valueLabel.text = cacheableItem.info.eTag;\n                    break;                    \n                case InfoStatusCode:                    \n                    cell.keyLabel.text = @\"Status Code\";\n                    cell.valueLabel.text = [NSString stringWithFormat:@\"%d\", cacheableItem.info.statusCode];\n                    break;                    \n                case InfoContentLength:                    \n                    cell.keyLabel.text = @\"Content Length\";\n                    cell.valueLabel.text = [NSString stringWithFormat:@\"%d\", cacheableItem.info.contentLength];\n                    break;                    \n                case InfoMimeType:                    \n                    cell.keyLabel.text = @\"MimeType\";\n                    cell.valueLabel.text = cacheableItem.info.mimeType;\n                    break;                    \n                case InfoResponseURL:                    \n                    cell.keyLabel.text = @\"ResponseURL\";\n                    cell.valueLabel.text = [cacheableItem.info.responseURL absoluteString];\n                    break;                                       \n            }\n            break;\n        case TableSectionRequest:\n            cell.keyLabel.text = [[[cacheableItem.info.request allHTTPHeaderFields] allKeys] objectAtIndex:indexPath.row];\n            cell.valueLabel.text = [[cacheableItem.info.request allHTTPHeaderFields] valueForKey:cell.keyLabel.text];\n            break;\n        case TableSectionResponse:\n            if ([cacheableItem.info.response isKindOfClass:[NSHTTPURLResponse class]]) {\n                cell.keyLabel.text = [[[((NSHTTPURLResponse*)cacheableItem.info.response) allHeaderFields] allKeys] objectAtIndex:indexPath.row];\n                cell.valueLabel.text = [[((NSHTTPURLResponse*)cacheableItem.info.response) allHeaderFields] valueForKey:cell.keyLabel.text];\n            }\n            break;\n    }\n    return cell;\n}\n\n\n- (NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {\n    switch (section) {\n        case TableSectionCacheableItem:\n            return @\"Cachable Item\";\n            break;\n        case TableSectionCacheableItemInfo:\n            return @\"Cachable Item Info\";\n            break;\n        case TableSectionRequest:\n            return @\"Request\";\n            break;\n        case TableSectionResponse:\n            return @\"Response\";\n            break;\n    }\n    return nil;\n}\n\n- (IBAction)persistCacheAction:(id)sender {\n    [[AFCache sharedInstance] archive];\n}\n\n- (IBAction)clearCacheAction:(id)sender {\n    [[AFCache sharedInstance] invalidateAll];\n    [((AFCacheTestToolAppDelegate*)[UIApplication sharedApplication].delegate) reinitIncomingResponses];\n}\n\n- (IBAction)setOfflineAction:(id)sender {\n    UISwitch *theSwitch = sender;\n    BOOL offline = theSwitch.on;\n    [[AFCache sharedInstance] setOffline:offline];\n}\n\n- (IBAction)requestCurrentCacheableItem:(id)sender {\n    AFCacheableItem *cacheableItem = self.detailItem;\n    [self.webView loadRequest:[NSURLRequest requestWithURL: cacheableItem.url]];\n}\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-iOS/MasterViewController.h",
    "content": "//\n//  MasterViewController.h\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 11.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"AFCache.h\"\n\n@class DetailViewController;\n\n@interface MasterViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, AFCacheableItemDelegate>\n\n@property (strong, nonatomic) DetailViewController *detailViewController;\n@property (strong, nonatomic) IBOutlet UITableView *tableView;\n@property (strong, nonatomic) IBOutlet UISegmentedControl *displayMode;\n@property (strong, nonatomic) NSMutableArray *incomingResponses;\n@property (nonatomic, retain) NSString *path;\n\n- (IBAction)changeDisplayModeAction:(id)sender;\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-iOS/MasterViewController.m",
    "content": "//\n//  MasterViewController.m\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 11.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import \"MasterViewController.h\"\n#import \"DetailViewController.h\"\n\nenum TableRows {\n    TableRowShowURLProtocolTest = 0,\n    TableRowShowCacheBrowser = 1,\n};\n\nenum DisplayModes {\n    DisplayModeIcomingResponses = 0,\n    DisplayModeCacheBrowser = 1,\n};\n\n@implementation MasterViewController\n\n@synthesize detailViewController = _detailViewController;\n@synthesize tableView = _tableView;\n@synthesize displayMode = _displayMode;\n@synthesize incomingResponses = _incomingResponses;\n@synthesize path = _path;\n\n- (void)awakeFromNib\n{\n    //self.clearsSelectionOnViewWillAppear = NO;\n    self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0);\n    [super awakeFromNib];\n}\n\n- (void)didReceiveMemoryWarning\n{\n    [super didReceiveMemoryWarning];\n    // Release any cached data, images, etc that aren't in use.\n}\n\n#pragma mark - View lifecycle\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n    self.path = [[AFCache sharedInstance] dataPath];\n\n\t// Do any additional setup after loading the view, typically from a nib.\n    self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];\n//    [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionMiddle];\n}\n\n- (void)viewDidUnload\n{\n    [super viewDidUnload];\n    // Release any retained subviews of the main view.\n    // e.g. self.myOutlet = nil;\n}\n\n- (void)viewWillAppear:(BOOL)animated\n{\n    [super viewWillAppear:animated];\n}\n\n- (void)viewDidAppear:(BOOL)animated\n{\n    [super viewDidAppear:animated];\n}\n\n- (void)viewWillDisappear:(BOOL)animated\n{\n\t[super viewWillDisappear:animated];\n}\n\n- (void)viewDidDisappear:(BOOL)animated\n{\n\t[super viewDidDisappear:animated];\n}\n\n- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation\n{\n    // Return YES for supported orientations\n    return YES;\n}\n\n- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {    \n    switch (self.displayMode.selectedSegmentIndex) {\n        case DisplayModeCacheBrowser:\n        {\n            NSError *error = nil;\n            NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.path error:&error];\n            NSString *filename = [files objectAtIndex:indexPath.row];\n            NSString *nextPath = [self.path stringByAppendingPathComponent:filename];\n            \n            BOOL isDir = NO;\n            [[NSFileManager defaultManager] fileExistsAtPath:nextPath isDirectory: &isDir];\n            \n            if (isDir == YES) {\n                MasterViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@\"MasterViewController\"];    \n                [vc view];\n                [vc setPath:nextPath];\n                [vc.displayMode setSelectedSegmentIndex:DisplayModeCacheBrowser];\n                [vc.displayMode setHidden:YES];\n                [self.navigationController pushViewController:vc animated:YES];\n            } else {\n                DetailViewController *detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];\n                NSString *urlString = [nextPath stringByReplacingOccurrencesOfString:[[AFCache sharedInstance] dataPath] withString:@\"http:/\"];\n                NSURL *url = [NSURL URLWithString:urlString];\n                AFCacheableItem *cacheableItem = [[AFCache sharedInstance] cacheableItemFromCacheStore:url];\n                if (cacheableItem) {\n                    [detailViewController setDetailItem:cacheableItem];\n                }\n            }\n            break;\n        }\n        case DisplayModeIcomingResponses:\n        {\n            DetailViewController *detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];\n            AFCacheableItem *item = [self.incomingResponses objectAtIndex:indexPath.row];\n            [detailViewController setDetailItem:item];            \n            break;            \n        }\n    }\n    \n}\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {\n    switch (self.displayMode.selectedSegmentIndex) {\n        case DisplayModeCacheBrowser:\n        {\n            NSError *error = nil;\n            NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.path error:&error];\n            return [files count];            \n        }\n        break;\n        case DisplayModeIcomingResponses:\n            return [self.incomingResponses count];\n            break;            \n    }\n    return 0;\n}\n\n- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {\n    static NSString *reuseIdentifier = @\"ResponseCell\";\n    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];    \n    \n    if (cell == nil) {\n        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];\n    }\n\n    switch (self.displayMode.selectedSegmentIndex) {\n        case DisplayModeCacheBrowser:\n        {\n            NSError *error = nil;\n            NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.path error:&error];\n            NSString *filename = [files objectAtIndex:indexPath.row];\n            cell.textLabel.text = filename;\n            break;\n        }\n        case DisplayModeIcomingResponses:\n        {\n            AFCacheableItem *item = [self.incomingResponses objectAtIndex:indexPath.row];\n            cell.textLabel.text = [item.url lastPathComponent];\n            break;            \n        }\n    }\n\n    return cell;\n}\n\n- (void)connectionDidFail:(AFCacheableItem *)cacheableItem {\n    \n}\n\n- (void)connectionDidFinish:(AFCacheableItem *)cacheableItem {\n    [self.incomingResponses addObject:cacheableItem];\n    [self.tableView reloadData];\n}\n\n- (IBAction)changeDisplayModeAction:(id)sender {\n    [self.tableView reloadData];\n}\n\n@end\n"
  },
  {
    "path": "AFCacheTestTool-iOS/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "AFCacheTestTool-iOS/en.lproj/MainStoryboard.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"1.0\" toolsVersion=\"1938\" systemVersion=\"11D50d\" targetRuntime=\"iOS.CocoaTouch.iPad\" propertyAccessControl=\"none\" initialViewController=\"5\">\n    <dependencies>\n        <development defaultVersion=\"4200\" identifier=\"xcode\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"933\"/>\n    </dependencies>\n    <scenes>\n        <scene sceneID=\"14\">\n            <objects>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"13\" sceneMemberID=\"firstResponder\"/>\n                <navigationController id=\"3\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" id=\"6\">\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"9Oc-vN-djs\" kind=\"relationship\" relationship=\"rootViewController\" id=\"LfP-OA-dek\"/>\n                    </connections>\n                </navigationController>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-110\" y=\"-497\"/>\n        </scene>\n        <scene sceneID=\"16\">\n            <objects>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"15\" sceneMemberID=\"firstResponder\"/>\n                <viewController storyboardIdentifier=\"DetailViewController\" title=\"Detail\" id=\"4\" customClass=\"DetailViewController\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"26\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"703\" height=\"704\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <webView contentMode=\"scaleToFill\" id=\"cnn-pA-tmG\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"703\" height=\"345\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                <connections>\n                                    <outlet property=\"delegate\" destination=\"4\" id=\"BUJ-Dt-Qv8\"/>\n                                </connections>\n                            </webView>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"grouped\" separatorStyle=\"singleLineEtched\" rowHeight=\"44\" sectionHeaderHeight=\"10\" sectionFooterHeight=\"10\" id=\"GkE-L5-did\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"414\" width=\"703\" height=\"290\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMinY=\"YES\" heightSizable=\"YES\"/>\n                                <color key=\"backgroundColor\" cocoaTouchSystemColor=\"groupTableViewBackgroundColor\"/>\n                                <prototypes>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"blue\" hidesAccessoryWhenEditing=\"NO\" indentationLevel=\"1\" indentationWidth=\"0.0\" reuseIdentifier=\"AFCacheableItemCell\" id=\"CV2-Ak-krs\" customClass=\"AFCacheableItemCell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"54\" width=\"703\" height=\"46\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <view key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\">\n                                            <rect key=\"frame\" x=\"43\" y=\"1\" width=\"617\" height=\"43\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"Key\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" id=\"Rtz-j6-0jM\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"11\" width=\"179\" height=\"21\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"Value\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" id=\"nwf-Jq-MvJ\">\n                                                    <rect key=\"frame\" x=\"207\" y=\"11\" width=\"390\" height=\"21\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                            <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                        </view>\n                                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                        <connections>\n                                            <outlet property=\"keyLabel\" destination=\"Rtz-j6-0jM\" id=\"yPv-qN-wWK\"/>\n                                            <outlet property=\"valueLabel\" destination=\"nwf-Jq-MvJ\" id=\"fPX-t0-k1e\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                                <sections/>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"4\" id=\"gSH-Hp-vo1\"/>\n                                    <outlet property=\"delegate\" destination=\"4\" id=\"97l-AW-wvC\"/>\n                                </connections>\n                            </tableView>\n                            <toolbar opaque=\"NO\" clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"qki-fb-c6l\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"345\" width=\"703\" height=\"44\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMinY=\"YES\" flexibleMaxY=\"YES\"/>\n                                <items>\n                                    <barButtonItem title=\"Force Archive\" id=\"Nj6-fD-nbm\">\n                                        <connections>\n                                            <action selector=\"persistCacheAction:\" destination=\"4\" id=\"cKS-7O-HhC\"/>\n                                        </connections>\n                                    </barButtonItem>\n                                    <barButtonItem title=\"Clear Cache\" id=\"rbf-9x-BDe\">\n                                        <connections>\n                                            <action selector=\"clearCacheAction:\" destination=\"4\" id=\"h15-8K-s3l\"/>\n                                        </connections>\n                                    </barButtonItem>\n                                    <barButtonItem title=\"Send Request\" id=\"OIi-SO-Tng\">\n                                        <connections>\n                                            <action selector=\"requestCurrentCacheableItem:\" destination=\"4\" id=\"N5H-qv-6Wq\"/>\n                                        </connections>\n                                    </barButtonItem>\n                                    <barButtonItem style=\"plain\" systemItem=\"flexibleSpace\" id=\"5zS-q8-TRp\"/>\n                                    <barButtonItem title=\"Offline mode:\" style=\"plain\" id=\"5Dd-kJ-cCy\"/>\n                                    <barButtonItem style=\"plain\" id=\"dvw-J7-J4W\">\n                                        <switch key=\"customView\" opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" id=\"W88-Mn-STk\">\n                                            <rect key=\"frame\" x=\"612\" y=\"9\" width=\"79\" height=\"27\"/>\n                                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"setOfflineAction:\" destination=\"4\" eventType=\"touchUpInside\" id=\"yZH-JK-aB8\"/>\n                                            </connections>\n                                        </switch>\n                                    </barButtonItem>\n                                </items>\n                            </toolbar>\n                            <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"If-Modified-Since Request fired:\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" id=\"bd9-nH-0dk\">\n                                <rect key=\"frame\" x=\"473\" y=\"391\" width=\"174\" height=\"21\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\" flexibleMaxY=\"YES\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"12\"/>\n                                <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"NO\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" id=\"mOY-QT-4QX\">\n                                <rect key=\"frame\" x=\"655\" y=\"391\" width=\"28\" height=\"21\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\" flexibleMaxY=\"YES\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"12\"/>\n                                <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"Cache hit:\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" id=\"PI9-yn-xZF\">\n                                <rect key=\"frame\" x=\"368\" y=\"391\" width=\"61\" height=\"21\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\" flexibleMaxY=\"YES\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"12\"/>\n                                <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"NO\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" id=\"vAy-lQ-VC1\">\n                                <rect key=\"frame\" x=\"437\" y=\"391\" width=\"28\" height=\"21\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\" flexibleMaxY=\"YES\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"12\"/>\n                                <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                        <simulatedOrientationMetrics key=\"simulatedOrientationMetrics\" orientation=\"landscapeRight\"/>\n                    </view>\n                    <toolbarItems/>\n                    <navigationItem key=\"navigationItem\" title=\"DetailView\" id=\"52\">\n                        <barButtonItem key=\"rightBarButtonItem\" title=\"Load\" id=\"K3e-jL-amB\">\n                            <connections>\n                                <action selector=\"reloadAction:\" destination=\"4\" id=\"LV6-oH-sSq\"/>\n                            </connections>\n                        </barButtonItem>\n                    </navigationItem>\n                    <connections>\n                        <outlet property=\"cacheHitLabel\" destination=\"vAy-lQ-VC1\" id=\"FOO-y8-Sg9\"/>\n                        <outlet property=\"imsLabel\" destination=\"mOY-QT-4QX\" id=\"xVq-ot-5Nt\"/>\n                        <outlet property=\"tableView\" destination=\"GkE-L5-did\" id=\"sat-rq-f9H\"/>\n                        <outlet property=\"view\" destination=\"26\" id=\"ctb-En-6AP\"/>\n                        <outlet property=\"webView\" destination=\"cnn-pA-tmG\" id=\"V33-L2-Pye\"/>\n                    </connections>\n                </viewController>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-498\" y=\"442\"/>\n        </scene>\n        <scene sceneID=\"iMm-Ij-XuU\">\n            <objects>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"V4m-Oe-HIN\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n                <tableViewController storyboardIdentifier=\"CacheBrowserViewController\" id=\"YEM-KZ-RWs\" customClass=\"CacheBrowserViewController\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" rowHeight=\"44\" sectionHeaderHeight=\"22\" sectionFooterHeight=\"22\" id=\"DBz-Ic-Jxi\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"320\" height=\"704\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <simulatedOrientationMetrics key=\"simulatedOrientationMetrics\" orientation=\"landscapeRight\"/>\n                        <prototypes>\n                            <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"blue\" hidesAccessoryWhenEditing=\"NO\" indentationLevel=\"1\" indentationWidth=\"0.0\" id=\"ZiD-Ck-2KW\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"22\" width=\"320\" height=\"44\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <view key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"43\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                </view>\n                            </tableViewCell>\n                        </prototypes>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"YEM-KZ-RWs\" id=\"b1R-KT-zfQ\"/>\n                            <outlet property=\"delegate\" destination=\"YEM-KZ-RWs\" id=\"jaA-RO-29b\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" id=\"5GR-MU-LJV\"/>\n                </tableViewController>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1593\" y=\"-434\"/>\n        </scene>\n        <scene sceneID=\"18\">\n            <objects>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"17\" sceneMemberID=\"firstResponder\"/>\n                <splitViewController id=\"5\" sceneMemberID=\"viewController\">\n                    <toolbarItems/>\n                    <simulatedStatusBarMetrics key=\"simulatedStatusBarMetrics\" statusBarStyle=\"blackTranslucent\"/>\n                    <simulatedOrientationMetrics key=\"simulatedOrientationMetrics\" orientation=\"landscapeRight\"/>\n                    <connections>\n                        <segue destination=\"3\" kind=\"relationship\" relationship=\"masterViewController\" id=\"9\"/>\n                        <segue destination=\"42\" kind=\"relationship\" relationship=\"detailViewController\" id=\"53\"/>\n                    </connections>\n                </splitViewController>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-3261\" y=\"-505\"/>\n        </scene>\n        <scene sceneID=\"J10-4i-csX\">\n            <objects>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"fSY-e9-dXH\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n                <viewController storyboardIdentifier=\"MasterViewController\" id=\"9Oc-vN-djs\" customClass=\"MasterViewController\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"cyP-zq-f1a\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"320\" height=\"704\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                        <subviews>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" rowHeight=\"44\" sectionHeaderHeight=\"22\" sectionFooterHeight=\"22\" id=\"33y-bX-qO7\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"704\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"9Oc-vN-djs\" id=\"qFa-r3-TGI\"/>\n                                    <outlet property=\"delegate\" destination=\"9Oc-vN-djs\" id=\"RQR-GP-DdN\"/>\n                                </connections>\n                            </tableView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                        <simulatedOrientationMetrics key=\"simulatedOrientationMetrics\" orientation=\"landscapeRight\"/>\n                    </view>\n                    <navigationItem key=\"navigationItem\" id=\"KKa-P8-8d0\">\n                        <nil key=\"title\"/>\n                        <segmentedControl key=\"titleView\" opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" segmentControlStyle=\"bar\" selectedSegmentIndex=\"0\" id=\"3Nh-KG-wff\">\n                            <rect key=\"frame\" x=\"56\" y=\"7\" width=\"207\" height=\"30\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <segments>\n                                <segment title=\"Responses\"/>\n                                <segment title=\"Cache on Disk\"/>\n                            </segments>\n                            <connections>\n                                <action selector=\"changeDisplayModeAction:\" destination=\"9Oc-vN-djs\" eventType=\"valueChanged\" id=\"HXD-UQ-Lef\"/>\n                            </connections>\n                        </segmentedControl>\n                    </navigationItem>\n                    <connections>\n                        <outlet property=\"displayMode\" destination=\"3Nh-KG-wff\" id=\"2Uk-9E-mOe\"/>\n                        <outlet property=\"tableView\" destination=\"33y-bX-qO7\" id=\"VSi-wk-0OE\"/>\n                        <outlet property=\"view\" destination=\"cyP-zq-f1a\" id=\"B6c-P5-HfD\"/>\n                        <segue destination=\"YEM-KZ-RWs\" kind=\"push\" id=\"XoW-us-zRO\"/>\n                    </connections>\n                </viewController>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1042\" y=\"-569\"/>\n        </scene>\n        <scene sceneID=\"50\">\n            <objects>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"49\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n                <navigationController id=\"42\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" id=\"43\">\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"4\" kind=\"relationship\" relationship=\"rootViewController\" id=\"51\"/>\n                    </connections>\n                </navigationController>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-1636\" y=\"224\"/>\n        </scene>\n    </scenes>\n    <classes>\n        <class className=\"AFCacheableItemCell\" superclassName=\"UITableViewCell\">\n            <source key=\"sourceIdentifier\" type=\"project\" relativePath=\"./Classes/AFCacheableItemCell.h\"/>\n            <relationships>\n                <relationship kind=\"outlet\" name=\"keyLabel\" candidateClass=\"UILabel\"/>\n                <relationship kind=\"outlet\" name=\"valueLabel\" candidateClass=\"UILabel\"/>\n            </relationships>\n        </class>\n        <class className=\"DetailViewController\" superclassName=\"UIViewController\">\n            <source key=\"sourceIdentifier\" type=\"project\" relativePath=\"./Classes/DetailViewController.h\"/>\n            <relationships>\n                <relationship kind=\"action\" name=\"clearCacheAction:\"/>\n                <relationship kind=\"action\" name=\"persistCacheAction:\"/>\n                <relationship kind=\"action\" name=\"reloadAction:\"/>\n                <relationship kind=\"action\" name=\"requestCurrentCacheableItem:\"/>\n                <relationship kind=\"action\" name=\"setOfflineAction:\"/>\n                <relationship kind=\"outlet\" name=\"cacheHitLabel\" candidateClass=\"UILabel\"/>\n                <relationship kind=\"outlet\" name=\"detailDescriptionLabel\" candidateClass=\"UILabel\"/>\n                <relationship kind=\"outlet\" name=\"imsLabel\" candidateClass=\"UILabel\"/>\n                <relationship kind=\"outlet\" name=\"tableView\" candidateClass=\"UITableView\"/>\n                <relationship kind=\"outlet\" name=\"webView\" candidateClass=\"UIWebView\"/>\n            </relationships>\n        </class>\n        <class className=\"MasterViewController\" superclassName=\"UIViewController\">\n            <source key=\"sourceIdentifier\" type=\"project\" relativePath=\"./Classes/MasterViewController.h\"/>\n            <relationships>\n                <relationship kind=\"action\" name=\"changeDisplayModeAction:\"/>\n                <relationship kind=\"outlet\" name=\"displayMode\" candidateClass=\"UISegmentedControl\"/>\n                <relationship kind=\"outlet\" name=\"tableView\" candidateClass=\"UITableView\"/>\n            </relationships>\n        </class>\n    </classes>\n    <simulatedMetricsContainer key=\"defaultSimulatedMetrics\">\n        <simulatedStatusBarMetrics key=\"statusBar\" statusBarStyle=\"blackTranslucent\"/>\n        <simulatedOrientationMetrics key=\"orientation\"/>\n        <simulatedScreenMetrics key=\"destination\"/>\n    </simulatedMetricsContainer>\n</document>"
  },
  {
    "path": "AFCacheTestTool-iOS/main.m",
    "content": "//\n//  main.m\n//  AFCacheTestTool\n//\n//  Created by Michael Markowski on 11.03.12.\n//  Copyright (c) 2012 artifacts Software GmbH & Co. KG. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n#import \"AFCacheTestToolAppDelegate.h\"\n\nint main(int argc, char *argv[])\n{\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AFCacheTestToolAppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "AFCacheTestTool.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t054296C6150E17F60000A771 /* AFCacheableItemCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 054296C5150E17F60000A771 /* AFCacheableItemCell.m */; };\n\t\t054296C9150E4B080000A771 /* AFDebugHTTPURLProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = 054296C8150E4B080000A771 /* AFDebugHTTPURLProtocol.m */; };\n\t\t058339DF150CBE63005A6D55 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 058339DE150CBE63005A6D55 /* UIKit.framework */; };\n\t\t058339E1150CBE63005A6D55 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 058339E0150CBE63005A6D55 /* Foundation.framework */; };\n\t\t058339E3150CBE63005A6D55 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 058339E2150CBE63005A6D55 /* CoreGraphics.framework */; };\n\t\t058339E9150CBE63005A6D55 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 058339E7150CBE63005A6D55 /* InfoPlist.strings */; };\n\t\t058339EB150CBE63005A6D55 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 058339EA150CBE63005A6D55 /* main.m */; };\n\t\t058339EF150CBE63005A6D55 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 058339EE150CBE63005A6D55 /* AppDelegate.m */; };\n\t\t058339F2150CBE63005A6D55 /* MainStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 058339F0150CBE63005A6D55 /* MainStoryboard.storyboard */; };\n\t\t058339F5150CBE63005A6D55 /* MasterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 058339F4150CBE63005A6D55 /* MasterViewController.m */; };\n\t\t058339F8150CBE63005A6D55 /* DetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 058339F7150CBE63005A6D55 /* DetailViewController.m */; };\n\t\t05833A27150CC06C005A6D55 /* libAFCache-iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 05833A20150CC05C005A6D55 /* libAFCache-iOS.a */; };\n\t\t05833A29150CC088005A6D55 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05833A28150CC088005A6D55 /* SystemConfiguration.framework */; };\n\t\t05833A2B150CC249005A6D55 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 05833A2A150CC249005A6D55 /* libz.dylib */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t05833A1F150CC05C005A6D55 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 05833A16150CC05B005A6D55 /* AFCache-iOS.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 051B386D1328AACA0057F2F5;\n\t\t\tremoteInfo = \"AFCache-iOS\";\n\t\t};\n\t\t05833A21150CC05C005A6D55 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 05833A16150CC05B005A6D55 /* AFCache-iOS.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 051B387A1328AACA0057F2F5;\n\t\t\tremoteInfo = \"AFCache-iOSTests\";\n\t\t};\n\t\t05833A23150CC05C005A6D55 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 05833A16150CC05B005A6D55 /* AFCache-iOS.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 0566AE001332D6B500583E6A;\n\t\t\tremoteInfo = AFCacheDemo;\n\t\t};\n\t\t05833A25150CC068005A6D55 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 05833A16150CC05B005A6D55 /* AFCache-iOS.xcodeproj */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 051B386C1328AACA0057F2F5;\n\t\t\tremoteInfo = \"AFCache-iOS\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t054296C4150E17F60000A771 /* AFCacheableItemCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFCacheableItemCell.h; sourceTree = \"<group>\"; };\n\t\t054296C5150E17F60000A771 /* AFCacheableItemCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFCacheableItemCell.m; sourceTree = \"<group>\"; };\n\t\t054296C7150E4B080000A771 /* AFDebugHTTPURLProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFDebugHTTPURLProtocol.h; sourceTree = \"<group>\"; };\n\t\t054296C8150E4B080000A771 /* AFDebugHTTPURLProtocol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFDebugHTTPURLProtocol.m; sourceTree = \"<group>\"; };\n\t\t058339DA150CBE63005A6D55 /* AFCacheTestTool.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AFCacheTestTool.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t058339DE150CBE63005A6D55 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\t058339E0150CBE63005A6D55 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t058339E2150CBE63005A6D55 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };\n\t\t058339E6150CBE63005A6D55 /* AFCacheTestTool-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"AFCacheTestTool-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t058339E8150CBE63005A6D55 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t058339EA150CBE63005A6D55 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t058339EC150CBE63005A6D55 /* AFCacheTestTool-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"AFCacheTestTool-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t058339ED150CBE63005A6D55 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t058339EE150CBE63005A6D55 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t058339F1150CBE63005A6D55 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard.storyboard; sourceTree = \"<group>\"; };\n\t\t058339F3150CBE63005A6D55 /* MasterViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MasterViewController.h; sourceTree = \"<group>\"; };\n\t\t058339F4150CBE63005A6D55 /* MasterViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MasterViewController.m; sourceTree = \"<group>\"; };\n\t\t058339F6150CBE63005A6D55 /* DetailViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DetailViewController.h; sourceTree = \"<group>\"; };\n\t\t058339F7150CBE63005A6D55 /* DetailViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DetailViewController.m; sourceTree = \"<group>\"; };\n\t\t05833A16150CC05B005A6D55 /* AFCache-iOS.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; path = \"AFCache-iOS.xcodeproj\"; sourceTree = \"<group>\"; };\n\t\t05833A28150CC088005A6D55 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };\n\t\t05833A2A150CC249005A6D55 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t058339D7150CBE63005A6D55 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t05833A2B150CC249005A6D55 /* libz.dylib in Frameworks */,\n\t\t\t\t05833A29150CC088005A6D55 /* SystemConfiguration.framework in Frameworks */,\n\t\t\t\t058339DF150CBE63005A6D55 /* UIKit.framework in Frameworks */,\n\t\t\t\t05833A27150CC06C005A6D55 /* libAFCache-iOS.a in Frameworks */,\n\t\t\t\t058339E1150CBE63005A6D55 /* Foundation.framework in Frameworks */,\n\t\t\t\t058339E3150CBE63005A6D55 /* CoreGraphics.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t058339CF150CBE63005A6D55 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05833A2A150CC249005A6D55 /* libz.dylib */,\n\t\t\t\t05833A28150CC088005A6D55 /* SystemConfiguration.framework */,\n\t\t\t\t05833A16150CC05B005A6D55 /* AFCache-iOS.xcodeproj */,\n\t\t\t\t058339E4150CBE63005A6D55 /* AFCacheTestTool */,\n\t\t\t\t058339DD150CBE63005A6D55 /* Frameworks */,\n\t\t\t\t058339DB150CBE63005A6D55 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t058339DB150CBE63005A6D55 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t058339DA150CBE63005A6D55 /* AFCacheTestTool.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t058339DD150CBE63005A6D55 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t058339DE150CBE63005A6D55 /* UIKit.framework */,\n\t\t\t\t058339E0150CBE63005A6D55 /* Foundation.framework */,\n\t\t\t\t058339E2150CBE63005A6D55 /* CoreGraphics.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t058339E4150CBE63005A6D55 /* AFCacheTestTool */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t058339ED150CBE63005A6D55 /* AppDelegate.h */,\n\t\t\t\t058339EE150CBE63005A6D55 /* AppDelegate.m */,\n\t\t\t\t058339F0150CBE63005A6D55 /* MainStoryboard.storyboard */,\n\t\t\t\t058339F3150CBE63005A6D55 /* MasterViewController.h */,\n\t\t\t\t058339F4150CBE63005A6D55 /* MasterViewController.m */,\n\t\t\t\t058339F6150CBE63005A6D55 /* DetailViewController.h */,\n\t\t\t\t058339F7150CBE63005A6D55 /* DetailViewController.m */,\n\t\t\t\t058339E5150CBE63005A6D55 /* Supporting Files */,\n\t\t\t\t054296C4150E17F60000A771 /* AFCacheableItemCell.h */,\n\t\t\t\t054296C5150E17F60000A771 /* AFCacheableItemCell.m */,\n\t\t\t\t054296C7150E4B080000A771 /* AFDebugHTTPURLProtocol.h */,\n\t\t\t\t054296C8150E4B080000A771 /* AFDebugHTTPURLProtocol.m */,\n\t\t\t);\n\t\t\tpath = AFCacheTestTool;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t058339E5150CBE63005A6D55 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t058339E6150CBE63005A6D55 /* AFCacheTestTool-Info.plist */,\n\t\t\t\t058339E7150CBE63005A6D55 /* InfoPlist.strings */,\n\t\t\t\t058339EA150CBE63005A6D55 /* main.m */,\n\t\t\t\t058339EC150CBE63005A6D55 /* AFCacheTestTool-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05833A17150CC05B005A6D55 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05833A20150CC05C005A6D55 /* libAFCache-iOS.a */,\n\t\t\t\t05833A22150CC05C005A6D55 /* AFCache-iOSTests.octest */,\n\t\t\t\t05833A24150CC05C005A6D55 /* AFCacheDemo.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t058339D9150CBE63005A6D55 /* AFCacheTestTool */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 058339FB150CBE63005A6D55 /* Build configuration list for PBXNativeTarget \"AFCacheTestTool\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t058339D6150CBE63005A6D55 /* Sources */,\n\t\t\t\t058339D7150CBE63005A6D55 /* Frameworks */,\n\t\t\t\t058339D8150CBE63005A6D55 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t05833A26150CC068005A6D55 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = AFCacheTestTool;\n\t\t\tproductName = AFCacheTestTool;\n\t\t\tproductReference = 058339DA150CBE63005A6D55 /* AFCacheTestTool.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t058339D1150CBE63005A6D55 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0420;\n\t\t\t\tORGANIZATIONNAME = \"artifacts Software GmbH & Co. KG\";\n\t\t\t};\n\t\t\tbuildConfigurationList = 058339D4150CBE63005A6D55 /* Build configuration list for PBXProject \"AFCacheTestTool\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 058339CF150CBE63005A6D55;\n\t\t\tproductRefGroup = 058339DB150CBE63005A6D55 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 05833A17150CC05B005A6D55 /* Products */;\n\t\t\t\t\tProjectRef = 05833A16150CC05B005A6D55 /* AFCache-iOS.xcodeproj */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t058339D9150CBE63005A6D55 /* AFCacheTestTool */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\t05833A20150CC05C005A6D55 /* libAFCache-iOS.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libAFCache-iOS.a\";\n\t\t\tremoteRef = 05833A1F150CC05C005A6D55 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t05833A22150CC05C005A6D55 /* AFCache-iOSTests.octest */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = wrapper.cfbundle;\n\t\t\tpath = \"AFCache-iOSTests.octest\";\n\t\t\tremoteRef = 05833A21150CC05C005A6D55 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t05833A24150CC05C005A6D55 /* AFCacheDemo.app */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = wrapper.application;\n\t\t\tpath = AFCacheDemo.app;\n\t\t\tremoteRef = 05833A23150CC05C005A6D55 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t058339D8150CBE63005A6D55 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t058339E9150CBE63005A6D55 /* InfoPlist.strings in Resources */,\n\t\t\t\t058339F2150CBE63005A6D55 /* MainStoryboard.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t058339D6150CBE63005A6D55 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t058339EB150CBE63005A6D55 /* main.m in Sources */,\n\t\t\t\t058339EF150CBE63005A6D55 /* AppDelegate.m in Sources */,\n\t\t\t\t058339F5150CBE63005A6D55 /* MasterViewController.m in Sources */,\n\t\t\t\t058339F8150CBE63005A6D55 /* DetailViewController.m in Sources */,\n\t\t\t\t054296C6150E17F60000A771 /* AFCacheableItemCell.m in Sources */,\n\t\t\t\t054296C9150E4B080000A771 /* AFDebugHTTPURLProtocol.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t05833A26150CC068005A6D55 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"AFCache-iOS\";\n\t\t\ttargetProxy = 05833A25150CC068005A6D55 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t058339E7150CBE63005A6D55 /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t058339E8150CBE63005A6D55 /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t058339F0150CBE63005A6D55 /* MainStoryboard.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t058339F1150CBE63005A6D55 /* en */,\n\t\t\t);\n\t\t\tname = MainStoryboard.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t058339F9150CBE63005A6D55 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 5.0;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 2;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t058339FA150CBE63005A6D55 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 5.0;\n\t\t\t\tOTHER_CFLAGS = \"-DNS_BLOCK_ASSERTIONS=1\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 2;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t058339FC150CBE63005A6D55 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"AFCacheTestTool/AFCacheTestTool-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"AFCacheTestTool/AFCacheTestTool-Info.plist\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-all_load\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"../AFCache/**\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t058339FD150CBE63005A6D55 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"AFCacheTestTool/AFCacheTestTool-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"AFCacheTestTool/AFCacheTestTool-Info.plist\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-all_load\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"../AFCache/**\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t058339D4150CBE63005A6D55 /* Build configuration list for PBXProject \"AFCacheTestTool\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t058339F9150CBE63005A6D55 /* Debug */,\n\t\t\t\t058339FA150CBE63005A6D55 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t058339FB150CBE63005A6D55 /* Build configuration list for PBXNativeTarget \"AFCacheTestTool\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t058339FC150CBE63005A6D55 /* Debug */,\n\t\t\t\t058339FD150CBE63005A6D55 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 058339D1150CBE63005A6D55 /* Project object */;\n}\n"
  },
  {
    "path": "AFCacheTests/AFCacheTests-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>de.artifacts.${PRODUCT_NAME:rfc1034identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "AFCacheTests/AFCacheTests-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'AFCacheTests' target in the 'AFCacheTests' project\n//\n\n#ifdef __OBJC__\n    #import <Cocoa/Cocoa.h>\n#endif\n"
  },
  {
    "path": "AFCacheTests/AFCacheTests.h",
    "content": "//\n//  AFCacheTests.h\n//  AFCacheTests\n//\n//  Created by Michael Markowski on 11.03.11.\n//  Copyright 2011 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <SenTestingKit/SenTestingKit.h>\n\n\n@interface AFCacheTests : SenTestCase {\n@private\n    \n}\n\n@end\n"
  },
  {
    "path": "AFCacheTests/AFCacheTests.m",
    "content": "//\n//  AFCacheTests.m\n//  AFCacheTests\n//\n//  Created by Michael Markowski on 11.03.11.\n//  Copyright 2011 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import \"AFCacheTests.h\"\n#import \"AFCache.h\"\n#import \"AFCacheableItem.h\"\n\n@implementation AFCacheTests\n\n- (void)setUp\n{\n    [super setUp];\n            \n}\n\n- (void)tearDown\n{\n    // wait until archiving has been finished (default is 5s)\n    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:8.0]];    \n    \n    [super tearDown];\n}\n\n- (void)testCacheableItemBlocks_Success\n{\n    __block BOOL requestHandled = NO;\n    __block BOOL success = NO;\n    \n    [[AFCache sharedInstance] cachedObjectForURL:[NSURL URLWithString:@\"http://localhost/~mic/artifacts/img/images/af-base.png\"]\n                                 completionBlock: ^(AFCacheableItem* item) {\n                                     NSLog(@\"completed. item: %@\", item);\n                                     requestHandled = YES;\n                                     success = YES;\n                                 }\n                                       failBlock: ^(AFCacheableItem* item) {\n                                           NSLog(@\"failed. item: %@\", item);                                           \n                                           requestHandled = YES;                                           \n                                       }\n                                   progressBlock: ^(AFCacheableItem* item) {\n                                       NSLog(@\"progress. item: %@\", item);                                       \n                                   }\n                                         options: 0];\n    \n    while (!requestHandled)\n    {\n        [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];\n    }\n    STAssertTrue(success, @\"The request should have failed but did not - so the test fails.\");\n}\n\n- (void)ttttestCacheableItemBlocks_Fail\n{\n    __block BOOL requestHandled = NO;\n    __block BOOL failed = NO;\n    \n    [[AFCache sharedInstance] cachedObjectForURL:[NSURL URLWithString:@\"http://localhost/failed\"]\n                                 completionBlock: ^(AFCacheableItem* item) {\n                                     NSLog(@\"completed. item: %@\", item);\n                                     requestHandled = YES;\n                                 }\n                                       failBlock: ^(AFCacheableItem* item) {\n                                           NSLog(@\"failed. item: %@\", item);                                           \n                                           requestHandled = YES;\n                                           failed = YES;\n                                       }\n                                   progressBlock: ^(AFCacheableItem* item) {\n                                       NSLog(@\"progress. item: %@\", item);                                       \n                                   }\n                                         options: 0];\n    \n    while (!requestHandled)\n    {\n        [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];\n    }\n    STAssertTrue(failed, @\"The request should have failed but did not - so the test fails.\");\n}\n\n@end\n"
  },
  {
    "path": "AFCacheTests/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "AFCacheTests/iOS/AFCache-iOSTests-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>___VARIABLE_bundleIdentifierPrefix:bundleIdentifier___.${PRODUCT_NAME:rfc1034identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "AFCacheTests/iOS/AFCache-iOSTests-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'AFCache-iOSTests' target in the 'AFCache-iOSTests' project\n//\n\n#ifdef __OBJC__\n    #import <UIKit/UIKit.h>\n#endif\n"
  },
  {
    "path": "AFCacheTests/iOS/AFCache_iOSTests.h",
    "content": "//\n//  AFCache_iOSTests.h\n//  AFCache-iOSTests\n//\n//  Created by Michael Markowski on 10.03.11.\n//  Copyright 2011 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <SenTestingKit/SenTestingKit.h>\n\n\n@interface AFCache_iOSTests : SenTestCase {\n@private\n    \n}\n\n@end\n"
  },
  {
    "path": "AFCacheTests/iOS/AFCache_iOSTests.m",
    "content": "//\n//  AFCache_iOSTests.m\n//  AFCache-iOSTests\n//\n//  Created by Michael Markowski on 10.03.11.\n//  Copyright 2011 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import \"AFCache_iOSTests.h\"\n#import \"AFMediaTypeParser.h\"\n\n@implementation AFCache_iOSTests\n\n- (void)setUp\n{\n    [super setUp];\n    \n    // Set-up code here.\n}\n\n- (void)tearDown\n{\n    // Tear-down code here.\n    \n    [super tearDown];\n}\n\n- (void) testMIMEParsing\n{\n    AFMediaTypeParser* parser = [[AFMediaTypeParser alloc] initWithMIMEType:@\"text/html\"];\n\n    STAssertNil([parser textEncoding], @\"Text encoding is not nil\");\n    STAssertEqualObjects(parser.contentType, @\"text/html\", @\"content type is nil\");\n    [parser release];\n\n    parser = [[AFMediaTypeParser alloc] initWithMIMEType:@\"text/html; charset=utf-8\"];\n    STAssertEqualObjects(parser.textEncoding, @\"utf-8\", @\"text encoding is not utf-8\");\n    STAssertEqualObjects(parser.contentType, @\"text/html\", @\"content type is not text/html\");\n    [parser release];\n\n    parser = [[AFMediaTypeParser alloc] initWithMIMEType:@\"text/html;bla=foo;charset=utf-8;hello=world\"];\n    STAssertEqualObjects(parser.textEncoding, @\"utf-8\", @\"text encoding is not utf-8\");\n    STAssertEqualObjects(parser.contentType, @\"text/html\", @\"content type is not text/html\");\n    [parser release];\n}\n\n@end\n"
  },
  {
    "path": "AFCacheTests/iOS/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "CHANGES",
    "content": "Current version is Rev.0.7.1\n\n\n2011/03/07: (Michael Markowski, m.markowski@artifacts.de) \n- Requests resulting in a status code >= 400 will now by default call didFailLoading: instead of didFinishLoading:\nYou may change this behaviour by setting [AFCache sharedInstance].failOnStatusCodeAbove400=NO\n\n2011/02/08, v.0.7: (Michael Markowski, m.markowski@artifacts.de)\n- Moved master to pre0.7, deleted master, moved branch \"bip\" to master\nbefore moving, on branch bip:\n- Added AFPackageInfo to help the cache remembering about imported resources\n- Added macro AFLog for logging and removed most of the AFCACHE_LOGGING_ENABLED ifdefs\n\n2011/01/30, v.0.6.8: (Bjoern Kriews, bkr (0x40) jumper.org)\n- Added option to use (and embed) the EngineRoom framework for logging\n  this is work in progress - see EngineRoom.xcconfig\n  set CURRENT_PROJECT_VERSION in base.xcconfig, use it in Info.plist\n  base.xcconfig included by OSX framework targets\n  AFCache-OSX-release.xcconfig has ONLY_ACTIVE_ARCH (???)\n  \n2010/08/12:\n- Major overhaul so that\n  1.) all files are written to disk directly\n  2.) when data is requested, files are mapped into memory\n  3.) information about download status is stored as extended file attributes\n- added python test server, so we can easily simulate funny behaviour\n\n2010/08/10, v.0.6.6:\n- added some functionality to the packager\n- testet packaging process on real-world project\n- changed file naming pattern from hash to hostname/path/to/file.type\n- cache info store now uses the filename as a key, still needs some cleanup work\n- added Xcode Project configuration files for all targets\n- updated demo to demonstrate packaging\n\n2010/07/10, v.0.6.5:\n- Created new Xcode Project, I messed the old one up. Added targets for different architectures.\n- alpha of afcpkg commandline tool\n\n2010/07/10, v.0.6.4:\n- Fixed a bug when an If-Modified-Since Rrequest was fired to revalidate the cached object. The delegate method connectionDidFinish: was called twice.\n\n2010/07/10, v.0.6.3:\n- Added Framework target for OSX\n- Changed some ints to NSUInteger\n\n2010/07/07, v.0.6.2:\n- Removed asImage method in AFCache to get rid of UIKit dependency\n- Removed assertion in cacheableItemFromCacheStore: that caused a termination of the running application when cache info store and\nfilesystem became out of sync. Now just logging the error (if AFCACHE_LOGGING_ENABLED). There are still be some circumstances that lead to discrepancies between\nthe filesystem and the cache info dictionary that seem to be software bugs, but they should not force a termination of the running program. TODO: observe the logs and try\nfind out what is causing the cache info store not to be written.\n- Added Etag support.\n- Added Demo target\n- Added kHouskeepingInterval: housekeeping is only called every nth request\n- Added script to create FAT library for simulator and iOS\n\n2010/07/01. v.0.6.1:\n- Added AFURLCache contribution by Nico Schmidt.\n- Fixed several flaws when dealing with different combinations of http headers\n- Added storeCachedResponse:forRequest: to AFURLCache. Not implemented yet, just checking if method is called for all requests. Unfortunately this method is NOT called for implicit requests, e.g. <img src=\"...\"/>. Would be the ideal place to fill the cache.\n- added housekeeping: in AFCache class which is called when saving the cache's state (via archive:)\n\n\n2010/04/28: \n- Started versioning in with v.0.6.\n- Transformed the classes into a static library and set up an Xcode Project\n- Added unit tests for the following response types: \n\t- with expire header\n\t- with max-age header\n\t- with out expire or max-age\n\t- with expire header, while switching the cache into offline mode and back\t\n- Added php script for use in unit tests\n- Added AFCacheableItemInfo to hold requestTimestamp, responseTimestamp, serverDate, lastModified, age, maxAge, and expireDate\n- Renamed expireDates dictionary in AFCache.m to cacheInfoStore\n- cacheInfoStore now stores AFCacheableItemInfo objects instead of NSDate objects holding the expire date, which enables the correct use of AFCache.m's \"isFresh:\" method\n- Removed some hacks for using the cache offline and introduced an \"offline mode\"\n- Now doing an If-Modified-Since request if object is stale instead of doing a regular request which then might be canceled. Though we were not doing an additional request with the old method,\n  packets were transferred through the network to be dropped by the kernel's tcp stack which costs unnessessary bandwidth.\n- Introduced cacheStatus in AFCacheableItem to hold one of the following statuses: \t\n\tkCacheStatusNew: object is new, was not in cache before\n\tkCacheStatusFresh: object is delivered from cache\n\tkCacheStatusModified: object is in cache, but stale. An If-Modified-Since request was made to check the validity of the cached object. IMS request returns 200 (object has been modified).\n\tkCacheStatusNotModified: object is in cache, but stale. An If-Modified-Since request was made to check the validity of the cached object. IMS request returns 304 (object has NOT been modified).\n\tkCacheStatusRevalidationPending: used internally to determinate how to handle the status code of a pending request.\n- cleaned up code and reformatted it\n- Refactored NSDate+Parsing to DateParser because of Problems using categories from a static library in unit tests\n- Added documentation\n- Added CHANGES document\n"
  },
  {
    "path": "LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"Legal Entity\" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, \"control\" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"Object\" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.\n\n\"Work\" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).\n\n\"Derivative Works\" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.\n\n\"Contribution\" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, \"submitted\" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as \"Not a Contribution.\"\n\n\"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and\nIf the Work includes a \"NOTICE\" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. \n\nYou may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.\n5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\n"
  },
  {
    "path": "README.markdown",
    "content": "## Current Version\n\n0.9.10\n\n## Current active branch\n\ndevelop\n\n## What is AFCache?\n\nAFCache is an HTTP disk cache for use on iPhone/iPad and OSX.\nIt can be linked as a static library or as a framework.\nThe cache was initially written because on iOS, NSURLCache ignores NSURLCacheStorageAllowed \nand instead treats it as NSURLCacheStorageAllowedInMemoryOnly which is pretty \nuseless for a persistent cache.\n\n## Goals\n\n * Build a fully RFC2616 compliant cache instead of doing simple time-based caching\n   **Status: Works for general use, some edge cases might not be compliant/implemented yet.**\n\n * Provide an offline mode to deliver content from cache when no network is available\n   **Status: Works fine**\n\n * Provide a packaging mechanism to pre-populate the cache for accessing content offline\n   **Status: Works fine and is used in several real-world apps. A packaging-tool exists in two flavours: Obj-C and python.**\n\n * Allow caching of UIWebView resources by overriding NSURLCache\n   **Status: Works, but since iOS4 there's some trouble with AJAX requests. Might be due to an iOS Bug.**\n\n## Sounds like something I need. Where can I get documentation?\n\nGood question ;) Documentation is always lacking, but you may check the [FAQ](https://github.com/artifacts/AFCache/wiki/FAQ) first.\nIn the AFCache-iOS Xcode-project you'll find example controllers that use AFCache in different ways.\n\nSee CHANGES for release notes.\n\n## History\n\n* Started with master on github after AFCache was already used in some apps.\n* Branched to \"bip\" for two large projects (iOS and OSX) where AFCache was tested quite \n  thorough and gained a lot of it's maturity (e.g. caching on disk, packaging, authentication).\n* Added \"engine room\" for logging (OPTIONAL) in branch bip: https://github.com/bkrpub/EngineRoom\n* dropped old master, saved it as branch \"pre0.7\"\n* moved \"bip\" branch to master, bip might be dropped in the future or might be a playground for new features\n\n## API\n\nThe API has changed from master to branch bip, but it should be easy to migrate.\nThe old master branch moved to branch \"pre0.7\", but I strongly suggest you to move ahead and migrate to the new master.\n\n## Project status\n\nAFCache is used in several iPhone applications in several versions. It is constantly evolving and\ntherefore considered beta. \n\nDone: <strike>Currently I am doing some major changes and additions like a packaging tool and testing it on two \nlarge real-world projects (iPhone and OSX apps).</strike>\nDone: <strike>After sucessfully integrating AFCache into these projects I'll extend the demos and some documentation to\nmake it a useful library for the public. The test cases are (still) not maintained very well.</strike>\n\n## Branches\n\n* master: currently up to date with develop (0.9.9)\n\nOutdated:\n\n* Every other than develop\n\n## Logging\n\nLogging is achieved via an AFLog macro which is either\n\n* just a replacement for NSLog (or nothing if undef'd)\n* a logpoint for EngineRoom, a sophisticated logging framework that enables dynamic logging manipulation at runtime,\n  From the EngineRoom docs:\n  The basic idea is to make the log message a first class citizen.\n  LogPoints are data structures which can be manipulated (i.e. enabled / disabled) at runtime.\n  This is achieved by creating static structures in a separate linker segment.\n  \n  You may checkout EngineRoom here (https://github.com/bkrpub/EngineRoom) and link AFCache against\n  it by defining USE_ENGINEROOM and adding EngineRoom-OSX.xcodeproj to your project. \n\n## Issues (Open)\n\n* Displacement strategy: still commented out, is on top of the refactoring list\n* Package file handling strategy not completely clear. Right now, a package is removed right after extracting. One might want to track which packages have been extracted yet. This also has to play nice with the file displacement strategy.\n\n* still very unhappy with the cleanup method. Need a clever displacement algorithm here.\n* the code to determine cache file size on disk is commented out, because there's a bug in it. Don't use this release for production.\n\n* synchronized requests are not testet well\n* instead of using a php script for the server part, an integrated http server for unit testing might be better. Maybe also mock objects for NSResponse objects could do it.\n* Maybe the mimetype should be added to the manifest file?\n* Make encryption optional. Right now, there's encryption code in the zip classes.\n\n## Issues (Done)\n\n* Big file should be streamed to disk directly instead of holding them in an AFCacheableItem in memory.\n* The OSX framework and the iOS library are now seperate Xcode-projects, which is less hassle.\n\n## Anatomy of the manifest file\n\nThe manifest.afcache file contains an entry for every file contained in the archive. One entry looks like this:\n\nURL ; last-modified ; expires\\n ; mimetype\n\nNote the delimiter, which is \" ; \" (space semicolon space)\nThe mimetype is optional.\n\nExample:\n\nhttp://upload.wikimedia.org/wikipedia/commons/6/63/Wikipedia-logo.png ; Sat, 27 Mar 2004 18:43:30 GMT+00:00 ; Thu, 29 Jul 2010 14:17:20 GMT+00:00 ; text/html\n\nThe URL MUST ne properly encoded and MUST NOT contain a hash at the end or parameters.\n\nSince the file path is calculated based on the URL, it's not necessary to include it in the manifest file.\nThe dates have to be formatted according to rfc1123. Example: \"Wed, 01 Mar 2006 12:00:00 GMT\"\n\n## Anatomy of the package zip file\n\nThe zip file structure resembles the URL:\n\nhostname/path/to/file.suffix\nThe zip file contains all files collected by the packager and the manifest file. Optionally, it includes userdata.\n\n## Build notes when using AFCache in your project\n\nYou need to link to SystemConfiguration.framework and libz.dylib to compile.\nSince AFCache uses Objective-C Categories, you need to add the following options to the linker (Targets/YourProject, Info, Build Settings: \"Other linker flags\")\n-ObjC\n-all_load\n\nFor more information see: http://developer.apple.com/mac/library/qa/qa2006/qa1490.html\n\n\n## How to run the unit tests (outdated)\n\nThe unit tests currently depend on an existing HTTP-Server e.g. Apache. A simple php script\nis provided to answer the requests properly. Put the script on your htdocs directory and\nconfigure the URL in LogicTests.m, e.g.\n\nstatic NSString *kBaseURL = @\"http://127.0.0.1/~mic/afcache/\";\n\nFor more information see CHANGES.\n\nI am frequently using Charles as an HTTP debugging proxy which is superb for finding irregularities.\nhttp://www.charlesproxy.com/\n\n\n## Copyright\n\nCopyright 2008, 2009, 2010, 2011, 2012, 2013 Artifacts - Fine Software Development\n\nhttp://www.artifacts.de\n\nAuthors: \nMichael Markowski (m.markowski@artifacts.de)\nLars Blumberg\nSebastian Grimme\nClaus Weymann\n\nNico Schmidt (Savoy Software)\nBjörn Kriews (bkr (0x40) jumper.org)\nChristian Menschel (post at cmenschel.de)\n\n## License\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n"
  },
  {
    "path": "configs/EngineRoom.xcconfig",
    "content": "// CFLAGS must be non-empty because of an Xcode bug as of 3.2.5 - may not even contain leading or trailing spaces\nENGINEROOM_CFLAGS = \"-DDONT_USE_ENGINEROOM\"\nENGINEROOM_LDFLAGS = \"\"\n\n//\n// uncomment the lines below to build against EngineRoom\n//\n// EngineRoom sources must be located beneath the AFCache sources\n// you must use a shared build directory and EngineRoom must\n// already be built as \"Debug\" and/or \"Release\" as needed\n// this is a bit complicated because I didn't want to mess up \n// AFCache with the dependency. \n// \n// A better approach could be to modify the \"Build All\" target\n// in AFCache to: recognize EngineRoom availablity and to use xcodebuild\n// to build EngineRoom with the correct configuration and then \n// AFCache itself defining these build settings on the commandline.\n// This could also allow for including a (possibly unsatisfied)\n// reference to EngineRoom as a subproject.\n//\n//\n// If you come up with a better approach to conditionally build a framework \n// against another one: please let me know. Thanks.\n//\n// Bjoern Kriews - bkr (0x40) jumper.org\n// \n\n\n// Current solution: these settings are overridden by the AFCacheOSX-EngineRoom target\n// if EngineRoom is available in ../EngineRoom\n\n//ENGINEROOM_CFLAGS = \"-DUSE_ENGINEROOM -DER_EMBEDDED_NAME=AFCache\"\n//ENGINEROOM_LDFLAGS = \"-weak_framework EngineRoom\"\n"
  },
  {
    "path": "configs/base.xcconfig",
    "content": "CURRENT_PROJECT_VERSION=0.7.1\n\nARCHS = $(ARCHS_STANDARD_32_64_BIT)\n//SDKROOT = macosx10.6 // don't define SDKROOT here or you will run into an xcode bug. that's what was told me ;)\nONLY_ACTIVE_ARCH = YES\nPREBINDING = NO\nGCC_OPTIMIZATION_LEVEL = 0\nGCC_C_LANGUAGE_STANDARD = gnu99\nGCC_WARN_ABOUT_RETURN_TYPE = YES\nGCC_WARN_UNUSED_VARIABLE = YES\n"
  },
  {
    "path": "configs/debug/AFCache-OSX-debug.xcconfig",
    "content": "#include \"../Base.xcconfig\"\n\nONLY_ACTIVE_ARCH = YES\nINSTALL_PATH = $(HOME)/Library/Frameworks\nCOPY_PHASE_STRIP = NO\nDYLIB_COMPATIBILITY_VERSION = 1\nDYLIB_CURRENT_VERSION = 1\nFRAMEWORK_VERSION = A\nINFOPLIST_FILE = Info.plist\nPRODUCT_NAME = AFCache\nWRAPPER_EXTENSION = framework\nALWAYS_SEARCH_USER_PATHS = NO\nGCC_ENABLE_FIX_AND_CONTINUE = YES\nGCC_DYNAMIC_NO_PIC = NO\nGCC_MODEL_TUNING = G5\nGCC_OPTIMIZATION_LEVEL = 0\nGCC_PRECOMPILE_PREFIX_HEADER = YES\nGCC_PREFIX_HEADER = AFCache_Prefix.pch\n\n#include \"../EngineRoom.xcconfig\"\nOTHER_CFLAGS = $(ENGINEROOM_CFLAGS)\nOTHER_LDFLAGS = $(ENGINEROOM_LDFLAGS)\n"
  },
  {
    "path": "configs/debug/AFCache-iOS-debug.xcconfig",
    "content": "SDKROOT = iphoneos\nCOPY_PHASE_STRIP = NO\nPREBINDING = NO\nPRODUCT_NAME = AFCache\nALWAYS_SEARCH_USER_PATHS = NO\nGCC_DYNAMIC_NO_PIC = NO\nGCC_OPTIMIZATION_LEVEL = 0\nONLY_ACTIVE_ARCH = NO\nAFCACHE_LOGGING_ENABLED = YES\n"
  },
  {
    "path": "configs/debug/AFCacheDemoiOS-debug.xcconfig",
    "content": "SDKROOT = iphoneos\nCODE_SIGN_IDENTITY = iPhone Developer\nINSTALL_PATH = $(HOME)/Applications\nCOPY_PHASE_STRIP = NO\nOTHER_LDFLAGS = -all_load -ObjC -framework Foundation -framework UIKit\nPREBINDING = NO\nINFOPLIST_FILE = AFCacheDemoiOS-Info.plist\nPRODUCT_NAME = AFCacheDemoiOS\nALWAYS_SEARCH_USER_PATHS = NO\nGCC_DYNAMIC_NO_PIC = NO\nGCC_OPTIMIZATION_LEVEL = 0\nGCC_PRECOMPILE_PREFIX_HEADER = YES\nGCC_PREFIX_HEADER = $(SYSTEM_LIBRARY_DIR)/Frameworks/UIKit.framework/Headers/UIKit.h\n"
  },
  {
    "path": "configs/debug/AFCacheStatic-OSX-debug.xcconfig",
    "content": "INSTALL_PATH = /usr/local/lib\nCOPY_PHASE_STRIP = NO\nOTHER_LDFLAGS = -all_load -ObjC -framework Foundation -framework AppKit\nPREBINDING = NO\nPRODUCT_NAME = AFCacheOSXStatic\nALWAYS_SEARCH_USER_PATHS = NO\nGCC_ENABLE_FIX_AND_CONTINUE = YES\nGCC_DYNAMIC_NO_PIC = NO\nGCC_MODEL_TUNING = G5\nGCC_OPTIMIZATION_LEVEL = 0\n//GCC_PRECOMPILE_PREFIX_HEADER = NO\n//GCC_PREFIX_HEADER = $(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h\n"
  },
  {
    "path": "configs/debug/afcpkg-debug.xcconfig",
    "content": "INSTALL_PATH = /usr/local/bin\nCOPY_PHASE_STRIP = NO\nOTHER_LDFLAGS = -framework Foundation -framework AppKit -ObjC -all_load\nPREBINDING = NO\nINFOPLIST_FILE = afcpkg.plist\nPRODUCT_NAME = afcpkg\nALWAYS_SEARCH_USER_PATHS = NO\nGCC_ENABLE_FIX_AND_CONTINUE = YES\nGCC_DYNAMIC_NO_PIC = NO\nGCC_MODEL_TUNING = G5\nGCC_OPTIMIZATION_LEVEL = 0\nGCC_PRECOMPILE_PREFIX_HEADER = YES\nGCC_PREFIX_HEADER = $(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h\n"
  },
  {
    "path": "configs/debug/createFatLib-iOS.xcconfig",
    "content": "COPY_PHASE_STRIP = NO\nGCC_DYNAMIC_NO_PIC = NO\nGCC_OPTIMIZATION_LEVEL = 0\nPRODUCT_NAME = createFatLib-iOS\n"
  },
  {
    "path": "configs/debug/testafcache-debug.xcconfig",
    "content": "//\n//  testafcache-debug.xcconfig\n//  AFCache\n//\n//  Created by neonico on 8/12/10.\n//  Copyright 2010 __MyCompanyName__. All rights reserved.\n//\n\nPRODUCT_NAME = testafcache\nGCC_PREPROCESSOR_DEFINITIONS = AFCACHE_LOGGING_ENABLED\n\nCOPY_PHASE_STRIP = NO\nGCC_DYNAMIC_NO_PIC = NO\nGCC_OPTIMIZATION_LEVEL = 0\n"
  },
  {
    "path": "configs/release/AFCache-OSX-release.xcconfig",
    "content": "#include \"../base.xcconfig\"\n\nONLY_ACTIVE_ARCH = YES\nDEBUG_INFORMATION_FORMAT = dwarf-with-dsym\nINSTALL_PATH = @executable_path/../Frameworks\nDYLIB_COMPATIBILITY_VERSION = 1\nDYLIB_CURRENT_VERSION = 1\nFRAMEWORK_VERSION = A\nINFOPLIST_FILE = Info.plist\nPRODUCT_NAME = AFCache\nWRAPPER_EXTENSION = framework\nALWAYS_SEARCH_USER_PATHS = NO\nGCC_MODEL_TUNING = G5\nGCC_PRECOMPILE_PREFIX_HEADER = YES\nGCC_PREFIX_HEADER = AFCache_Prefix.pch\n\n#include \"../EngineRoom.xcconfig\"\nOTHER_CFLAGS = $(ENGINEROOM_CFLAGS)\nOTHER_LDFLAGS = $(ENGINEROOM_LDFLAGS)\n"
  },
  {
    "path": "configs/release/AFCache-iOS-release.xcconfig",
    "content": "SDKROOT = iphoneos\nDEBUG_INFORMATION_FORMAT = dwarf-with-dsym\nCOPY_PHASE_STRIP = YES\nPREBINDING = NO\nPRODUCT_NAME = AFCache\nALWAYS_SEARCH_USER_PATHS = NO\nGCC_ENABLE_FIX_AND_CONTINUE = NO\nZERO_LINK = NO\n"
  },
  {
    "path": "configs/release/AFCacheDemoiOS-release.xcconfig",
    "content": "SDKROOT = iphoneos\nDEBUG_INFORMATION_FORMAT = dwarf-with-dsym\nCODE_SIGN_IDENTITY = iPhone Developer\nINSTALL_PATH = $(HOME)/Applications\nCOPY_PHASE_STRIP = YES\nOTHER_LDFLAGS = -framework Foundation -framework UIKit\nPREBINDING = NO\nINFOPLIST_FILE = AFCacheDemoiOS-Info.plist\nPRODUCT_NAME = AFCacheDemoiOS\nALWAYS_SEARCH_USER_PATHS = NO\nGCC_ENABLE_FIX_AND_CONTINUE = NO\nGCC_PRECOMPILE_PREFIX_HEADER = YES\nGCC_PREFIX_HEADER = $(SYSTEM_LIBRARY_DIR)/Frameworks/UIKit.framework/Headers/UIKit.h\nZERO_LINK = NO\n"
  },
  {
    "path": "configs/release/AFCacheStatic-OSX-release.xcconfig",
    "content": "INSTALL_PATH = /usr/local/lib\nCOPY_PHASE_STRIP = NO\nOTHER_LDFLAGS = -all_load -ObjC -framework Foundation\nPREBINDING = NO\nPRODUCT_NAME = AFCacheOSXStatic\nALWAYS_SEARCH_USER_PATHS = NO\nGCC_ENABLE_FIX_AND_CONTINUE = YES\nGCC_DYNAMIC_NO_PIC = NO\nGCC_MODEL_TUNING = G5\nGCC_OPTIMIZATION_LEVEL = 0\n"
  },
  {
    "path": "configs/release/afcpkg-release.xcconfig",
    "content": "DEBUG_INFORMATION_FORMAT = dwarf-with-dsym\nINSTALL_PATH = /usr/local/bin\nCOPY_PHASE_STRIP = YES\nOTHER_LDFLAGS = -framework Foundation -framework AppKit\nPREBINDING = NO\nINFOPLIST_FILE = afcpkg.plist\nPRODUCT_NAME = afcpkg\nALWAYS_SEARCH_USER_PATHS = NO\nGCC_ENABLE_FIX_AND_CONTINUE = NO\nGCC_MODEL_TUNING = G5\nGCC_PRECOMPILE_PREFIX_HEADER = YES\nGCC_PREFIX_HEADER = $(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h\nZERO_LINK = NO\n"
  },
  {
    "path": "configs/release/createFatLib-release-iOS.xcconfig",
    "content": "COPY_PHASE_STRIP = YES\nDEBUG_INFORMATION_FORMAT = dwarf-with-dsym\nGCC_ENABLE_FIX_AND_CONTINUE = NO\nPRODUCT_NAME = createFatLib-iOS\nZERO_LINK = NO\n"
  },
  {
    "path": "configs/release/testafcache-release.xcconfig",
    "content": "//\n//  testafcache-debug.xcconfig\n//  AFCache\n//\n//  Created by neonico on 8/12/10.\n//  Copyright 2010 __MyCompanyName__. All rights reserved.\n//\n\nPRODUCT_NAME = testafcache\nGCC_PREPROCESSOR_DEFINITIONS = AFCACHE_LOGGING_ENABLED\n\nCOPY_PHASE_STRIP = NO\nGCC_DYNAMIC_NO_PIC = NO\nGCC_OPTIMIZATION_LEVEL = 0\n"
  },
  {
    "path": "material/document-icon",
    "content": "%PDF-1.5\r%\r\n1 0 obj\r<</Metadata 25 0 R/Pages 2 0 R/OCProperties<</D<</RBGroups[]/ON[13 0 R]/Order 12 0 R>>/OCGs[13 0 R]>>/Type/Catalog>>\rendobj\r25 0 obj\r<</Subtype/XML/Length 17021/Type/Metadata>>stream\r\n<?xpacket begin=\"﻿\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?>\n<x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"Adobe XMP Core 4.1-c036 46.277092, Fri Feb 23 2007 14:16:18        \">\n   <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n      <rdf:Description rdf:about=\"\"\n            xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n         <dc:format>application/pdf</dc:format>\n         <dc:title>\n            <rdf:Alt>\n               <rdf:li xml:lang=\"x-default\">document-icon</rdf:li>\n            </rdf:Alt>\n         </dc:title>\n      </rdf:Description>\n      <rdf:Description rdf:about=\"\"\n            xmlns:xap=\"http://ns.adobe.com/xap/1.0/\"\n            xmlns:xapGImg=\"http://ns.adobe.com/xap/1.0/g/img/\">\n         <xap:CreatorTool>Adobe Illustrator CS3</xap:CreatorTool>\n         <xap:CreateDate>2010-11-24T13:39:17+01:00</xap:CreateDate>\n         <xap:ModifyDate>2010-11-24T13:39:17+01:00</xap:ModifyDate>\n         <xap:MetadataDate>2010-11-24T13:39:17+01:00</xap:MetadataDate>\n         <xap:Thumbnails>\n            <rdf:Alt>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <xapGImg:width>196</xapGImg:width>\n                  <xapGImg:height>256</xapGImg:height>\n                  <xapGImg:format>JPEG</xapGImg:format>\n                  <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADEAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FWFfnX/AOSj83/9&#xA;sq6/5NHFXm35f/8AOMv5Qax5D8t6vf6VNJfajpdld3cgu7hQ0s9ukkhCq4AqzHYYqn//AEKf+SX/&#xA;AFaJ/wDpMuf+a8Vd/wBCn/kl/wBWif8A6TLn/mvFXf8AQp/5Jf8AVon/AOky5/5rxV3/AEKf+SX/&#xA;AFaJ/wDpMuf+a8Vd/wBCn/kl/wBWif8A6TLn/mvFXf8AQp/5Jf8AVon/AOky5/5rxV3/AEKf+SX/&#xA;AFaJ/wDpMuf+a8Vd/wBCn/kl/wBWif8A6TLn/mvFXf8AQp/5Jf8AVon/AOky5/5rxV3/AEKf+SX/&#xA;AFaJ/wDpMuf+a8Vd/wBCn/kl/wBWif8A6TLn/mvFXf8AQp/5Jf8AVon/AOky5/5rxV5D+SnmnzZ+&#xA;WnltfMM8T6l+Wd9qFxa6pHEC8+mTxyektyB1MbrxDe/gaclX1ppmp6fqmn2+o6dcR3djdxrLbXMT&#xA;BkdGFQykYqicVdirsVdirsVdirsVdirsVYV+df8A5KPzf/2yrr/k0cVRf5T/APkrPJv/AGw9N/6g&#xA;48VZVirsVdirsVdirsVdirsVdirsVdirsVeN/wDOMdrbXf5TXNrdRJPbT6lqMc8Eih0dHkoyspqC&#xA;CDQg4qkd/B5g/ITV2v8ATYptV/KPUJ+V7YDlJcaPLKaF4STvCzHv16GjUZlXumj6xpes6XbarpVz&#xA;HeadeRiW2uYjVHQ9x+og7g7HFUZirsVdirsVdirsVeC+Tvzg/PjzjoEGvaD5J0y40y4Z0ile/ERJ&#xA;ico3wuyt9pcVTv8Axd/zkv8A9SFpX/cSj/5rxVjH5m+Z/wA/7j8vfMUGs+TNNstJksJ1vruLUEke&#xA;KEoebqgc8iB2xV65+U//AJKzyb/2w9N/6g48VZVirsVdirsVdirsVdirsVdirsVdirsVeQf84sf+&#xA;Svk/7at//wAncVetXVrbXdtLa3UST206NHPBIodHRxRlZTUEEGhBxV4TqOna1+RWtS61osU2o/lT&#xA;qM3PV9ISskukyyGnrwV6xHuPoO/FsVe36PrGl6zpdtqulXMd5p15GJba5iNUdD3H6iDuDscVRmKu&#xA;xV2KuxV2KvIP+cT/APySWkf8Z7z/AKiXxV6/irCvzr/8lH5v/wC2Vdf8mjiqL/Kf/wAlZ5N/7Yem&#xA;/wDUHHirKsVdirsVdirsVdirsVdirsVdirsVdiryD/nFj/yV8n/bVv8A/k7ir1/FVk8EFxBJBPGs&#xA;sEqlJYnAZHRhRlZTsQRsQcVeBavpnmH8idbk17y/FNqf5VX8vPWNDQl5NLkkIrPb1/3X+H7Lfsti&#xA;r3HQtd0jX9ItdY0e6S9029QSW9xGaqyn8QQdiDuDsd8VR+KuxV2KuxV5B/zif/5JLSP+M95/1Evi&#xA;r1/FWFfnX/5KPzf/ANsq6/5NHFUX+U//AJKzyb/2w9N/6g48VZVirsVdirsVdirsVdirsVdirsVd&#xA;irsVeQf84sf+Svk/7at//wAncVev4q7FVskccsbRyKHjcFXRgCrKRQgg9QcVeEazo2t/khrdx5m8&#xA;s28uoflnqEvqeYfL0fxPpztsbu0B/wB1/wAy9KbHbiyqvatC13SNf0i11jR7pL3Tb1BJb3EZqrKf&#xA;xBB2IO4Ox3xVH4q7FXYq8g/5xP8A/JJaR/xnvP8AqJfFXr+KsK/Ov/yUfm//ALZV1/yaOKov8p//&#xA;ACVnk3/th6b/ANQceKsqxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kvlv/nHT827byvbjyv5otzYaRq+o&#xA;3b6DrzbWzTerxlt5n6IQ9CD/AJW9BQ4q+pMVdirsVWyRxyxtHIoeNwVdGAKspFCCD1BxV4Hrnl3z&#xA;F+SWv3HmvyhbS6l+XF8/q+Y/LUfxNYn9q6tQeiqOo7DZvhoyKvbPLnmPRfMmi2utaLdJeabeJzgn&#xA;T7irA7qynZlO4OxxVMsVdiryD/nE/wD8klpH/Ge8/wCol8Vev4qwr86//JR+b/8AtlXX/Jo4qi/y&#xA;n/8AJWeTf+2Hpv8A1Bx4qyrFXYq7FXYq7FXYq7FXYq7FXYq7FXYq8B/I/wAkeXfOv5G3mg69biez&#xA;n1W/KOKCSGQS/DLE1Dxda7H6DUEjFUd5O84eYPyv1+1/L78wro3WhXJ9Pyl5uk2R0Gy2t0xJ4Ouw&#xA;BJ2/1aEKvcMVdirsVaZVZSrAMrCjKdwQexxV4T5h8va5+TGuXPnHydbSX35f30nq+aPK8W5syftX&#xA;lmvRVUfaXoBsfhoY1XsflnzPoXmfRbbWtDvI77TbpeUU0Z791YHdXU7Mp3GKppiryD/nE/8A8klp&#xA;H/Ge8/6iXxV6/irCvzr/APJR+b/+2Vdf8mjiqL/Kf/yVnk3/ALYem/8AUHHirKsVdirsVdirsVdi&#xA;rsVdirsVdirsVdiryD/nFj/yV8n/AG1b/wD5O4q9F84eT/L/AJv8v3Og69bC6sLobjo8bj7MsTfs&#xA;uvY/wxV5J5W87+Yfyp8wWnkH8w7g3Xlu5Jj8recJNl4CgS2uyfslOnIn4dv2PiCr3UEEVG4PQ4q7&#xA;FXYq0yqylWAZWFGU7gg9jirwbzF5R8xfk7r93528i27X3ki7b1fNHlOOtYB+1d2a9AEG5H7I2+x9&#xA;hV6d/wArT8i/4F/xz+lI/wDDvp+p9Z/a5dPR9P7Xq8vh4da4qwz/AJxP/wDJJaR/xnvP+ol8Vev4&#xA;qwr86/8AyUfm/wD7ZV1/yaOKov8AKf8A8lZ5N/7Yem/9QceKsqxV2KuxV2KuxV2KuxV2KuxV2Kux&#xA;V2KvGrb/AJxe8s2ayR6f5u81WEEkjym3tdRihiDyGrEIluBiqt/0LZpX/U9ecv8AuKp/1QxVCal/&#xA;zit5W1S2+q6n5u8131tyD+hc6jDNHyHQ8Xt2FRiqvB/zjJodvBHBb+dvN8MEShIoo9UjVFVRQKqi&#xA;3oAB2xVU/wChbNK/6nrzl/3FU/6oYq7/AKFs0r/qevOX/cVT/qhirv8AoWzSv+p685f9xVP+qGKt&#xA;H/nGvSjsfPXnGn/bVT/qhir58/5VFoX/AEMZ/wAqo/SWpf4Z9T1/U9aP6z6v6K+uepy9L0uXP4a+&#xA;nXjt13xV9Cf84n/+SS0j/jPef9RL4q9fxVhX51/+Sj83/wDbKuv+TRxVF/lP/wCSs8m/9sPTf+oO&#xA;PFWVYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXyr/wCv2f5/9S9ir0v/AJxP&#xA;/wDJJaR/xnvP+ol8Vev4qwr86/8AyUfm/wD7ZV1/yaOKov8AKf8A8lZ5N/7Yem/9QceKsqxV2Kux&#xA;V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvlX/1+z/P/qXsVel/84n/APkktI/4z3n/&#xA;AFEvir1/FWFfnX/5KPzf/wBsq6/5NHFUX+U//krPJv8A2w9N/wCoOPFWVYq7FXYq7FXYq7FXYq7F&#xA;XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXyr/6/Z/n/ANS9ir0v/nE//wAklpH/ABnvP+ol8Vev4qwr&#xA;86//ACUfm/8A7ZV1/wAmjiqL/Kf/AMlZ5N/7Yem/9QceKsqxV2KuxV2KuxV2KuxV2KuxV2KuxV2K&#xA;uxV2KuxV2KuxV2KuxV2KvlX/ANfs/wA/+pexV6X/AM4n/wDkktI/4z3n/US+KvX8VYV+df8A5KPz&#xA;f/2yrr/k0cVRf5T/APkrPJv/AGw9N/6g48VZVirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV&#xA;dirsVdirsVfKv/r9n+f/AFL2KvS/+cT/APySWkf8Z7z/AKiXxV6/irCvzr/8lH5v/wC2Vdf8mjiq&#xA;L/Kf/wAlZ5N/7Yem/wDUHHirKsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir5&#xA;V/8AX7P8/wDqXsVel/8AOJ//AJJLSP8AjPef9RL4q9fxVhX51/8Ako/N/wD2yrr/AJNHFUX+U/8A&#xA;5Kzyb/2w9N/6g48VZVirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVfKv8A6/Z/&#xA;n/1L2KvS/wDnE/8A8klpH/Ge8/6iXxV6/irCvzr/APJR+b/+2Vdf8mjiqL/Kf/yVnk3/ALYem/8A&#xA;UHHirKsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir5V/9fs/z/wCpexV6X/zi&#xA;f/5JLSP+M95/1Evir1/FWFfnX/5KPzf/ANsq6/5NHFUX+U//AJKzyb/2w9N/6g48VZVirsVdirsV&#xA;dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVfKv/AK/Z/n/1L2KvS/8AnE//AMklpH/Ge8/6&#xA;iXxV6/irCvzr/wDJR+b/APtlXX/Jo4qi/wAp/wDyVnk3/th6b/1Bx4qyrFXYq7FXYq7FXYq7FXYq&#xA;7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq+Vf/X7P8/+pexV6X/zif8A+SS0j/jPef8AUS+KvX8VYV+d&#xA;f/ko/N//AGyrr/k0cVRf5T/+Ss8m/wDbD03/AKg48VZVirsVfLv/ADkz+e3n3yj59ttB8o6sNPgg&#xA;sY5b9fq9tMTPM7kCs8cpFIgh2p1xVnv/ADi/+Z3mLz35O1KbzJefXtY0++MbT+nDDWCSJWi+CFI1&#xA;+0HHTFXsuKsE/PPzNrflj8qte13Q7n6nqtkkBtrjhHLxL3MUbfBKroaq5G64q+O/+ho/z2/6mb/p&#xA;x0//ALJ8Vd/0NH+e3/Uzf9OOn/8AZPir0D8hPz7/ADY81fmxoWg69rv1zSbz619ZtvqtnFy9Kzml&#xA;T44oUcUdFOzYq+v8VdirsVdirsVdirsVdirsVdirsVfKv/r9n+f/AFL2KvS/+cT/APySWkf8Z7z/&#xA;AKiXxV6/irCvzr/8lH5v/wC2Vdf8mjiqL/Kf/wAlZ5N/7Yem/wDUHHirKsVdir85/wA8NebzF+bn&#xA;mi/jczRC8kt4GHQxWaiBSvtxirir1H/nCfXxa+ddc0N2omp2K3Cb7GS0koBTx4XDH6MVfY+KvMP+&#xA;cmf/ACR3mj/jHa/9RsOKvhv8vLW2u/P/AJZtbqJLi2uNVsYp4JVDxvG9yisjq1QysDQg4q/Qn/lU&#xA;/wCVn/Um6H/3DbP/AKp4qitL/L3yDpF/FqGleWtK0+/g5ejeWtjbQzJzUo3GSNFZeSsVND0OKsgx&#xA;V2KuxV2KuxV2KuxV2KuxV2KuxV8q/wDr9n+f/UvYq9L/AOcT/wDySWkf8Z7z/qJfFXr+KsK/Ov8A&#xA;8lH5v/7ZV1/yaOKov8p//JWeTf8Ath6b/wBQceKsqxVLPNGtRaF5a1XWpSBHptnPdsW6fuY2en08&#xA;cVfnz+TuhT+a/wAzbHT5qzy3yX0k7NuWb6pNISfdm/HFUT/zj5r/AOg/zi8sXbOEinuvqUtfslbx&#xA;GtxX5NIDir9EMVeYf85M/wDkjvNH/GO1/wCo2HFXw/8All/5Mjyp/wBtnT/+oqPFX6X4q7FXYq7F&#xA;XYq7FXYq7FXYq7FXYq7FXYq+Vf8A1+z/AD/6l7FXpf8Azif/AOSS0j/jPef9RL4q9fxVhX51/wDk&#xA;o/N//bKuv+TRxVF/lP8A+Ss8m/8AbD03/qDjxVlWKvJf+cpvMP6G/JnV0R+E+qyQafCfH1ZA8g+m&#xA;GN8VeAf84Z6Obv8ANG71Bh+703TJnDeEk0kcSj6UL4q8l80W9x5b8/6rBb/u7jR9VnWCo6NbXDBD&#xA;T/YjFX6T6Lqlvq2j2Gq2xrb6hbxXUJ8UmQSL+DYq88/5yZ/8kd5o/wCMdr/1Gw4q+FvI2pWWl+dv&#xA;L+p30no2VjqVnc3UvFm4RQzo7txUMxoqk0Arir7j/wCho/yJ/wCpm/6cdQ/7J8VZN5H/ADb/AC98&#xA;83V1a+VtV/SM9miy3KfV7mDijHiDWeKIHfwxVl+KuxV2KuxV2KuxV2KuxV2KuxV2KvlX/wBfs/z/&#xA;AOpexV6X/wA4n/8AkktI/wCM95/1Evir1/FWFfnX/wCSj83/APbKuv8Ak0cVRf5T/wDkrPJv/bD0&#xA;3/qDjxVlWKvlv/nN/wAw0tfLHl2N/wC8kn1C4j/1AIYT/wAPLiqp/wA4P6Lw0zzTrjCvrz21lE1O&#xA;noo8sgr7+smKvHP+cmdGOlfnT5hUCkV48N7EfETwozn/AJGcsVfWv/ONev8A6a/Jny9IzFprGN9P&#xA;lr2+qyNHGB/zyCYq1/zkz/5I7zR/xjtf+o2HFXwRoWkXOta3p+j2rIlzqVzDZwPKSIxJPII1LlQx&#xA;CgtvQHFXuX/QlX5p/wDV10P/AKSLz/skxV69/wA46fkR5v8Ay01jWL3XbzT7mLULeOGFbGSaRgyO&#xA;WJb1YYRSngTir3bFXYq7FXYq7FXYq7FXYq7FXYq7FXyr/wCv2f5/9S9ir0v/AJxP/wDJJaR/xnvP&#xA;+ol8Vev4qwr86/8AyUfm/wD7ZV1/yaOKov8AKf8A8lZ5N/7Yem/9QceKsqxV8If85Z+YRq35xXtq&#xA;knOHRra3sUp9kNx9eQD3DzEH5Yq+j/8AnFHQzpf5MaZMy8ZNVnub5xSh+KT0UJ+ccKn5Yq8b/wCc&#xA;2tDFv5y0DWlWi39g9q7AbF7SUtX58bgDFWWf84ReYPW8veZPL7tvZ3UN9Ep/luYzG9PkbcV+eKvS&#xA;f+cmf/JHeaP+Mdr/ANRsOKvh/wDLL/yZHlT/ALbOn/8AUVHir9L8VdirsVdirsVdirsVdirsVdir&#xA;sVdirsVfKv8A6/Z/n/1L2KvS/wDnE/8A8klpH/Ge8/6iXxV6/irCvzr/APJR+b/+2Vdf8mjiqL/K&#xA;f/yVnk3/ALYem/8AUHHirKWZVUsxCqoqzHYADucVfmR5419/MPnLW9cZ+Y1G+uLhCf5JJCUAr2CU&#xA;AxVHL+VP5osoZfJ2uMrCqsNNuyCD3H7vFUHq/kLz1otkb7WPLmqabZKwRrq8sriCIM2ygvIirU9t&#xA;8Veq/wDOHmv/AKO/Nk6czUj1mwntwpNKyQ0uFI8SFicfTir6S/5yZ/8AJHeaP+Mdr/1Gw4q+H/yy&#xA;/wDJkeVP+2zp/wD1FR4q/S/FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXyr/6/Z/n/ANS9ir0v/nE/&#xA;/wAklpH/ABnvP+ol8Vev4qwr86//ACUfm/8A7ZV1/wAmjiqL/Kf/AMlZ5N/7Yem/9QceKqX5weYf&#xA;8Pflh5m1ZX9OWCwmS3fwmnHow/8AJSRcVfnz5A0I6/540DReHNdQ1C2glH/FbyqJCadglScVfpri&#xA;rzr/AJyG0Maz+TXme348pLe1+ux06g2brcEj/YxkfLFXwz+Vmv8A+H/zH8t6uWCx2uoW5nY7D0Xc&#xA;JLv/AMY2bFX25/zkz/5I7zR/xjtf+o2HFXw/+WX/AJMjyp/22dP/AOoqPFX6X4q7FXYq7FXYq7FX&#xA;Yq7FXYq7FXYq7FXYq+Vf/X7P8/8AqXsVel/84n/+SS0j/jPef9RL4q9fxVhX51/+Sj83/wDbKuv+&#xA;TRxVF/lP/wCSs8m/9sPTf+oOPFUN+bv5eXH5g+TJvLEWq/oiO5mhkuLn0PrPJIW5iPh6kPVwpry7&#xA;dMVeYfll/wA4l2/krzvpnmefzL+lV01pHSyNj6AZ3ieNW9T6xLTgX5D4eoxV9BYqhdV06DU9LvNN&#xA;uN4L2CS3lFK/BKhRtj7Nir5f/wChGP8Av9v+5X/2eYq988/eQ7jzj+XN55PudT9C4vYLeKbVfR9S&#xA;rwSRytJ6PqJ9sx9Oe1e+KvFvLP8Azhj+g/Mmk61/jD6x+i7y3vfq/wCjeHqfV5Vl4c/rTceXGlaG&#xA;mKvpfFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXyr/AOv2f5/9S9ir0v8A5xP/APJJaR/xnvP+ol8V&#xA;ev4qwr86/wDyUfm//tlXX/Jo4qi/yn/8lZ5N/wC2Hpv/AFBx4qyrFXYq7FXYq7FXYq7FXYq7FXYq&#xA;7FXYq7FXYq7FXYq7FXYq7FXYq+Vf/X7P8/8AqXsVel/84n/+SS0j/jPef9RL4q9fxVIfPnlyfzL5&#xA;L1ry/BMtvNqlnNaxzuCVRpUKhiBvQVxV5lo35d/85E6PpFjpFh560uOx063itLSM6crFYoEEcYLM&#xA;hJoqjc4qjP8ACP8Azkv/ANT7pX/cNj/5oxV3+Ef+cl/+p90r/uGx/wDNGKu/wj/zkv8A9T7pX/cN&#xA;j/5oxV3+Ef8AnJf/AKn3Sv8AuGx/80Yq7/CP/OS//U+6V/3DY/8AmjFXf4R/5yX/AOp90r/uGx/8&#xA;0Yq7/CP/ADkv/wBT7pX/AHDY/wDmjFXf4R/5yX/6n3Sv+4bH/wA0Yq7/AAj/AM5L/wDU+6V/3DY/&#xA;+aMVd/hH/nJf/qfdK/7hsf8AzRirv8I/85L/APU+6V/3DY/+aMVd/hH/AJyX/wCp90r/ALhsf/NG&#xA;Ku/wj/zkv/1Pulf9w2P/AJoxV3+Ef+cl/wDqfdK/7hsf/NGKu/wj/wA5L/8AU+6V/wBw2P8A5oxV&#xA;3+Ef+cl/+p90r/uGx/8ANGKu/wAI/wDOS/8A1Pulf9w2P/mjFWK6pqH/ADkXp/5haJ5Kfzlpz3Wt&#xA;21xdRXY06IRxrbKWKspSpJ44qyr/AAj/AM5L/wDU+6V/3DY/+aMVd/hH/nJf/qfdK/7hsf8AzRir&#xA;D/8AoXn84P8AlYX/ACsH/GOm/wCKP+Wv6meH+831T+6p6f8Ac7dPfrirMP8AnE//AMklpH/Ge8/6&#xA;iXxV6/irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVeQebv/Wl/IX/bK1L/AJNv&#xA;ir1/FXYq7FXy3+QP5/flj5O/LHTtB17UZbfU7eW5eWJLaeUASzs6/Eisv2WxV6L/ANDYfkl/1d5/&#xA;+kO5/wCaMVd/0Nh+SX/V3n/6Q7n/AJoxV3/Q2H5Jf9Xef/pDuf8AmjFXf9DYfkl/1d5/+kO5/wCa&#xA;MVd/0Nh+SX/V3n/6Q7n/AJoxV3/Q2H5Jf9Xef/pDuf8AmjFXf9DYfkl/1d5/+kO5/wCaMVd/0Nh+&#xA;SX/V3n/6Q7n/AJoxV3/Q2H5Jf9Xef/pDuf8AmjFXf9DYfkl/1d5/+kO5/wCaMVd/0Nh+SX/V3n/6&#xA;Q7n/AJoxV3/Q2H5Jf9Xef/pDuf8AmjFXf9DYfkl/1d5/+kO5/wCaMVd/0Nh+SX/V3n/6Q7n/AJox&#xA;V3/Q2H5Jf9Xef/pDuf8AmjFXf9DYfkl/1d5/+kO5/wCaMVd/0Nh+SX/V3n/6Q7n/AJoxV3/Q2H5J&#xA;f9Xef/pDuf8AmjFXf9DYfkl/1d5/+kO5/wCaMVd/0Nh+SX/V3n/6Q7n/AJoxViun/mb5P8+/85F+&#xA;TLzyzdPdQWWnajDcM8UkJDtE7AASKtdsVfROKuxV2Kv/2Q==</xapGImg:image>\n               </rdf:li>\n            </rdf:Alt>\n         </xap:Thumbnails>\n      </rdf:Description>\n      <rdf:Description rdf:about=\"\"\n            xmlns:xapMM=\"http://ns.adobe.com/xap/1.0/mm/\">\n         <xapMM:DocumentID>uuid:D742428F62F9DF11AA7ECFD824F7F6D8</xapMM:DocumentID>\n         <xapMM:InstanceID>uuid:a5c3e3fc-180b-2f4c-a7db-f62e6607ddd0</xapMM:InstanceID>\n         <xapMM:DerivedFrom rdf:parseType=\"Resource\"/>\n      </rdf:Description>\n      <rdf:Description rdf:about=\"\"\n            xmlns:xapTPg=\"http://ns.adobe.com/xap/1.0/t/pg/\"\n            xmlns:stDim=\"http://ns.adobe.com/xap/1.0/sType/Dimensions#\"\n            xmlns:stFnt=\"http://ns.adobe.com/xap/1.0/sType/Font#\"\n            xmlns:xapG=\"http://ns.adobe.com/xap/1.0/g/\">\n         <xapTPg:NPages>1</xapTPg:NPages>\n         <xapTPg:HasVisibleTransparency>False</xapTPg:HasVisibleTransparency>\n         <xapTPg:HasVisibleOverprint>False</xapTPg:HasVisibleOverprint>\n         <xapTPg:MaxPageSize rdf:parseType=\"Resource\">\n            <stDim:w>800.000000</stDim:w>\n            <stDim:h>600.000000</stDim:h>\n            <stDim:unit>Pixels</stDim:unit>\n         </xapTPg:MaxPageSize>\n         <xapTPg:Fonts>\n            <rdf:Bag>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <stFnt:fontName>Futura-CondensedMedium</stFnt:fontName>\n                  <stFnt:fontFamily>Futura</stFnt:fontFamily>\n                  <stFnt:fontFace>Condensed Medium</stFnt:fontFace>\n                  <stFnt:fontType>TrueType</stFnt:fontType>\n                  <stFnt:versionString>6.1d5e1</stFnt:versionString>\n                  <stFnt:composite>False</stFnt:composite>\n                  <stFnt:fontFileName>Futura.ttc</stFnt:fontFileName>\n               </rdf:li>\n            </rdf:Bag>\n         </xapTPg:Fonts>\n         <xapTPg:PlateNames>\n            <rdf:Seq>\n               <rdf:li>Cyan</rdf:li>\n               <rdf:li>Magenta</rdf:li>\n               <rdf:li>Yellow</rdf:li>\n               <rdf:li>Black</rdf:li>\n            </rdf:Seq>\n         </xapTPg:PlateNames>\n         <xapTPg:SwatchGroups>\n            <rdf:Seq>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <xapG:groupName>Standard-Farbfeldgruppe</xapG:groupName>\n                  <xapG:groupType>0</xapG:groupType>\n               </rdf:li>\n            </rdf:Seq>\n         </xapTPg:SwatchGroups>\n      </rdf:Description>\n      <rdf:Description rdf:about=\"\"\n            xmlns:illustrator=\"http://ns.adobe.com/illustrator/1.0/\">\n         <illustrator:Type>Document</illustrator:Type>\n      </rdf:Description>\n      <rdf:Description rdf:about=\"\"\n            xmlns:pdf=\"http://ns.adobe.com/pdf/1.3/\">\n         <pdf:Producer>Adobe PDF library 8.00</pdf:Producer>\n      </rdf:Description>\n   </rdf:RDF>\n</x:xmpmeta>\n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                           \n<?xpacket end=\"w\"?>\rendstream\rendobj\r2 0 obj\r<</Count 1/Type/Pages/Kids[5 0 R]>>\rendobj\r13 0 obj\r<</Intent 14 0 R/Usage 15 0 R/Name(Ebene 1)/Type/OCG>>\rendobj\r14 0 obj\r[/View/Design]\rendobj\r15 0 obj\r<</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>>\rendobj\r12 0 obj\r[13 0 R]\rendobj\r5 0 obj\r<</Parent 2 0 R/Contents 19 0 R/BleedBox[0.0 0.0 800.0 600.0]/PieceInfo<</Illustrator 6 0 R>>/ArtBox[70.5 186.161 330.772 525.473]/MediaBox[0.0 0.0 800.0 600.0]/Thumb 24 0 R/TrimBox[0.0 0.0 800.0 600.0]/Resources<</Font<</TT0 17 0 R>>/ProcSet[/PDF/Text]/Properties<</MC0 13 0 R>>/ExtGState<</GS0 16 0 R>>>>/Type/Page/LastModified(D:20101124133916+01'00')>>\rendobj\r19 0 obj\r<</Length 245/Filter/FlateDecode>>stream\r\nHRN\u00031\f+|zm'IRzZH|\u0000E\"Q\u000e>viy\b8QY&v2^N#p>\"\bzlΗgx#[\bj)I;A\u0002lK7B\u00070OQ♜(\u001a÷D;XbGx5/\u0018q£qbW4U4PJX\u0012CÁr2A}決]{iwV1j\u001clo\u001a\u001fa1թ\nDzZABp\u001a\u0002@iYd㿀W\u0001\u0006\u0000p\rendstream\rendobj\r24 0 obj\r<</Length 182/Filter[/ASCII85Decode/FlateDecode]/BitsPerComponent 8/ColorSpace 22 0 R/Width 100/Height 75>>stream\r\n8;Z]`5n8Df&-P;us$=A/![kkq)Db#/Fs#gB@8X+kLj#bVq2H1d&e$E+:8W8[;T,Z,\nLbbKV1lR5KI)s71+gKup`'18YfSB-'H284/0JG17Ef>0u#C!`9#hLg!7R)_U`q]FS\n)X8n<c\"P!e2>UaODbScD0rB5T:M\\]&a`AXM+sQkTf)RNG],C~>\rendstream\rendobj\r16 0 obj\r<</OPM 1/BM/Normal/CA 1.0/OP false/SMask/None/ca 1.0/AIS false/op false/Type/ExtGState/SA true>>\rendobj\r17 0 obj\r<</Subtype/TrueType/FontDescriptor 18 0 R/LastChar 70/Widths[408 0 0 0 0 350]/BaseFont/PHUMFI+Futura-CondensedMedium/FirstChar 65/Encoding/WinAnsiEncoding/Type/Font>>\rendobj\r18 0 obj\r<</StemV 96/FontName/PHUMFI+Futura-CondensedMedium/FontFile2 21 0 R/FontStretch/Condensed/FontWeight 500/Flags 32/Descent -282/FontBBox[-499 -282 1085 1010]/Ascent 1010/FontFamily(Futura)/CapHeight 759/XHeight 505/Type/FontDescriptor/ItalicAngle 0>>\rendobj\r21 0 obj\r<</Length 5775/Filter/FlateDecode/Length1 10234>>stream\r\nHV\rXTe\u0016~Ͻa\u0010\u0014AT\u0014\f\u0002WH\n!LBbh؟>ZYYic+H*fZnڪi`[ۏ0{/#kyss=̅\u0000hP9:{y34%4l#\u0000I\u0002,\u000b\u001e.ի\u000b\\2lJ遼kG)%s'H)сHs\n'}'@ߧC+ޱ|2N0Ғ\u0019\u0005Or\u0000a\u000054NZ%\\xKާ~xlƬe\u0002zlfa\u0004\u0010EנIr;\u0004\u000ez㨮Ɠr٪*\u0001\u0016ETE[\bLmרԜxSlf`v`萛\u001f7\u0000Z%Q\u0018\u00150вi\u00038ZY\u0010Æ\b\u001f03|)\u0016J4pH;\u0016]:JgqH{$@I!%Kx XI̔rRi|\u001cP>S>W5ժj':_}Nݤhzs=BoGv=N'6-ή-P{=\u001emj\u001ffϳ\u0017~xwSY\u000e;^A\u001c\u0011\u001c)|\u000b@\t\u0010i!$RAl\u0012+]tG$E\u0006\u0010\u0019)$SeD\"SD,-s{kZO(T\u0016\u001a[vnØ{'\u000bsD\u000bMww\b/|LlHM黂3\u00074\u0001bofx\u0007okXP\u0010Tcݵu\u0017Pm\u0017u'뎜\\Bڽ\u001fV\u0001{)\u001bk_}66T8d#xc6\u0012{O\u0013Ha$^ښhj;\u000fDI\u0011w#NH6\u0006$^\u001eݐbB\u001fm_]*ڠ}\n603\u0002e=|/\u00156\u001an`7^+d؄77\u0005\u0016<V;m؎r;POɚwQ؅\te\u0018w ;b%^D\u0014\n$KO-GNd\u0010s\tr\u001f8@\u0016pw\r\"Y,ȣ%dR<!nr\f|8+ɬ\u0002yM\"Jf]\u0015@qD Y:\u000f&IW:Êw\u0010AVIL&/-d(y\u001c#˽n_2 _\u001e8A~t8\u001fq<o\u0005~9|O\u001e\u0003v0r̢43&,4\u0015\u0015UqDM\u0016QhG\u000eG\u0003yl#c\u0011C<:\u0011]\u0015\u000etC\u0002\u0003=\u000bq7A\u001f܋\u001fI\u000f\u0003\u0014\f \fF*y1\u0004C1\f1\u0002\u0018\fhdb\f\u001c\u0016c1\u000eN~<\u00042,\u000fx\u0010\u0005BLf-B1b\u001aJP阁2<r\r\u0017y6\u0010E\u001bWM\u001bfV6e;\u0011SET\u0013/\u0006ZGyC\u0014q\u0018;r\rc\u0001D\u001e<NfG$q\u0000\u001fb\u0011VS\u001f$Va\u000eD\u000e\u001d\u0012-Y'(@\u0000{3\u0004#]S\u0003q\u0002\u0011\u0012pb?\u0016x?\u0004a#a5EsԒ%d\u0014%\u0006/Yb\u001c_g\u000e{<Qff9=[N\u0004khm\"Ҳ\u000eZ%HDPsӮJ=VU|:qBJCӊS=GEqƙЇx!Y\u0018'!zQ$\u0016k\\(t\u001ed;yq<)i˕8\u0011G3]0\u001fa\u0019\u0001\u001a\u0014H=j\\sӳ05ʓꊲ4OMS\u001aeseiʔ\u0003\u000b'(ٌ\u0010.ۯ)q6O\u001dNLKR7p\u001aV))RJ-0blÕAlg\u001a3o}?\u0019ԗ%VywɿL\u000e.\u0006s%!4'\u000b=\u000ea\u0003\\~\u0003\f\u0003\u0010l\u0018th\u0012ѳw-,_)pbqk?bHZM\u0002\t\u001aW1\fJc\\\u0010h\u0018\u0002\rC5\u001fTB[ɦ\u0015\u0018S-JHzI?=rWBB\u00168#\u0001=*ޔ˽_h\u001f\u0015\\0\u001a\u0010dFr\u0013\u0011r-0\u0004skiWC/|\\cRl0Cb*\u0014eI;bz=\r)Z\u0017^\u001c814\u0004[^|^X6n\u0003/Sn5Zo\nUQ;`(?\f5\u001f%Z\u0010Kr\u0011~P˰\u0010U\u0005!z\u001a\tC)1cMX\u0006 Wg&R\r\u0018E1zsbQL{)1uk|kiKldPr(I\u0014'e<\u0000eo<-39Rn 7<\u0006P*T((\u0007WSߍ\nE}^\u0015ThbJz\u000e8k\u0018;_k?_AR\\UL.!\b 7\u0001MvYc\u0007\u0002.Yw7\u0004D{g4=\u0018\u0012b\u0014SQ+BQ\u0011-HiaвL &(\u0012\u000fS\u001f\u001fV\u0019\u0010\u0005L\u0007VY:sOy|wo\u001f]\r3!54;r!Wvb\b黴5E\u000e\"\u001dmv<͋}5Y\u001eje\u0002}/Y;dqtzN[)ѵПZ}\u0012MF\u0016j#Ghnd\u001buߛh炥d\u0015=*\u0011}dxh\"Ƶ\u001d\u0002VgU]=;q/c\u0019Dk \u001b]\u0019\u001b}\u0011\u001bvW\u001c5(\u00182W\u0011hQ\u000bUQ:9\r1B\u0018Co0f\u0019mO\u000fc#].\u001cX\u0002+\u0015gN\u0014s\u001b|\u001cctO\u0001/}MeRԩ\u0015ӡ8ٴE\u001e=j\\\u0017\u0006\tg\u001e\u000bsM;Vy\u001b'\u0007*ߪpޡ(\u001e k!)aIA1VJ\u001f\u0006\u001fx4:\u0013qAi=m@\u001eC,Yek\f\nV\u0010^u\u0004\u0013aoVA[\u001eߣ\u0013c\u001c\u001e~u\u0016@`*\u001fOA\u000e\u000f\"\u000f\u0013zc?nG؃<B~V2w9M\u0010K1UD_\u000fyztaޭU~\u0016p}\u001dmC\fMQ\\^Xg\tSq}yg\t\u001dbsm\u0014.X/.\u001fGy\u001bhC~\u0001y\t\u0002ZC;\u000bR\u0017oB\u001fجm:\u001f`=qV~?Z\u0010}rQT\u0018 sG\"\u0002{5\u0003>Ww\u0002:\u0014~VƯpr<TgWO?<}|?\u001a\u0019'\u001e&?i}7\u001ayZxG,#KG\u0011:z\rVRh4t\\\u0014u45R\u0017\u0013oDn\nu|\\\bP\u0012\u0015\u000fu&ZB=BuPfD]-/\u001e>#f+=\u000e]v*NO):\u000bb'>\u0011ͱw>cJv\u000b>\u0015J\u0001z\"ޭij\u0017>\u0003J\u0011O>GyZsB-'N>?DSfl:$ZB59_4R\r[\u0016\u0007M˒̚a%DKgذOnnoKA\u0005ZLKۓ\u0006a;\u001c\u000bagD(\u0001)\\YpL1-3d9\u000b?'E5}_\"`=9Wp}O\u001c\u0012MhXN\u001c\u00122\u001de@I\r*_tVΨD̘|+.^%B$V%dscӒƦ5\u0006ݍ#\f\u0003\u0005\u0003IfMϗ.y\u001d\u0019ErAz%!\"0pM6^\u000069se\u001ap_\u0001JpQt\u001ah\u0000B ݼyc\u00073c\u0014-+m\u001b\u0001.jJ-i\u001fӼ\u0002-\u0017%=\u0016\fF\r/\u0017k\u0014r\u001c4RdT%K#X'DRf5ҔjZ!r#1\u00150q\u00033rEW69Q(\u000eX\u0007S0mi >\u0002\u001e_dBt*ciV\u0019n$=3 \u0006\u0006\u001c\u0015\u000b\u0005\rw2ҵʯsA\u001a\u0005A\u0002\u001c\r0v򦝅{K-4T!mb,q5*(Հ|1d;%[\u00156x\bz\u0001\u001aD)YãG \u0010\u0018.q\u001cKY\\UB2Q۾1\u0010RCd\u001c5\u0007\u0016LXy\u0007q\u000eXl\u00170\u0006dӎ\u0012)^\u0005-\u0004p\u0003\u0000\u0019,yqOʼ'Җi\n\u0005FE2EDŏ<\f6\nLj\u000f0`Tg9\u0005LBN^.\u0017^ް,T\u0005'4\u0006RWZ&W\u001820&e\u001e0ܲ \u001aEp]VaN\u000b\u0007\u001fưA0ΐLpwS\bq\u001cYW\u001aV\f\u001b)2Lp\f\u000eJ7 J;sp*ji>dA>̇q\u0019\u0004b?\u001c\ry6ND\u000b+\u0017/.J\tz\u000e$k\u00001~#nqU4䁙\u0018yrz{qkGy2\"V;̤\">J\"\u0018iF\r xZ!\u001b%~=NPטa5j+1U:\u0004.7\u0015Ce>~̀\u0005gLNHl$K7\u001dL\u001eHu:=$NM9r6`E\u001akT Wyx\\\u00151їQ~,L\u0017w<.G!GWzޢ՗K~q\u0007;껊5c\\\u0003FxK|MW}/D\u0011S:B?g\u0004\u001dgW%z\u001etsh1-Z\req|Uw\u001dYGh\u0012nvSh*@h:͠4nt\u0013Ls4\u0017B<O\u001f\u0005\u0016Q=F!Ŕ&ZBwRZFi\u0005RVѝιZh\u001dnv \u0001MJ'MwQ\u000f}\u0012>ꧻi3C[S>M{>,}\u000ex\u001c\u001etvc5\u000e\u001dZ*Lߢ,}W%z\u00037C't~D$\u0018\\N@72\u0005M\u0006nZ\u0014~S\u001d\u0012=\u0000n~\u001eR]MTQ~m2IPP(\u0016DZ(!\rmJhmD:Li&\u0019\u0014ZA\u001d7\u0004A\u0014Op<G{ѣ\u001czgL3{{ޛL[p+me'ݴ>O\u0007 \u001dts<@/K2BU:N'B\u001b&Eo;.G\u001f>\u0013g9}A_o{7\u0007~\u0017~\u000f\u00131@#$f\u00151\u0007T630\u0017p&8\u0007\tb\u0001X\u000bЎE\u0010\u0017b,F\u0007.\f#+\u0004R,C7JU\u001aZuHc\u00152\u0001j\u000f9c\rX\u0001\fz܀!\fc\u0004\u0005܈u\t1q\u000bnm\u001dw@\u0018\u0014\u0014b\u001c%/\u001b\u001a\tT\u001a\f܉\r0Q\u0005\u001b؈M4fl؊m؎{p/x\u0000\u000f!x\u00041<x\u0002\u001bOb\u000f)<}؏\u00038Cx\u00060hsF\u0019jVMv<a1ޓB>G\u001aQ߈zcuc*O%ڤ\\uʉa>2_ЬFb9UaM*o\u001eW],\u001eui]ӊm^STCu>\u0014o\u001b&TkpF6ZeW;5kk;ؔ-\fempR]z`\u0015\u0016_jj%֣ꖀܙ\u0013$N9vL^\u0015hJyJ=NiXv\u001aF\u0014\u0003iTxua,18zQbU\u0016\rKԏbHʻ'.R\u0004Qz[V\u000b\u00151=1\rْ\u0006Dƀ;\u001ctfG6=\u0017p!7\"\\p.d!\u0018\u0017\u001d\u001d^\bY2\u0005,뢼WEݢ05\u0011Z\u0013u dR[>啊uMD\u0016n$YUXvfb\f|-y6'B1F4Kl5^V4\u0003\u0007\u0003>̃^!ltȏ0Oق׃-lg\u0019&J%gW+ձ;\ff*vu\\W79Ö\u0017\u0016\f+ 13\tċ8L6t;Z0y]8CFm,д]׍Z`]S\u000eorAO3&J\u00032%R\u001a\u001b:+xo \u0014mf`/\u0010]nPߘl#)4ar暦\\6\u0011\u000fpL4p5ASbFyQ~mJe&\r\njC\u0000i=؈Ә4V\u0010\u001d\u0014D-\u00057\u0006\u0000j\u0013\u0004V$y::^ca)B$^EDGE\u00194z-,@\u0016X\u0011^|K\u001eX``2\\E\u001egI!\u0016-9s\u0003,Y$)qhAv6\u0001\u0006\u0000봭#\rendstream\rendobj\r22 0 obj\r[/Indexed/DeviceRGB 255 23 0 R]\rendobj\r23 0 obj\r<</Length 428/Filter[/ASCII85Decode/FlateDecode]>>stream\r\n8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@\"pJ+EP(%0\nb]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\\Ulg9dhD*\"iC[;*=3`oP1[!S^)?1)IZ4dup`\nE1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\\.?d>Mn\n6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1\nVNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<\nPO7r\\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(\nl[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\\~>\rendstream\rendobj\r6 0 obj\r<</Private 7 0 R/LastModified(D:20101124133916+01'00')>>\rendobj\r7 0 obj\r<</ContainerVersion 11/CreatorVersion 13/RoundtripVersion 13/AIMetaData 8 0 R/AIPrivateData1 9 0 R/AIPrivateData2 10 0 R/NumBlock 2/RoundtripStreamType 1>>\rendobj\r8 0 obj\r<</Length 914>>stream\r\n%!PS-Adobe-3.0 \r%%Creator: Adobe Illustrator(R) 13.0\r%%AI8_CreatorVersion: 13.0.0\r%%For: (Michael Markowski) ()\r%%Title: (Bildschirmfoto 2010-11-24 um 13.31.42)\r%%CreationDate: 11/24/10 1:39 PM\r%%BoundingBox: 70 186 331 526\r%%HiResBoundingBox: 70.5 186.1611 330.7725 525.4727\r%%DocumentProcessColors: Cyan Magenta Yellow Black\r%AI5_FileFormat 9.0\r%AI12_BuildNumber: 409\r%AI3_ColorUsage: Color\r%AI7_ImageSettings: 0\r%%RGBProcessColor: 0 0 0 ([Passermarken])\r%AI3_TemplateBox: 400.5 299.5 400.5 299.5\r%AI3_TileBox: 120.5 -80 679.5 703\r%AI3_DocumentPreview: None\r%AI5_ArtSize: 800 600\r%AI5_RulerUnits: 6\r%AI9_ColorModel: 1\r%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0\r%AI5_TargetResolution: 800\r%AI5_NumLayers: 1\r%AI9_OpenToView: -704 780 1 1829 1062 26 0 0 50 75 0 0 1 1 1 0 1\r%AI5_OpenViewLayers: 7\r%%PageOrigin:0 0\r%AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9\r%AI9_Flatten: 1\r%AI12_CMSettings: 00.MS\r%%EndComments\r\rendstream\rendobj\r9 0 obj\r<</Length 7532>>stream\r\n%%BoundingBox: 70 186 331 526\r%%HiResBoundingBox: 70.5 186.1611 330.7725 525.4727\r%AI7_Thumbnail: 100 128 8\r%%BeginData: 7386 Hex Bytes\r%0000330000660000990000CC0033000033330033660033990033CC0033FF\r%0066000066330066660066990066CC0066FF009900009933009966009999\r%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66\r%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333\r%3333663333993333CC3333FF3366003366333366663366993366CC3366FF\r%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99\r%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033\r%6600666600996600CC6600FF6633006633336633666633996633CC6633FF\r%6666006666336666666666996666CC6666FF669900669933669966669999\r%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33\r%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF\r%9933009933339933669933999933CC9933FF996600996633996666996699\r%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33\r%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF\r%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399\r%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933\r%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF\r%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC\r%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699\r%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33\r%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100\r%000011111111220000002200000022222222440000004400000044444444\r%550000005500000055555555770000007700000077777777880000008800\r%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB\r%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF\r%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF\r%524C45FD0BFF7DFD04F827F8F8F827F8F8F827F8F8F827F8F8F827F8F8F8\r%27F8F8F827F8F8F827F8F8F827F8F8F827F8F8F827F8F8F827F8F8F827F8\r%27FD2CFF7DF8FFFD33A852F827FD2BFF7D27FD34FF52522727FD2AFF7D27\r%FD34FF5252FFF827A8FD28FF7D27FD34FF2752FFFF2727FD28FF7D27FD34\r%FF5227FFFFFFF827A8FD26FF5227FD34FF5252FD04FF27F8A8FD25FF7DF8\r%FD34FF5227FD05FF27F8A8FD24FF7D27FD34FF5252FD06FF27F8A8FD18FF\r%7DA87D7D7DA87D7D7DA87D5227FD34FF5252FD07FF27F8A8FD17FFF8F827\r%2727F8272727F827F827FD34FF2752FD08FF52F8A8FD16FFF8A8FD04FFA8\r%FD04FF7D27FD34FF5227FD09FF27F87DFD15FFF8A8FD09FF7D27FD34FF27\r%52FD0AFF52F8A8FD14FFF8A8FD09FF7D27FD34FF5227FD0BFF52F87DFD13\r%FFF8A8FD09FF5227FD34FF5252FD0CFF52F87DFD12FFF8A8FD09FF7DF8FD\r%34FF5227FD0DFF52F87DFD11FF27A8FD09FF5227FD34FF5252FD0EFF7DF8\r%7DFD10FFF8A8FD09FF7D27FD34FF5252FD0FFF7DF852FD0FFFF8A8FD09FF\r%7D27FD34FF2752FD10FF7DF87DFD0EFFF8A8FD09FF7D27FD34FF5227FD11\r%FF7DF852FD0DFFF8A8FD09FF7D27FD34FF2752FD12FF7DF852FD0CFFF8A8\r%FD09FF7D27FD34FF52F8FD13FF7DF852FD0BFFF8A8FD09FF5227FD34FF52\r%F827FD13FFA8F852FD0AFFF8A8FD09FF7DF8FD34FF522727F8FD13FFA8F8\r%27FD09FF27A8FD09FF5227FD34FF5252FF27F8FD13FFA8F827FD08FFF8A8\r%FD09FF7D27FD34FF5252FFFF27F8FD13FFA8F827FD07FFF8A8FD09FF7D27\r%FD34FF2752FFFFFF52F8FD13FFA8F827FD06FFF8A8FD09FF7D27FD34FF52\r%27FD04FF52F8A8FD12FFA8F827FD05FFF8A8FD09FF7D27FD34FF2752FD05\r%FF52F8FD13FFA82727FD04FFF8A8FD09FF7D27FD34FF5227FD06FF52F8A8\r%FD12FFA827F8FFFFFFF8A8FD09FF5227FD34FF5252FD07FF52F8A8FD13FF\r%27F8FFFFF8A8FD09FF7DF8FD34FF5252FD08FF52F8A8FD13FF27F8FF27A8\r%FD09FF5227FD34FF52F8275227522752275227F8F8522752275227522752\r%2752275227522752275227F8F8F8A8FD09FF7D27FD34FFA8FD0B527DFD13\r%527D52F8F8A8FD09FF7D27FD56FFF8F8A8FD09FF7D27FD55FFA8F8F8A8FD\r%09FF7D27FD56FFF8F8A8FD09FF7D27FD55FFA8F8F8A8FD09FF5227FD56FF\r%F8F8A8FD09FF7DF8FD55FFA8F827A8FD09FF5227FD56FFF8F8A8FD09FF7D\r%27FD55FFA8F8F8A8FD09FF7D27FD56FFF8F8A8FD09FF7D27FD55FFA8F8F8\r%A8FD09FF7D27FD56FFF8F8A8FD09FF7D27FD55FFA8F8F8A8FD09FF5227FD\r%56FFF8F8A8FD09FF7DF8FD55FFA8F827A8FD09FF5227FD56FFF8F8A8FD09\r%FF7D27FD55FFA8F8F8A8FD09FF7D27FD56FFF8F8A8FD09FF7D27FD55FFA8\r%F8F8A8FD09FF7D27FD56FFF8F8A8FD09FF7D27FD55FFA8F8F8A8FD09FF52\r%27FD56FFF8F8A8FD09FF7DF8FD55FFA8F827A8FD09FF5227FD56FFF8F8A8\r%FD09FF7D27FD55FFA8F8F8A8FD09FF7D27FD56FFF8F8A8FD09FF7D27FD55\r%FFA8F8F8A8FD09FF7D27FD56FFF8F8A8FD09FF7D27FD55FFA8F8F8A8FD09\r%FF5227FD56FFF8F8A8FD09FF7DF8FD55FFA8F827A8FD09FF5227FD56FFF8\r%F8A8FD09FF7D27FD55FFA8F8F8A8FD09FF7D27FD56FFF8F8A8FD09FF7D27\r%FD55FFA8F8F8A8FD09FF7D27FD56FFF8F8A8FD09FF7D27FD55FFA8F8F8A8\r%FD09FF5227FD56FFF8F8A8FD09FF7DF8FD55FFA8F827A8FD09FF5227FD56\r%FFF8F8A8FD09FF7D27FD55FFA8F8F8A8FD09FF7D27FD56FFF8F8A8FD09FF\r%7D27FD55FFA8F8F8A8FD09FF7D27FD56FFF8F8A8FD09FF7D27FD0DFF27F8\r%F827A8FD08FFA8FD0BF827A8FD2DFFA8F8F8A8FD09FF5227FD0CFFA8FD04\r%F8A8FD08FFA8FD0CF8FD2FFFF8F8A8FD09FF7DF8FD0CFFA8FD04F87DFD08\r%FFA8FD0CF8A8FD2DFFA8F827A8FD09FF5227FD0CFF7DFD04F852FD08FFA8\r%FD04F8527D7D527D527D52FD2FFFF8F8A8FD09FF7D27FD0CFF52FD04F827\r%FD08FFA8FD04F87DFD35FFA8F8F8A8FD09FF7D27FD0CFFFD05F827A8FD07\r%FFA8FD04F87DFD36FFF8F8A8FD09FF7D27FD0BFFA8FD06F8A8FD07FFA8FD\r%04F852FD35FFA8F8F8A8FD09FF7D27FD0BFF7DF8F82727F8F852FD07FFA8\r%FD04F87DFD36FFF8F8A8FD09FF7D27FD0BFF52F8F85227F8F852FD07FFA8\r%FD04F87DFD35FFA8F8F8A8FD09FF5227FD0BFF27F8F8527DF8F8F8FD07FF\r%A8FD04F87DFD36FFF8F8A8FD09FF7DF8FD0BFFF8F8F87D7DF8F8F8A8FD06\r%FFA8FD04F852FD35FFA8F827A8FD09FF5227FD0AFF7DF8F8F8A8A8F8F8F8\r%A8FD06FFA8FD04F87DFD36FFF8F8A8FD09FF7D27FD0AFF7DF8F8F8A8A8F8\r%F8F852FD06FFA8FD04F852FD35FFA8F8F8A8FD09FF7D27FD0AFF52F8F827\r%FFFFF8F8F827FD06FFA8FD04F87DFD36FFF8F8A8FD09FF7D27FD09FFA827\r%F8F827FFFF27F8F8F8FD06FFA8FD0BF8A8FD2EFFA8F8F8A8FD09FF7D27FD\r%0AFFF8F8F852FFFF27F8F8F8A8FD05FFA8FD0BF8A8FD2FFFF8F8A8FD09FF\r%7D27FD09FF7DF8F8F852FFFF52F8F8F87DFD05FFA8FD0BF8A8FD2EFFA8F8\r%F8A8FD09FF5227FD09FF52F8F8F8A8FFFF7DF8F8F827FD05FFA8FD04F852\r%7D7D527D527DA8FD2FFFF8F8A8FD09FF7DF8FD09FF27F8F8F8A8FFFFA8F8\r%F8F827A8FD04FFA8FD04F87DFD07FFA8FD2DFFA8F827A8FD09FF5227FD08\r%FFA827F8F827FFFFFFA827F8F8F8A8FD04FFA8FD04F87DFD36FFF8F8A8FD\r%09FF7D27FD08FFA8F8F8F852FD04FF27F8F8F87DFD04FFA8FD04F852FD35\r%FFA8F8F8A8FD09FF7D27FD08FF52F8F8F852FD04FF52F8F8F852FD04FFA8\r%FD04F87DFD36FFF8F8A8FD09FF7D27FD08FF27F8F8F87DFFFFA8FF52F8F8\r%F827FD04FFA8FD04F852FD35FFA8F8F8A8FD09FF7D27FD08FFFD05F827F8\r%27F827F8F8F827FD04FFA8FD04F87DFD36FFF8F8A8FD09FF7D27FD07FFA8\r%FD0EF8A8FFFFFFA8FD04F87DFD35FFA8F8F8A8FD09FF5227FD07FF7DFD0E\r%F87DFFFFFFA8FD04F87DFD36FFF8F8A8FD09FF7DF8FD07FF27F8F8F8277D\r%527D527D5227F8F8F852FFFFFFA8FD04F852FD35FFA8F827A8FD09FF5227\r%FD07FF52F8F8F8A8FD06FF7DF8F8F827FFFFFFA8FD04F87DFD36FFF8F8A8\r%FD09FF7D27FD06FFA8FD04F87DFD06FFA8FD04F8A8FFFFA8FD04F852FD35\r%FFA8F8F8A8FD09FF7D27FD06FF7DFD04F8FD07FFA8FD04F8A8FFFFA8FD04\r%F87DFD36FFF8F8A8FD09FF7D27FD06FF7DF8F8F827FD08FFFD04F852FFFF\r%A8FD04F852FD35FFA8F8F8A8FD09FF7D27FD06FF27F8F8F852FD08FF52F8\r%F8F827FFFFA8FD04F87DFD36FFF8F8A8FD09FF7D27FD05FFA827F8F8F87D\r%FD08FF52FD04F8FFFFA8FD04F87DFD35FFA8F8F8A8FD09FF5227FD06FFA8\r%FD17FFA8FD37FFF8F8A8FD09FF7DF8FD55FFA8F827A8FD09FF5227FD56FF\r%F8F8A8FD09FF7D27FD55FFA8F8F8A8FD09FF7D27FD56FFF8F8A8FD09FF7D\r%27FD55FFA8F8F8A8FD09FF7D27FD56FFF8F8A8FD09FF7DF827F827F827F8\r%27F827F827F827F827F827F827F827F827F827F827F827F827F827F827F8\r%27F827F827F827F827F827F827F827F827F827F827F827F827F827F827F8\r%27F827F827F827F8272727F827F827F827F827F8F8F8A8FD09FFA8A87DA8\r%7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8\r%7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8\r%7DA87DA87DA87DA87DA87DA82727A8A87DA87DA87DA87DA87DF8A8FD55FF\r%5227FD0BFF27A8FD55FF5252FD0BFFF8A8FD55FF5227FD0BFFF8A8FD55FF\r%5252FD0BFFF8A8FD55FF5227FD0BFFF8A8FD55FF5252FD0BFFF8A8FD55FF\r%5227FD0BFFF87DFFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF\r%A8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8\r%A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF\r%A8FF2752FD0BFFFD58F827FD0AFFFF\r%%EndData\r\rendstream\rendobj\r10 0 obj\r<</Length 17057>>stream\r\n%AI12_CompressedDatax}z8\u0000\u0000I\b\u0010\u0016,!5$$!!B\f8\t'm?j\u001anlJn,[,=9ؒURIU*U¡V;y\u0017B2bp,\t\"J ~\u001bl\fSYЫu,A-th\u0015\u0004I\u001e\".5u|a𜗾 \u0016Ơf\f\u0005(/\r}9F\"\u0006,&9.\u0006#VKe1C\u0000+\u001d1,ñA)\u0004[P$N$U\fdg;p\\z\u001bJO\u0006ׂ쨒ʡJ)n&9Ke<|S\u0011{ӑ0VZ\u0013d,\u000eEI.\u00061\u0003J0\u001c!|R\u0013\nTM'/e.\u0007ӑޅ OFS\u001b\f\u0005W\u0005\u0006+\u0000l\u0001tp?oe \u0015F\b޴\u0005E\u0001\u0004\u000004Eul\u0012\u0017}j,\u00000K\u0018fod\b˲\b{B\u0001Z~k5\u0016F%\u001d6G5lFabV5\u0010~\u0017\u0017XP\u0007z,)\u001d\u0016>cYt(H\u0001B6zUPy.!\u00002\ry<:\u001fgU+҇J\u0010S\u0005/\u001d\u001d\u0002\u0011\u0004s*ˉ0\u0011py6\u001bƸt!ȱ`z\u001bc\u0006д\u0006zhM`\u0012.`\\zԥAߜ|:\u001dOX/=*0z\f\u000b|n`6u\u0006q,\u0010eD%\u0002I\u001f\u001fj\u001bI))0SQ\u0011dhk(\u0004\u000ḃ\u0012`Fw@Df%(f=X!TT\u0011\u000b\u0005V\\\u0002̭\u0005Vqk\f\u001bH\u0010އ_\foQq=q\u0001\u0019`\u0004S`|:P\u001fu\u0006:\u0003\u00187\u001f`D\u0015-uEveVUf\u000035\u000fAbAA`zoFV\u0004iF!\u000b=ܘt8\u0014\u0014fK\b\u0003O\u0003Qٸ\u001d\u0002$\u0000gz\u000f,O\u0001\u0017\u0010!2j\u001f\fpw\\C^\f\u0018&GԬG\u00183u`(\u0005hj0\u0016\u0011/CW\u0006{*h}\u0011\r\u0011\tk;P`<ۍ\u000fgCa$O*&\u000e&h\ṯ:\u0019b2\"Z#>t\u0011F\u001f\u0001ŸQAm\u0013?՗\u0001Z \u0006\f?\u001a%^T\u0012qO1\u0018O\u0000>\u0001k\u0003 3\u0013#\u0002smY\u0005\u0001*T%\u0012`-Kj}ѹa]\rRCtVRqָ6s\u0016L|NĈIh\u0003\u001e&\bU\u000e0\u0007/MGC~\u0000\u001d\u0016x.pS\u001c4wڹa0L\u0007'\u0018o!|\u0010Q7\u001f*p:4\u0015nL\u0013\b\u0010\u001a\u0007|\u0001\tS~\b\u000f`\u000e\u0010%B\u0019\u0000<\u0015d\u001a\u000f\u0010v8D\u001b\u0001?\u000f\u0019\u0018\b\u000b=D\u0012\u001ep\u0001 \u001e\b\u0014ˑ\u0007\u0003\\!\u0000@t\u0016\ny\u0007i(0\u0015a\bJj\u001boa!\u0004Y\u0016U\u001erèFSށih\u001c\u001d&p1\t`\u00015BQ]\u0012]\fDU+ \u0016\u0001) f\u0002\u0002!̻0Nu=\rFsKH*$\t\u0006\u0010Me'0X\u0004;᧲0L\u0003EoC{\u0014,IS3x#C7Ld\u0000b趽^\u0016\u001f Bh\u0006?¿x~1\u0010n\u0002Ge\u001ex0޸\u0006=k\nF9\u0010Z\u0018a˱fO\u000ew:\u0000 !U?\u0014R\u0006\\7o\t\u000f\u0014h\u0007\u000e\t\u001f,(+AIR\u0003Z\u0006P\u0011SFԷ'L\u001eu'2\u0007A\f%7+\u0014\u000bkȏy)됬\u0007\u001bH6࿔\u001fb~#H`F9\u001fYyr2ͬ\u000bj\tR?\r\u00051h!X\fD\nH\u001a\u0005\u000b~$\u0004\u0013\u0001=\u0000O\u0000kW\u0007\u001e^\\\u0007@A3HSɱ\u0005sNq5\u001f)\t~\u0007\u000b\u001bۇ\u0000n\u0017D\u001e<n \b;;\u00006G\u0016\u000f\u0018wեS\u0003};0\u0015zV\u000eg\tho\u0000qEc\"P3C{\r\r9^\u0012\u001a:\u0015^\u0003\u000e?b@O\u0003,\u0007\u001fy\u0001:kn0\b\u0014\u0004*\r Wp@U%\nڷ}\u0002\u0010: \u0003k?\nȈjits,w~\u000bV0l\u001fNL7\u0006Ti=mO\u0019O\bJ\u00063zĿ;\u0000\u001b\u001d9h\u000b\u0005\u001eW4Kb\u0004\u0007|w(,|YO\"/jRGU\u0015\u0003W\u001c[E*AA{\u001e\u0018r\u0002ߨ+?Pn/<\u001cyq&SHe8.\u0017d\u0005~H\u001e맀4SwpzMсϸ~\u000f'Ͱψ{$ɲhЌϿ> S\u0012EatE\u0005ā𮨧4֏y^[J=\u0001\u000b{?Pv\u0017FA\u0014Z\u001f%l\u000f4R\u0019a\u0015|\u0000˂\u0003YDN\r.C\u001arNǍB\\?<2\u000e\u00072AӇ1T\t~>#/\u0004*x7S'@<\u0001?\u001f\u0007k29K]^R\"/=-\u0011`Sڪ@kLYW\\:!L[:[\u0001ߺF\u00078D$A\u0016_BFK\tV\u0003\u000e\u00031kZP0la'`\u001fL\u000f!\u0012'E\u00072\u0014$!x<}\u001f\u000fd,\u001d\u000fz\u0000E֞!Hj;Yyf[_ \u0013w,\u0011/9*OD*\u0003iӟ\fRꫬ\u0006'\u0019r܀1)\u0010]\bN\t_\u001eC\\\u001cqbX:nx\tF\rQW@'p&dy9}TeZ\u0016G\u0013\tH[f\u00066nLD_\u0017/A nRCMØ\u001dǵqw$\u0011T`yw7\u001cL\u0000SH+?D]yk[V$K\u00179غݞvaak4_&Xʷ6/O\u0012z\nU\u001fR\u0001DOBv\u0006\u000bQ\u0015su3\u0016MD\u0007\u0007c<dQ8.dΤu²PT:\bKԃHu\be\rVMfVU\u0017=sd\u001dm/PkY;l~6\u0007\u0007x&cI\b#GthV\u0016\u000fje2\"f^j\u000bm]`V|ը\u0011V\u0017cW(Y\u0013-\u0007fL\u0001n5T}lxc֓a/ӡ\u0017w3)|3鏠x8ԤOݸj3vt[+N&Rj<GSȷ\"je.)\u000eyU\u0005;VwYP}:\u0005ʃ1o\u0013\\+jڂoEQ@\u0019\u0013j\u001diV\u001c\u001bJ8\u0006> ȵ٣O\u0012m\u001fD>Eomy\u0010jږ$\"!?I}REc\u0002\u0001\u0000:\u001f\u0004d&70e\nr}2\r83U\u0011'e]\u0000\fO5T(ulH|\\\\\u0011P&,\"(Z\u0004Em+&VG\u0014^SԵXI\u0013]\u001c{\u0011DN\"0\u001ep?$e\u0003$%9\u000bj~а!q!|QOu-J}ISV颮,!F)]?x>|\n\u0007aQ\u0005\u0019,m\u001a,3\u0007͙La'&ղZ\fH \u000bR#\u0000\u001a\u0007\\\u001f\u0005ǶkcRMWQ,:Q%lݠhu\u001fC\u0006!}o\"P׌%[cCR+M?\u001e\u0014e/B\u001de04\f[D~/#o#:\u001b#ݺ1۔֑AqFqg_C0%\u0019\u0004#\u0015x\u0001{/q#\n\"ػΐa*d|\u001f{pʣL\u000ew\u00139ڔs\u0012\u0003\u0005y˓\u0013Ѐ+\u001eC\u0015c\u0006IXeq%xLy\u001f7\u0006nhY\u0015)kt>\u001cm/\\z;Oi>|\u0014LUX$;H\"\u000etaDfcb\u0010鼳V\"~3UH&/Rj\u0002`ILH>ʸd`u\u0007W`\u001f\u001e\u0019U\u0006\u0013F\u001e;2bN$Y@=vdT\u0013i\"aT\"]\u000b-xT@)\u0012C\\,\u000fx>\u0014Fת:\u0004X\u000f\n}cmm\u0016\u0003{\u0016\u0002h\u000e\\\u001cOI\u001c\t\u0015X9\u001bM+&\u000e[?W8Z+X:p$j\u0019˪HnÁ׾\u0003>3)oږ>\u000f5a\u001a^j]bG\rs,)EF\u001eIͅՙYq\tlCgZD|.\u001a@8\u0006\u001c1ousat\u0012\u0000i||\u0012?,/VZW\t6u{\u000e1\"TZ\t69d\u001e\u0000\\\u000b͛k9(k\u001ea14\u0007ُe?C\u00072?QW\u0007zSBDs0aL\u001fK\\\u0014\\A!ɪ\u0005[uʺ\u0017/r\u000eF\u001aХ\u0018\u001e\u001cct΋F\u0010\u000fBW1g\u001e'Pnn?Q@zc~0\u001eF\u00122$$4E⊾\u0005<\u001b!W&\u0005F'\u00132?1\u0011VbkX9ʍ[#w.B\\VS\u0013\u001d\\?&eV\u00168^\u0018ﵜ\rqRps\u00130V\u00152Z\u0010a[>r#z\u0006V0\u000e\r\u0015`A\u0019\u0004\u0003\u0017QDӣ`W\u0018P|)H \u0014\u0002_5vA\u001fA_\u0003&\u0002$P`\u001b\u001a\u0007\u0000\u0010ZN\u0004(\rȓ_(Hz0\u0002\t}\u001d\u0002?\n\u000b\u0011\u000f\u001fSR*\u0018W\u0001\u001e@\f'@C>\f\u0012:$[}\njWŏǘ}z`se8\u0006(V\u0007e3\u0019\u001ci\u000fCͫ|HQ\u0002\u0018\rYFc'W\u0011P[>~xeX&~\u0015?T2W:wU\u0018\u0005W/\\9QJBdz\u0007Fi:\u0019P8\u0016\bL4\u0014\u0016PM(#z\u0014Jt\u000fx/u\u0014eNb]%<-<2B(~P\u000fmf\u0015R=y;=D\u001dމ\u001floW\u00044ϛF\u001d\b啯\u0014#N\no7}I>b䏽KPQ9=vRh]~i\f+է8m\u001dǹP9v\u0001%\f7\u0010&\u000f82F;A\n=\u0012Z\u001ba\"\u001eO\u000e&\tt\r.\u0005¶\u0001\u0003_YI\u0011Nm|\u0016\u001e7&qiKz?v\u0000TCjZ>Ǎ\u0006N=s\u000e/C\u000f)KҮCzm]L\u001dN\u0004\u0006Z瞳\u000f̈́+З\t\u0006֘\r,\u0006ɄH@+\u0013w\u0007zQNM\u0007P%\"'\u0007W;l!ۻ<w\u0005V{b\\JgG\u0004\u001bc)O\u0000/\u000eh%c&wڹq\u0005Z?IߐFZO8y@aawvK\u00034\u0016\u0000\u001bci\u0000hV&\u00158r\u0001\u0014Av\r\u0001\u0011mp@_\u000f߮I@O62g\\ƺ\u0017z?kwWƨ\u00064;,\u001e8b(ڬO݁f\u001f^\u0015ZmT\bg/*Wn@ٚ88\u0005t\u001fP'\u0001\u0015\u000f^ܳ/\r@\u0013\f\u00148\u0001V;\u0019\rc2\u0000j_@_5\u001b\u001f\u0007lQ [3#=\u000ea\u0004k\u0019ks.\u0010W_$m\u00025%\u0006{\u0016qJ+y&O\u0004ڬgϲ\u0004OYX7v}gSݬ?]ޱʀ\bF`>Ml`\u001bk\u001dh\u0010.\u000e]'6@\u0003:i\u0003Gb\u001dEC\u0019mE]tM0/v_a\u0000}}=κ\u0003M&݀¼e\u001eı=n1@B!I\u0010\f\\k;{=\u0000ZJSn|\u0001*l9~w#\t\u0003MG\u000e'\u0015/J\u0015\u0001M8\u0006@7Lrp~\r`d'\u0017\u0013V\u0003\u001c\u001d0ntTI(S;{b\u001a\u0002Bk\u0006VC\u0011!\u0004\u00153{\u0015!wt\u0000]9QC4\u0006VơtY!\f2?\u001f*{[\u00004D$U\u001a9JCBݔ.f3F5\b`У)9Jܒ\u0013zy{f[n\u001e<w3\fy}!JnzC\u000fF\\z9ibl}W(nVKқkQjŘ$ҧz,{3\u001f)\u00140v }\u001c(=K&f__\u0007ҏWQj\u0018l\u0007\u0007į]'o=0ƕ\n,닃H..\u0012K\u0013ぱfӿHҍ/|4[\u00199J\u0018拏\u0015뚽tّe\u0013XD6ԾMS5RxF7/\\bN+ir\u0018o$CSUo\u001d1J\\{xa7XϠ_:3`\tUa78Mi-\u001do%5ee\u0019z&\u0015IU)\u001eMf͜#H\u001abu\u0007\u0006\u0014v\"G\u0004حs\u0002PPvױ\u0017뾏@\u001f@A0d@?n\u001d@h`#nC\u0007Z\u001fZbV\u0015\\\u0002nAo$)YmXi\u000e4\u001b{!\u0003])\u0007@؊`\u001d\b@בF\u0000\u0000Zضb݁\u0000\u0014\u0004\u000bGx\u0012k\u0007@ض~@Db\rT0~%5QkkqS16[3Sf)Zd߶\u0014\u0000cHT3\u00051~3k\u001a`\u001c\u0014N6~P?ӑC\u0010qZ\u000e\u0012\u0004V2]Nn\rU_Ck\u0000X$\u0017j\u001fW\u0005U\f\u0000m\u000b\u001e79a\u0005P4\u0000\b0t]!gWi\u001f&LǞa$ڿѤm\u000e.:t[d.O\u0012F\rlYٱ>\\\u0018S7\"'\u0006\u0002ӦU\u0001u\u001a$Eb.d.s[.<a|bk\u000fh= 0Z=C:?TLm|pfc\u0018\u001f\u0011/`<DVe|HTn\u001c!+\u0014A\u0016y1uY{b\u0017\\'=0MQP\u001bmz\u001aa)}%/,\u0007>\u001flYOz0hs6\u001e\u0013\rYJm\u0006ª|vV&ް|Mg\u001a\u0001~0p\u0017%\n˴tθ]R\f-F\u001c*C;,^{\fM&!GG\fn\u001845٦6.\\I\rH\u0003Bu\u001bdh[ϵ9MV\u0012O\u0014έ=.\u0018\u0013-]\"}\u0014Ֆ9\u000fMnpJM;1\u0007kj-ߓ0U讛z\u001d3X/&\u001f\u0007\u001d\f\u001dOhXP\u0011{fmfx\u0014`\fʏXAefz\\\u0017,v&\u000e\u0014(fbcJTI6%u?)lh,׹Ϛdt(1Z*(\u001asߘh\u0017::%nKDN>=-붫wnT;%:udK@W^^\u001bTy~\u0002oRgEE]re\"hbK4P+\u0010l]%Ƹa,JeØ-k\u000b-1~\b_JH\u0003dePmO\u001c\u000e֝\nÐ\u001f\u001f\bTqb㗡JpcNE\u0019庮҃\u0012^\u0016;nǼ\n|R&CT\u001d\u0001\u0015\u0011^b\u000fu![BW\u001c%%N\u001dqR\u0015c!]\u0013l]*wGa䶴x\u0018H@OeKo_\u000fe\u001e3Fa~6\u0019F .}\u0005\t\u0000tڧ`\u0000 +а#7\u00060+ü(Ռ/sxw\u001d2Hu\u0012d\u0006>\u0012\\f|&l9?\u0004\u001c־0+595v?%Wdѓ\ft\u00027f;\u001d$(LJuit\n\u001a\u0017%d6\rެ\u0003\u0014:\tiu7\u0004d\u001dtj\u0017\u001bZ6\u0018>/\u0006\u000eGG۲y#\u0010YԮR.4w!zXHvS|0Lk!/b\u0007\rlA\t=,6nfi̬(=9â#\u0001 ҙ7\u0002jrq&K۠nQ<,^Eh$I6293@u>#CW\u001cͨc߳|\u0003rny\f8q,UȾ-\u0000\u0000-ۦ}\u00031FGZN!ˢ*ƕΦº9@Cw\tǗY\u0011ݲ\f\u0013}&4Tщ@WzyC{C\nˬ-϶,ڎ]ti%@<\u0014֊棸\n\na\u0003-iOmL?!Dm\u001cn\u0016GǼQޥ)\u0015\bO]vB>$\u001b󌏈JX\u0005POv'r4xGh\\\u0004\rS<o<.8U,Ѡ\u0018'HVhiIviy/Ϯ1\n9֘o;q4YVl\u001c\u001aǇ^s\u001cwY>a^\u001a0@R&X|V=?NV\u0001c0>p\u00015z\\:{Of\\l\"]Xɹ\u0013a۱\b\u0004¾,\u0002hE^\u0005v<\u001c\u0002&%3dc{v7w^8!>,񕁍<L}4>ݐқ\"@\u001bkݥ\u0007/\u000faH{\\\u0018jWŠe{\u0015^Hh.{.<V2\rB#\"t\r\u001frG\"u$<E!\u000b< C݉_i\u0015&A,\u0016e\u0000(-iD>)\b҇5\u00024mEe\u000fn\u0004N>{Ԉ:\u0012̫\u00124> z.<\u0012\"ܖԕ\u0011/1͌\"\u001b\"\u0011]\u001aW0\u0002\u0012ly\\#鍳_Ys5\u0016LeO\fVr9P9\b\"\u0006'`=l\u0015~\\Q6^䥪$\u001aYhnnѢOʏ]QJ@*w3~FЙ\u0004,\u0017C\u001dA\u0017\b&;\u0010-8w\f]3Έ\u0016\\2\u0000\u001aAg.\u0017C\u001dAg\u0016\\&\f\u0014E\u0011\u0005猡󎠳E\u000b.\u0011C\u001dA&,\u001bC\u001dAg$jy\u0018:\b:\"1t\u000ed~iZ:r\u0004c%c\u0017\u0014t\u001dOncp>EpڔW\fb\u0013A8w{:\u0003\u0000m/9\u0019O.Q6MѾѻtAxKg|\u001eaY\u00193\u001b9G;>\u0017ռH7Dt!rI/s\u0007͹dB\r 9~U7j\r6yL:CB0\u001b\u001e)_>Câ׍_\u001b?؍b= ο11v\u0005\t\"|@8VrR4fw2E\bvtr*PsSz\u0016\u0012j\u0015by2)ȴ\u0012\rgX\u0000dy8\u0006\u0018hY\u001eakGZ8\u0001zpZ|q`$k8>\u000b\u0016a_\u0005\u0017t\u0014ivOGgh\u001c>Щub̩s?8>\u0005j\u00068>݂Iy~/&\u00062,$\u0014y߂/2jl6HfA\u001a{*0\u001313\u001f<Bǘ7HW9ƎN\u0005\u0004pf\"Lb'4q\u0018\u0016s1|D|sB۪lwB\u00191؉󈃬\u001a\"ibXoȫ>C\u0004^X'G]q0\u0014OV\b<nQr\u001b\u0000\u000b\r\b~\u0018z!GulR$).G#}\fs%\u0006u\u0005H'(a׈=U\u001e\u001b\u0014ob^xdi<1Ӟxdj|\u0016\u0019{,6Ƽ\u0016\u0019.9,2.\u0011vxjIvLf-2[dXfbtjM\u0005sЦM:\u0005ExF,34WN\u000fϙHӑ>e,2Ж<\u0017\u001dw~QL\"<:8RG-\u000e6MC#,,gٴ\u0016I<˓A$er{м\u0014ˇy\u0005T+x\u0015r] Os\u0018|sEpuJ\u0017qu\u000bv1\u0018\u0010\u0012__\f<Jt[;S+\u001e2\u001e\u000e䙈Lr<\\klx8\u0016\u00116\u001enA\u000f9Hj\u0005W\u0011\u000fgpKRc+\u000bЇj,\u0011\u000f7\u0003\"V\u001d\u000fG\u0011Źx83>c}ŋƋ-\u0013iʖ(lU>\u000e5zAڿ\u0013IQW|\u0019ql\u0005ۿ;U\nPl=:Gv<.*\u0019\u0005͚}<\u001f'd\b\\V\u001d^\u0004td8Oۍ(hUw\bcD2#&!#|/Fq|''CԊګ܁.\\e\u0010o\u0013Ǯ7Qxإ#.W\u0002\u0010(s\u0018Tn\u0012\u0015TnUo\\,\"[Υ\u0012\"R5\"[\\_QD\"RW\u0012z{5ح\u0003~k\ts\\\u0003msX 9\u0019\u0005f2\u001adr\r4źhmP8.P^4\u0014Ν*W\u001d\n\u001a/\u0014ΩW\u0012%C\u001cV\u0005?\u0011\nҕWvWv\\\"쌭Fx$\u0013\b\r#Jl\u000bf0\u0013(z͸pY\u0019S[5\u001cAl>6\u0010khGM\"%犰zPԋrƹ.gm\u0006PVδr:k\u0015%KE)Ы!P`8\u0019/\u001d\u001c⧡D庌\rc:7\u001dX~\u0001`ZvlIִ{\bZXp;[J\u0017J}zmqg\u0015\u0001:JD\nv\u0011a'~zEؽ_@QR\u001e\th\u001ea*-@\u001dn(մ\u0001\u0019\u0000RM\u001b#uFec\u00100@>9\u0015\u000b\u0002Q\u0018a\u0019a'g@뉷;\u0007P[>>!$Ky\u0001mF@% D^\u000f\u001d$ol*\u0014t6\u0011Ȼ^ |ƾ-nV\u001f.}>umjC\u00144+\rkSr$-Yu9#z]Oد]X\"5j\u0001ΐ|ȡ= |}VIMUϒVI-\u0002V\n?\fʋET\\\u0014͑DT <GhoF\u0015\u001c(Y4m,<#Hu]<*.\u001e4tj,=4aܣ\u0000\nh:7sutnC<h:7\u0007\u0010⊢܎]Y2jt4)n\u001bBt:ntD\u001fŅi,7(Mo6ʕEӹ9^W\u0010M\u0016K\u00123d4[,=W\u000bD\u0011FӹmFӄDӹu\u000fx4}mdY ,)2έ)\u0013b|bF\u0016[\u0005\u0012tntK`\u0010MgYF,\u001dM|tn\u0010X$cG^U4[,]`t\u0006s\u001b\u0003bet\u0004_\u0015G땫s?y_u4ۀHw\u0010\u0011Rԥ3jIĻ/r7eW\u0000\u001bs^DԒq\u0012OUYth9%9g\u0012e.(\u0014R\u001aO\u0005y\t\"_Oj;Oq=պ4DMꩨW$\u0000.\u0001NQ_gJ\u000ecevh_qjD(`\u0015xCQ$[:\u001d9\b\t͖n^cLNsG,̙u|\u0019\"}O>i,89ݲ\u001en7X`1\u0014ޓH\u001fg9S\u0004s3o\u0017`ʡ<|\u0015\bK\u000bZÜ\u000b\u000b]o\u001fPyƷHhm&\u0002'*p\u001e'\u00197ÖG<\u0011߉\u0013Xgӝ@/NoV\r\u0005\u001b5\u000e;Թ!#\u001fcK\u0007Vf\u001d\u0000m;ezcId'BM9\b{\u000f7+\u0015\u0010\u001a'[G=bfֽ\u00057Tyr,g *f\r\n-z\u001fљw>od\nlo>c7F>h2\u0018_\u0015̽\u000bG>+Nzuޮp\u0017[\u0002p;\u000428;p;Z\"o\ng\u000e\bP\u00062\u0019UHG$C\fw+pg}#;/n\u0001i|\fw%PoE#¥3Q\u0013Qd[A;-Ô\te|\b9ÝPf3|k1\u0002kM1G\u0003k)j\\KOF>&W\u0010X\u000b\u0010Y>Wj;Y0m|\f|`-y/|(]\u001eGZczaG%CxGiaL'bu &c\u0017+F)M\bbH\u000e>J\u000f\u001b\u0018\u001eW;\u0012\u0014҂0wN\u0015K$0\u0002aN\"}UKK\u000fIgE\u0005C)ou1n\u001eMb\u0018×Z<8!鵱T|_\t<2\u0011Z$S\\\u001eI7tJ\b]BSTQϞ)#ڦ\u0002˃\u0002B[g\u001c\u000eCa}Pӿ\tm\u001co_--ﬓc_%{T4\u0010&;-Ӟ.!N\u001b-\u000f[qey؞@jI\"PVھ$\u0000^\u000f7ƙ\u000e)\f\u0003h=#\u0003ץG\u0003(axgRhG<ѵ\u0005=4\r\u000eoIaxϭ\t)\b\u001c\u0007`m3\u0014p\u001eb$<\u0011h \f\bfıJ:\u0011hy}ބ\tT[t*\"$\u0006!>UuaH5.C\u0014i+l&ј];t҅\u0013Q>]^v\u0006\u000ei9r\u0007Nb6e\u001cstisf11vETߵԥ_f\u0016ZK\u0012Ev@szBz)⛻:*m>*\u00000{T\u001ci7A1>\n\u001e\u0014I1>=\n:Z\u00103]r%\"]\u0015\u0010\u0010uu0x&gie^NxL8\u0003\u0017V7n\u00111Z]չcrmS*Mdi\u0016\u001cf,[|}\u0000\u0017+\u00011bZ\u000bj5}4rW\\-fv!\u000eï=LW#Vv)n\u0004\u0010P#^e0ُ\u000e\u0004:\u0005O\u001bݶCKuGi\\\"l%PģS)iS흲{P@\u00156C\u00014if+Pb1Xdz%+f@u/6OcØ_,\\\u00189gV4\u0004\"\u000b\u0018#ˇ^Q,9W\u001aM\u0014 m\f߭\u001a&˨O\u0017\u0002\u0001DQ1ݶ\u000bE\u0001\u0000H%\u0012\u0018牎_\u0014 m\f u\u0015\u0011\u001d4aCSQ(@\u0018@=3\nPQ&[IF6ߤ|[|f&sZ|\u001eyW/\u0010LR>7+9cF|毤K{;!;\u001bj5y~Ern(ʼ~TwC-3\u001fw^?껡g\u000eh\u0015wC\u001d_P^?\u0017dYy9oi^4bZ\"ZA3\u001fuJ~tve\u0019sNa~sy.>Cά~.p\u000b^{pټ~\u001b\u001a]|^?~\u0001o\u0017%\u0000Y,v\u0005h^?wLV\u0013뙏oTFV?|ITyOVm\u0016\u0005ykj%P-g\u001cy(N\u0012Wږk`~Qi{p&[.oAڟ3\u001f)\u001c1nH].\u001f-\u001etVJXE^?~ئ~n'$oUX<\u001fV-k~.ݒՏ\u001414o^آy(\bg#f[(\u001f<<\u0017ڊA`n2\u0017oў6\u001f:KVl+\b~\\&ib^?o1\u0010Y?w^?W>ed[:\u001f\u001fU\u0014.E>||+\u001dKso`xm|Ѽ~`xOY>[0MG\u000b#l<\u0018/[m\u0005\u0011EEyVWgI\\*KvmsA\u0016+H^?X\u001d.w@)-ρ1dQ7FN%>\\Y:߁gV?\u0017˅yo\u000eh\u001ef .û\u000frTJv\u000f[:Li˴xo\\<k\u000e/Ն\u0016\u001e\u001el\u000fʘ5\u0014,h9ȵDʡطdhsZ/݇]{U\beIO\u000en_\u001e8\rEl-%Bb<;,\u0007Q\u0013eʫ^L2lP=bk//'l=1f\u0013|cϷ\u0014ލvٻkrt?Vؗ˯3EI=Fr̾m]ٷט$]$\u0001$\u001flKِEI^ST\u0010[\u0007ۑm)GZqs1f:۹;k7d֊\u001c\\\tq#\u00100r\"<W\u0003d\u0013$^Caoɐ4xak,&\u001f>\u0006B(>^R@|c|o/YĨ\u00029\u0001\u0003dΣW#-{xnkl}]lI}\u001fG\u001a^$F$V?\u0019I~\u0016wѻueR\u0012|\u000e'\u0016*Nhfab6E1\u001fPr'тmӵr(\u0011;3Kq\u0004u΢ziV\u0005`.G;xGbS>>W\u0012i-zh\u0006:zubOg@ӏ9$ql \u000e\u0003\nzR՜\u000er2zd4&;\u0018(P):'[j/\t\u001e˩\u0014zL\u0019\u001f2\tsnR*\u000fxcl\u000bۏFzAq+\u00106kqO/:J\u00055\u000fZR2}=\u000bY`\u0005_/ưd=f]?Bגf\u0001]Q\u0005~ɢ♍bx\u001d\u001eoӨ-*J!\u0010֚hR\u0002HdSf\nWilE\u001c?}69\u0019mb92<6\\\u00022\u0001}La(NfgWx?keA\f\u001576\u001fZfV\"w˚m\u00170ox|)]zzUo08m$X^7\u0019cyY4\n\u000f\u001a\u0014BP\u0002\u0005h\u0000uĿ\u0000-WG\u0004\u0011#,nF\u0007_d_\u001e:>2\u0011W\fxd3d\"w(\u0019^fCMᩒ;\u001fkKRR1*<%s\u0014\u0010cq\u0013*F(2\u0017<ar\u0018K|Ln?Q\u00119I]\u001cޕShS\u0018I,\u001a~2kHHl\u001f\u0006twG\u0016X*O\\\u0019G\u001egIG.\u0017eq\u0006,,wR~:#ai6qɍ',.bxT\u0011\\Ki\u0003.'~1N\u001fF:-\u001fr'G\u0006Jiz[V褅\u0019=Hǉ,\u0015;L:9'\u0010k޺\u0018ئ\f9,fNY(n|\u0006]+ ]@;\u0006j\u00131k\u0013ADq\nXJG\u000b\u0019s\u000e\u000el?< (U\u0004a\u000bZl\u0015rֱ\u000440<PQWIy7\u0019\bg6w8JT\u0014uwR߽ȝ\f\u0012Ql\u001e1SD\u001b2ŋ)L{\u0015z\u0016f$۶z钏2qA,z\u0002֡KDn<꼨ɦARU8kYa\u001c\n\u0001,=3N\u001dPEn;ϰ0qB{y\tw\u000f5jvΙO0ZYC\rY['x,e9ndh[9\u0011z\u000bs\u001a0KNDl@x/D6@< !կ\u000f.v<}H\u0012\u001b\b)H-J5%4a\"~\\ݥE@\u001b؅-&\u001eG1@k$&(ukWÜm-KƙݖޥQZ} p)ٔb\u001e\u001bGpr\u001cU>\\6]l$\r9#\nw-\u0019үǪ|*MVZ>Y\"=YU\u0000Bh\t}6\u0000|f\n\u001a\u0001sNQp_\roY\br\u001c?b\tM|`׵X\"6\u00050\u0006V{6v\u0000cڣG\u001dol\u0013 \"\bYƘ\u001cW\u001a\u0015,f6J\u0017 qTN\u001d\u000f\u000f_I=L;{\u0003lMkZ`\u0018Is6tvD)\u0005*?s٬iUt2M`++'Xrm\u0017\u0006NvA9QU}nsqvNlg½QfSz%lw\fKJmՑ\nP0c\\\u0004,;dx\u000f\u0004X:\u0007jH\u0011v̱4~]1b)mF^%ʗF0ȁ8\nz\t3=J]\\1}N[Ų|\u0019Fs\\Ԑc֦0h\u0017<e\u0019)vSKƲr2\u001dgj.\u0004DS\t8kGUȘ5Usl4G\u0007D_?\u0005\u001c1\u0004CҔ7Z'q\u0018Mj*\u0000~lf&oJ]BEG.cf\u0001\b\u000e\u0016(\u0005E/=\u000b\u001aE8\u000b.9Sm\u000b\u0012,Z\u0005r\u0014X \u001b)D%[ \u001d>1\u0003\u0014\n\u0014YOf\u000eoC:.:\u000e\u000eokX1߂u)0AV\u001duvKZHxTU\u001fO\u000ez\u0000y|M&\u0016׺5i\"M9Ïd6\u001fmmiP妦Θ\u001aT\r\u001aM\u000ep;v[\\\u0015v굣pSiUM4Zcκ\u001eE,k--\u0003u\u0018ztt>(40/]>6fmrT^NGgrƯ0*@R6RhaD3^8\f\\\u0002'\r?\u0013\u00140(h(\u0018)(\u0017Ct\u0003;I\u001dQ6@hO/Gφ&iED\u0013g1a0QP\u0010Yō\u000e#1x\u0019666=C{\u0019kQ5MN7\u001dN]6\u0003,RӪA /p,aCA\u0006\u001fq0\u0011\r0\r\u001dŚ$\b7_JEMGX\t\u0016qh*BO\u000bVƺmj!\t\u0016x*U\u000b}>\u001eX3'\u0018\u0003R\n2b\u0017?\n\u0000SFJ(ɞ\u0011vݲ\u0018~l~%jb>R\u0018H;\u001e'&\u0017Gg\u0005`d>U\u0013d\u000fxS?5?\u001bYf5?\u00130UU\u0006@4>\u0007+4?\u0013hWf~&\u001avD3@Yw\u000bh|64Ug\rʌ@xg\u0019VD3#weg\u0019D\u0010EL4>}jegYVd~&\u001aX7?\u0018~#WR~\u00174\")e\u000e@x._\u0014I1wAïFa]\u001b\be]\u0005\r\u0004\u000e_|k=wAo y>/Kӛ~\u00174VVa,`u`״S~\u00174ڣ\u000f|M\u000eï~~hhL=\u000fɓ7¥0\u0014͇$>ZD\u0006*ס]\u001a}v5,DM\u0014~!wAD1U>\u001fC\"6DX\u0002Z\u0014|\u0018l[>(\u001fƆih\u001d\u0019\u0005[ւrk\u0014 Rtc(`-\u0005\u0018\u0010\u000fƻMg\u0014%-'Et/\f2\fۢP%\u001a6ھU\u0013\u000eUr\u001cD[UJ.vX2%~Ԛxt\u0019\u00167D;N:]4rҡa;\\M\u0014bG݆\nS3\u0005Ca\u000bhuy/~+m\u001ff//(^؏v(\u0010BOie.tl҇~ؔ\u0011\u001bSWwZ'ҕޥVi]L^Us5w\fQ;TU\u00174Q}>\u0014/D\u0002d\u0006Ȟ\u0012M}\u0018rmDPN)5+-GQ%t(QS\u0019K3\u0004V\u001aR\u0019\u0006b\\\u000elVObS@u8K\u001fTp6kC\u001e\u000e%4\u0011S@r'X\u001f6LGJ۪]\be\u0018_Lek%E\u0007]Џ\u001b\u001cשVP \u001c7mANP\\$|\fM \u0005\u001f\u000bBK\u0004ӹ\u001c<f7\u0010v\u0010b8\u00100ǒR\u00198?\"zp޼mTŠZ\u0003uwQ\rہP\u0014Cv\u000e\u0013`\u0014\u001fOe\rZ\u001f\u000f<\u000eN:\u0013D?\u000eG9\bjx\u0003\u000fg0\u0013\u001d\u0006σO/l]\u0007҅B*OY.b3\\&82q;6\u0005|-S|:\u000fOi\u0014Pi6j\u0006h\u0013&FK@!\u0018\u0005\u001fu<ez̎>\u0002]}ش1\u0018j\u001dp{[V0\u000b\u001cL\u0013#1`%Z^ ̖|\t\u0002?#1\u000bmEϻ\u0001\u0018oB\u001emfI]˰JNF\u0011n\u001f\u000f?d\u0010cQ\u0015a\u0002%\u000fIe!(\u001bD\u000e4rY\u000b_4\u0001\rendstream\rendobj\r20 0 obj\r<</CreationDate(D:20101124133917+01'00')/Creator(Adobe Illustrator CS3)/Producer(Adobe PDF library 8.00)/ModDate(D:20101124133917+01'00')/Title(document-icon)>>\rendobj\rxref\r0 26\r0000000003 65535 f\r\n0000000016 00000 n\r\n0000017247 00000 n\r\n0000000004 00001 f\r\n0000000011 00000 f\r\n0000017510 00000 n\r\n0000025502 00000 n\r\n0000025574 00000 n\r\n0000025745 00000 n\r\n0000026708 00000 n\r\n0000034290 00000 n\r\n0000000000 00001 f\r\n0000017485 00000 n\r\n0000017298 00000 n\r\n0000017369 00000 n\r\n0000017400 00000 n\r\n0000018520 00000 n\r\n0000018633 00000 n\r\n0000018816 00000 n\r\n0000017882 00000 n\r\n0000051399 00000 n\r\n0000019082 00000 n\r\n0000024941 00000 n\r\n0000024989 00000 n\r\n0000018196 00000 n\r\n0000000148 00000 n\r\ntrailer\r<</Size 26/Root 1 0 R/Info 20 0 R/ID[<B3248180848146B7827A9C9BE6E79EBE><840DDCD1AC3A4D7586573D44D395F58B>]>>\rstartxref\r51576\r%%EOF\r"
  },
  {
    "path": "resources/OSX/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "scripts/AFCacheOSX-EngineRoom.sh",
    "content": "#!/bin/bash\n\nset -e\n#set -x\n\nOSX_SDK=macosx10.6\nOSX_ARCHS=\"x86_64 i386 ppc\"\n\n\nENGINEROOM_CFLAGS=\"-DDONT_USE_ENGINEROOM\"\nENGINEROOM_LDFLAGS=\"\"\n\nENGINEROOM_OSX=\"$SOURCE_ROOT/../EngineRoom/EngineRoom-OSX\"\n\nif [ -e \"$ENGINEROOM_OSX\" ] ; then\n\tENGINEROOM_CFLAGS=\"-DUSE_ENGINEROOM -DER_EMBEDDED_NAME=AFCache\"\n\tENGINEROOM_LDFLAGS=\"-weak_framework EngineRoom\"\n\n\tpushd \"$ENGINEROOM_OSX\"\n\txcodebuild -target EngineRoom-OSX -sdk $OSX_SDK -configuration \"$CONFIGURATION\" \\\n\t\t\"BUILD_DIR=$BUILD_DIR\" \\\n\t\t\"ARCHS=$OSX_ARCHS\" \\\n\t\t clean build\n\tpopd\nfi\n\n# DERIVED_SOURCES_DIR is too \"clean\"\nXCCONFIG=\"$BUILD_DIR/AFCache.xcconfig\"\ncat <<__EOCONFIG__ > \"$XCCONFIG\"\nARCHS=$OSX_ARCHS\nENGINEROOM_CFLAGS=$ENGINEROOM_CFLAGS\nENGINEROOM_LDFLAGS=$ENGINEROOM_LDFLAGS\n__EOCONFIG__\n\nxcodebuild -target AFCacheOSX -sdk $OSX_SDK -configuration \"$CONFIGURATION\" -xcconfig \"$XCCONFIG\" clean build\n\nexit 0\n"
  },
  {
    "path": "scripts/createFatLib.sh",
    "content": "#!/bin/sh\nXCODE_BUILD_DIR=\"../build\"\n\nset -e\nset -x\n\n\nxcodebuild -project ../AFCache-iOS.xcodeproj -target AFCache-iOS -sdk iphoneos \"ARCHS=armv6 armv7\" clean build\nxcodebuild -project ../AFCache-iOS.xcodeproj -target AFCache-iOS -sdk iphonesimulator \"ARCHS=i386 x86_64\" \"VALID_ARCHS=i386 x86_64\" clean build\nlipo -output ../release/libAFCache-iOS.a -create $XCODE_BUILD_DIR/Release-iphoneos/libAFCache-iOS.a $XCODE_BUILD_DIR/Release-iphonesimulator/libAFCache-iOS.a\n\n./updateAPI.sh\ncp ../CHANGES ../release/\n"
  },
  {
    "path": "scripts/updateAPI.sh",
    "content": "#!/bin/sh\n\nHEADER_DIR=../src/shared\n\ncat $HEADER_DIR/AFCacheableItemInfo.h > ../release/AFCacheLib.h.tmp\ncat $HEADER_DIR/AFCacheableItem.h >> ../release/AFCacheLib.h.tmp\ncat $HEADER_DIR/AFCache.h >> ../release/AFCacheLib.h.tmp\ncat $HEADER_DIR/AFURLCache.h >> ../release/AFCacheLib.h.tmp\ncat $HEADER_DIR/AFCacheableItem+Packaging.h >> ../release/AFCacheLib.h.tmp\ncat $HEADER_DIR/AFPackageInfo.h >> ../release/AFCacheLib.h.tmp\ncat $HEADER_DIR/AFCache+Packaging.h >> ../release/AFCacheLib.h.tmp\ncat $HEADER_DIR/AFCachePackageCreator.h >> ../release/AFCacheLib.h.tmp\ncat $HEADER_DIR/AFHTTPURLProtocol.h >> ../release/AFCacheLib.h.tmp\ncat $HEADER_DIR/AFMediaTypeParser.h >> ../release/AFCacheLib.h.tmp\n\ncat ../release/AFCacheLib.h.tmp | sed -e s,\\#import.*,,g > ../release/AFCacheLib.h\nrm ../release/AFCacheLib.h.tmp\n\n\n"
  },
  {
    "path": "src/3rdparty/AFRegexString/AFRegexString.h",
    "content": "/*\n * AFRegexString.h\n * Adds regular expressions to NSString\n *\n * Copyright 2008 Artifacts - Fine Software Development\n * http://www.artifacts.de\n * Author: Michael Markowski (m.markowski@artifacts.de)\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n#import <Foundation/Foundation.h>\n\n@interface AFRegex : NSObject {\n\n}\n\n@end\n\n\n@interface NSString (AFRegex)\n\n- (NSString *)stringByRegex:(NSString*)pattern substitution:(NSString*)substitute;\n- (BOOL)matchesPattern:(NSString*)pattern;\n- (BOOL)matchesPattern:(NSString*)pattern options:(int)options;\n\n\n@end"
  },
  {
    "path": "src/3rdparty/AFRegexString/AFRegexString.m",
    "content": "/*\n * AFRegexString\n * Adds regular expressions to NSString\n *\n * Copyright 2008 Artifacts - Fine Software Development\n * http://www.artifacts.de\n * Author: Michael Markowski (m.markowski@artifacts.de)\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Borrowed rreplace function from: http://www.daniweb.com/code/snippet733.html\n * TkTkorrovi\n *\n * Influenced by CSRegex http://www.cocoadev.com/index.pl?CSRegex \n * by Dag Ågren aka WAHa\n * \n */\n\n#import \"AFRegexString.h\"\n#import \"regex.h\"\n\n/*\n * Replaces all occurences and stores it in buf\n */\nint rreplace (char *buf, int size, regex_t *re, char *rp)\n{\n    char *pos;\n    long long sub, so, n;\n    regmatch_t pmatch [10]; /* regoff_t is int so size is int */\n\t\n    if (regexec (re, buf, 10, pmatch, 0)) return 0;\n    for (pos = rp; *pos; pos++) \n\t{\n        if (*pos == '\\\\' && *(pos + 1) > '0' && *(pos + 1) <= '9') \n\t\t{\n            so = pmatch [*(pos + 1) - 48].rm_so;\n            n = pmatch [*(pos + 1) - 48].rm_eo - so;\n            if (so < 0 || strlen (rp) + n - 1 > size) return 1;\n            memmove (pos + n, pos + 2, strlen (pos) - 1);\n            memmove (pos, buf + so, n);\n            pos = pos + n - 2;\n        }\n\t}\n    sub = pmatch [1].rm_so; /* no repeated replace when sub >= 0 */\n    for (pos = buf; !regexec (re, pos, 1, pmatch, 0); ) \n\t{\n        n = pmatch [0].rm_eo - pmatch [0].rm_so;\n        pos += pmatch [0].rm_so;\n        if (strlen (buf) - n + strlen (rp) + 1 > size) return 1;\n        memmove (pos + strlen (rp), pos + n, strlen (pos) - n + 1);\n        memmove (pos, rp, strlen (rp));\n        pos += strlen (rp);\n        if (sub >= 0) break;\n    }\n    return 0;\n}\n\n@implementation NSString (AFRegex)\n\n- (NSString *)stringByRegex:(NSString*)pattern substitution:(NSString*)substitute\n{\n\tregex_t preg;\n\tNSString *result = nil;\n\t\n\t// compile pattern\n\tint err = regcomp(&preg, [pattern UTF8String], 0 | REG_ICASE | REG_EXTENDED);\n\tif (err)\n\t{\n\t\tchar errmsg[256];\n\t\tregerror(err, &preg, errmsg, sizeof(errmsg));\t\t\n//\t\t[NSException raise:@\"AFRegexStringException\"\n//\t\t\t\t\tformat:@\"Regex compilation failed for \\\"%@\\\": %s\", pattern, errmsg];\n\t\treturn [NSString stringWithString:self];\n\t}\n\telse\n\t{\n\t\tchar buffer[4096];\n\t\tchar *buf = buffer;\n\t\tconst char *utf8String = [self UTF8String];\n\n\t\tif(strlen(utf8String) >= sizeof(buffer))\n\t\t    buf = malloc(strlen(utf8String) + 1);\n\n\t\tstrcpy(buf, utf8String);\n\t\tchar *replaceStr = (char*)[substitute UTF8String];\n\t\t\n\t\tif (rreplace (buf, 4096, &preg, replaceStr))\n\t\t{\n//\t\t\t[NSException raise:@\"AFRegexStringException\"\n//\t\t\t\t\t\tformat:@\"Replace failed\"];\n\t\t\tresult = [NSString stringWithString:self];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = [NSString stringWithUTF8String:buf];\n\t\t}\t\n\n\t\tif(buf != buffer)\n\t\t    free(buf);\n\t}\n\t\n\t\n\tregfree(&preg);  // fixme: used to be commented\n\treturn result;\n}\n\n- (BOOL)matchesPattern:(NSString*)pattern\n{\n\t//TODO\n\treturn NO;\n}\n\n/*\n OPTIONS:\n \n REG_EXTENDED  Compile modern (``extended'') REs, rather than the obsolete (``basic'') REs that are the default.\n REG_BASIC     This is a synonym for 0, provided as a counterpart to REG_EXTENDED to improve readability.\n REG_NOSPEC    Compile with recognition of all special characters turned off.  All characters are thus considered ordinary, so the\n ``RE'' is a literal string.  This is an extension, compatible with but not specified by IEEE Std 1003.2 (``POSIX.2''),\n and should be used with caution in software intended to be portable to other systems.  REG_EXTENDED and REG_NOSPEC may\n not be used in the same call to regcomp().\n \n REG_ICASE     Compile for matching that ignores upper/lower case distinctions.  See re_format(7).\n REG_NOSUB     Compile for matching that need only report success or failure, not what was matched.\n REG_NEWLINE   Compile for newline-sensitive matching.  By default, newline is a completely ordinary character with no special meaning\n in either REs or strings.  With this flag, `[^' bracket expressions and `.' never match newline, a `^' anchor matches\n the null string after any newline in the string in addition to its normal function, and the `$' anchor matches the null\n string before any newline in the string in addition to its normal function.\n \n REG_PEND      The regular expression ends, not at the first NUL, but just before the character pointed to by the re_endp member of\n the structure pointed to by preg.  The re_endp member is of type const char *.  This flag permits inclusion of NULs in\n the RE; they are considered ordinary characters.  This is an extension, compatible with but not specified by IEEE Std\n 1003.2 (``POSIX.2''), and should be used with caution in software intended to be portable to other systems.\n */\n- (BOOL)matchesPattern:(NSString*)pattern options:(int)options\n{\n\t//TODO\n\treturn NO;\t\n}\n\n-(NSString *)escapedPattern\n{\n\tunsigned long len = [self length];\n\tNSMutableString *escaped=[NSMutableString stringWithCapacity:len];\n\t\n\tfor(int i=0; i<len; i++)\n\t{\n\t\tunichar c=[self characterAtIndex:i];\n\t\tif (c=='^' || \n\t\t\tc=='.' || \n\t\t\tc=='[' || \n\t\t\tc=='$' ||\n\t\t\tc=='(' || \n\t\t\tc==')' ||\n\t\t\tc=='|' ||\n\t\t\tc=='*' || \n\t\t\tc=='+' ||\n\t\t\tc=='?' ||\n\t\t\tc=='{' ||\n\t\t\tc=='\\\\') [escaped appendFormat:@\"\\\\%C\", c];\n\t\telse [escaped appendFormat:@\"%C\", c];\n\t}\n\treturn [NSString stringWithString:escaped];\n}\n\n@end\n"
  },
  {
    "path": "src/Examples/CacheableItemDemoController.h",
    "content": "//\n//  CacheableItemDemoController.h\n//  AFCache\n//\n//  Created by Michael Markowski on 31.08.10.\n//  Copyright 2010 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"AFCache.h\"\n#import \"AFCacheableItem.h\"\n\n@interface CacheableItemDemoController : UIViewController {\n\tUITextView *log;\n\tUITextView *url;\n\tUIProgressView *progressView;\n\tUIButton *loadButton;\n\tUIButton *cancelButton;\n\tUIToolbar *toolbar;\n}\n\n@property (nonatomic, retain) IBOutlet UITextView *log;\n@property (nonatomic, retain) IBOutlet UITextView *url;\n@property (nonatomic, retain) IBOutlet UIProgressView *progressView;\n@property (nonatomic, retain) IBOutlet UIButton *loadButton;\n@property (nonatomic, retain) IBOutlet UIButton *cancelButton;\n@property (nonatomic, retain) IBOutlet UIToolbar *toolbar;\n\n- (IBAction)loadAction:(id)sender;\n- (IBAction)cancelAction:(id)sender;\n- (IBAction)clearAction:(id)sender;\n- (IBAction)dismissKeyboardAction:(id)sender;\n\n@end\n"
  },
  {
    "path": "src/Examples/CacheableItemDemoController.m",
    "content": "//\n//  CacheableItemDemoController.m\n//  AFCache\n//\n//  Created by Michael Markowski on 31.08.10.\n//  Copyright 2010 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import \"CacheableItemDemoController.h\"\n\n\n@implementation CacheableItemDemoController\n\n@synthesize log, progressView, loadButton, cancelButton, url, toolbar;\n\n- (void)viewDidLoad {\n\t[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];\n\t[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];\n\ttoolbar.alpha = 0;\n}\n\n- (void)viewDidUnload {\n\t[[NSNotificationCenter defaultCenter] removeObserver:self];\n}\n\n- (void)keyboardWillShow:(NSNotification*)notif {\n\t[UIView beginAnimations:nil context:NULL];\n\t[UIView setAnimationDuration:0.25];\n\ttoolbar.alpha = 1;\n\t[UIView commitAnimations];\t\n}\n\n- (void)keyboardDidHide:(NSNotification*)notif {\n\t[UIView beginAnimations:nil context:NULL];\n\t[UIView setAnimationDuration:0.25];\n\ttoolbar.alpha = 0;\n\t[UIView commitAnimations];\t\n}\n\n- (IBAction)loadAction:(id)sender {\n\tprogressView.progress = 0.0f;\n\tloadButton.enabled = NO;\n\tint pending = [[AFCache sharedInstance].pendingConnections count];\n\tlog.text = [NSString stringWithFormat: @\"Started request. Pending connections: %d\", pending+1];\t\n\tNSURL *theURL = [NSURL URLWithString:url.text];\n\tif (theURL) {\n\t\t[[AFCache sharedInstance] cachedObjectForURL:theURL delegate:self];\n\t} else {\n\t\tlog.text = @\"Invalid URL.\";\n\t}\n}\n- (IBAction)dismissKeyboardAction:(id)sender {\n\t[url resignFirstResponder];\n}\n\n- (IBAction)cancelAction:(id)sender {\n\tprogressView.progress = 0.0f;\n\t[[AFCache sharedInstance] cancelAsynchronousOperationsForDelegate:self];\n\tint pending = [[AFCache sharedInstance].pendingConnections count];\n\tlog.text = [NSString stringWithFormat: @\"Canceled request. Pending connections: %d\", pending];\n\tloadButton.enabled = YES;\n}\n\n- (IBAction)clearAction:(id)sender {\n\t[[AFCache sharedInstance] invalidateAll];\n\tlog.text = @\"Cleared cache completely.\";\n}\n\n- (void) connectionDidFail: (AFCacheableItem *) cacheableItem {\n\tprogressView.progress = 0.0f;\n\tlog.text = [NSString stringWithFormat:@\"FAIL.\\n%@\", [cacheableItem.error description]];\n}\n\n- (void) connectionDidFinish: (AFCacheableItem *) cacheableItem {\n\tlog.text = [NSString stringWithFormat:@\"SUCCESS.\\n%@\", [cacheableItem description]];\n\tloadButton.enabled = YES;\t\n}\n\n- (void) cacheableItemDidReceiveData: (AFCacheableItem *) cacheableItem {\n\tfloat totalSize = cacheableItem.info.contentLength;\n\tfloat currentSize = cacheableItem.currentContentLength;\n\tfloat percentage = currentSize / (totalSize/100);\n\tprogressView.progress = percentage / 100;\n}\n\n- (void)dealloc {\n\t[toolbar release];\n\t[log release];\n\t[url release];\n\t[progressView release];\n\t[loadButton release];\n\t[cancelButton release];\t\n    [super dealloc];\n}\n\n\n@end\n"
  },
  {
    "path": "src/Examples/CacheableItemDemoController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"7.10\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1552</int>\n\t\t<string key=\"IBDocument.SystemVersion\">11G63</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">3084</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1138.51</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">569.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t<string key=\"NS.object.0\">2083</string>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.IntegratedClassDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>IBProxyObject</string>\n\t\t\t<string>IBUIBarButtonItem</string>\n\t\t\t<string>IBUIButton</string>\n\t\t\t<string>IBUILabel</string>\n\t\t\t<string>IBUIProgressView</string>\n\t\t\t<string>IBUITextView</string>\n\t\t\t<string>IBUIToolbar</string>\n\t\t\t<string>IBUIView</string>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.PluginDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<string key=\"NS.key.0\">PluginDependencyRecalculationVersion</string>\n\t\t\t<integer value=\"1\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"IBProxyObject\" id=\"372490531\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFilesOwner</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBProxyObject\" id=\"975951072\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFirstResponder</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBUIView\" id=\"191373211\">\n\t\t\t\t<reference key=\"NSNextResponder\"/>\n\t\t\t\t<int key=\"NSvFlags\">274</int>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"NSSubviews\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBUITextView\" id=\"801959338\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">274</int>\n\t\t\t\t\t\t<string key=\"NSFrameSize\">{320, 119}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"846933387\"/>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\" id=\"61312714\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MCAwIDAAA</bytes>\n\t\t\t\t\t\t\t<string key=\"IBUIColorCocoaTouchKeyPath\">darkTextColor</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<bool key=\"IBUIMultipleTouchEnabled\">YES</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<string key=\"IBUIText\">Press the \"Load\" button.</string>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUITextColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC40NzY0MjYyNzk4IDEgMAA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBUITextInputTraits\" key=\"IBUITextInputTraits\">\n\t\t\t\t\t\t\t<int key=\"IBUIAutocapitalizationType\">2</int>\n\t\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBUIFontDescription\" key=\"IBUIFontDescription\">\n\t\t\t\t\t\t\t<string key=\"name\">Courier-Bold</string>\n\t\t\t\t\t\t\t<string key=\"family\">Courier</string>\n\t\t\t\t\t\t\t<int key=\"traits\">2</int>\n\t\t\t\t\t\t\t<double key=\"pointSize\">12</double>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSFont\" key=\"IBUIFont\">\n\t\t\t\t\t\t\t<string key=\"NSName\">Courier-Bold</string>\n\t\t\t\t\t\t\t<double key=\"NSSize\">12</double>\n\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUILabel\" id=\"1014875351\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 144}, {42, 21}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"183255173\"/>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<int key=\"IBUIContentMode\">7</int>\n\t\t\t\t\t\t<bool key=\"IBUIUserInteractionEnabled\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<string key=\"IBUIText\">URL</string>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUITextColor\" id=\"891996729\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MQA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<nil key=\"IBUIHighlightedColor\"/>\n\t\t\t\t\t\t<int key=\"IBUIBaselineAdjustment\">1</int>\n\t\t\t\t\t\t<float key=\"IBUIMinimumFontSize\">10</float>\n\t\t\t\t\t\t<object class=\"IBUIFontDescription\" key=\"IBUIFontDescription\" id=\"995547629\">\n\t\t\t\t\t\t\t<int key=\"type\">1</int>\n\t\t\t\t\t\t\t<double key=\"pointSize\">17</double>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSFont\" key=\"IBUIFont\" id=\"793819734\">\n\t\t\t\t\t\t\t<string key=\"NSName\">Helvetica</string>\n\t\t\t\t\t\t\t<double key=\"NSSize\">17</double>\n\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUITextView\" id=\"978912910\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 173}, {280, 78}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"632153461\"/>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC45MTg0NzgyNjA5IDAuOTE4NDc4MjYwOSAwLjkxODQ3ODI2MDkAA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<bool key=\"IBUIMultipleTouchEnabled\">YES</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<string key=\"IBUIText\">http://localhost/~cweymann/huge.mov</string>\n\t\t\t\t\t\t<reference key=\"IBUITextColor\" ref=\"61312714\"/>\n\t\t\t\t\t\t<object class=\"IBUITextInputTraits\" key=\"IBUITextInputTraits\">\n\t\t\t\t\t\t\t<int key=\"IBUIAutocapitalizationType\">2</int>\n\t\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"IBUIFontDescription\" ref=\"995547629\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFont\" ref=\"793819734\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIButton\" id=\"632153461\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 315}, {72, 37}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"445865620\"/>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIContentHorizontalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIContentVerticalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIButtonType\">1</int>\n\t\t\t\t\t\t<string key=\"IBUINormalTitle\">Load</string>\n\t\t\t\t\t\t<reference key=\"IBUIHighlightedTitleColor\" ref=\"891996729\"/>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleShadowColor\" id=\"131280048\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MC41AA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBUIFontDescription\" key=\"IBUIFontDescription\" id=\"384368024\">\n\t\t\t\t\t\t\t<string key=\"name\">Helvetica-Bold</string>\n\t\t\t\t\t\t\t<string key=\"family\">Helvetica</string>\n\t\t\t\t\t\t\t<int key=\"traits\">2</int>\n\t\t\t\t\t\t\t<double key=\"pointSize\">15</double>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSFont\" key=\"IBUIFont\" id=\"613297077\">\n\t\t\t\t\t\t\t<string key=\"NSName\">Helvetica-Bold</string>\n\t\t\t\t\t\t\t<double key=\"NSSize\">15</double>\n\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIButton\" id=\"445865620\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{99, 315}, {74, 37}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"1001683740\"/>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIContentHorizontalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIContentVerticalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIButtonType\">1</int>\n\t\t\t\t\t\t<string key=\"IBUINormalTitle\">Cancel</string>\n\t\t\t\t\t\t<reference key=\"IBUIHighlightedTitleColor\" ref=\"891996729\"/>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"IBUINormalTitleShadowColor\" ref=\"131280048\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFontDescription\" ref=\"384368024\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFont\" ref=\"613297077\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIButton\" id=\"1001683740\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{181, 315}, {74, 37}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\"/>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIContentHorizontalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIContentVerticalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIButtonType\">1</int>\n\t\t\t\t\t\t<string key=\"IBUINormalTitle\">Clear</string>\n\t\t\t\t\t\t<reference key=\"IBUIHighlightedTitleColor\" ref=\"891996729\"/>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"IBUINormalTitleShadowColor\" ref=\"131280048\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFontDescription\" ref=\"384368024\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFont\" ref=\"613297077\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIProgressView\" id=\"846933387\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 127}, {280, 11}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"1014875351\"/>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIProgressViewStyle\">1</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIToolbar\" id=\"183255173\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">266</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{0, 207}, {320, 44}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"978912910\"/>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUIClearsContextBeforeDrawing\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIBarStyle\">1</int>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"IBUIItems\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"IBUIBarButtonItem\" id=\"126399631\">\n\t\t\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t\t\t<reference key=\"IBUIToolbar\" ref=\"183255173\"/>\n\t\t\t\t\t\t\t\t<int key=\"IBUISystemItemIdentifier\">5</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBUIBarButtonItem\" id=\"302698566\">\n\t\t\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t\t\t<int key=\"IBUIStyle\">2</int>\n\t\t\t\t\t\t\t\t<reference key=\"IBUIToolbar\" ref=\"183255173\"/>\n\t\t\t\t\t\t\t\t<int key=\"IBUISystemItemIdentifier\">0</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"NSFrame\">{{0, 20}, {320, 416}}</string>\n\t\t\t\t<reference key=\"NSSuperview\"/>\n\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"801959338\"/>\n\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t<bytes key=\"NSWhite\">MC4zMzMzMzMzMzMzAA</bytes>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBUISimulatedStatusBarMetrics\" key=\"IBUISimulatedStatusBarMetrics\"/>\n\t\t\t\t<object class=\"IBUISimulatedToolbarMetrics\" key=\"IBUISimulatedBottomBarMetrics\">\n\t\t\t\t\t<int key=\"IBUIBarStyle\">1</int>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<object class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">view</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">3</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">loadButton</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"632153461\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">10</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">cancelButton</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"445865620\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">11</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">url</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"978912910\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">12</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">log</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"801959338\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">13</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">progressView</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"846933387\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">19</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">toolbar</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"183255173\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">27</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">delegate</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"801959338\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"372490531\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">28</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchEventConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">loadAction:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"632153461\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"372490531\"/>\n\t\t\t\t\t\t<int key=\"IBEventType\">7</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">17</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchEventConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">cancelAction:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"445865620\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"372490531\"/>\n\t\t\t\t\t\t<int key=\"IBEventType\">7</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">18</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchEventConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">cancelAction:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001683740\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"372490531\"/>\n\t\t\t\t\t\t<int key=\"IBEventType\">7</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">21</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchEventConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">clearAction:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001683740\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"372490531\"/>\n\t\t\t\t\t\t<int key=\"IBEventType\">7</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">22</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchEventConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">dismissKeyboardAction:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"302698566\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"372490531\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">26</int>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<object class=\"NSArray\" key=\"orderedObjects\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"object\" id=\"0\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"191373211\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"846933387\"/>\n\t\t\t\t\t\t\t<reference ref=\"1014875351\"/>\n\t\t\t\t\t\t\t<reference ref=\"978912910\"/>\n\t\t\t\t\t\t\t<reference ref=\"632153461\"/>\n\t\t\t\t\t\t\t<reference ref=\"445865620\"/>\n\t\t\t\t\t\t\t<reference ref=\"801959338\"/>\n\t\t\t\t\t\t\t<reference ref=\"1001683740\"/>\n\t\t\t\t\t\t\t<reference ref=\"183255173\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"975951072\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">4</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"801959338\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">5</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1014875351\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">6</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"978912910\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">7</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"632153461\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">8</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"445865620\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">9</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"846933387\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">20</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1001683740\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">23</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"183255173\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"302698566\"/>\n\t\t\t\t\t\t\t<reference ref=\"126399631\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">24</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"302698566\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"183255173\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">25</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"126399631\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"183255173\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>-1.CustomClassName</string>\n\t\t\t\t\t<string>-1.IBPluginDependency</string>\n\t\t\t\t\t<string>-2.CustomClassName</string>\n\t\t\t\t\t<string>-2.IBPluginDependency</string>\n\t\t\t\t\t<string>1.IBPluginDependency</string>\n\t\t\t\t\t<string>20.IBPluginDependency</string>\n\t\t\t\t\t<string>23.IBPluginDependency</string>\n\t\t\t\t\t<string>24.IBPluginDependency</string>\n\t\t\t\t\t<string>25.IBPluginDependency</string>\n\t\t\t\t\t<string>4.IBPluginDependency</string>\n\t\t\t\t\t<string>5.IBPluginDependency</string>\n\t\t\t\t\t<string>6.IBPluginDependency</string>\n\t\t\t\t\t<string>7.IBPluginDependency</string>\n\t\t\t\t\t<string>8.IBPluginDependency</string>\n\t\t\t\t\t<string>9.IBPluginDependency</string>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>CacheableItemDemoController</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>UIResponder</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"unlocalizedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\"/>\n\t\t\t\t<reference key=\"dict.values\" ref=\"0\"/>\n\t\t\t</object>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"localizations\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\"/>\n\t\t\t\t<reference key=\"dict.values\" ref=\"0\"/>\n\t\t\t</object>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">28</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\"/>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDependencyDefaults\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>\n\t\t\t<real value=\"1552\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDevelopmentDependencies\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>\n\t\t\t<integer value=\"3000\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t\t<string key=\"IBCocoaTouchPluginVersion\">2083</string>\n\t</data>\n</archive>\n"
  },
  {
    "path": "src/Examples/Demo-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>English</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFiles</key>\n\t<array>\n\t\t<string>Icon57x57.png</string>\n\t\t<string>Icon114x114.png</string>\n\t</array>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.yourcompany.${PRODUCT_NAME:identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>NSMainNibFile</key>\n\t<string>MainWindow</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "src/Examples/DemoAppDelegate.h",
    "content": "//\n//  DemoAppDelegate.h\n//  Demo\n//\n//  Created by Michael Markowski on 25.08.10.\n//  Copyright Artifacts - Fine Software Development 2010. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface DemoAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {\n    UIWindow *window;\n    UITabBarController *tabBarController;\n}\n\n@property (nonatomic, retain) IBOutlet UIWindow *window;\n@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;\n\n@end\n"
  },
  {
    "path": "src/Examples/DemoAppDelegate.m",
    "content": "//\n//  DemoAppDelegate.m\n//  Demo\n//\n//  Created by Michael Markowski on 25.08.10.\n//  Copyright Artifacts - Fine Software Development 2010. All rights reserved.\n//\n\n#import \"DemoAppDelegate.h\"\n#import \"AFCache.h\"\n\n@implementation DemoAppDelegate\n\n@synthesize window;\n@synthesize tabBarController;\n\n\n#pragma mark -\n#pragma mark Application lifecycle\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    \n    \n    // Override point for customization after application launch.\n\n\t// Add NSURLCache to use AFCache in UIWebViews\n    AFURLCache* urlCache = [[[AFURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:@\"\"] autorelease];\n    [NSURLCache setSharedURLCache:urlCache];\t\n\t\n    // Add the tab bar controller's view to the window and display.\n    [window addSubview:tabBarController.view];\n    [window makeKeyAndVisible];\n\n    return YES;\n}\n\n\n- (void)applicationWillResignActive:(UIApplication *)application {\n    /*\n     Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n     Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n     */\n}\n\n\n- (void)applicationDidEnterBackground:(UIApplication *)application {\n    /*\n     Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. \n     If your application supports background execution, called instead of applicationWillTerminate: when the user quits.\n     */\n}\n\n\n- (void)applicationWillEnterForeground:(UIApplication *)application {\n    /*\n     Called as part of  transition from the background to the inactive state: here you can undo many of the changes made on entering the background.\n     */\n}\n\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n    /*\n     Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n     */\n}\n\n\n- (void)applicationWillTerminate:(UIApplication *)application {\n    /*\n     Called when the application is about to terminate.\n     See also applicationDidEnterBackground:.\n     */\n}\n\n\n#pragma mark -\n#pragma mark UITabBarControllerDelegate methods\n\n/*\n// Optional UITabBarControllerDelegate method.\n- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {\n}\n*/\n\n/*\n// Optional UITabBarControllerDelegate method.\n- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed {\n}\n*/\n\n\n#pragma mark -\n#pragma mark Memory management\n\n- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {\n    /*\n     Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later.\n     */\n}\n\n\n- (void)dealloc {\n    [tabBarController release];\n    [window release];\n    [super dealloc];\n}\n\n@end\n\n"
  },
  {
    "path": "src/Examples/Demo_Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'Demo' target in the 'Demo' project\n//\n\n#ifdef __OBJC__\n    #import <Foundation/Foundation.h>\n    #import <UIKit/UIKit.h>\n#endif\n\n//#define RESUMEABLE_DOWNLOAD\n"
  },
  {
    "path": "src/Examples/MainWindow.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"7.10\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">800</int>\n\t\t<string key=\"IBDocument.SystemVersion\">10F569</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">788</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1038.29</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">461.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t<string key=\"NS.object.0\">117</string>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.EditedObjectIDs\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<integer value=\"106\"/>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.PluginDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\" id=\"0\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"IBProxyObject\" id=\"841351856\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFilesOwner</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBProxyObject\" id=\"532797962\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFirstResponder</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBUICustomObject\" id=\"664661524\">\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBUIWindow\" id=\"380026005\">\n\t\t\t\t<nil key=\"NSNextResponder\"/>\n\t\t\t\t<int key=\"NSvFlags\">1316</int>\n\t\t\t\t<object class=\"NSPSMatrix\" key=\"NSFrameMatrix\"/>\n\t\t\t\t<string key=\"NSFrameSize\">{320, 480}</string>\n\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t<bytes key=\"NSRGB\">MSAxIDEAA</bytes>\n\t\t\t\t</object>\n\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t<bool key=\"IBUIClearsContextBeforeDrawing\">NO</bool>\n\t\t\t\t<object class=\"IBUISimulatedStatusBarMetrics\" key=\"IBUISimulatedStatusBarMetrics\"/>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t<bool key=\"IBUIResizesToFullScreen\">YES</bool>\n\t\t\t</object>\n\t\t\t<object class=\"IBUITabBarController\" id=\"1034742383\">\n\t\t\t\t<object class=\"IBUISimulatedTabBarMetrics\" key=\"IBUISimulatedBottomBarMetrics\"/>\n\t\t\t\t<object class=\"IBUISimulatedStatusBarMetrics\" key=\"IBUISimulatedStatusBarMetrics\"/>\n\t\t\t\t<object class=\"IBUISimulatedOrientationMetrics\" key=\"IBUISimulatedOrientationMetrics\">\n\t\t\t\t\t<int key=\"interfaceOrientation\">1</int>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t<bool key=\"IBUIHorizontal\">NO</bool>\n\t\t\t\t<object class=\"IBUIViewController\" key=\"IBUISelectedViewController\" id=\"29305152\">\n\t\t\t\t\t<object class=\"IBUITabBarItem\" key=\"IBUITabBarItem\" id=\"273290901\">\n\t\t\t\t\t\t<string key=\"IBUITitle\">CacheableItem</string>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<reference key=\"IBUITabBar\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<reference key=\"IBUIParentViewController\" ref=\"1034742383\"/>\n\t\t\t\t\t<string key=\"IBUINibName\">CacheableItemDemoController</string>\n\t\t\t\t\t<object class=\"IBUISimulatedStatusBarMetrics\" key=\"IBUISimulatedStatusBarMetrics\"/>\n\t\t\t\t\t<object class=\"IBUISimulatedOrientationMetrics\" key=\"IBUISimulatedOrientationMetrics\">\n\t\t\t\t\t\t<int key=\"interfaceOrientation\">1</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t<bool key=\"IBUIHorizontal\">NO</bool>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"IBUIViewControllers\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<reference ref=\"29305152\"/>\n\t\t\t\t\t<object class=\"IBUIViewController\" id=\"1024858337\">\n\t\t\t\t\t\t<object class=\"IBUITabBarItem\" key=\"IBUITabBarItem\" id=\"765670903\">\n\t\t\t\t\t\t\t<string key=\"IBUITitle\">Packaging</string>\n\t\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t\t<reference key=\"IBUITabBar\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"IBUIParentViewController\" ref=\"1034742383\"/>\n\t\t\t\t\t\t<string key=\"IBUINibName\">Packaging</string>\n\t\t\t\t\t\t<object class=\"IBUISimulatedOrientationMetrics\" key=\"IBUISimulatedOrientationMetrics\">\n\t\t\t\t\t\t\t<int key=\"interfaceOrientation\">1</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<bool key=\"IBUIHorizontal\">NO</bool>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIViewController\" id=\"268481961\">\n\t\t\t\t\t\t<object class=\"IBUITabBarItem\" key=\"IBUITabBarItem\" id=\"807309489\">\n\t\t\t\t\t\t\t<string key=\"IBUITitle\">NSURLRequest</string>\n\t\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t\t<reference key=\"IBUITabBar\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"IBUIParentViewController\" ref=\"1034742383\"/>\n\t\t\t\t\t\t<string key=\"IBUINibName\">NSURLRequest</string>\n\t\t\t\t\t\t<object class=\"IBUISimulatedOrientationMetrics\" key=\"IBUISimulatedOrientationMetrics\">\n\t\t\t\t\t\t\t<int key=\"interfaceOrientation\">1</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<bool key=\"IBUIHorizontal\">NO</bool>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBUITabBar\" key=\"IBUITabBar\" id=\"795333663\">\n\t\t\t\t\t<nil key=\"NSNextResponder\"/>\n\t\t\t\t\t<int key=\"NSvFlags\">266</int>\n\t\t\t\t\t<string key=\"NSFrame\">{{129, 330}, {163, 49}}</string>\n\t\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t<bytes key=\"NSWhite\">MCAwAA</bytes>\n\t\t\t\t\t</object>\n\t\t\t\t\t<bool key=\"IBUIClearsContextBeforeDrawing\">NO</bool>\n\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<object class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">window</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"664661524\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"380026005\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">9</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">delegate</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"841351856\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"664661524\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">99</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">tabBarController</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"664661524\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"1034742383\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">113</int>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<object class=\"NSArray\" key=\"orderedObjects\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"0\"/>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"380026005\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"841351856\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">3</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"664661524\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">106</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1034742383\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"795333663\"/>\n\t\t\t\t\t\t\t<reference ref=\"268481961\"/>\n\t\t\t\t\t\t\t<reference ref=\"29305152\"/>\n\t\t\t\t\t\t\t<reference ref=\"1024858337\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">107</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"795333663\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1034742383\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">108</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1024858337\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"765670903\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1034742383\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">109</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"268481961\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"807309489\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1034742383\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">110</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"807309489\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"268481961\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">111</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"765670903\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1024858337\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"532797962\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">125</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"29305152\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"273290901\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1034742383\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">126</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"273290901\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"29305152\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>-1.CustomClassName</string>\n\t\t\t\t\t<string>-2.CustomClassName</string>\n\t\t\t\t\t<string>106.IBEditorWindowLastContentRect</string>\n\t\t\t\t\t<string>106.IBPluginDependency</string>\n\t\t\t\t\t<string>107.IBPluginDependency</string>\n\t\t\t\t\t<string>108.CustomClassName</string>\n\t\t\t\t\t<string>108.IBPluginDependency</string>\n\t\t\t\t\t<string>109.CustomClassName</string>\n\t\t\t\t\t<string>109.IBPluginDependency</string>\n\t\t\t\t\t<string>110.IBPluginDependency</string>\n\t\t\t\t\t<string>111.IBPluginDependency</string>\n\t\t\t\t\t<string>125.CustomClassName</string>\n\t\t\t\t\t<string>125.IBEditorWindowLastContentRect</string>\n\t\t\t\t\t<string>125.IBPluginDependency</string>\n\t\t\t\t\t<string>2.IBAttributePlaceholdersKey</string>\n\t\t\t\t\t<string>2.IBEditorWindowLastContentRect</string>\n\t\t\t\t\t<string>2.IBPluginDependency</string>\n\t\t\t\t\t<string>3.CustomClassName</string>\n\t\t\t\t\t<string>3.IBPluginDependency</string>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>UIApplication</string>\n\t\t\t\t\t<string>UIResponder</string>\n\t\t\t\t\t<string>{{550, 622}, {320, 480}}</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>PackagingDemoController</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>NSURLRequestDemoViewController</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>CacheableItemDemoController</string>\n\t\t\t\t\t<string>{{0, 665}, {320, 480}}</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<string>{{306, 283}, {320, 480}}</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>DemoAppDelegate</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"unlocalizedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\"/>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"localizations\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\"/>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">126</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\">\n\t\t\t<object class=\"NSMutableArray\" key=\"referencedPartialClassDescriptions\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">CacheableItemDemoController</string>\n\t\t\t\t\t<string key=\"superclassName\">UIViewController</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>cancelButton</string>\n\t\t\t\t\t\t\t<string>loadButton</string>\n\t\t\t\t\t\t\t<string>log</string>\n\t\t\t\t\t\t\t<string>progressView</string>\n\t\t\t\t\t\t\t<string>url</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>UIButton</string>\n\t\t\t\t\t\t\t<string>UIButton</string>\n\t\t\t\t\t\t\t<string>UITextView</string>\n\t\t\t\t\t\t\t<string>UIProgressView</string>\n\t\t\t\t\t\t\t<string>UITextView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>cancelButton</string>\n\t\t\t\t\t\t\t<string>loadButton</string>\n\t\t\t\t\t\t\t<string>log</string>\n\t\t\t\t\t\t\t<string>progressView</string>\n\t\t\t\t\t\t\t<string>url</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">cancelButton</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">UIButton</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">loadButton</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">UIButton</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">log</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">UITextView</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">progressView</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">UIProgressView</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">url</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">UITextView</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">CacheableItemDemoController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">DemoAppDelegate</string>\n\t\t\t\t\t<string key=\"superclassName\">NSObject</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>tabBarController</string>\n\t\t\t\t\t\t\t<string>window</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>UITabBarController</string>\n\t\t\t\t\t\t\t<string>UIWindow</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>tabBarController</string>\n\t\t\t\t\t\t\t<string>window</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">tabBarController</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">UITabBarController</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">window</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">UIWindow</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">demo/DemoAppDelegate.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSURLRequestDemoViewController</string>\n\t\t\t\t\t<string key=\"superclassName\">UIViewController</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">imageView</string>\n\t\t\t\t\t\t<string key=\"NS.object.0\">UIImageView</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">imageView</string>\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"NS.object.0\">\n\t\t\t\t\t\t\t<string key=\"name\">imageView</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">UIImageView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">NSURLRequestDemoViewController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">PackagingDemoController</string>\n\t\t\t\t\t<string key=\"superclassName\">UIViewController</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>imageView</string>\n\t\t\t\t\t\t\t<string>textView</string>\n\t\t\t\t\t\t\t<string>webView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>UIImageView</string>\n\t\t\t\t\t\t\t<string>UITextView</string>\n\t\t\t\t\t\t\t<string>UIWebView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>imageView</string>\n\t\t\t\t\t\t\t<string>textView</string>\n\t\t\t\t\t\t\t<string>webView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">imageView</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">UIImageView</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">textView</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">UITextView</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">webView</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">UIWebView</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">demo/PackagingDemoController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">PackagingDemoController</string>\n\t\t\t\t\t<string key=\"superclassName\">UIViewController</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBUserSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">UIWindow</string>\n\t\t\t\t\t<string key=\"superclassName\">UIView</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBUserSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableArray\" key=\"referencedPartialClassDescriptionsV3.2+\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSAccessibility.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSApplication.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSApplicationScripting.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSColorPanel.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSControl.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSDictionaryController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSDragging.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSFontManager.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSFontPanel.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSKeyValueBinding.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSMenu.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSNibLoading.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSOutlineView.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSPasteboard.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSSavePanel.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSTableView.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSToolbarItem.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSView.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSArchiver.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSClassDescription.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSError.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSFileManager.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSKeyValueCoding.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSKeyValueObserving.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSKeyedArchiver.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSObject.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSObjectScripting.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSPortCoder.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSRunLoop.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSScriptClassDescription.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSScriptWhoseTests.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSThread.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSURL.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSURLConnection.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSURLDownload.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t</object>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDependencyDefaults\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>\n\t\t\t<integer value=\"800\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDevelopmentDependencies\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>\n\t\t\t<integer value=\"3100\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<string key=\"IBDocument.LastKnownRelativeProjectPath\">../AFCache.xcodeproj</string>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t\t<string key=\"IBCocoaTouchPluginVersion\">117</string>\n\t</data>\n</archive>\n"
  },
  {
    "path": "src/Examples/NSURLRequest.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"7.10\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">800</int>\n\t\t<string key=\"IBDocument.SystemVersion\">10F569</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">788</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1038.29</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">461.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t<string key=\"NS.object.0\">117</string>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.EditedObjectIDs\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<integer value=\"1\"/>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.PluginDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\" id=\"0\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"IBProxyObject\" id=\"372490531\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFilesOwner</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBProxyObject\" id=\"263589821\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFirstResponder</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBUIView\" id=\"191373211\">\n\t\t\t\t<reference key=\"NSNextResponder\"/>\n\t\t\t\t<int key=\"NSvFlags\">274</int>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"NSSubviews\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBUILabel\" id=\"483052203\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">306</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{31, 20}, {257, 43}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MQA</bytes>\n\t\t\t\t\t\t\t<object class=\"NSColorSpace\" key=\"NSCustomColorSpace\">\n\t\t\t\t\t\t\t\t<int key=\"NSID\">2</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<bool key=\"IBUIUserInteractionEnabled\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<string key=\"IBUIText\">NSURLRequest</string>\n\t\t\t\t\t\t<object class=\"NSFont\" key=\"IBUIFont\">\n\t\t\t\t\t\t\t<string key=\"NSName\">Helvetica</string>\n\t\t\t\t\t\t\t<double key=\"NSSize\">36</double>\n\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUITextColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MCAwIDAAA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<nil key=\"IBUIHighlightedColor\"/>\n\t\t\t\t\t\t<int key=\"IBUIBaselineAdjustment\">1</int>\n\t\t\t\t\t\t<float key=\"IBUIMinimumFontSize\">10</float>\n\t\t\t\t\t\t<int key=\"IBUITextAlignment\">1</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUITextView\" id=\"255779567\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">306</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 71}, {275, 51}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<bool key=\"IBUIMultipleTouchEnabled\">YES</bool>\n\t\t\t\t\t\t<bool key=\"IBUIUserInteractionEnabled\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<bool key=\"IBUIShowsHorizontalScrollIndicator\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUIDelaysContentTouches\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUICanCancelContentTouches\">NO</bool>\n\t\t\t\t\t\t<float key=\"IBUIMinimumZoomScale\">0.0</float>\n\t\t\t\t\t\t<float key=\"IBUIMaximumZoomScale\">0.0</float>\n\t\t\t\t\t\t<bool key=\"IBUIBouncesZoom\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUIEditable\">NO</bool>\n\t\t\t\t\t\t<string key=\"IBUIText\">See logs</string>\n\t\t\t\t\t\t<int key=\"IBUITextAlignment\">1</int>\n\t\t\t\t\t\t<object class=\"IBUITextInputTraits\" key=\"IBUITextInputTraits\">\n\t\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIImageView\" id=\"132411443\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{31, 130}, {257, 212}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"IBUIContentMode\">1</int>\n\t\t\t\t\t\t<bool key=\"IBUIUserInteractionEnabled\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"NSFrameSize\">{320, 411}</string>\n\t\t\t\t<reference key=\"NSSuperview\"/>\n\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t<bytes key=\"NSWhite\">MQA</bytes>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBUISimulatedStatusBarMetrics\" key=\"IBUISimulatedStatusBarMetrics\"/>\n\t\t\t\t<object class=\"IBUISimulatedTabBarMetrics\" key=\"IBUISimulatedBottomBarMetrics\"/>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<object class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">view</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">3</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">imageView</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"132411443\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">9</int>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<object class=\"NSArray\" key=\"orderedObjects\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"0\"/>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"191373211\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"483052203\"/>\n\t\t\t\t\t\t\t<reference ref=\"255779567\"/>\n\t\t\t\t\t\t\t<reference ref=\"132411443\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"263589821\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">5</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"483052203\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">7</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"255779567\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">8</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"132411443\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>-1.CustomClassName</string>\n\t\t\t\t\t<string>-2.CustomClassName</string>\n\t\t\t\t\t<string>1.IBEditorWindowLastContentRect</string>\n\t\t\t\t\t<string>1.IBPluginDependency</string>\n\t\t\t\t\t<string>5.IBPluginDependency</string>\n\t\t\t\t\t<string>7.IBPluginDependency</string>\n\t\t\t\t\t<string>8.IBPluginDependency</string>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>NSURLRequestDemoViewController</string>\n\t\t\t\t\t<string>UIResponder</string>\n\t\t\t\t\t<string>{{130, 393}, {320, 480}}</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"unlocalizedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\"/>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"localizations\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\"/>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">9</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\">\n\t\t\t<object class=\"NSMutableArray\" key=\"referencedPartialClassDescriptions\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSURLRequestDemoViewController</string>\n\t\t\t\t\t<string key=\"superclassName\">UIViewController</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">imageView</string>\n\t\t\t\t\t\t<string key=\"NS.object.0\">UIImageView</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">imageView</string>\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"NS.object.0\">\n\t\t\t\t\t\t\t<string key=\"name\">imageView</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">UIImageView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">NSURLRequestDemoViewController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableArray\" key=\"referencedPartialClassDescriptionsV3.2+\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSAccessibility.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSApplication.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSApplicationScripting.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSColorPanel.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSControl.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSDictionaryController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSDragging.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSFontManager.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSFontPanel.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSKeyValueBinding.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSMenu.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSNibLoading.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSOutlineView.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSPasteboard.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSSavePanel.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSTableView.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSToolbarItem.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSView.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSArchiver.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSClassDescription.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSError.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSFileManager.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSKeyValueCoding.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSKeyValueObserving.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSKeyedArchiver.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSObject.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSObjectScripting.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSPortCoder.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSRunLoop.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSScriptClassDescription.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSScriptWhoseTests.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSThread.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSURL.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSURLConnection.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSURLDownload.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t</object>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDependencyDefaults\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>\n\t\t\t<integer value=\"800\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDevelopmentDependencies\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>\n\t\t\t<integer value=\"3100\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<string key=\"IBDocument.LastKnownRelativeProjectPath\">../AFCache.xcodeproj</string>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t\t<string key=\"IBCocoaTouchPluginVersion\">117</string>\n\t</data>\n</archive>\n"
  },
  {
    "path": "src/Examples/NSURLRequestDemoViewController.h",
    "content": "//\n//  NSURLRequestDemoViewController.h\n//  AFCache\n//\n//  Created by Michael Markowski on 25.08.10.\n//  Copyright 2010 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n\n@interface NSURLRequestDemoViewController : UIViewController {\n\tNSMutableData *receivedData;\n\tUIImageView *imageView;\n}\n\n@property (nonatomic, retain) NSMutableData *receivedData;\n@property (nonatomic, retain) IBOutlet UIImageView *imageView;\n\n@end\n"
  },
  {
    "path": "src/Examples/NSURLRequestDemoViewController.m",
    "content": "    //\n//  NSURLRequestDemoViewController.m\n//  AFCache\n//\n//  Created by Michael Markowski on 25.08.10.\n//  Copyright 2010 Artifacts - Fine Software Development. All rights reserved.\n//\n//  This demonstrates how AFCache is involved when using an NSURLConnection\n\n#import \"NSURLRequestDemoViewController.h\"\n#import \"Constants.h\"\n\n@implementation NSURLRequestDemoViewController\n\n@synthesize receivedData, imageView;\n\n- (void)viewDidAppear:(BOOL)animated {\n\n\t// Create the request.\n\tNSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:kDemoURL]\n\t\t\t\t\t\t\t\t\t\t\t  cachePolicy:NSURLRequestUseProtocolCachePolicy\n\t\t\t\t\t\t\t\t\t\t  timeoutInterval:60.0];\n\t// create the connection with the request\n\t// and start loading the data\n\tNSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];\n\tif (theConnection) {\n\t\t// Create the NSMutableData to hold the received data.\n\t\t// receivedData is an instance variable declared elsewhere.\n\t\treceivedData = [[NSMutableData data] retain];\n\t} else {\n\t\t// Inform the user that the connection failed.\n\t}\n}\n\n- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response\n{\n    // This method is called when the server has determined that it\n    // has enough information to create the NSURLResponse.\n\t\n    // It can be called multiple times, for example in the case of a\n    // redirect, so each time we reset the data.\n\t\n    // receivedData is an instance variable declared elsewhere.\n    [receivedData setLength:0];\n}\n\n- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data\n{\n    // Append the new data to receivedData.\n    // receivedData is an instance variable declared elsewhere.\n    [receivedData appendData:data];\n}\n\n- (void)connection:(NSURLConnection *)connection\n  didFailWithError:(NSError *)error\n{\n    // release the connection, and the data object\n    [connection release];\n    // receivedData is declared as a method instance elsewhere\n    [receivedData release];\n\t\n    // inform the user\n    NSLog(@\"Connection failed! Error - %@ %@\",\n          [error localizedDescription],\n          [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);\n}\n\n- (void)connectionDidFinishLoading:(NSURLConnection *)connection\n{\n    // do something with the data\n    // receivedData is declared as a method instance elsewhere\n    NSLog(@\"Succeeded! Received %d bytes of data\",[receivedData length]);\n\t\n    // release the connection, and the data object\n    [connection release];\n\tUIImage *img = [UIImage imageWithData:receivedData];\n\timageView.image = img;\n    [receivedData release];\n}\n\n- (void)dealloc {\n\t[imageView release];\n    [super dealloc];\n}\n\n\n@end\n"
  },
  {
    "path": "src/Examples/Packaging.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"7.10\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">800</int>\n\t\t<string key=\"IBDocument.SystemVersion\">10F569</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">788</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1038.29</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">461.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t<string key=\"NS.object.0\">117</string>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.EditedObjectIDs\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<integer value=\"1\"/>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.PluginDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\" id=\"0\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"IBProxyObject\" id=\"372490531\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFilesOwner</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBProxyObject\" id=\"263589821\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFirstResponder</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBUIView\" id=\"191373211\">\n\t\t\t\t<reference key=\"NSNextResponder\"/>\n\t\t\t\t<int key=\"NSvFlags\">274</int>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"NSSubviews\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBUITextView\" id=\"506965148\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">274</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 20}, {158, 235}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\" id=\"557285049\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MSAxIDEAA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<bool key=\"IBUIMultipleTouchEnabled\">YES</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<string key=\"IBUIText\">Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.</string>\n\t\t\t\t\t\t<object class=\"IBUITextInputTraits\" key=\"IBUITextInputTraits\">\n\t\t\t\t\t\t\t<int key=\"IBUIAutocapitalizationType\">2</int>\n\t\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIWebView\" id=\"191793176\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 263}, {240, 128}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<reference key=\"IBUIBackgroundColor\" ref=\"557285049\"/>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIDataDetectorTypes\">1</int>\n\t\t\t\t\t\t<bool key=\"IBUIDetectsPhoneNumbers\">YES</bool>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIImageView\" id=\"307903489\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{186, 20}, {114, 105}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"IBUIContentMode\">1</int>\n\t\t\t\t\t\t<bool key=\"IBUIUserInteractionEnabled\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"NSFrameSize\">{320, 411}</string>\n\t\t\t\t<reference key=\"NSSuperview\"/>\n\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t<bytes key=\"NSWhite\">MQA</bytes>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBUISimulatedStatusBarMetrics\" key=\"IBUISimulatedStatusBarMetrics\"/>\n\t\t\t\t<object class=\"IBUISimulatedTabBarMetrics\" key=\"IBUISimulatedBottomBarMetrics\"/>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<object class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">view</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">3</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">textView</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"506965148\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">12</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">imageView</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"307903489\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">13</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">webView</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"191793176\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">14</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">delegate</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"191793176\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"372490531\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">15</int>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<object class=\"NSArray\" key=\"orderedObjects\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"0\"/>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"191373211\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"191793176\"/>\n\t\t\t\t\t\t\t<reference ref=\"307903489\"/>\n\t\t\t\t\t\t\t<reference ref=\"506965148\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"263589821\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">9</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"506965148\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">10</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"191793176\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">11</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"307903489\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>-1.CustomClassName</string>\n\t\t\t\t\t<string>-2.CustomClassName</string>\n\t\t\t\t\t<string>1.IBEditorWindowLastContentRect</string>\n\t\t\t\t\t<string>1.IBPluginDependency</string>\n\t\t\t\t\t<string>10.IBPluginDependency</string>\n\t\t\t\t\t<string>11.IBPluginDependency</string>\n\t\t\t\t\t<string>9.IBPluginDependency</string>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>PackagingDemoController</string>\n\t\t\t\t\t<string>UIResponder</string>\n\t\t\t\t\t<string>{{566, 650}, {320, 480}}</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"unlocalizedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\"/>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"localizations\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\"/>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">15</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\">\n\t\t\t<object class=\"NSMutableArray\" key=\"referencedPartialClassDescriptions\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">PackagingDemoController</string>\n\t\t\t\t\t<string key=\"superclassName\">UIViewController</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>imageView</string>\n\t\t\t\t\t\t\t<string>textView</string>\n\t\t\t\t\t\t\t<string>webView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>UIImageView</string>\n\t\t\t\t\t\t\t<string>UITextView</string>\n\t\t\t\t\t\t\t<string>UIWebView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>imageView</string>\n\t\t\t\t\t\t\t<string>textView</string>\n\t\t\t\t\t\t\t<string>webView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">imageView</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">UIImageView</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">textView</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">UITextView</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">webView</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">UIWebView</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">demo/PackagingDemoController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">PackagingDemoController</string>\n\t\t\t\t\t<string key=\"superclassName\">UIViewController</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"actions\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">triggerNSURLRequestAction:</string>\n\t\t\t\t\t\t<string key=\"NS.object.0\">id</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"actionInfosByName\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">triggerNSURLRequestAction:</string>\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"NS.object.0\">\n\t\t\t\t\t\t\t<string key=\"name\">triggerNSURLRequestAction:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBUserSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableArray\" key=\"referencedPartialClassDescriptionsV3.2+\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSAccessibility.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSApplication.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSApplicationScripting.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSColorPanel.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSControl.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSDictionaryController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSDragging.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSFontManager.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSFontPanel.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSKeyValueBinding.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSMenu.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSNibLoading.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSOutlineView.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSPasteboard.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSSavePanel.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSTableView.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSToolbarItem.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">AppKit.framework/Headers/NSView.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSArchiver.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSClassDescription.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSError.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSFileManager.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSKeyValueCoding.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSKeyValueObserving.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSKeyedArchiver.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSObject.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSObjectScripting.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSPortCoder.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSRunLoop.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSScriptClassDescription.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSScriptWhoseTests.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSThread.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSURL.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSURLConnection.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSURLDownload.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t</object>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDependencyDefaults\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>\n\t\t\t<integer value=\"800\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDevelopmentDependencies\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>\n\t\t\t<integer value=\"3100\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<string key=\"IBDocument.LastKnownRelativeProjectPath\">../AFCache.xcodeproj</string>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t\t<string key=\"IBCocoaTouchPluginVersion\">117</string>\n\t</data>\n</archive>\n"
  },
  {
    "path": "src/Examples/PackagingDemoController.h",
    "content": "//\n//  DemoViewController.h\n//  Demo\n//\n//  Created by Michael Markowski on 07.07.10.\n//  Copyright Artifacts 2010. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"AFCache+Packaging.h\"\n\n@interface PackagingDemoController : UIViewController <AFCacheableItemDelegate> {\n\tUITextView *textView;\n\tUIWebView *webView;\n\tUIImageView *imageView;\n}\n\n@property (nonatomic, retain) IBOutlet UITextView *textView;\n@property (nonatomic, retain) IBOutlet UIWebView *webView;\n@property (nonatomic, retain) IBOutlet UIImageView *imageView;\n\n- (void)loadContent;\n\n@end\n\n"
  },
  {
    "path": "src/Examples/PackagingDemoController.m",
    "content": "//\n//  DemoViewController.m\n//  Demo\n//\n//  Created by Michael Markowski on 07.07.10.\n//  Copyright Artifacts 2010. All rights reserved.\n//\n\n#import \"PackagingDemoController.h\"\n#import \"Constants.h\"\n\n@implementation PackagingDemoController\n\n@synthesize textView, webView, imageView;\n\n- (void)viewDidAppear:(BOOL)animated {\n\t// load an image ansychronously\n\ttextView.text = kDemoURL;\n\t[[AFCache sharedInstance] requestPackageArchive:[NSURL URLWithString:kPackageDemoURL] delegate:self];\t\n}\n\n- (void)connectionDidFail:(AFCacheableItem *)cacheableItem {\n\ttextView.text = [cacheableItem.error description];\n\tNSLog(@\"cache request did fail for URL: %@\", [cacheableItem.url absoluteString]);\t\n}\n\n- (void)connectionDidFinish:(AFCacheableItem *)cacheableItem {\n\ttextView.text = [cacheableItem description];\n\tUIImage *img = [UIImage imageWithData:cacheableItem.data];\n\tself.imageView.image = img;\n\tNSLog(@\"cache loaded resource for URL: %@\", [cacheableItem.url absoluteString]);\n}\n\n- (void) packageArchiveDidReceiveData: (AFCacheableItem *) cacheableItem {\n\tfloat totalSize = cacheableItem.info.contentLength;\n\tfloat currentSize = [cacheableItem.data length];\n\tfloat percentage = currentSize / (totalSize/100);\n\t//\t[self.progressView setProgress:currentSize / totalSize];\n\tif (percentage < 100) {\n\t\tNSLog(@\"%.0f%% loaded\", percentage);\n\t}\t\n}\n\n- (void) packageArchiveDidFinishLoading: (AFCacheableItem *) cacheableItem {\n\tNSLog(@\"Loaded package. Extracting...\");\n\t[[AFCache sharedInstance] consumePackageArchive:cacheableItem preservePackageInfo:YES];\n}\n\n- (void) packageArchiveDidFinishExtracting: (AFCacheableItem *) cacheableItem {\n\tNSLog(@\"Extracted package.\");\n\t[[AFCache sharedInstance] setOffline:YES];\n\tNSLog(@\"Setting cache into offline mode.\");\n\t[self loadContent];\n}\n\n- (void) packageArchiveDidFailLoading: (AFCacheableItem *) cacheableItem {\n\tNSLog(@\"FAILED loading package. No network connection?\");\n\t[self loadContent];\n}\n\n- (void)loadContent {\n\t[[AFCache sharedInstance] cachedObjectForURL:[NSURL URLWithString:kDemoURL] delegate:self options:0];\n\t// load request in webview, to demonstrate that webview is asking the cache for every url.\n\tNSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:kWebDemoURL]];\n\t[webView loadRequest:request];\t\n}\n\n- (void)dealloc {\n\t[imageView release];\n\t[textView release];\n\t[webView release];\n    [super dealloc];\n}\n\n@end\n"
  },
  {
    "path": "src/Examples/main.m",
    "content": "//\n//  main.m\n//  Demo\n//\n//  Created by Michael Markowski on 07.07.10.\n//  Copyright Artifacts 2010. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\nint main(int argc, char *argv[]) {\n    \n    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];\n    int retVal = UIApplicationMain(argc, argv, nil, nil);\n    [pool release];\n    return retVal;\n}\n"
  },
  {
    "path": "src/OSX/AFCache-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>English</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>de.artifacts.${PRODUCT_NAME:rfc1034identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2011 Artifacts - Fine Software Development. All rights reserved.</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "src/OSX/AFCache-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'AFCache' target in the 'AFCache' project\n//\n\n#ifdef __OBJC__\n    #import <Cocoa/Cocoa.h>\n#endif\n"
  },
  {
    "path": "src/OSX/afcpkg_main.h",
    "content": "//\n//  afcpkg_main.h\n//  AFCache\n//\n//  Created by Michael Markowski on 22.07.10.\n//  Copyright 2010 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <Cocoa/Cocoa.h>\n\n@interface afcpkg_main : NSObject\n\n- (void)createPackageWithArgs:(NSUserDefaults*)args;\n\n@end\n"
  },
  {
    "path": "src/OSX/afcpkg_main.m",
    "content": "//\n//  afcpkg_main.m\n//  AFCache\n//\n//  Created by Michael Markowski on 22.07.10.\n//  Copyright 2010 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import \"afcpkg_main.h\"\n#import \"AFCache.h\"\n#import \"AFCache+Packaging.h\"\n#import \"AFCacheableItem+Packaging.h\"\n#import \"AFCachePackageCreator.h\"\n\n#import <Cocoa/Cocoa.h>\n\n#pragma mark -\n#pragma mark main\n\n/* ================================================================================================\n * Main\n * ================================================================================================ */\n\nint main(int argc, char *argv[])\n{\n    NSUserDefaults *args = [NSUserDefaults standardUserDefaults];\n\tafcpkg_main *main = [[afcpkg_main alloc] init];\n\t\n\t[main createPackageWithArgs:args];\n    return 0;\n}\n\n@implementation afcpkg_main\n\n//@synthesize folder, baseURL, maxAge, lastModifiedOffset;\n\n#pragma mark -\n#pragma mark commandline handling\n\n\n/* ================================================================================================\n * Create AFCache Package with given commandline args\n * ================================================================================================ */\n\n- (void)createPackageWithArgs:(NSUserDefaults*)args {\n    AFCachePackageCreator *packager = [[AFCachePackageCreator alloc] init];\n    NSMutableDictionary *options = [NSMutableDictionary dictionary];\n    NSError *error = nil;\n    \n\t// folder containing resources\n\t[options setValue:[args stringForKey:@\"folder\"] forKey:kPackagerOptionResourcesFolder];\n\t\n\t// base url, e.g. http://www.foo.bar (WITHOUT trailing slash)\t\n\t[options setValue:[args stringForKey:@\"baseurl\"] forKey:kPackagerOptionBaseURL];\n\t\n\t// max-age in seconds\n\t[options setValue:[args stringForKey:@\"maxage\"] forKey:kPackagerOptionMaxAge];\n\t\n\t// Maximum filesize of a cacheable item. Default is unlimited.\n\t[options setValue:[NSNumber numberWithDouble:[args doubleForKey:@\"maxItemFileSize\"]] forKey:kPackagerOptionMaxItemFileSize];\n\t\n\t// will substract n seconds from file's lastmodfied date\n    [options setValue:[NSNumber numberWithDouble:[args doubleForKey:@\"lastmodifiedminus\"]] forKey:kPackagerOptionLastModifiedMinus];\t\n\n\t// will add n seconds to file's lastmodfied date\n    [options setValue:[NSNumber numberWithDouble:[args doubleForKey:@\"lastmodifiedplus\"]] forKey:kPackagerOptionLastModifiedPlus];\t\n    \n\n\t// write manifest file in json format (just for testing purposes)\n\t[options setValue:[args stringForKey:@\"json\"] forKey:kPackagerOptionOutputFormatJSON];\n\n\t// include all files. By default, files starting with a dot are excluded.\n\t[options setValue:[args stringForKey:@\"a\"] forKey:kPackagerOptionIncludeAllFiles];\n\n\t// output filename\n\t[options setValue:[args stringForKey:@\"outfile\"] forKey:kPackagerOptionOutputFilename];\n\n\t// Folder containing arbitrary user data (will be accesible via userDataPathForPackageArchiveKey: in AFCache+Packaging.m\n\t[options setValue:[args stringForKey:@\"userdata\"] forKey:kPackagerOptionUserDataFolder];\n\n\t// Key under which userdata can be accessed. Default is no key.\n\t[options setValue:[args stringForKey:@\"userdatakey\"] forKey:kPackagerOptionUserDataKey];\n\t\n\t// Create ZIP archive\n\tBOOL showHelp = ( 0 == [[options valueForKey: kPackagerOptionBaseURL] length] );\n\t@try {\t\n\t\tif (showHelp==YES) {\n\t\t\tprintf(\"\\n\");\n\t\t\tprintf(\"Usage: afcpkg [-outfile] [-maxage] [-baseurl] [-file] [-folder] [-json] [-h] [-a] [-outfile] [-maxItemFileSize] [-userdata]\\n\");\n\t\t\tprintf(\"\\n\");\n\t\t\tprintf(\"\\t-maxage \\t\\tmax-age in seconds\\n\");\n\t\t\tprintf(\"\\t-baseurl \\t\\tbase url, e.g. http://www.foo.bar (WITHOUT trailing slash)\\n\");\n\t\t\tprintf(\"\\t-lastmodifiedplus \\tadd n seconds to file's lastmodfied date\\n\");\n\t\t\tprintf(\"\\t-lastmodifiedminus \\tsubstract n seconds from file's lastmodfied date\\n\");\n\t\t\tprintf(\"\\t-folder \\t\\tfolder containing resources\\n\");\n\t\t\tprintf(\"\\t-json \\t\\t\\twrite manifest file in json format (just for testing purposes)\\n\");\n\t\t\tprintf(\"\\t-h \\t\\t\\tdisplay this help output\\n\");\n\t\t\tprintf(\"\\t-a \\t\\t\\tinclude all files. By default, files starting with a dot are excluded.\\n\");\n\t\t\tprintf(\"\\t-outfile \\t\\t\\toutput filename\\n\");\n\t\t\tprintf(\"\\t-maxItemFileSize \\t\\t\\tMaximum filesize of a cacheable item. Default is unlimited.\\n\");\n\t\t\tprintf(\"\\t-userdata \\t\\t\\tFolder containing arbitrary user data (will be accesible via userDataPathForPackageArchiveKey: in AFCache+Packaging.m\\n\");\n\t\t\tprintf(\"\\t-userdatakey \\t\\t\\tKey under which userdata can be accessed. Default is no key (nil).\\n\");\n\t\t\tprintf(\"\\n\");\n\t\t\texit(0);\n\t\t} else {\n            if (NO == [packager createPackageWithOptions:options error:&error]) {\n                [NSException raise:@\"Package creation error\" format:@\"Reason: %@\", [error localizedDescription]];\n            }\n            \n\t\t}\t\n\t}\n\t@catch (NSException * e) {\n\t\tNSLog(@\"afcpkg error: %@\", [e description]);\n\t\tprintf(\"Error. See log for details.\");\n\t}\n}\n\n\n@end\n"
  },
  {
    "path": "src/iOS/AFCache-iOS-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'AFCache-iOS' target in the 'AFCache-iOS' project\n//\n\n#ifdef __OBJC__\n    #import <Foundation/Foundation.h>\n#endif\n"
  },
  {
    "path": "src/python/afcpkg.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# Copyright 2008 Artifacts - Fine Software Development\n# http://www.artifacts.de\n# Author: Martin Borho (martin@borho.net)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport re\nimport os\nimport sys\nimport time\nimport logging\nimport mimetypes\nimport fnmatch\nfrom urlparse import urlparse\nfrom optparse import OptionParser\nfrom zipfile import ZipFile\n\nrfc1123_format = '%a, %d %b %Y %H:%M:%S GMT+00:00'\n\n# add mimetypes\nmimetypes.add_type('application/json', '.json', strict=True)\n\nclass AFCachePackager(object):\n    \n    def __init__(self, **kwargs):\n        self.maxage       = kwargs.get('maxage')\n        self.baseurl      = kwargs.get('baseurl')\n        if not self.baseurl:\n            self.baseurl = 'afcpkg://localhost'\n        self.lastmodfile  = kwargs.get('lastmodfile')\n        self.lastmodplus  = kwargs.get('lastmodplus')\n        self.lastmodminus = kwargs.get('lastmodminus')            \n        self.folder       = kwargs.get('folder') \n        self.include_all  = kwargs.get('include_all')\n        self.outfile      = kwargs.get('outfile')\n        if not self.outfile: \n            self.outfile = 'afcache-archive.zip'\n        self.max_size     = kwargs.get('max_size')\n        self.excludes     = kwargs.get('excludes', [])\n        self.mime         = kwargs.get('mime')\n        self.errors       = []\n        self.logger       = kwargs.get('logger',logging.getLogger(__file__))\n        self._check_input()\n        \n    def _check_input(self):\n        if not self.folder:\n            self.errors.append('import-folder (--folder) is missing')\n        elif not os.path.isdir(self.folder):\n            self.errors.append('import-folder does not exists')\n            \n        if not self.maxage:\n            self.errors.append('maxage is missing')        \n                    \n    def _get_host(self, baseurl):\n        p = urlparse(baseurl)\n        if p.hostname:\n            return p.hostname\n        else:\n            self.errors.append('baseurl invalid')\n            return None\n        \n    def build_zipcache(self):\n                    \n        manifest = []\n        hostname = self._get_host(self.baseurl)\n        \n        if self.errors:\n            return None\n\n        try:\n            zip = ZipFile(self.outfile, 'w')\n        except IOError, e:\n            self.logger.error('exiting: creation of zipfile failed!')\n            return None\n        else:        \n            for dirpath, dirnames, filenames in os.walk(self.folder):            \n                # skip empty dirs\n                if not filenames:\n                    continue\n\n                for name in filenames:   \n                \n                    path = os.path.join(dirpath, name)\n                    # skip hidden files if\n                    if not self.include_all:                \n                        if name.startswith('.') or path.find('/.') > -1:\n                            self.logger.info(\"skipping \"+path)\n                            continue                                \n                    \n                    # skip big files if\n                    if self.max_size and (os.path.getsize(path) > self.max_size):\n                        self.logger.info(\"skipping big file \"+path)\n                        continue\n                    \n                    # exclude paths if\n                    if self.excludes:\n                        exclude_file = None\n                        for ex_filter in self.excludes:\n                            if fnmatch.fnmatch(path, ex_filter):\n                                exclude_file = True\n                                self.logger.info(\"excluded \"+path)\n                                break\n                        if exclude_file: continue\n                        \n                    # detect mime-type\n                    mime_type = ''\n                    if self.mime:\n                        mime_tuple = mimetypes.guess_type(path, False)\n                        if mime_tuple[0]: mime_type = mime_tuple[0]\n                        else: self.logger.warning(\"mime-type unknown: \"+path)\n                    \n                    # handle lastmodified\n                    if self.lastmodfile: lastmod = os.path.getmtime(os.path.join(dirpath, name))\n                    else: lastmod = time.time()\n                        \n                    if self.lastmodplus: lastmod += self.lastmodplus\n                    elif self.lastmodminus: lastmod -= self.lastmodminus\n\n                    # handle path forms \n                    rel_path = os.path.join(dirpath.replace(os.path.normpath(self.folder),''),name)\n                    exported_path = hostname+rel_path\n\n                    # add data\n                    self.logger.info(\"adding \"+ exported_path)\n                    zip.write(path, exported_path)\n    \n                    # add manifest line\n                    last_mod_date = time.strftime(rfc1123_format,time.gmtime(lastmod))\n                    expire_date = time.strftime(rfc1123_format,time.gmtime(lastmod+self.maxage))\n                    \n                    manifest_line = '%s ; %s ; %s' % (self.baseurl+rel_path, last_mod_date, expire_date)\n                    # add mime type\n                    if self.mime: \n                        manifest_line += ' ; '+mime_type\n                    manifest.append(manifest_line)\n                    \n            # add manifest to zip\n            self.logger.info(\"adding manifest\")\n            zip.writestr(\"manifest.afcache\", \"\\n\".join(manifest))     \n            return True\n\ndef main():\n\n    logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(levelname)-2s %(message)s')\n    logger = logging.getLogger(__file__)\n\n    usage = \"Usage: %prog [options]\"\n    parser = OptionParser(usage)\n    parser.add_option(\"--maxage\", dest=\"maxage\", type=\"int\", help=\"max-age in seconds\")\n    parser.add_option(\"--baseurl\", dest=\"baseurl\",\n                    help=\"base url, e.g. http://www.foo.bar (WITHOUT trailig slash)\")\n    parser.add_option(\"--lastmodifiedfile\", dest=\"lastmodfile\", action=\"store_true\",\n                    help=\"use lastmodified from file instead of now\")\n    parser.add_option(\"--lastmodifiedplus\", dest=\"lastmodplus\", type=\"int\",\n                    help=\"add n seconds to file's lastmodfied date\")\n    parser.add_option(\"--lastmodifiedminus\", dest=\"lastmodminus\", type=\"int\",\n                    help=\"substract n seconds from file's lastmodfied date\")\n    parser.add_option(\"--folder\", dest=\"folder\",\n                    help=\"folder containing resources\")\n    parser.add_option(\"-a\", dest=\"include_all\", action=\"store_true\",\n                    help=\"include all files. By default, files starting with a dot are excluded.\")\n    parser.add_option(\"--outfile\", dest=\"outfile\",\n                        help=\"Output filename. Default: afcache-archive.zip\")                                                \n    parser.add_option(\"--maxItemFileSize\", dest=\"max_size\", type=\"int\",\n                    help=\"Maximum filesize of a cacheable item.\")                                                \n    parser.add_option(\"--exclude\", dest=\"excludes\",action=\"append\",\n                    help=\"Regexp filter for filepaths. Add one --exclude for every pattern.\")      \n    parser.add_option(\"--mime\", dest=\"mime\", action=\"store_true\",\n                    help=\"add file mime types to manifest.afcache\")\n                    \n                        \n    (options, args) = parser.parse_args()\n    \n    packager = AFCachePackager(\n                        maxage=options.maxage,\n                        baseurl=options.baseurl,\n                        lastmodfile=options.lastmodfile,\n                        lastmodplus=options.lastmodplus,                        \n                        lastmodminus=options.lastmodminus,            \n                        folder=options.folder, \n                        include_all=options.include_all,\n                        outfile=options.outfile,\n                        max_size=options.max_size,\n                        excludes=options.excludes,\n                        mime=options.mime,\n                        logger=logger\n                    )\n\n    packager.build_zipcache()\n    if packager.errors:        \n        print \"Error: \"+\"\\nError: \".join(packager.errors)\n    \nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "src/shared/AFCache+DeprecatedAPI.h",
    "content": "//\n//  AFCache+DeprecatedAPI.h\n//  AFCache\n//\n//  Created by Lars Blumberg on 29.08.14.\n//  Copyright (c) 2014 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <AFCache/AFCache.h>\n#import <AvailabilityMacros.h>\n\n@interface AFCache (DeprecatedAPI)\n\n- (AFCacheableItem *)cachedObjectForURLSynchroneous: (NSURL *) url DEPRECATED_MSG_ATTRIBUTE(\"Use cachedObjectForURLSynchronous:\");\n- (AFCacheableItem *)cachedObjectForURLSynchroneous:(NSURL *)url options: (int)options DEPRECATED_MSG_ATTRIBUTE(\"Use cachedObjectForURLSynchronous:options:\");\n\n@end\n"
  },
  {
    "path": "src/shared/AFCache+DeprecatedAPI.m",
    "content": "//\n//  AFCache+DeprecatedAPI.m\n//  AFCache\n//\n//  Created by Lars Blumberg on 29.08.14.\n//  Copyright (c) 2014 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import \"AFCache+DeprecatedAPI.h\"\n\n@implementation AFCache (DeprecatedAPI)\n\n- (AFCacheableItem *)cachedObjectForURLSynchroneous: (NSURL *) url {\n    return [self cachedObjectForURLSynchronous:url];\n}\n\n- (AFCacheableItem *)cachedObjectForURLSynchroneous:(NSURL *)url options: (int)options {\n    return [self cachedObjectForURLSynchronous:url options:options];\n}\n\n@end\n"
  },
  {
    "path": "src/shared/AFCache+FileAttributes.h",
    "content": "//\n//  AFCache+FileAttributes.h\n//  AFCache\n//\n//  Created by Sebastian Grimme on 17.05.16.\n//  Copyright © 2016 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <AFCache/AFCache.h>\n\n@interface AFCache (FileAttributes)\n- (uint64_t)setContentLengthForFileAtPath:(NSString*)filePath;\n@end\n"
  },
  {
    "path": "src/shared/AFCache+FileAttributes.m",
    "content": "//\n//  AFCache+FileAttributes.m\n//  AFCache\n//\n//  Created by Sebastian Grimme on 17.05.16.\n//  Copyright © 2016 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import \"AFCache+FileAttributes.h\"\n\n#import \"AFCacheableItem+FileAttributes.h\"\n#import \"AFCache+PrivateAPI.h\"\n#import \"AFCache_Logging.h\"\n#include <sys/xattr.h>\n\n@implementation AFCache (FileAttributes)\n\n- (uint64_t)setContentLengthForFileAtPath:(NSString*)filePath {\n    NSError* err = nil;\n    NSDictionary* attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:&err];\n    if (err) {\n        AFLog(@\"Could not get file attributes for %@\", filename);\n        return 0;\n    }\n    uint64_t fileSize = [attrs fileSize];\n    if (0 != setxattr(filePath.fileSystemRepresentation, kAFCacheContentLengthFileAttribute, &fileSize, sizeof(fileSize), 0, 0)) {\n        AFLog(@\"Could not set content length for file %@\", filename);\n        return 0;\n    }\n    return fileSize;\n}\n\n@end\n"
  },
  {
    "path": "src/shared/AFCache+Mimetypes.h",
    "content": "//\n//  AFCache+Mimetypes.h\n//  AFCache\n//\n//  Created by Michael Markowski on 13.08.10.\n//  Copyright 2010 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"AFCache.h\"\n\n@interface AFCache (MimeType)\n\n- (void)initMimeTypes;\n\n@end\n"
  },
  {
    "path": "src/shared/AFCache+Mimetypes.m",
    "content": "//\n//  AFCache+Mimetypes.m\n//  AFCache\n//\n//  Created by Michael Markowski on 13.08.10.\n//  Copyright 2010 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import \"AFCache+Mimetypes.h\"\n\n@implementation AFCache (MimeType)\n\n// TODO: This method should not be realized within a category as this category is private anyway\n- (void)initMimeTypes {\n    // TODO: Assign to _suffixToMimeTypeMap as this is a init method (as soon as this method goes to main implementation file)\n\tself.suffixToMimeTypeMap = [NSDictionary dictionaryWithObjectsAndKeys:\n\t\t\t\t\t\t\t\t@\"application/msword\",\t\t\t\t        @\".doc\",\t\t\n\t\t\t\t\t\t\t\t@\"application/msword\",\t\t\t\t\t\t@\".dot\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.ms-excel\",\t\t\t    @\".xls\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.ms-excel\",\t\t\t\t@\".xlt\",\t\t\n\t\t\t\t\t\t\t\t@\"text/comma-separated-values\",             @\".csv\",\t\t\n\t\t\t\t\t\t\t\t@\"text/tab-separated-values\",               @\".tab\",\t\t\n\t\t\t\t\t\t\t\t@\"text/tab-separated-values\",\t\t\t\t@\".tsv\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.ms-powerpoint\",           @\".ppt\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.ms-project\",              @\".mpp\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.ms-works\",                @\".wps\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.ms-works\",\t\t\t\t@\".wdb\",\t\t\n\t\t\t\t\t\t\t\t@\"application/x-visio\",                     @\".vsd\",\t\t\n\t\t\t\t\t\t\t\t@\"application/x-visio\",                     @\".vst\",\t\t\n\t\t\t\t\t\t\t\t@\"application/x-visio\",\t\t\t\t\t\t@\".vsw\",\t\t\n\t\t\t\t\t\t\t\t@\"application/wordperfect\",                 @\".wpd\",\t\t\n\t\t\t\t\t\t\t\t@\"application/wordperfect\",                 @\".wp5\",\t\t\n\t\t\t\t\t\t\t\t@\"application/wordperfect\",\t\t\t\t\t@\".wp6\",\t\t\n\t\t\t\t\t\t\t\t@\"application/rtf\",                         @\".rtf\",\t\t\n\t\t\t\t\t\t\t\t@\"text/plain\",                              @\".txt\",\t\t\n\t\t\t\t\t\t\t\t@\"text/plain\",\t\t\t\t\t\t\t    @\".text\",\t\n\t\t\t\t\t\t\t\t@\"text/html\",                               @\".html\",\t\n\t\t\t\t\t\t\t\t@\"text/html\",\t\t\t\t\t\t        @\".htm\",\t\t\n\t\t\t\t\t\t\t\t@\"application/hta\",                         @\".hta\",\t\t\n\t\t\t\t\t\t\t\t@\"message/rfc822\",\t\t\t\t\t\t    @\".mime\",\t\n\t\t\t\t\t\t\t\t@\"text/xml\",                                @\".xml\",\t\t\n\t\t\t\t\t\t\t\t@\"text/xml\",                                @\".xsl\",\t\t\n\t\t\t\t\t\t\t\t@\"text/xml\",\t\t                        @\".xslt\",\t\n\t\t\t\t\t\t\t\t@\"application/xhtml+xml\",                   @\".html\",\t\n\t\t\t\t\t\t\t\t@\"application/xhtml+xml\",                   @\".xhtml\",\t\n\t\t\t\t\t\t\t\t@\"application/xml-dtd\",                     @\".dtd\",\t\t\n\t\t\t\t\t\t\t\t@\"application/xml-external-parsed-entity\",  @\".xml\",\t\t\n\t\t\t\t\t\t\t\t@\"text/sgml\",                               @\".sgm\",\t\t\n\t\t\t\t\t\t\t\t@\"text/sgml\",                               @\".sgml\",\t\n\t\t\t\t\t\t\t\t@\"text/css\",                                @\".css\",\t\t\n\t\t\t\t\t\t\t\t@\"text/javascript\",                         @\".js\",\t\t\n\t\t\t\t\t\t\t\t@\"application/x-javascript\",                @\".ls\",\t\t\n\t\t\t\t\t\t\t\t@\"image/gif\",\t\t                        @\".gif\",\t\t\n\t\t\t\t\t\t\t\t@\"image/jpeg\",                              @\".jpg\",\t\t\n\t\t\t\t\t\t\t\t@\"image/jpeg\",                              @\".jpeg\",\t\n\t\t\t\t\t\t\t\t@\"image/jpeg\",\t\t\t\t\t\t        @\".jpe\",\t\t\n\t\t\t\t\t\t\t\t@\"image/png\",\t\t\t\t\t\t\t    @\".png\",\t\t\n\t\t\t\t\t\t\t\t@\"image/tiff\",                              @\".tif\",\t\t\n\t\t\t\t\t\t\t\t@\"image/tiff\",                              @\".tiff\",\t\n\t\t\t\t\t\t\t\t@\"image/bmp\",                               @\".bmp\",\t\t\n\t\t\t\t\t\t\t\t@\"image/x-pict\",                            @\".pict\",\t\n\t\t\t\t\t\t\t\t@\"image/x-icon\",                            @\".ico\",\t\t\n\t\t\t\t\t\t\t\t@\"image/x-icon\",                            @\".icl\",\t\t\n\t\t\t\t\t\t\t\t@\"image/vnd.dwg\",                           @\".dwg\",\t\t\n\t\t\t\t\t\t\t\t@\"audio/x-wav\",                             @\".wav\",\t\t\n\t\t\t\t\t\t\t\t@\"audio/x-mpeg\",                            @\".mpa\",\t\t\n\t\t\t\t\t\t\t\t@\"audio/x-mpeg\",                            @\".abs\",\t\t\n\t\t\t\t\t\t\t\t@\"audio/x-mpeg\",                            @\".mpega\",\t\n\t\t\t\t\t\t\t\t@\"audio/x-mpeg\",                            @\".mp3\",\t\t\n\t\t\t\t\t\t\t\t@\"audio/x-mpeg-2\",                          @\".mp2a\",\t\n\t\t\t\t\t\t\t\t@\"audio/x-mpeg-2\",                          @\".mpa2\",\t\n\t\t\t\t\t\t\t\t@\"application/x-pn-realaudio\",              @\".ra\",\t\t\n\t\t\t\t\t\t\t\t@\"application/x-pn-realaudio\",              @\".ram\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.rn-realmedia\",            @\".rm\",\t\t\n\t\t\t\t\t\t\t\t@\"audio/x-aiff\",                            @\".aif\",\t\t\n\t\t\t\t\t\t\t\t@\"audio/x-aiff\",                            @\".aiff\",\t\n\t\t\t\t\t\t\t\t@\"audio/x-aiff\",                            @\".aifc\",\t\n\t\t\t\t\t\t\t\t@\"audio/x-midi\",                            @\".mid\",\t\t\n\t\t\t\t\t\t\t\t@\"audio/x-midi\",                            @\".midi\",\t\n\t\t\t\t\t\t\t\t@\"video/mpeg\",                              @\".mpeg\",\t\n\t\t\t\t\t\t\t\t@\"video/mpeg\",                              @\".mpg\",\t\t\n\t\t\t\t\t\t\t\t@\"video/mpeg\",                              @\".mpe\",\t\t\n\t\t\t\t\t\t\t\t@\"video/mpeg-2\",                            @\".mpv2\",\t\n\t\t\t\t\t\t\t\t@\"video/mpeg-2\",                            @\".mp2v\",\t\n\t\t\t\t\t\t\t\t@\"video/quicktime\",                         @\".mov\",\t\t\n\t\t\t\t\t\t\t\t@\"video/quicktime\",                         @\".moov\",\t\n\t\t\t\t\t\t\t\t@\"video/x-msvideo\",                         @\".avi\",\t\t\n\t\t\t\t\t\t\t\t@\"application/pdf\",                         @\".pdf\",\t\t\n\t\t\t\t\t\t\t\t@\"application/postscript\",                  @\".ps\",\t\t\n\t\t\t\t\t\t\t\t@\"application/postscript\",                  @\".ai\",\t\t\n\t\t\t\t\t\t\t\t@\"application/postscript\",                  @\".eps\",\t\t\n\t\t\t\t\t\t\t\t@\"application/zip\",                         @\".zip\",\t\t\n\t\t\t\t\t\t\t\t@\"application/x-compressed\",                @\".tar.gz\",\t\n\t\t\t\t\t\t\t\t@\"application/x-compressed\",                @\".tgz\",\t\t\n\t\t\t\t\t\t\t\t@\"application/x-gzip\",                      @\".gz\",\t\t\n\t\t\t\t\t\t\t\t@\"application/x-gzip\",                      @\".gzip\",\t\n\t\t\t\t\t\t\t\t@\"application/x-bzip2\",                     @\".bz2\",\t\t\n\t\t\t\t\t\t\t\t@\"application/x-stuffit\",                   @\".sit\",\t\t\n\t\t\t\t\t\t\t\t@\"application/x-stuffit\",                   @\".sea\",\t\t\n\t\t\t\t\t\t\t\t@\"application/mac-binhex40\",                @\".hqx\",\t\t\n\t\t\t\t\t\t\t\t@\"application/octet-stream\",                @\".bin\",\t\t\n\t\t\t\t\t\t\t\t@\"application/octet-stream\",                @\".uu\",\t\t\n\t\t\t\t\t\t\t\t@\"application/octet-stream\",                @\".exe\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.sun.xml.writer\",          @\".sxw\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.sun.xml.writer\",          @\".sxg\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.sun.xml.writer.template\", @\".sxw\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.sun.xml.calc\",            @\".sxc\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.sun.xml.calc.template\",   @\".stc\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.sun.xml.draw\",            @\".sxd\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.sun.xml.draw\",            @\".std\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.sun.xml.impress\",         @\".sxi\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.sun.xml.impress\",\t\t\t@\".sti\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.stardivision.writer\",     @\".sdw\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.stardivision.writer\",     @\".sgl\",\t\t\n\t\t\t\t\t\t\t\t@\"application/vnd.stardivision.calc\",       @\".sdc\",\t\t\n\t\t\t\t\t\t\t\t@\"image/svg+xml\",                           @\".svg\",\n\t\t\t\t\t\t\t\tnil];\t\n}\n\n@end\n"
  },
  {
    "path": "src/shared/AFCache+Packaging.h",
    "content": "//\n//  AFCache+Packaging.h\n//  AFCache\n//\n//  Created by Michael Markowski on 13.08.10.\n//  Copyright 2010 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"AFCache.h\"\n#import \"AFPackageInfo.h\"\n\n// TODO: Is this a real category? It relays on the existence of properties (e.g. packageArchiveQueue) that are only used by this category\n@interface AFCache (Packaging)\n\n- (BOOL)importCacheableItem:(AFCacheableItem*)cacheableItem withData:(NSData*)theData;\n- (BOOL)importCacheableItem:(AFCacheableItem*)cacheableItem dataWithFileAtURL:(NSURL*)URL;\n- (AFCacheableItem*)importObjectForURL:(NSURL*)url data:(NSData*)data;\n- (AFCacheableItem*)importObjectForURL:(NSURL*)url dataWithFileAtURL:(NSURL*)URL;\n\n- (AFCacheableItem *)requestPackageArchive:(NSURL*)url delegate:(id)aDelegate;\n- (AFCacheableItem *)requestPackageArchive:(NSURL*)url delegate:(id)aDelegate username:(NSString*)username password:(NSString*)password;\n\n- (void)packageArchiveDidFinishLoading: (AFCacheableItem *) cacheableItem;\n- (NSString*)userDataPathForPackageArchiveKey:(NSString*)archiveKey;\n- (AFPackageInfo*)packageInfoForURL:(NSURL*)url;\n\n// wipe out a cachable item completely\n- (void)purgeCacheableItemForURL:(NSURL*)url;\n\n// remove an imported package zip\n- (void)purgePackageArchiveForURL:(NSURL*)url;\n\n// announce files residing in the urlcachestore folder by reading the cache manifest file\n// this method assumes that the files already have been extracted into the urlcachestore folder\n- (AFPackageInfo*)newPackageInfoByImportingCacheManifestAtPath:(NSString*)manifestPath intoCacheStoreWithPath:(NSString*)urlCacheStorePath withPackageURL:(NSURL*)packageURL;\n- (void)storeCacheInfo:(NSDictionary*)dictionary;\n\n// Deprecated methods:\n\n#pragma mark -\n#pragma mark Deprecated methods\n\n// Deprecated. Use consumePackageArchive:preservePackageInfo: instead\n- (void)consumePackageArchive:(AFCacheableItem*)cacheableItem DEPRECATED_ATTRIBUTE; \n- (void)consumePackageArchive:(AFCacheableItem*)cacheableItem preservePackageInfo:(BOOL)preservePackageInfo;\n- (void)consumePackageArchive:(AFCacheableItem*)cacheableItem userData:(NSDictionary*)userData preservePackageInfo:(BOOL)preservePackageInfo;\n\n@end\n"
  },
  {
    "path": "src/shared/AFCache+Packaging.m",
    "content": "//\n//  AFCache+Packaging.m\n//  AFCache\n//\n//  Created by Michael Markowski on 13.08.10.\n//  Copyright 2010 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import \"AFCache+PrivateAPI.h\"\n#import \"AFCache+FileAttributes.h\"\n#import \"AFCacheableItem+Packaging.h\"\n#import \"AFCacheableItem+FileAttributes.h\"\n#import \"ZipArchive.h\"\n#import \"DateParser.h\"\n#import \"AFPackageInfo.h\"\n#import \"AFCache+Packaging.h\"\n#import \"AFCache_Logging.h\"\n\n@implementation AFCache (Packaging)\n\nenum ManifestKeys {\n\tManifestKeyURL = 0,\n\tManifestKeyLastModified = 1,\n\tManifestKeyExpires = 2,\n\tManifestKeyMimeType = 3,\n    ManifestKeyFilename = 4,\n};\n\n- (AFCacheableItem *)requestPackageArchive: (NSURL *) url delegate: (id) aDelegate {\n\tAFCacheableItem *item = [self cachedObjectForURL:url\n\t\t\t\t\t\t\t\t\t\t\tdelegate:aDelegate\n\t\t\t\t\t\t\t\t\t\t\tselector:@selector(packageArchiveDidFinishLoading:)\n\t\t\t\t\t\t\t\t\t didFailSelector:@selector(packageArchiveDidFailLoading:)\n\t\t\t\t\t\t\t\t\t\t\t options:kAFCacheIsPackageArchive | kAFCacheRevalidateEntry\n\t\t\t\t\t\t\t\t\t\t\tuserData:nil\n\t\t\t\t\t\t\t\t\t\t\tusername:nil\n\t\t\t\t\t\t\t\t\t\t\tpassword:nil request:nil];\n\treturn item;\n}\n\n- (AFCacheableItem *)requestPackageArchive: (NSURL *) url delegate: (id) aDelegate username: (NSString*) username password: (NSString*) password {\n\tAFCacheableItem *item = [self cachedObjectForURL: url \n\t\t\t\t\t\t\t\t\t\t\tdelegate: aDelegate \n\t\t\t\t\t\t\t\t\t\t\tselector: @selector(packageArchiveDidFinishLoading:)\n\t\t\t\t\t\t\t\t\t didFailSelector:  @selector(packageArchiveDidFailLoading:)\n\t\t\t\t\t\t\t\t\t\t\t options: kAFCacheIsPackageArchive | kAFCacheRevalidateEntry\n\t\t\t\t\t\t\t\t\t\t\tuserData: nil\n\t\t\t\t\t\t\t\t\t\t\tusername: username\n\t\t\t\t\t\t\t\t\t\t\tpassword: password request:nil];\n\treturn item;\n}\n\n- (void) packageArchiveDidFinishLoading: (AFCacheableItem *) cacheableItem {\n\tif ([cacheableItem.delegate respondsToSelector:@selector(packageArchiveDidFinishLoading:)]) {\n\t\t[cacheableItem.delegate performSelector:@selector(packageArchiveDidFinishLoading:) withObject:cacheableItem];\n\t}\t\n}\n\n/*\n * Consume (unzip an archive) and optionally keep track of the included items.\n * Preserve package info is given as an argument to the unzip thread.\n * If YES, AFCache remembers which items have been imported for this package URL.\n * Package information can be accessed later via packageInfoForURL:\n */\n\n- (void)consumePackageArchive:(AFCacheableItem*)cacheableItem preservePackageInfo:(BOOL)preservePackageInfo {\n\t[self consumePackageArchive:cacheableItem userData:nil preservePackageInfo:preservePackageInfo];\n}\n\n- (void)consumePackageArchive:(AFCacheableItem*)cacheableItem userData:(NSDictionary*)userData preservePackageInfo:(BOOL)preservePackageInfo {\n    if (cacheableItem.info.packageArchiveStatus == kAFCachePackageArchiveStatusConsumed) {\n        // ZIP file is already consumed\n        [self performArchiveReadyWithItem:cacheableItem];\n        return;\n    }\n\tNSString *urlCacheStorePath = self.dataPath;\n\tNSString *pathToZip = [[AFCache sharedInstance] fullPathForCacheableItem:cacheableItem];\n\t\n\tNSDictionary* arguments = @{\n            @\"pathToZip\" : pathToZip,\n            @\"cacheableItem\" : cacheableItem,\n            @\"urlCacheStorePath\" : urlCacheStorePath,\n            @\"preservePackageInfo\" : @(preservePackageInfo),\n            @\"userData\" : userData};\n\t\n\t[[self packageArchiveQueue] addOperation:[[NSInvocationOperation alloc] initWithTarget:self\n                                                                            selector:@selector(unzipWithArguments:)\n                                                                              object:arguments]];\n}\n\n\n- (void)unzipWithArguments:(NSDictionary*)arguments {\n\t@autoreleasepool {\n    \n        AFLog(@\"starting to unzip archive\");\n\t\n        // get arguments from dictionary\n        NSString* pathToZip\t\t\t\t= arguments[@\"pathToZip\"];\n        AFCacheableItem* cacheableItem\t= arguments[@\"cacheableItem\"];\n        __unsafe_unretained NSString* urlCacheStorePath = arguments[@\"urlCacheStorePath\"];\n\t    BOOL preservePackageInfo\t\t= [arguments[@\"preservePackageInfo\"] boolValue];\n\t    NSDictionary *userData\t\t\t= arguments[@\"userData\"];\n\n        ZipArchive *zip = [[ZipArchive alloc] init];\n        BOOL success = [zip UnzipOpenFile:pathToZip];\n        [zip UnzipFileTo:[pathToZip stringByDeletingLastPathComponent] overWrite:YES];\n        [zip UnzipCloseFile];\n        if (success) {\n            __unsafe_unretained NSString *pathToManifest = [NSString stringWithFormat:@\"%@/%@\", urlCacheStorePath, @\"manifest.afcache\"];\n\n            __unsafe_unretained AFPackageInfo *packageInfo;\n            __unsafe_unretained NSURL *itemURL = cacheableItem.url;\n\n            NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:@selector(newPackageInfoByImportingCacheManifestAtPath:intoCacheStoreWithPath:withPackageURL:)]];\n            [inv setTarget:self];\n            [inv setSelector:@selector(newPackageInfoByImportingCacheManifestAtPath:intoCacheStoreWithPath:withPackageURL:)];\n\n            // if you have arguments, set them up here\n            // starting at 2, since 0 is the target and 1 is the selector\n            [inv setArgument:&pathToManifest atIndex:2];\n            [inv setArgument:&urlCacheStorePath atIndex:3];\n            [inv setArgument:&itemURL atIndex:4];\n\n            [inv performSelectorOnMainThread:@selector(invoke) withObject:nil waitUntilDone:YES];\n\n            [inv getReturnValue:&packageInfo];\n\n            // store information about the imported items\n            if (preservePackageInfo) {\n                [packageInfo.userData addEntriesFromDictionary:userData];\n                [self.packageInfos setObject:packageInfo forKey:[cacheableItem.url absoluteString]];\n            }\n            else {\n                NSError *error = nil;\n                [[NSFileManager defaultManager] removeItemAtPath:pathToZip error:&error];\n            }\n\n            if (((id)cacheableItem.delegate) == self) {\n                NSAssert(false, @\"you may not assign the AFCache singleton as a delegate.\");\n            }\n\n            [self performSelectorOnMainThread:@selector(performArchiveReadyWithItem:)\n                                   withObject:cacheableItem\n                                waitUntilDone:YES];\n\n            [self performSelectorOnMainThread:@selector(archive) withObject:nil waitUntilDone:YES];\n            AFLog(@\"finished unzipping archive\");\n        } else {\n            AFLog(@\"Unzipping failed. Broken archive?\");\n            [self performSelectorOnMainThread:@selector(performUnarchivingFailedWithItem:)\n                                   withObject:cacheableItem\n                                waitUntilDone:YES];\n        }\n\t}\n}\n\n- (AFPackageInfo*)newPackageInfoByImportingCacheManifestAtPath:(NSString*)manifestPath intoCacheStoreWithPath:(NSString*)urlCacheStorePath withPackageURL:(NSURL*)packageURL {\n\n\tNSError *error = nil;\n\tAFCacheableItemInfo *info = nil;\n\tNSString *URL = nil;\n\tNSString *lastModified = nil;\n\tNSString *expires = nil;\n    NSString *mimeType = nil;\n    NSString *filename = nil;\n\tint line = 0;\n\t\n    // create a package info object for this package\n\t// that enables the cache to keep track of items that have been included in a package\n\tAFPackageInfo *packageInfo = [[AFPackageInfo alloc] init];\n\tpackageInfo.packageURL = packageURL;\n\n\tNSMutableArray *resourceURLs = [[NSMutableArray alloc] init];\n\t\n    //NSString *pathToMetaFolder = [NSString stringWithFormat:@\"%@/%@\", urlCacheStorePath, @\".userdata\"];\n\tNSString *manifest = [NSString stringWithContentsOfFile:manifestPath encoding:NSASCIIStringEncoding error:&error];\n\tNSArray *entries = [manifest componentsSeparatedByString:@\"\\n\"];\n\t\n\tNSMutableDictionary* cacheInfoDictionary = [NSMutableDictionary dictionary];    \n\tDateParser* dateParser = [[DateParser alloc] init];\n\tfor (NSString *entry in entries) {\n\t\tline++;\n\t\tif ([entry length] == 0) {\n\t\t\tcontinue;\n\t\t}\n\t\t\n\t\tNSArray *values = [entry componentsSeparatedByString:@\" ; \"];\n\t\tif ([values count] == 0) continue;\n\t\tif ([values count] < 5) {\n\t\t\tNSArray *keyval = [entry componentsSeparatedByString:@\" = \"];\n\t\t\tif ([keyval count] == 2) {\n\t\t\t\tNSString *key_ = [keyval objectAtIndex:0];\n\t\t\t\tNSString *val_ = [keyval objectAtIndex:1];\n\t\t\t\tif ([@\"baseURL\" isEqualToString:key_]) {\n\t\t\t\t\tpackageInfo.baseURL = [NSURL URLWithString:val_];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tNSLog(@\"Invalid entry in manifest in line %d: %@\", line, entry);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tinfo = [[AFCacheableItemInfo alloc] init];\t\t\n\t\t\n\t\t// parse url\n\t\tURL = [values objectAtIndex:ManifestKeyURL];\n\t\t\n\t\t// parse last-modified\n\t\tlastModified = [values objectAtIndex:ManifestKeyLastModified];\n\t\tinfo.lastModified = [dateParser gh_parseHTTP:lastModified];\n\t\t\n\t\t// parse expires\n        expires = [values objectAtIndex:ManifestKeyExpires];\n        info.expireDate = [dateParser gh_parseHTTP:expires];\n\t\t\n\t\tmimeType = [values objectAtIndex:ManifestKeyMimeType];\n        \n        if( 0 == [mimeType length] || [mimeType isEqualToString:@\"NULL\"] ) {\n            mimeType = nil;\n        } else {\n            info.mimeType = mimeType;            \n        }\n\n\t\tfilename = [values objectAtIndex:ManifestKeyFilename];\n        if ([filename length] > 0 && ![filename isEqualToString:@\"NULL\"]) {\n            info.filename = filename;\n        } else {\n            NSLog(@\"No filename given for entry in line %d: %@\", line, entry);\n        }\n\n        uint64_t contentLength = [self setContentLengthForFileAtPath:[urlCacheStorePath stringByAppendingPathComponent: filename]];\n\n\t\tinfo.contentLength = contentLength;\n\n#if MAINTAINER_WARNINGS\n#warning BK: textEncodingName always nil here\n#endif\n        \n        info.response = [[NSURLResponse alloc] initWithURL: [NSURL URLWithString: URL]\n                                                   MIMEType:mimeType\n                                      expectedContentLength: contentLength\n                                           textEncodingName: nil];\n\n        [resourceURLs addObject:URL];\n\t\t\n\t\t[cacheInfoDictionary setObject:info forKey:URL];               \n\t}\n\t\n\tpackageInfo.resourceURLs = [NSArray arrayWithArray:resourceURLs];\n\t\n\t// import generated cacheInfos in to the AFCache info store\n\t[self storeCacheInfo:cacheInfoDictionary];\n\t\n\treturn packageInfo;\n}\n\n- (void)storeCacheInfo:(NSDictionary*)dictionary {\n    @synchronized(self) {\n        for (NSString* key in dictionary) {\n            AFCacheableItemInfo* info = [dictionary objectForKey:key];\n            [self.cachedItemInfos setObject:info forKey:key];\n        }\n    }\n}\n\n#pragma mark serialization methods\n\n- (void)performArchiveReadyWithItem:(AFCacheableItem*)cacheableItem\n{\n    cacheableItem.info.packageArchiveStatus = kAFCachePackageArchiveStatusConsumed;\n}\n\n- (void)performUnarchivingFailedWithItem:(AFCacheableItem*)cacheableItem\n{\n    cacheableItem.info.packageArchiveStatus = kAFCachePackageArchiveStatusUnarchivingFailed;\n}\n\n#pragma mark - import\n\n// import and optionally overwrite a cacheableitem. might fail if a download with the very same url is in progress.\n- (BOOL)importCacheableItem:(AFCacheableItem*)cacheableItem withData:(NSData*)theData {\t\n    if (cacheableItem == nil || [self isQueuedOrDownloadingURL:cacheableItem.url]) {\n        return NO;\n    }\n\n    [cacheableItem setDataAndFile:theData];\n\t[self.cachedItemInfos setObject:cacheableItem.info forKey:[cacheableItem.url absoluteString]];\n\t[self archive];\n    \n\treturn YES;\n}\n\n- (BOOL)importCacheableItem:(AFCacheableItem*)cacheableItem dataWithFileAtURL:(NSURL *)URL {\n    if (cacheableItem == nil || [self isQueuedOrDownloadingURL:cacheableItem.url]) {\n        return NO;\n    }\n    \n    NSString *fullPathForCacheableItem = [self fullPathForCacheableItem:cacheableItem];\n    \n    NSError *error = nil;\n    BOOL didMoveItemAtPath = [[NSFileManager defaultManager] moveItemAtPath:URL.path toPath:fullPathForCacheableItem error:&error];\n    if (!didMoveItemAtPath) {\n        return NO;\n    }\n    \n    NSData *data = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:fullPathForCacheableItem] options:NSDataReadingMappedIfSafe error:nil];\n    cacheableItem.data = data;\n    cacheableItem.info.contentLength = [data length];\n\n    [self.cachedItemInfos setObject:cacheableItem.info forKey:[cacheableItem.url absoluteString]];\n    [self archive];\n    \n    return YES;\n}\n\n- (AFCacheableItem *)importObjectForURL:(NSURL *)url data:(NSData *)data {\n    AFCacheableItem *cachedItem = [self cacheableItemFromCacheStore:url];\n    if (cachedItem) {\n        return cachedItem;\n    }\n    else {\n        AFCacheableItem *item = [[AFCacheableItem alloc] initWithURL:url lastModified:[NSDate date] expireDate:nil];\n        [self importCacheableItem:item withData:data];\n        return item;\n    }\n}\n\n- (AFCacheableItem *)importObjectForURL:(NSURL *)url dataWithFileAtURL:(NSURL*)URL {\n    AFCacheableItem *cachedItem = [self cacheableItemFromCacheStore:url];\n    if (cachedItem) {\n        return cachedItem;\n    }\n    else {\n        AFCacheableItem *item = [[AFCacheableItem alloc] initWithURL:url lastModified:[NSDate date] expireDate:nil];\n        [self importCacheableItem:item dataWithFileAtURL:URL];\n        return item;\n    }\n}\n\n- (void)purgeCacheableItemForURL:(NSURL*)url {\n    if (!url) {\n        return;\n    }\n    AFCacheableItemInfo *cacheableItemInfo = [self.cachedItemInfos valueForKey:[url absoluteString]];\n\t[self removeCacheEntry:cacheableItemInfo fileOnly:NO fallbackURL:url];\n}\n\n- (void)purgePackageArchiveForURL:(NSURL*)url {\n\t[self purgeCacheableItemForURL:url];\n}\n\n- (NSString*)userDataPathForPackageArchiveKey:(NSString*)archiveKey {\n\tif (archiveKey == nil) {\n\t\treturn [NSString stringWithFormat:@\"%@/%@\", self.dataPath, kAFCacheUserDataFolder];\n\t} else {\n\t\treturn [NSString stringWithFormat:@\"%@/%@/%@\", self.dataPath, kAFCacheUserDataFolder, archiveKey];\n\t}\n}\n\n// Return package information for package with urlstring as key\n- (AFPackageInfo*)packageInfoForURL:(NSURL*)url {\n\tNSString *key = [url absoluteString];\n\treturn [self.packageInfos valueForKey:key];\n}\n\n#pragma mark -\n#pragma mark Deprecated methods\n\n// Deprecated. Use consumePackageArchive:preservePackageInfo: instead\n- (void)consumePackageArchive:(AFCacheableItem*)cacheableItem {\n\t[self consumePackageArchive:cacheableItem preservePackageInfo:NO];\n}\n\n@end\n"
  },
  {
    "path": "src/shared/AFCache+PrivateAPI.h",
    "content": "/*\n *\n * Copyright 2008 Artifacts - Fine Software Development\n * http://www.artifacts.de\n * Author: Michael Markowski (m.markowski@artifacts.de)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n#import \"AFCache.h\"\n\n@class AFCache;\n@class AFCacheableItem;\n\n@interface AFCache (PrivateAPI)\n\n- (void)updateModificationDataAndTriggerArchiving:(AFCacheableItem *)obj;\n\n- (void)setConnectedToNetwork:(BOOL)connected;\n- (void)reinitialize;\n- (void)removeCacheEntryWithFilePath:(NSString*)filePath fileOnly:(BOOL) fileOnly;\n\n- (NSOutputStream*)createOutputStreamForItem:(AFCacheableItem*)cacheableItem;\n- (void)addItemToDownloadQueue:(AFCacheableItem*)item;\n- (BOOL)isQueuedURL:(NSURL*)url;\n- (BOOL)_fileExistsOrPendingForCacheableItem:(AFCacheableItem*)item;\n- (void)removeCacheEntry:(AFCacheableItemInfo*)info fileOnly:(BOOL) fileOnly;\n- (void)removeCacheEntry:(AFCacheableItemInfo*)info fileOnly:(BOOL) fileOnly fallbackURL:(NSURL *)fallbackURL;\n\n// TODO: This getter to its property is necessary as the category \"Packaging\" needs to access the private property. This is due to Packaging not being a real category\n- (NSOperationQueue*) packageArchiveQueue;\n\n@end\n\n@interface AFCacheableItem (PrivateAPI)\n- (BOOL)isQueuedOrDownloading;\n- (BOOL)hasValidContentLength;\n\n// Making synthesized getter and setter for private property public for private API\n- (void)setHasReturnedCachedItemBeforeRevalidation:(BOOL)value;\n- (BOOL)hasReturnedCachedItemBeforeRevalidation;\n@end\n\n@interface AFCacheableItemInfo (PrivateAPI)\n- (NSString*)newUniqueFilename;\n@end\n"
  },
  {
    "path": "src/shared/AFCache.h",
    "content": "/*\n *\n * Copyright 2008 Artifacts - Fine Software Development\n * http://www.artifacts.de\n * Author: Michael Markowski (m.markowski@artifacts.de)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n#ifdef USE_TOUCHXML\n#import \"TouchXML.h\"\n#endif\n#import \"AFCacheableItem.h\"\n#import \"AFRequestConfiguration.h\"\n#import \"AFURLCache.h\"\n\n#import <Foundation/NSObjCRuntime.h>\n\n#define kAFCacheExpireInfoDictionaryFilename @\"kAFCacheExpireInfoDictionary\"\n#define kAFCacheRedirectInfoDictionaryFilename @\"kAFCacheRedirectInfoDictionary\"\n#define kAFCachePackageInfoDictionaryFilename @\"afcache_packageInfos\"\n#define kAFCacheMetadataFilename @\"afcache_metaData\"\n\n#define kAFCacheInfoStoreCachedObjectsKey @\"cachedObjects\"\n#define kAFCacheInfoStoreRedirectsKey @\"redirects\"\n#define kAFCacheInfoStorePackageInfosKey @\"packageInfos\"\n#define kAFCacheVersionKey @\"afcacheVersion\"\n\n#define LOG_AFCACHE(m) NSLog(m);\n\n#define kAFCacheUserDataFolder @\".userdata\"\n\n// max cache item size in bytes\n#define kAFCacheDefaultMaxFileSize 1000000\n\n// max number of concurrent connections\n#define kAFCacheDefaultConcurrentConnections 5\n\n#define kHTTPHeaderIfModifiedSince @\"If-Modified-Since\"\n#define kHTTPHeaderIfNoneMatch @\"If-None-Match\"\n\n//do housekeeping every nth time archive is called (per session)\n#define kHousekeepingInterval 10\n\n#define kDefaultDiskCacheDisplacementTresholdSize 100000000\n\n#define kDefaultNetworkTimeoutIntervalIMSRequest 45\n#define kDefaultNetworkTimeoutIntervalGETRequest 100\n#define kDefaultNetworkTimeoutIntervalPackageRequest 100\n\n#define kAFCacheNSErrorDomain @\"AFCache\"\n#define USE_ASSERTS true\n\n#define AFCachingURLHeader @\"X-AFCache\"\n#define AFCacheInternalRequestHeader @\"X-AFCache-IntReq\"\n\nextern const double kAFCacheInfiniteFileSize;\n\nenum {\n\tkAFCacheInvalidateEntry         = 1 << 9,\n    /* Returns cached file (if any) and then performs an IMS request (if file was already cached) or requests file for the first time (if not already cached).\n       Option is ignored if kAFCacheNeverRevalidate is set. */\n\tkAFCacheReturnFileBeforeRevalidation = 1 << 10,\n\tkAFIgnoreError                  = 1 << 11,\n    kAFCacheIsPackageArchive        = 1 << 12,\n\tkAFCacheRevalidateEntry         = 1 << 13, // revalidate even when cache is running in offline mode\n\tkAFCacheNeverRevalidate         = 1 << 14,\n    kAFCacheJustFetchHTTPHeader     = 1 << 15, // just fetch the http header\n};\n\n\n\ntypedef struct NetworkTimeoutIntervals {\n\tNSTimeInterval IMSRequest;\n\tNSTimeInterval GETRequest;\n\tNSTimeInterval PackageRequest;\n} NetworkTimeoutIntervals;\n\n@class AFCache;\n@class AFCacheableItem;\n\n@interface AFCache : NSObject\n\n/*\n * YES if offline mode is enabled (no files will be downloaded) or NO if disabled (default).\n */\n@property (nonatomic, assign) BOOL offlineMode;\n\n/**\n * Maps from URL-String to AFCacheableItemInfo\n */\n@property (nonatomic, strong) NSMutableDictionary *cachedItemInfos;\n/**\n * Maps from URL-String to its redirected URL-String\n */\n@property (nonatomic, strong) NSMutableDictionary *urlRedirects;\n// TODO: \"packageInfos\" is not a good descriptive name. What means \"info\"?\n@property (nonatomic, strong) NSMutableDictionary *packageInfos;\n// holds CacheableItem objects (former NSURLConnection, changed 2013/03/26 by mic)\n@property (nonatomic, readonly) int totalRequestsForSession;\n@property (nonatomic, strong) NSDictionary *suffixToMimeTypeMap;\n@property (nonatomic, assign) double maxItemFileSize;\n@property (nonatomic, assign) double diskCacheDisplacementTresholdSize;\n@property (nonatomic, assign) NetworkTimeoutIntervals networkTimeoutIntervals;\n@property (nonatomic, assign) NSTimeInterval archiveInterval;\n/**\n *  Skip check if data on disk is equal to byte size in cache info store. Might be helpful for debugging purposes.\n *\n *  @since 0.9.2\n */\n@property (nonatomic, assign) BOOL skipValidContentLengthCheck;\n\n/*\n * change your user agent - do not abuse it\n */\n@property (nonatomic, strong) NSString* userAgent;\n\n\n/*\n * set the path for your cachestore\n */\n@property (nonatomic, copy) NSString *dataPath;\n\n/*\n * set the number of maximum concurrent downloadable items\n * Default is 5\n */\n// TODO: Rename to maxConcurrentConnections and introduce forward property with old name in DeprecatedAPI category\n@property (nonatomic, assign, getter=concurrentConnections, setter=setConcurrentConnections:) int concurrentConnections;\n\n/*\n * the download fails if HTTP error is above 400\n * Default is YES\n */\n@property (nonatomic, assign) BOOL failOnStatusCodeAbove400;\n\n\n/*\n * the items will be cached in the cachestore with a hashed filename instead of the URL path\n * Default is YES\n */\n@property (nonatomic, assign) BOOL cacheWithHashname;\n\n\n/*\n * the items will be cached in the cachestore without any URL parameter\n * Default is NO\n */\n@property (nonatomic, assign) BOOL cacheWithoutUrlParameter;\n\n/*\n * the items will be cached in the cachestore without the hostname\n * Default is NO\n */\n@property (nonatomic, assign) BOOL cacheWithoutHostname;\n\n/*\n * pause the downloads. cancels any running downloads and puts them back into the queue\n */\n@property (nonatomic, assign, getter=suspended, setter=setSuspended:) BOOL suspended;\n\n/*\n * check if we have an internet connection. can be observed\n */\n@property (nonatomic, readonly) BOOL isConnectedToNetwork;\n\n/*\n * ignore any invalid SSL certificates\n * be careful with invalid SSL certificates! use only for testing or debugging\n * Default is NO\n */\n@property (nonatomic, assign) BOOL disableSSLCertificateValidation;\n\n+ (AFCache*)cacheForContext:(NSString*)context;\n\n- (NSString *)filenameForURL: (NSURL *) url;\n- (NSString *)filenameForURLString: (NSString *) URLString;\n- (NSString *)filePath: (NSString *) filename;\n- (NSString *)filePathForURL: (NSURL *) url;\n- (NSString *)fullPathForCacheableItem:(AFCacheableItem*)item;\n\n\n+ (AFCache *)sharedInstance;\n\n\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n                               delegate: (id) aDelegate __attribute__((deprecated(\"use cacheItemForURL instead\")));\n\n- (AFCacheableItem *)cachedObjectForRequest: (NSURLRequest *) aRequest\n                                   delegate: (id) aDelegate __attribute__((deprecated(\"use cacheItemForURL instead\")));\n\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n                               delegate: (id) aDelegate\n                                options: (int) options __attribute__((deprecated(\"use cacheItemForURL instead\")));\n\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n\t\t\t\t\t\t\t   delegate: (id) aDelegate\n\t\t\t\t\t\t\t   selector: (SEL) aSelector\n\t\t\t\t\t\t\t\toptions: (int) options __attribute__((deprecated(\"use cacheItemForURL instead\")));\n\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n\t\t\t\t\t\t\t   delegate: (id) aDelegate\n\t\t\t\t\t\t\t   selector: (SEL) aSelector\n\t\t\t\t\t\t\t\toptions: (int) options\n                               userData:(id)userData __attribute__((deprecated(\"use cacheItemForURL instead\")));\n\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n\t\t\t\t\t\t\t   delegate: (id) aDelegate\n\t\t\t\t\t\t\t   selector: (SEL) aSelector\n\t\t\t\t\t\tdidFailSelector: (SEL) aFailSelector\n\t\t\t\t\t\t\t\toptions: (int) options __attribute__((deprecated(\"use cacheItemForURL instead\")));\n\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n\t\t\t\t\t\t\t   delegate: (id) aDelegate\n\t\t\t\t\t\t\t   selector: (SEL) aSelector\n\t\t\t\t\t\tdidFailSelector: (SEL) aFailSelector\n\t\t\t\t\t\t\t\toptions: (int) options\n                               userData: (id)userData\n\t\t\t\t\t\t\t   username: (NSString *)aUsername\n\t\t\t\t\t\t\t   password: (NSString *)aPassword\n                                request: (NSURLRequest*)aRequest __attribute__((deprecated(\"use cacheItemForURL instead\")));\n\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n                               delegate: (id)aDelegate\n\t\t\t\t\t\t\t   selector: (SEL)aSelector\n\t\t\t\t\t\tdidFailSelector: (SEL)aFailSelector\n                        completionBlock: (id)aCompletionBlock\n                              failBlock: (id)aFailBlock\n                          progressBlock: (id)aProgressBlock\n\t\t\t\t\t\t\t\toptions: (int)options\n                               userData: (id)userData\n\t\t\t\t\t\t\t   username: (NSString *)aUsername\n\t\t\t\t\t\t\t   password: (NSString *)aPassword\n                                request: (NSURLRequest*)aRequest __attribute__((deprecated(\"use cacheItemForURL instead\")));\n\n- (AFCacheableItem *)cachedObjectForURLSynchronous: (NSURL *) url;\n- (AFCacheableItem *)cachedObjectForURLSynchronous:(NSURL *)url options: (int)options;\n\n\n- (BOOL)isQueuedOrDownloadingURL:(NSURL *)url;\n- (BOOL)isDownloadingURL:(NSURL *)url;\n\n- (void)invalidateAll;\n- (void)archive;\n/**\n * Starts the archiving Thread without a delay.\n */\n- (void)archiveNow;\n/**\n * NOTE: \"offline mode\" means: Dear AFCache, please serve everything from cache without making any connections.\n * It does NOT mean that there's no internet connectivity. You may check this by calling \"isConnectedToNetwork\"]\n */\n- (BOOL)offlineMode;\n- (void)setOfflineMode:(BOOL)value;\n- (int)totalRequestsForSession;\n- (void)doHousekeeping;\n- (void)doHousekeepingWithRequiredCacheItemURLs:(NSSet*)requiredURLs;\n\n- (BOOL)hasCachedItemForURL:(NSURL *)url;\n- (AFCacheableItem *)cacheableItemFromCacheStore: (NSURL *) url;\n- (unsigned long)diskCacheSize;\n\n/*\n * Cancel any asynchronous operations and downloads\n */\n- (void)cancelAllRequestsForURL:(NSURL *)url;\n- (void)cancelAsynchronousOperationsForURL:(NSURL *)url itemDelegate:(id)itemDelegate;\n- (void)cancelAsynchronousOperationsForDelegate:(id)itemDelegate;\n\n/*\n * Prioritize the URL or item in the queue\n */\n- (void)prioritizeURL:(NSURL*)url;\n\n/*\n * Flush and start loading all items in the  queue\n */\n- (void)flushDownloadQueue;\n\n#pragma mark - Public API for getting cache items (do not use any other, replace your existing deprecated calls with new ones)\n\n/*\n * Get a cached item from cache.\n *\n * @param url the requested url\n * @param urlCredential the credential for requested url\n * @param completionBlock\n * @param failBlock\n */\n- (AFCacheableItem *)cacheItemForURL:(NSURL *)url\n                       urlCredential:(NSURLCredential*)urlCredential\n                      completionBlock:(AFCacheableItemBlock)completionBlock\n                            failBlock:(AFCacheableItemBlock)failBlock;\n\n/*\n * Get a cached item from cache.\n *\n * @param url the requested url\n * @param urlCredential the credential for requested url\n * @param completionBlock\n * @param failBlock\n * @param progressBlock\n */\n- (AFCacheableItem *)cacheItemForURL:(NSURL *)url\n                       urlCredential:(NSURLCredential*)urlCredential\n                      completionBlock:(AFCacheableItemBlock)completionBlock\n                            failBlock:(AFCacheableItemBlock)failBlock\n                        progressBlock:(AFCacheableItemBlock)progressBlock;\n\n/*\n * Get a cached item from cache.\n *\n * @param url the requested url\n * @param urlCredential the credential for requested url\n * @param completionBlock\n * @param failBlock\n * @param progressBlock\n * @param requestConfiguration\n */\n- (AFCacheableItem *)cacheItemForURL:(NSURL *)url\n                       urlCredential:(NSURLCredential*)urlCredential\n                     completionBlock:(AFCacheableItemBlock)completionBlock\n                           failBlock:(AFCacheableItemBlock)failBlock\n                       progressBlock:(AFCacheableItemBlock)progressBlock\n                requestConfiguration:(AFRequestConfiguration*)requestConfiguration;\n\n@end\n\n#pragma mark - LoggingSupport\n\n@interface AFCache( LoggingSupport )\n\n/*\n * currently ignored if not built against EngineRoom - SUBJECT TO CHANGE WITHOUT NOTICE\n */\n\n+ (void) setLoggingEnabled: (BOOL) enabled;\n+ (void) setLogFormat: (NSString *) logFormat;\n\n@end\n\n\n\n@interface AFCache( BLOCKS )\n\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n                        completionBlock: (AFCacheableItemBlock)aCompletionBlock\n                              failBlock: (AFCacheableItemBlock)aFailBlock\n\t\t\t\t\t\t\t\toptions: (int) options __attribute__((deprecated(\"use cacheItemForURL instead\")));\n\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n                        completionBlock: (AFCacheableItemBlock)aCompletionBlock\n                              failBlock: (AFCacheableItemBlock)aFailBlock\n\t\t\t\t\t\t\t\toptions: (int) options\n                               userData: (id)userData\n\t\t\t\t\t\t\t   username: (NSString *)aUsername\n\t\t\t\t\t\t\t   password: (NSString *)aPassword __attribute__((deprecated(\"use cacheItemForURL instead\")));\n\n#pragma mark With progress block\n\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n                        completionBlock: (AFCacheableItemBlock)aCompletionBlock\n                              failBlock: (AFCacheableItemBlock)aFailBlock\n                          progressBlock: (AFCacheableItemBlock)aProgressBlock\n\t\t\t\t\t\t\t\toptions: (int) options\n                               userData: (id)userData\n\t\t\t\t\t\t\t   username: (NSString *)aUsername\n\t\t\t\t\t\t\t   password: (NSString *)aPassword __attribute__((deprecated(\"use cacheItemForURL instead\")));\n\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n                        completionBlock: (AFCacheableItemBlock)aCompletionBlock\n                              failBlock: (AFCacheableItemBlock)aFailBlock\n                          progressBlock: (AFCacheableItemBlock)aProgressBlock\n\t\t\t\t\t\t\t\toptions: (int) options __attribute__((deprecated(\"use cacheItemForURL instead\")));\n\n@end\n"
  },
  {
    "path": "src/shared/AFCache.m",
    "content": "/*\n *\n * Copyright 2008 Artifacts - Fine Software Development\n * http://www.artifacts.de\n * Author: Michael Markowski (m.markowski@artifacts.de)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n#import \"AFCache+PrivateAPI.h\"\n#import \"AFCache+Mimetypes.h\"\n#import \"DateParser.h\"\n\n#include <sys/socket.h>\n#include <netinet/in.h>\n#include <arpa/inet.h>\n#import <SystemConfiguration/SCNetworkReachability.h>\n#import <MacTypes.h>\n#import \"AFRegexString.h\"\n#import \"AFCache_Logging.h\"\n#import \"AFDownloadOperation.h\"\n#import \"AFCacheableItem+FileAttributes.h\"\n\n#import <VersionIntrospection/SPVIVersionIntrospection.h>\n\n#if USE_ASSERTS\n#define ASSERT_NO_CONNECTION_WHEN_IN_OFFLINE_MODE_FOR_URL(url) NSAssert( [(url) isFileURL] || [self offlineMode] == NO, @\"No connection should be opened if we're in offline mode - this seems like a bug\")\n#else\n#define ASSERT_NO_CONNECTION_WHEN_IN_OFFLINE_MODE_FOR_URL(url) do{}while(0)\n#endif\n\nconst double kAFCacheInfiniteFileSize = 0.0;\nconst double kAFCacheArchiveDelay = 30.0; // archive every 30s\n\nextern NSString* const UIApplicationWillResignActiveNotification;\n\n@interface AFCache()\n\n@property (nonatomic, copy) NSString *context;\n@property (nonatomic, strong) NSTimer *archiveTimer;\n@property (nonatomic, assign) BOOL wantsToArchive;\n@property (nonatomic, assign) BOOL connectedToNetwork;\n@property (nonatomic, strong) NSOperationQueue *packageArchiveQueue;\n@property (nonatomic, strong) NSOperationQueue *downloadOperationQueue;\n@property (nonatomic, strong) NSString* version;\n@property (nonatomic, assign, readonly) NSString* infoDictionaryPath;\n@property (nonatomic, assign, readonly) NSString* metaDataDictionaryPath;\n@property (nonatomic, assign, readonly) NSString* expireInfoDictionaryPath;\n\n@end\n\n@implementation AFCache\n\nstatic AFCache *sharedAFCacheInstance = nil;\nstatic NSMutableDictionary* AFCache_contextCache = nil;\n\n#pragma mark singleton methods\n\n+ (AFCache *)sharedInstance {\n    @synchronized(self) {\n        if (!sharedAFCacheInstance) {\n            sharedAFCacheInstance = [[self alloc] initWithContext:nil];\n            sharedAFCacheInstance.diskCacheDisplacementTresholdSize = kDefaultDiskCacheDisplacementTresholdSize;\n        }\n    }\n    return sharedAFCacheInstance;\n}\n\n#pragma mark init methods\n\n- (id)initWithContext:(NSString*)context {\n    if (!context && sharedAFCacheInstance) {\n        return [AFCache sharedInstance];\n    }\n    \n    self = [super init];\n\tif (self) {\n\t\t\n#if TARGET_OS_IPHONE\n        [[NSNotificationCenter defaultCenter] addObserver:self\n                                                 selector:@selector(serializeState)\n                                                     name:UIApplicationWillResignActiveNotification\n                                                   object:nil];\n\t\t\n        [[NSNotificationCenter defaultCenter] addObserver:self\n                                                 selector:@selector(serializeState)\n                                                     name:UIApplicationWillTerminateNotification\n                                                   object:nil];\n#endif\n        if (!AFCache_contextCache) {\n            AFCache_contextCache = [[NSMutableDictionary alloc] init];\n        }\n        \n        if (context) {\n            [AFCache_contextCache setObject:[NSValue valueWithPointer:(__bridge const void *)(self)] forKey:context];\n        }\n        \n        _context = [context copy];\n        [self reinitialize];\n\t\t[self initMimeTypes];\n\t}\n\treturn self;\n}\n\n- (void)initialize {\n    _offlineMode = NO;\n    _wantsToArchive = NO;\n    _connectedToNetwork = NO;\n    _archiveInterval = kAFCacheArchiveDelay;\n    _failOnStatusCodeAbove400 = YES;\n    _cacheWithHashname = YES;\n    _maxItemFileSize = kAFCacheInfiniteFileSize;\n    _networkTimeoutIntervals.IMSRequest = kDefaultNetworkTimeoutIntervalIMSRequest;\n    _networkTimeoutIntervals.GETRequest = kDefaultNetworkTimeoutIntervalGETRequest;\n    _networkTimeoutIntervals.PackageRequest = kDefaultNetworkTimeoutIntervalPackageRequest;\n    _totalRequestsForSession = 0;\n    _packageArchiveQueue = [[NSOperationQueue alloc] init];\n    [_packageArchiveQueue setMaxConcurrentOperationCount:1];\n\n    _downloadOperationQueue = [[NSOperationQueue alloc] init];\n    [_downloadOperationQueue setMaxConcurrentOperationCount:kAFCacheDefaultConcurrentConnections];\n\n    if (!_dataPath)\n    {\n        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);\n        NSString *appId = [@\"afcache\" stringByAppendingPathComponent:[[NSBundle mainBundle] bundleIdentifier]];\n        _dataPath = [[[paths objectAtIndex: 0] stringByAppendingPathComponent: appId] copy];\n    }\n    \n    [self deserializeState];\n\n    /* check for existence of cache directory */\n    if ([[NSFileManager defaultManager] fileExistsAtPath:_dataPath]) {\n        AFLog(@ \"Successfully unarchived cache store\");\n    }\n    else {\n        NSError *error = nil;\n        if (![[NSFileManager defaultManager] createDirectoryAtPath:_dataPath\n                                       withIntermediateDirectories:YES\n                                                        attributes:nil\n                                                             error:&error]) {\n            AFLog(@ \"Failed to create cache directory at path %@: %@\", _dataPath, [error description]);\n        }\n        else\n        {\n            NSString *dataPath = _dataPath;\n            if ([[dataPath pathComponents] containsObject:@\"Library\"])\n            {\n                while (![[dataPath lastPathComponent] isEqualToString:@\"Library\"] && ![[dataPath lastPathComponent] isEqualToString:@\"Caches\"]) {\n                    [AFCache addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:dataPath]];\n                    dataPath = [dataPath stringByDeletingLastPathComponent];\n                }\n            }\n        }\n    }\n\n    [AFCache addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:_dataPath]];\n}\n\n- (void)dealloc {\n    [[NSNotificationCenter defaultCenter] removeObserver:self];\n\n    if (_context)\n    {\n        [AFCache_contextCache removeObjectForKey:_context];\n    }\n}\n\n- (void)setDataPath:(NSString*)newDataPath {\n    if (self.context && self.dataPath)\n    {\n        NSLog(@\"Error: Can't change data path on instanced AFCache\");\n        NSAssert(NO, @\"Can't change data path on instanced AFCache\");\n        return;\n    }\n    if (self.wantsToArchive) {\n        [self serializeState];\n    }\n    _dataPath = [newDataPath copy];\n    double fileSize = self.maxItemFileSize;\n    [self reinitialize];\n    self.maxItemFileSize = fileSize;\n}\n\n- (int)concurrentConnections {\n    return [self.downloadOperationQueue maxConcurrentOperationCount];\n}\n\n- (void)setConcurrentConnections:(int)maxConcurrentConnections {\n    [self.downloadOperationQueue setMaxConcurrentOperationCount:maxConcurrentConnections];\n}\n\n// TODO: If we really need \"named\" caches (\"context\" is the wrong word), then realize this concept as a category, but not here\n+ (AFCache*)cacheForContext:(NSString *)context\n{\n    if (!AFCache_contextCache)\n    {\n        AFCache_contextCache = [[NSMutableDictionary alloc] init];\n    }\n    \n    if (!context)\n    {\n        return [self sharedInstance];\n    }\n    \n    AFCache* cache = [[AFCache_contextCache objectForKey:context] pointerValue];\n    if (!cache)\n    {\n        cache = [[[self class] alloc] initWithContext:context];\n    }\n    \n    return cache;\n}\n\n// The method reinitialize really initializes the cache.\n// This is usefull for testing, when you want to, uh, reinitialize\n\n- (void)reinitialize {\n    if (self.wantsToArchive) {\n        [self serializeState];\n    }\n    [self cancelAllDownloads];\n\n    [self initialize];\n}\n\n\n+(BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL\n{\n#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_5_1 || TARGET_OS_MAC && MAC_OS_X_VERSION_MIN_ALLOWED < MAC_OS_X_VERSION_10_8\n    if (![[NSFileManager defaultManager] fileExistsAtPath:[URL path]]) {\n        return NO;\n    }\n    \n    NSError *error = nil;\n    BOOL success = [URL setResourceValue:[NSNumber numberWithBool:YES] forKey: NSURLIsExcludedFromBackupKey error:&error];\n    if (!success) {\n        NSLog(@\"Error excluding %@ from backup: %@\", [URL lastPathComponent], error);\n    }\n\treturn success;\n#else\n    NSLog(@\"ERROR: System does not support excluding files from backup\");\n    return NO;\n#endif\n}\n\n// remove all cache entries are not in a given set\n- (void)doHousekeepingWithRequiredCacheItemURLs:(NSSet*)requiredURLs\n{\n    NSMutableSet* fileNames = [NSMutableSet set];\n    \n    NSMutableDictionary* cacheInfoForFileName = [NSMutableDictionary dictionary];\n    for (NSURL* cacheURL in requiredURLs) {\n        AFCacheableItem* item = [self cacheableItemFromCacheStore:cacheURL];\n        if (item.info) {\n            NSString* fileName = item.info.filename;\n            [fileNames addObject:fileName];\n            [cacheInfoForFileName setObject:item.info forKey:fileName];\n        }\n\n    }\n    [fileNames addObject:kAFCachePackageInfoDictionaryFilename];\n    [fileNames addObject:kAFCacheMetadataFilename];\n    [fileNames addObject:kAFCacheExpireInfoDictionaryFilename];\n    NSSet* fileNameSet = [NSSet setWithSet:fileNames];\n    __block NSMutableArray* urlsToRemove = [NSMutableArray array];\n    [self performBlockOnAllCacheFiles:^(NSURL *url) {\n        NSError *error;\n        NSNumber *isDirectory = nil;\n        if (! [url getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:&error]) {\n            NSLog(@\"ERROR: cleanup encountered error: %@\", error);\n        }\n        else if (! [isDirectory boolValue]) {\n            NSString* fileName = [url lastPathComponent];\n            if(![fileNameSet containsObject:[fileName stringByDeletingPathExtension]])\n            {\n                [urlsToRemove addObject:url];\n            }\n        }\n    }];\n    for (NSURL* url in urlsToRemove) {\n        [self removeCacheEntryAndFileForFileURL:url];\n    }\n}\n-(void)performBlockOnAllCacheFiles:(void (^)(NSURL* url))cacheItemActionBlock\n{\n    NSFileManager *fileManager = [NSFileManager defaultManager];\n    NSURL *directoryURL = [NSURL fileURLWithPath:self.dataPath];\n    \n    NSDirectoryEnumerator *enumerator = [fileManager\n                                         enumeratorAtURL:directoryURL\n                                         includingPropertiesForKeys:nil\n                                         options:0\n                                         errorHandler:^(NSURL *url, NSError *error) {\n                                             NSLog(@\"ERROR: encountered error while processing all cache files: %@\", error);\n                                             return YES;\n                                         }];\n    \n    for (NSURL *url in enumerator) {\n        cacheItemActionBlock(url);\n    }\n}\n// remove all expired cache entries\n// TODO: exchange with a better displacement strategy\n- (void)doHousekeeping {\n    if ([self offlineMode]) return; // don't cleanup if we're in offline mode\n\tunsigned long size = [self diskCacheSize];\n\tif (size < self.diskCacheDisplacementTresholdSize) return;\n\tNSDate *now = [NSDate date];\n\tNSArray *keys = nil;\n\tNSString *key = nil;\n\tfor (AFCacheableItemInfo *info in [self.cachedItemInfos allValues]) {\n\t\tif (info.expireDate && info.expireDate == [now earlierDate:info.expireDate]) {\n\t\t\tkeys = [self.cachedItemInfos allKeysForObject:info];\n\t\t\tif ([keys count] > 0) {\n\t\t\t\tkey = [keys objectAtIndex:0];\n\t\t\t\t[self removeCacheEntry:info fileOnly:NO];\n                NSString* fullPath = [self.dataPath stringByAppendingPathComponent:key];\n\t\t\t\t[self removeCacheEntryWithFilePath:fullPath fileOnly:NO];\n\t\t\t}\n\t\t}\n\t}\n}\n\n- (void)removeCacheEntryWithFilePath:(NSString *)filePath fileOnly:(BOOL)fileOnly {\n    // TODO: Implement me or remove me (I am called in doHousekeeping)\n    NSLog(@\"TODO: Implement me or remove me (I am called in doHousekeeping)\");\n}\n\n- (unsigned long)diskCacheSize {\n#ifdef AFCACHE_MAINTAINER_WARNINGS\n#warning TODO determine diskCacheSize\n#endif\n\treturn 0;\n#define MINBLOCK 4096\n\tNSDictionary\t\t\t\t*fattrs;\n\tNSDirectoryEnumerator\t\t*de;\n\tunsigned long               size = 0;\n\t\n    de = [[NSFileManager defaultManager]\n\t\t  enumeratorAtPath:self.dataPath];\n\t\n    while([de nextObject]) {\n\t\tfattrs = [de fileAttributes];\n\t\tif (![[fattrs valueForKey:NSFileType]\n\t\t\t  isEqualToString:NSFileTypeDirectory]) {\n\t\t\tsize += ((([[fattrs valueForKey:NSFileSize] unsignedIntValue] +\n\t\t\t\t\t   MINBLOCK - 1) / MINBLOCK) * MINBLOCK);\n\t\t}\n    }\n\treturn size;\n}\n\n#pragma mark - Public API for getting cached items (do not use any other)\n\n- (AFCacheableItem*)cacheItemForURL:(NSURL *)url\n                      urlCredential:(NSURLCredential *)urlCredential\n                     completionBlock:(AFCacheableItemBlock)completionBlock\n                           failBlock:(AFCacheableItemBlock)failBlock\n{\n    // delegate to our internal method\n    return [self _internalCacheItemForURL:url\n                            urlCredential:urlCredential\n                          completionBlock:completionBlock\n                                failBlock:failBlock\n                            progressBlock:nil\n                     requestConfiguration:nil];\n}\n\n- (AFCacheableItem*)cacheItemForURL:(NSURL *)url\n                      urlCredential:(NSURLCredential *)urlCredential\n                     completionBlock:(AFCacheableItemBlock)completionBlock\n                           failBlock:(AFCacheableItemBlock)failBlock\n                       progressBlock:(AFCacheableItemBlock)progressBlock\n{\n    // delegate to our internal method\n    return [self _internalCacheItemForURL:url\n                            urlCredential:urlCredential\n                          completionBlock:completionBlock\n                                failBlock:failBlock\n                            progressBlock:progressBlock\n                     requestConfiguration:nil];\n}\n\n- (AFCacheableItem*)cacheItemForURL:(NSURL *)url\n                      urlCredential:(NSURLCredential *)urlCredential\n                     completionBlock:(AFCacheableItemBlock)completionBlock\n                           failBlock:(AFCacheableItemBlock)failBlock\n                       progressBlock:(AFCacheableItemBlock)progressBlock\n                requestConfiguration:(AFRequestConfiguration*)requestConfiguration\n{\n    // delegate to our internal method\n    return [self _internalCacheItemForURL:url\n                            urlCredential:urlCredential\n                           completionBlock:completionBlock\n                                 failBlock:failBlock\n                             progressBlock:progressBlock\n                     requestConfiguration:requestConfiguration];\n}\n\n- (AFCacheableItem*)_internalCacheItemForURL:(NSURL *)url urlCredential:(NSURLCredential *)urlCredential completionBlock:(AFCacheableItemBlock)completionBlock failBlock:(AFCacheableItemBlock)failBlock progressBlock:(AFCacheableItemBlock)progressBlock requestConfiguration:(AFRequestConfiguration*)requestConfiguration\n{\n\t// validate URL and handle invalid url\n    if (![self isValidRequestURL:url]) {\n        [self handleInvalidURLRequest:failBlock];\n        return nil;\n    }\n\n    if ([url isFileURL]) {\n        AFCacheableItem *shortCircuitItem = [[AFCacheableItem alloc] init];\n        shortCircuitItem.url = url;\n        if ([[NSFileManager defaultManager] fileExistsAtPath:[url path]]) {\n            shortCircuitItem.data = [NSData dataWithContentsOfURL: url];\n            if (completionBlock) {\n                completionBlock(shortCircuitItem);\n            }\n        }\n        else {\n            if (failBlock) {\n                failBlock(shortCircuitItem);\n            }\n        }\n        \n        return shortCircuitItem;\n    }\n    \n    // increase count of request in this session\n\t_totalRequestsForSession++;\n    \n    // extract option-parts from requestConfiguration.options\n    BOOL invalidateCacheEntry = (requestConfiguration.options & kAFCacheInvalidateEntry) != 0;\n    BOOL revalidateCacheEntry = (requestConfiguration.options & kAFCacheRevalidateEntry) != 0;\n    BOOL justFetchHTTPHeader = (requestConfiguration.options & kAFCacheJustFetchHTTPHeader) != 0;\n    BOOL isPackageArchive = (requestConfiguration.options & kAFCacheIsPackageArchive) != 0;\n    BOOL neverRevalidate = (requestConfiguration.options & kAFCacheNeverRevalidate) != 0;\n    BOOL returnFileBeforeRevalidation = (requestConfiguration.options & kAFCacheReturnFileBeforeRevalidation) != 0;\n\n\t// Update URL with redirected URL if in offline mode\n    BOOL didRewriteURL = NO; // the request URL might be rewritten by the cache internally when we're in offline mode\n    url = [self urlOrRedirectURLInOfflineModeForURL:url redirected:&didRewriteURL];\n\n    // try to get object from disk\n    AFCacheableItem *item = nil;\n    if (!invalidateCacheEntry) {\n        item = [self cacheableItemFromCacheForURL:url];\n    }\n    \n    BOOL performGETRequest = NO; // will be set to YES if we're online and have a cache miss\n    \n    if (!item) {\n        // if we are in offline mode and do not have a cached version, so return nil\n        if (!url.isFileURL && [self offlineMode]) {\n            if (failBlock) {\n                failBlock(nil);\n            }\n            return nil;\n        }\n        \n        // we're online - create a new item, since we had a cache miss\n        item = [[AFCacheableItem alloc] init];\n        performGETRequest = YES;\n    }\n\n    // setup item\n    item.tag = self.totalRequestsForSession;\n    item.cache = self; // calling this particular setter does not increase the retain count to avoid a cyclic reference from a cacheable item to the cache.\n    item.url = url;\n    item.userData = requestConfiguration.userData;\n    item.urlCredential = urlCredential;\n    item.justFetchHTTPHeader = justFetchHTTPHeader;\n    item.isPackageArchive = isPackageArchive;\n    item.URLInternallyRewritten = didRewriteURL;\n    item.servedFromCache = !performGETRequest;\n    item.info.request = requestConfiguration.request;\n    item.hasReturnedCachedItemBeforeRevalidation = NO;\n\n    if (!self.cacheWithHashname) {\n        item.info.filename = [self filenameForURL:item.url];\n    }\n    \n    [item addCompletionBlock:completionBlock failBlock:failBlock progressBlock:progressBlock];\n\n    if (performGETRequest) {\n        // TODO: Why do we cache the item here? Nothing has been downloaded yet?\n        [self.cachedItemInfos setObject:item.info forKey:[url absoluteString]];\n        \n        [self addItemToDownloadQueue:item];\n        return item;\n    }\n    else\n    {\n        // object found in cache.\n        // now check if it is fresh enough to serve it from disk.\n        // pretend it's fresh when cache is in offline mode\n        item.servedFromCache = YES;\n        \n        if (![self isConnectedToNetwork] || ([self offlineMode] && !revalidateCacheEntry)) {\n            // return item and call delegate only if fully loaded\n            if (item.data) {\n                if (completionBlock) {\n                    completionBlock(item);\n                }\n                return item;\n            }\n            \n            if (![self isQueuedOrDownloadingURL:item.url]) {\n                if ([item hasValidContentLength] && !item.canMapData) {\n                    // Perhaps the item just can not be mapped.\n                    if (completionBlock) {\n                        completionBlock(item);\n                    }\n                    return item;\n                }\n                \n                // nobody is downloading, but we got the item from the cachestore.\n                // Something is wrong -> fail\n                if (failBlock) {\n                    failBlock(item);\n                }\n                return nil;\n            }\n        }\n        \n        item.isRevalidating = revalidateCacheEntry;\n        \n        // Check if item is fully loaded already\n        if (item.canMapData && !item.data && ![item hasValidContentLength]) {\n            [self addItemToDownloadQueue:item];\n            return item;\n        }\n        \n        // Item is fresh, so call didLoad selector and return the cached item.\n        if ([item isFresh] || returnFileBeforeRevalidation || neverRevalidate) {\n            item.cacheStatus = kCacheStatusFresh;\n#ifdef RESUMEABLE_DOWNLOAD\n            if(item.currentContentLength < item.info.contentLength) {\n                //resume download\n                item.cacheStatus = kCacheStatusDownloading;\n                [self handleDownloadItem:item ignoreQueue:shouldIgnoreQueue];\n            }\n#else\n            item.currentContentLength = item.info.contentLength;\n            if (completionBlock) {\n                completionBlock(item);\n            }\n            AFLog(@\"serving from cache: %@\", item.url);\n#endif\n            if (returnFileBeforeRevalidation) {\n                item.hasReturnedCachedItemBeforeRevalidation = YES;\n            } else {\n                return item;\n            }\n            //item.info.responseTimestamp = [NSDate timeIntervalSinceReferenceDate];\n        }\n\n        // Item is not fresh, fire an If-Modified-Since request\n        //#ifndef RESUMEABLE_DOWNLOAD\n        // reset data, because there may be old data set already\n        item.data = nil;//will cause the data to be reloaded from file when accessed next time\n        //#endif\n        \n        // save information that object was in cache and has to be revalidated\n        item.cacheStatus = kCacheStatusRevalidationPending;\n        \n        NSMutableURLRequest *IMSRequest = [NSMutableURLRequest requestWithURL:url\n                                                                  cachePolicy:NSURLRequestReloadIgnoringLocalCacheData\n                                                              timeoutInterval:self.networkTimeoutIntervals.IMSRequest];\n        \n        NSDate *lastModified = [NSDate dateWithTimeIntervalSinceReferenceDate: [item.info.lastModified timeIntervalSinceReferenceDate]];\n        [IMSRequest addValue:[DateParser formatHTTPDate:lastModified] forHTTPHeaderField:kHTTPHeaderIfModifiedSince];\n        [IMSRequest setValue:@\"\" forHTTPHeaderField:AFCacheInternalRequestHeader];\n        \n        if (item.info.eTag) {\n            [IMSRequest addValue:item.info.eTag forHTTPHeaderField:kHTTPHeaderIfNoneMatch];\n        }\n        else {\n            NSDate *lastModified = [NSDate dateWithTimeIntervalSinceReferenceDate:\n                                    [item.info.lastModified timeIntervalSinceReferenceDate]];\n            // TODO: Why do we overwrite the existing header field here already set above?\n            [IMSRequest addValue:[DateParser formatHTTPDate:lastModified] forHTTPHeaderField:kHTTPHeaderIfModifiedSince];\n        }\n        \n        item.IMSRequest = IMSRequest;\n        ASSERT_NO_CONNECTION_WHEN_IN_OFFLINE_MODE_FOR_URL(IMSRequest.URL);\n\n        [self addItemToDownloadQueue:item];\n    }\n    \n    return item;\n}\n\n- (AFCacheableItem *)cacheableItemFromCacheForURL:(NSURL *)url {\n    AFCacheableItem *item = [self cacheableItemFromCacheStore:url];\n\n    // check validity of cached item\n    // TODO: (Claus Weymann:) validate this check (does this ensure that we continue downloading but also detect corrupt files?)\n    if (![item isDataLoaded] && ([item hasDownloadFileAttribute] || ![item hasValidContentLength]) && ![self isDownloadingURL:url]) {\n        //Claus Weymann: item is not vailid and not allready being downloaded, set item to nil to trigger download\n        item = nil;\n    }\n    return item;\n}\n\n- (NSURL*)urlOrRedirectURLInOfflineModeForURL:(NSURL *)url redirected:(BOOL *)redirected {\n    *redirected = NO;\n    if ([self offlineMode]) {\n        // In offline mode we change the request URL to the redirected URL (if any)\n        // TODO: Michael Markowski has left this comment (I don't know if it still holds true):\n        // AFAIU redirects of type 302 MUST NOT be cached\n        // since we do not distinguish between 301 and 302 or other types of redirects, nor save the status code anywhere\n        // we simply only check the cached redirects if we're in offline mode\n        // see http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html 13.4 Response Cacheability\n        NSString *redirectURL = [self.urlRedirects valueForKey:[url absoluteString]];\n        if (redirectURL) {\n            url = [NSURL URLWithString: redirectURL];\n            *redirected = YES;\n        }\n    }\n    return url;\n}\n\n#pragma mark - Deprecated methods for getting cached items\n\n// DO NOT USE THIS METHOD - it is deprecated\n- (AFCacheableItem *)cachedObjectForURL:(NSURL *)url delegate: (id) aDelegate {\n\treturn [self cachedObjectForURL: url delegate: aDelegate options: 0];\n}\n\n// DO NOT USE THIS METHOD - it is deprecated\n- (AFCacheableItem *)cachedObjectForRequest:(NSURLRequest *)aRequest delegate: (id) aDelegate {\n\treturn [self cachedObjectForURL: aRequest.URL\n                           delegate: aDelegate\n                           selector: @selector(connectionDidFinish:)\n\t\t\t\t\tdidFailSelector: @selector(connectionDidFail:)\n                            options: 0\n                           userData: nil\n\t\t\t\t\t\t   username: nil password: nil request:aRequest];\n}\n\n// DO NOT USE THIS METHOD - it is deprecated\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n\t\t\t\t\t\t\t   delegate: (id) aDelegate\n\t\t\t\t\t\t\t\toptions: (int) options\n{\n\t\n\treturn [self cachedObjectForURL: url\n                           delegate: aDelegate\n                           selector: @selector(connectionDidFinish:)\n\t\t\t\t\tdidFailSelector: @selector(connectionDidFail:)\n                            options: options\n                           userData: nil\n\t\t\t\t\t\t   username: nil password: nil request:nil];\n}\n\n// DO NOT USE THIS METHOD - it is deprecated\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n\t\t\t\t\t\t\t   delegate: (id) aDelegate\n\t\t\t\t\t\t\t   selector: (SEL) aSelector\n\t\t\t\t\t\t\t\toptions: (int) options\n{\n\t\n\treturn [self cachedObjectForURL: url\n                           delegate: aDelegate\n                           selector: aSelector\n\t\t\t\t\tdidFailSelector: @selector(connectionDidFail:)\n                            options: options\n                           userData: nil\n\t\t\t\t\t\t   username: nil password: nil request:nil];\n}\n\n// DO NOT USE THIS METHOD - it is deprecated\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n\t\t\t\t\t\t\t   delegate: (id) aDelegate\n                               selector: (SEL) aSelector\n\t\t\t\t\t\t\t\toptions: (int) options\n\t\t\t\t\t\t\t   userData: (id)userData\n{\n\treturn [self cachedObjectForURL: url\n                           delegate: aDelegate\n                           selector: aSelector\n\t\t\t\t\tdidFailSelector: @selector(connectionDidFail:)\n                            options: options\n                           userData: userData\n\t\t\t\t\t\t   username: nil password: nil request:nil];\n}\n\n\n// DO NOT USE THIS METHOD - it is deprecated\n- (AFCacheableItem *)cachedObjectForURL:(NSURL *)url delegate:(id) aDelegate selector:(SEL)aSelector didFailSelector:(SEL)didFailSelector options: (int) options {\n\treturn [self cachedObjectForURL:url delegate:aDelegate selector:aSelector didFailSelector:didFailSelector options:options userData:nil username:nil password:nil request:nil];\n}\n\n/*\n * Performs an asynchroneous request and calls delegate when finished loading\n *\n */\n\n// DO NOT USE THIS METHOD - it is deprecated\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n\t\t\t\t\t\t\t   delegate: (id) aDelegate\n\t\t\t\t\t\t\t   selector: (SEL) aSelector\n\t\t\t\t\t\tdidFailSelector: (SEL) aFailSelector\n\t\t\t\t\t\t\t\toptions: (int) options\n                               userData: (id)userData\n\t\t\t\t\t\t\t   username: (NSString *)aUsername\n\t\t\t\t\t\t\t   password: (NSString *)aPassword\n                                request: (NSURLRequest*)aRequest\n{\n    return [self cachedObjectForURL:url\n                           delegate:aDelegate\n                           selector:aSelector\n                    didFailSelector:aFailSelector\n                    completionBlock:nil\n                          failBlock:nil\n                      progressBlock:nil\n                            options:options\n                           userData:userData\n                           username:aUsername\n                           password:aPassword\n                            request:aRequest];\n}\n\n// DO NOT USE THIS METHOD - it is deprecated\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n                               delegate: (id)aDelegate\n\t\t\t\t\t\t\t   selector: (SEL)aSelector\n\t\t\t\t\t\tdidFailSelector: (SEL)aFailSelector\n                        completionBlock: (id)aCompletionBlock\n                              failBlock: (id)aFailBlock\n                          progressBlock: (id)aProgressBlock\n\t\t\t\t\t\t\t\toptions: (int)options\n                               userData: (id)userData\n\t\t\t\t\t\t\t   username: (NSString *)aUsername\n\t\t\t\t\t\t\t   password: (NSString *)aPassword\n                                request: (NSURLRequest*)aRequest\n{\n    // to provide backward compability we convert this call to our new API\n    \n    __weak id weakDelegate = aDelegate;\n    \n    AFRequestConfiguration *requestConfiguration = [[AFRequestConfiguration alloc] init];\n    requestConfiguration.options = options;\n    requestConfiguration.request = aRequest;\n    requestConfiguration.userData = userData;\n    \n    NSURLCredential *urlCredential;\n    if (aUsername && aPassword) {\n        urlCredential = [NSURLCredential credentialWithUser:aUsername password:aPassword persistence:NSURLCredentialPersistenceForSession];\n    }\n    \n    id completionBlock = aCompletionBlock;\n    if (!completionBlock) {\n        completionBlock = ^(AFCacheableItem *item) {\n            // deprecated stuff\n            [weakDelegate performSelector:aSelector withObject:item];\n        };\n    }\n    \n    id failBlock = aFailBlock;\n    if (!failBlock) {\n        failBlock = ^(AFCacheableItem *item) {\n            // deprecated stuff\n            [weakDelegate performSelector:aFailSelector withObject:item];\n        };\n    }\n\n    // the progress (as selector) is implicitly done in AFCacheableItem:\n    // - (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)receivedData\n    id progressBlock = aProgressBlock;\n    \n    // delegate to our internal method\n    AFCacheableItem *item = [self _internalCacheItemForURL:url\n                                             urlCredential:urlCredential\n                                           completionBlock:completionBlock\n                                                 failBlock:failBlock\n                                             progressBlock:progressBlock\n                                      requestConfiguration:requestConfiguration];\n    item.delegate = weakDelegate;\n    return item;\n}\n\n#pragma mark - synchronous request methods\n\n/*\n * performs a synchroneous request\n *\n */\n\n- (AFCacheableItem *)cachedObjectForURLSynchronous: (NSURL *) url {\n\treturn [self cachedObjectForURLSynchronous:url options:0];\n}\n\n- (AFCacheableItem *)cachedObjectForURLSynchronous:(NSURL *)url\n                                           options: (int) options {\n\t\n#if MAINTAINER_WARNINGS\n\t//#warning BK: this is in support of using file urls with ste-engine - no info yet for shortCircuiting\n#endif\n    if( [url isFileURL] ) {\n        AFCacheableItem *shortCircuitItem = [[AFCacheableItem alloc] init];\n        shortCircuitItem.data = [NSData dataWithContentsOfURL: url];\n        return shortCircuitItem;\n    }\n\t\n    bool invalidateCacheEntry = (options & kAFCacheInvalidateEntry) != 0;\n\tAFCacheableItem *obj = nil;\n\tif (url) {\n\t\t// try to get object from disk if cache is enabled\n\t\tif (!invalidateCacheEntry) {\n\t\t\tobj = [self cacheableItemFromCacheStore: url];\n\t\t}\n\t\t// Object not in cache. Load it from url.\n\t\tif (!obj) {\n\t\t\tNSURLResponse *response = nil;\n\t\t\tNSError *err = nil;\n\t\t\tNSURLRequest *request = [[NSURLRequest alloc] initWithURL: url];\n\t\t\t// The synchronous request will indirectly invoke AFURLCache's\n\t\t\t// storeCachedResponse:forRequest: and add a cacheable item\n\t\t\t// accordingly.\n            \n            ASSERT_NO_CONNECTION_WHEN_IN_OFFLINE_MODE_FOR_URL(url);\n            \n\t\t\tNSData *data = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: &err];\n\t\t\tif ([response respondsToSelector: @selector(statusCode)]) {\n\t\t\t\tNSInteger statusCode = [( (NSHTTPURLResponse *)response )statusCode];\n\t\t\t\tif (statusCode != 200 && statusCode != 304) {\n\t\t\t\t\treturn nil;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If request was successful there should be a cacheable item now.\n\t\t\tif (data) {\n\t\t\t\tobj = [self cacheableItemFromCacheStore: url];\n\t\t\t}\n\t\t}\n\t}\n\treturn obj;\n}\n\n#pragma mark - URL cache state testing\n\n- (BOOL)isQueuedOrDownloadingURL: (NSURL*)url {\n    return ([self isQueuedURL:url] || [self isDownloadingURL:url]);\n}\n\n- (BOOL)isDownloadingURL:(NSURL *)url {\n    return ([[self nonCancelledDownloadOperationForURL:url] isExecuting]);\n}\n\n- (AFDownloadOperation*)nonCancelledDownloadOperationForURL:(NSURL*)url {\n    for (AFDownloadOperation *downloadOperation in [self.downloadOperationQueue operations]) {\n        if (![downloadOperation isCancelled] && [[downloadOperation.cacheableItem.url absoluteString] isEqualToString:[url absoluteString]]) {\n            return downloadOperation;\n        }\n    }\n    return nil;\n}\n\n#pragma mark - State (de-)serialization\n\n- (void)serializeState {\n    @synchronized (self.archiveTimer) {\n        [self.archiveTimer invalidate];\n        self.wantsToArchive = NO;\n        [self serializeState:[self stateDictionary]];\n    }\n}\n\n- (NSDictionary*)stateDictionary {\n    return @{kAFCacheInfoStoreCachedObjectsKey : self.cachedItemInfos,\n            kAFCacheInfoStoreRedirectsKey : self.urlRedirects,\n            kAFCacheInfoStorePackageInfosKey : self.packageInfos,\n            kAFCacheVersionKey : self.version?:@\"\",\n             };\n}\n\n//TODO: state dictionary bundles information about state but is not serialized (persisted) as such. it  splits into parts and serializes some of the information. why?\n- (void)serializeState:(NSDictionary*)state {\n    @autoreleasepool {\n#if AFCACHE_LOGGING_ENABLED\n\t\tAFLog(@\"start archiving\");\n\t\tCFAbsoluteTime start = CFAbsoluteTimeGetCurrent();\n#endif\n        @synchronized(self)\n        {\n            @autoreleasepool {\n                if (self.totalRequestsForSession % kHousekeepingInterval == 0) [self doHousekeeping];\n                \n               NSDictionary *infoStore = @{\n                        kAFCacheInfoStoreCachedObjectsKey : state[kAFCacheInfoStoreCachedObjectsKey],\n                        kAFCacheInfoStoreRedirectsKey : state[kAFCacheInfoStoreRedirectsKey]};\n                [self saveDictionary:infoStore ToFile:self.expireInfoDictionaryPath];\n                \n                NSDictionary* packageInfos = [state valueForKey:kAFCacheInfoStorePackageInfosKey];\n                [self saveDictionary:packageInfos ToFile:self.infoDictionaryPath];\n                \n                NSDictionary* metaData = @{kAFCacheVersionKey:[state valueForKey:kAFCacheVersionKey]};\n                [self saveDictionary:metaData ToFile:self.metaDataDictionaryPath];\n            }\n        }\n#if AFCACHE_LOGGING_ENABLED\n\t\tAFLog(@\"Finish archiving in %f\", CFAbsoluteTimeGetCurrent() - start);\n#endif\n    }\n}\n\n-(void)saveDictionary:(NSDictionary*)dictionary ToFile:(NSString*)fileName\n{\n    NSData* serializedData = [NSKeyedArchiver archivedDataWithRootObject:dictionary];\n    if (serializedData)\n    {\n        NSError* error = nil;\n#if TARGET_OS_IPHONE\n        NSDataWritingOptions options = NSDataWritingAtomic | NSDataWritingFileProtectionNone;\n#else\n        NSDataWritingOptions options = NSDataWritingAtomic;\n#endif\n        if (![serializedData writeToFile:fileName options:options error:&error])\n        {\n            NSLog(@\"Error: Could not write dictionary to file '%@': Error = %@, infoStore = %@\", fileName, error, dictionary);\n        }\n        [AFCache addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:fileName]];\n    }\n    else\n    {\n        NSLog(@\"Error: Could not archive dictionary %@\", dictionary);\n    }\n}\n\n- (void)deserializeState {\n    // Deserialize cacheable item info store\n    NSDictionary *archivedExpireDates = [NSKeyedUnarchiver unarchiveObjectWithFile: self.expireInfoDictionaryPath];\n    NSMutableDictionary *cachedItemInfos = [archivedExpireDates objectForKey:kAFCacheInfoStoreCachedObjectsKey];\n    NSMutableDictionary *urlRedirects = [archivedExpireDates objectForKey:kAFCacheInfoStoreRedirectsKey];\n    if (cachedItemInfos && urlRedirects) {\n        _cachedItemInfos = [NSMutableDictionary dictionaryWithDictionary:cachedItemInfos];\n        _urlRedirects = [NSMutableDictionary dictionaryWithDictionary: urlRedirects];\n        AFLog(@ \"Successfully unarchived expires dictionary\");\n    } else {\n        _cachedItemInfos = [NSMutableDictionary dictionary];\n        _urlRedirects = [NSMutableDictionary dictionary];\n        AFLog(@ \"Created new expires dictionary\");\n    }\n\n    // Deserialize package infos\n    NSDictionary *archivedPackageInfos = [NSKeyedUnarchiver unarchiveObjectWithFile: self.infoDictionaryPath];\n    if (archivedPackageInfos) {\n        _packageInfos = [NSMutableDictionary dictionaryWithDictionary: archivedPackageInfos];\n        AFLog(@ \"Successfully unarchived package infos dictionary\");\n    }\n    else {\n        _packageInfos = [[NSMutableDictionary alloc] init];\n        AFLog(@ \"Created new package infos dictionary\");\n    }\n    \n    // Deserialize metaData\n\n    NSDictionary* metaData = [NSKeyedUnarchiver unarchiveObjectWithFile: self.metaDataDictionaryPath];\n    if ([metaData isKindOfClass:[NSDictionary class]]) {\n        [self migrateFromVersion:metaData[kAFCacheVersionKey]];\n    }\n    else\n    {\n        [self migrateFromVersion:nil];\n    }\n}\n\n- (void)startArchiveThread:(NSTimer*)timer {\n    self.wantsToArchive = NO;\n    NSMutableDictionary* state = [NSMutableDictionary dictionaryWithDictionary: [self stateDictionary]];\n\n    // Copy state items as they shall not be altered when state is persisted\n    // TODO: This copy code must be synchronized with state modifications\n    for (id key in [state allKeys]) {\n        NSObject *stateItem = [state objectForKey:key];\n        [state setObject:[stateItem copy] forKey:key];\n    }\n\n    [NSThread detachNewThreadSelector:@selector(serializeState:)\n                             toTarget:self\n                           withObject:state];\n}\n\n- (void)archive {\n    @synchronized (self.archiveTimer) {\n        [self.archiveTimer invalidate];\n        if (self.archiveInterval > 0) {\n            self.archiveTimer = [NSTimer scheduledTimerWithTimeInterval:[self archiveInterval]\n                                                                 target:self\n                                                               selector:@selector(startArchiveThread:)\n                                                               userInfo:nil\n                                                                repeats:NO];\n        }\n        self.wantsToArchive = YES;\n    }\n}\n\n- (void)archiveNow {\n    @synchronized (self.archiveTimer) {\n        [self.archiveTimer invalidate];\n        [self startArchiveThread:nil];\n        [self archive];\n    }\n}\n\n/* removes every file in the cache directory */\n- (void)invalidateAll {\n\tNSError *error;\n\t\n\t/* remove the cache directory and its contents */\n\tif (![[NSFileManager defaultManager] removeItemAtPath: self.dataPath error: &error]) {\n\t\tNSLog(@ \"Failed to remove cache contents at path: %@\", self.dataPath);\n\t\t//return; If there was no old directory we for sure want a new one...\n\t}\n\t\n\t/* create a new cache directory */\n\tif (![[NSFileManager defaultManager] createDirectoryAtPath: self.dataPath\n\t\t\t\t\t\t\t\t   withIntermediateDirectories: NO\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributes: nil\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t error: &error]) {\n\t\tNSLog(@ \"Failed to create new cache directory at path: %@\", self.dataPath);\n\t\treturn; // this is serious. we need this directory.\n\t}\n\tself.cachedItemInfos = [NSMutableDictionary dictionary];\n    self.urlRedirects = [NSMutableDictionary dictionary];\n    [self archive];\n}\n\n- (NSString *)filenameForURL: (NSURL *) url {\n\treturn [self filenameForURLString:[url absoluteString]];\n}\n\n- (NSString *)filenameForURLString: (NSString *) URLString {\n#ifdef AFCACHE_MAINTAINER_WARNINGS\n#warning TODO cleanup\n#endif\n\tif ([URLString hasPrefix:@\"data:\"]) return nil;\n\tNSString *filepath = [URLString stringByRegex:@\".*://\" substitution:@\"\"];\n\tNSString *filepath1 = [filepath stringByRegex:@\":[0-9]?*/\" substitution:@\"\"];\n\tNSString *filepath2 = [filepath1 stringByRegex:@\"#.*\" substitution:@\"\"];\n\tNSString *filepath3 = [filepath2 stringByRegex:@\"\\?.*\" substitution:@\"\"];\n\tNSString *filepath4 = [filepath3 stringByRegex:@\"//*\" substitution:@\"/\"];\n    \n    \n    if (self.cacheWithoutUrlParameter)\n    {\n        NSArray *comps = [filepath4 componentsSeparatedByString:@\"?\"];\n        if (comps)\n        {\n            filepath4 = [comps objectAtIndex:0];\n        }\n    }\n\t\n    if (self.cacheWithoutHostname)\n    {\n        NSMutableArray *pathComps = [NSMutableArray arrayWithArray:[filepath4 pathComponents]];\n        if (pathComps)\n        {\n            [pathComps removeObjectAtIndex:0];\n            \n            return [NSString pathWithComponents:pathComps];\n        }\n    }\n    \n\treturn filepath4;\n}\n\n- (NSString *)filePath: (NSString *) filename {\n\treturn [self.dataPath stringByAppendingPathComponent: filename];\n}\n\n- (NSString *)filePathForFilename:(NSString *)filename pathExtension:(NSString *)pathExtension\n{\n    if (!pathExtension) {\n        return [self filePath:filename];\n    }\n    else {\n        return [[self.dataPath stringByAppendingPathComponent:filename] stringByAppendingPathExtension:pathExtension];\n    }\n}\n\n- (NSString *)filePathForURL: (NSURL *) url {\n\treturn [self.dataPath stringByAppendingPathComponent: [self filenameForURL: url]];\n}\n\n- (NSString *)fullPathForCacheableItem:(AFCacheableItem*)item {\n    if (!item) {\n        return nil;\n    }\n    \n    NSString *fullPath;\n    if (!self.cacheWithHashname) {\n        return [self filePathForURL:item.url];\n    } else {\n#if USE_ASSERTS\n        NSAssert([item.info.filename length] > 0, @\"Filename length MUST NOT be zero! This is a software bug\");\n#endif\n        return [self filePathForFilename:item.info.filename pathExtension:[item.url pathExtension]];\n    }\n}\n\n- (void)removeCacheEntry:(AFCacheableItemInfo*)info fileOnly:(BOOL)fileOnly\n{\n    [self removeCacheEntry:info fileOnly:fileOnly fallbackURL:nil];\n}\n\n- (void)removeCacheEntry:(AFCacheableItemInfo*)info fileOnly:(BOOL) fileOnly fallbackURL:(NSURL *)fallbackURL;\n{\n    if (!info) {\n        return;\n    }\n\t// remove redirects to this entry\n\tfor (id redirectKey in [self.urlRedirects allValues]) {\n\t\tif ([redirectKey isKindOfClass:[NSString class]]) {\n\t\t\tid redirectTarget = [self.urlRedirects objectForKey:redirectKey];\n\t\t\tif ([redirectTarget isKindOfClass:[NSString class]]) {\n\t\t\t\tif([redirectTarget isEqualToString:[info.request.URL absoluteString]])\n\t\t\t\t{\n\t\t\t\t\t[self.urlRedirects removeObjectForKey:redirectKey];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t}\n    \n    NSString *filePath = nil;\n    if (!self.cacheWithHashname)\n    {\n        filePath = [self filePathForURL:info.request.URL];\n    }\n    else\n    {\n        if (fallbackURL) {\n            filePath = [self filePathForFilename:info.filename pathExtension:[fallbackURL pathExtension]];\n        }\n        else {\n            filePath = [self filePathForFilename:info.filename pathExtension:[info.request.URL pathExtension]];\n        }\n    }\n\n    BOOL fileNonExistentOrDeleted = [self deleteFileAtPath:filePath];\n    \n    if (!fileOnly && (fileNonExistentOrDeleted)) {\n        if (fallbackURL) {\n            [self.cachedItemInfos removeObjectForKey:[fallbackURL absoluteString]];\n        }\n        else {\n            NSURL* requestURL = [info.request URL];\n            if (requestURL) {\n                 [self.cachedItemInfos removeObjectForKey:[requestURL absoluteString]];\n            }\n        }\n    }\n}\n\n-(void)removeCacheEntryAndFileForFileURL:(NSURL*)fileURL\n{\n    NSSet* results = [self.cachedItemInfos keysOfEntriesPassingTest:^BOOL(id key, id evaluatedObject, BOOL *stop) {\n        if ([evaluatedObject isKindOfClass:[AFCacheableItemInfo class]]) {\n            return [((AFCacheableItemInfo*)evaluatedObject).filename isEqualToString:[[fileURL lastPathComponent] stringByDeletingPathExtension]];\n        }\n        return NO;\n    }];\n    \n    if ([results count] > 0) {\n        //delete file and entry for files with corresponding infos (should only be one)\n        for (NSString* key in results) {\n            AFCacheableItemInfo* info = self.cachedItemInfos[key];\n            [self removeCacheEntry:info fileOnly:NO fallbackURL:[NSURL URLWithString:key]];\n        }\n    }\n    else\n    {\n        NSError* error = nil;\n        if(![[NSFileManager defaultManager] removeItemAtURL:fileURL error: &error])\n        {\n            NSLog(@\"WARNING: failed to delete orphaned cache file at %@ with error : %@\", fileURL, error);\n        }\n    }\n}\n\n-(BOOL)deleteFileAtPath:(NSString*)filePath\n{\n    BOOL successfullyDeletedFile = NO;\n    BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:filePath];\n    NSError* error = nil;\n    if (fileExists) {\n        successfullyDeletedFile = [[NSFileManager defaultManager] removeItemAtPath: filePath error: &error];\n        if (!successfullyDeletedFile)\n        {\n            AFLog(@ \"Failed to delete file for outdated cache item info %@\", info);\n            NSLog(@\"ERROR: failed to delete file %@ because of error: %@\", filePath, error);\n        }\n        else\n        {\n            AFLog(@ \"Successfully removed item at %@\", filePath);\n        }\n    }\n    return (!fileExists) || successfullyDeletedFile;\n}\n\n#pragma mark internal core methods\n\n- (void)updateModificationDataAndTriggerArchiving: (AFCacheableItem *) cacheableItem {\n\tNSError *error = nil;\n\t\n\tNSString *filePath = [self fullPathForCacheableItem:cacheableItem];\n\t\n\t/* reset the file's modification date to indicate that the URL has been checked */\n\tNSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys: [NSDate date], NSFileModificationDate, nil];\n\t\n\tif (![[NSFileManager defaultManager] setAttributes:dict ofItemAtPath:filePath error:&error]) {\n\t\tNSLog(@ \"Failed to reset modification date for cache item %@\", filePath);\n\t}\n\t[self archive];\n}\n\n- (NSOutputStream*)createOutputStreamForItem:(AFCacheableItem*)cacheableItem\n{\n    NSString *filePath = [self fullPathForCacheableItem: cacheableItem];\n    \n\t// remove file if exists\n\tif ([[NSFileManager defaultManager] fileExistsAtPath: filePath]) {\n\t\t[self removeCacheEntry:cacheableItem.info fileOnly:YES];\n\t\tAFLog(@\"removing %@\", filePath);\n\t}\n\t\n\t// create directory if not exists\n\tNSString *pathToDirectory = [filePath stringByDeletingLastPathComponent];\n    BOOL isDirectory = YES;\n\tif (![[NSFileManager defaultManager] fileExistsAtPath:pathToDirectory isDirectory:&isDirectory] || !isDirectory) {\n        NSError* error = nil;\n        if (!isDirectory) {\n            if (![[NSFileManager defaultManager] removeItemAtPath:pathToDirectory error:&error]) {\n                NSLog(@\"AFCache: Could not remove directory \\\"%@\\\" (Error: %@)\", pathToDirectory, [error localizedDescription]);\n            }\n        }\n        if ( [[NSFileManager defaultManager] createDirectoryAtPath:pathToDirectory withIntermediateDirectories:YES attributes:nil error:&error]) {\n            AFLog(@\"creating directory %@\", pathToDirectory);\n            [AFCache addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:pathToDirectory]];\n        } else {\n            AFLog(@\"Failed to create directory at path %@\", pathToDirectory);\n        }\n\t}\n\t\n\t// write file\n\tif (self.maxItemFileSize == kAFCacheInfiniteFileSize || cacheableItem.info.contentLength < self.maxItemFileSize) {\n\t\t/* file doesn't exist, so create it */\n#if TARGET_OS_IPHONE\n        NSDictionary *fileAttributes = @{NSFileProtectionKey:NSFileProtectionNone};\n#else\n        NSDictionary *fileAttributes = nil;\n#endif\n        if (![[NSFileManager defaultManager] createFileAtPath:filePath\n                                                     contents:nil\n                                                   attributes:fileAttributes])\n        {\n            AFLog(@\"Error: could not create file \\\"%@\\\"\", filePath);\n        }\n        \n        NSURL *fileURL = [NSURL fileURLWithPath:filePath];\n        \n        [AFCache addSkipBackupAttributeToItemAtURL:fileURL];\n        \n        NSOutputStream *outputStream = [[NSOutputStream alloc] initWithURL:fileURL append:NO];\n        [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];\n        [outputStream open];\n        return outputStream;\n\t}\n\telse {\n\t\tNSLog(@ \"AFCache: item %@ \\nsize exceeds maxItemFileSize (%f). Won't write file to disk\",cacheableItem.url, self.maxItemFileSize);\n\t\t[self.cachedItemInfos removeObjectForKey: [cacheableItem.url absoluteString]];\n        return nil;\n\t}\n}\n\n- (BOOL)_fileExistsOrPendingForCacheableItem:(AFCacheableItem*)item {\n    if (![self isValidRequestURL:item.url]) {\n        return NO;\n    }\n    \n\t// the complete path\n\tNSString *filePath = [self fullPathForCacheableItem:item];\n    \n\tAFLog(@\"checking for file at path %@\", filePath);\n\t\n\tif (![[NSFileManager defaultManager] fileExistsAtPath: filePath])\n    {\n        // file doesn't exist. check if someone else is downloading the url already\n        if ([self isQueuedOrDownloadingURL:item.url])\n\t\t{\n            AFLog(@\"Someone else is already downloading the URL: %@.\", [item.url absoluteString]);\n\t\t}\n\t\telse\n\t\t{\n            AFLog(@\"Cache miss for URL: %@.\", [item.url absoluteString]);\n            return NO;\n        }\n    }\n    return YES;\n}\n\n// If the file exists on disk we return a new AFCacheableItem for it,\n// but it may be only half loaded yet.\n- (AFCacheableItem *)cacheableItemFromCacheStore: (NSURL *) URL {\n    if (![self isValidRequestURL:URL]) {\n        return nil;\n    }\n    \n\tif ([[URL absoluteString] hasPrefix:@\"data:\"]) {\n        return nil;\n\t}\n    \n    AFCacheableItemInfo *info = [self.cachedItemInfos objectForKey: [URL absoluteString]];\n    if (!info) {\n        NSString *redirectURLString = [self.urlRedirects valueForKey:[URL absoluteString]];\n        info = [self.cachedItemInfos objectForKey: redirectURLString];\n    }\n    if (!info) {\n        return nil;\n    }\n    \n    AFLog(@\"Cache hit for URL: %@\", [URL absoluteString]);\n\n    // check if there is an item in pendingConnections\n    AFCacheableItem *cacheableItem;\n    AFDownloadOperation *downloadOperation = [self nonCancelledDownloadOperationForURL:URL];\n    if ([downloadOperation isExecuting]) {\n        // TODO: This concept of AFCache was broken: Returning a running download request does not conform to this method's name\n        cacheableItem = downloadOperation.cacheableItem;\n    } else {\n        cacheableItem = [[AFCacheableItem alloc] init];\n        cacheableItem.cache = self;\n        cacheableItem.url = URL;\n        cacheableItem.info = info;\n        cacheableItem.currentContentLength = 0;//info.contentLength;\n\n        if (!self.cacheWithHashname)\n        {\n            cacheableItem.info.filename = [self filenameForURL:cacheableItem.url];\n        }\n\n        // check if file is valid\n\n        /*  ======>\n         *\n         *  This is the place where we check if the URL is already in the queue\n         *\n         *  TODO: Remove comment as soon as all that internal method got cleaned up\n         *\n         *  <======\n         */\n\n\n        BOOL fileExistsOrPending = [self _fileExistsOrPendingForCacheableItem:cacheableItem];\n        if (!fileExistsOrPending) {\n            // Something went wrong\n            AFLog(@\"Cache info store out of sync for url %@, removing cached file %@.\", [URL absoluteString], [self fullPathForCacheableItem:cacheableItem]);\n            // TODO: The concept is broken here. Why are we going to delete a file that obviously DOES NOT EXIST? maybe it makes sense when the url is pending?\n            [self removeCacheEntry:cacheableItem.info fileOnly:YES];\n            cacheableItem = nil;\n        }\n        else\n        {\n            //make sure that we continue downloading by setting the length (currently done by reading out file lenth in the info.actualLength accessor)\n            cacheableItem.info.cachePath = [self fullPathForCacheableItem:cacheableItem];\n        }\n    }\n\n    // Update item's status\n    if ([self offlineMode]) {\n        cacheableItem.cacheStatus = kCacheStatusFresh;\n    }\n    else if (cacheableItem.isRevalidating) {\n        cacheableItem.cacheStatus = kCacheStatusRevalidationPending;\n    } else if (nil != cacheableItem.data || !cacheableItem.canMapData) {\n        cacheableItem.cacheStatus = [cacheableItem isFresh] ? kCacheStatusFresh : kCacheStatusStale;\n    }\n\n    return cacheableItem;\n}\n\n#pragma mark - Cancel requests on cache\n\n- (void)cancelAllRequestsForURL:(NSURL *)url {\n    if (!url) {\n        return;\n    }\n    for (AFDownloadOperation *downloadOperation in [self.downloadOperationQueue operations]) {\n        if ([[downloadOperation.cacheableItem.url absoluteString] isEqualToString:[url absoluteString]]) {\n            [downloadOperation cancel];\n        }\n    }\n}\n\n- (void)cancelAsynchronousOperationsForURL:(NSURL *)url itemDelegate:(id)itemDelegate\n{\n    if (!url || !itemDelegate) {\n        return;\n    }\n    for (AFDownloadOperation *downloadOperation in [self.downloadOperationQueue operations]) {\n        if ((downloadOperation.cacheableItem.delegate == itemDelegate) && ([[downloadOperation.cacheableItem.url absoluteString] isEqualToString:[url absoluteString]])) {\n            [downloadOperation cancel];\n        }\n    }\n}\n\n- (void)cancelAsynchronousOperationsForDelegate:(id)itemDelegate\n{\n    if (!itemDelegate) {\n        return;\n    }\n\n    for (AFDownloadOperation *downloadOperation in [self.downloadOperationQueue operations]) {\n        if (downloadOperation.cacheableItem.delegate == itemDelegate) {\n            [downloadOperation cancel];\n        }\n    }\n}\n\n- (void)cancelAllDownloads\n{\n    [self.downloadOperationQueue cancelAllOperations];\n}\n\n- (BOOL)isQueuedURL:(NSURL*)url\n{\n    AFDownloadOperation *downloadOperation = [self nonCancelledDownloadOperationForURL:url];\n    return downloadOperation && !([downloadOperation isExecuting] || [downloadOperation isFinished]);\n}\n\n- (void)prioritizeURL:(NSURL*)url\n{\n    [[self nonCancelledDownloadOperationForURL:url] setQueuePriority:NSOperationQueuePriorityVeryHigh];\n}\n\n/**\n * Add the item to the downloadQueue\n */\n- (void)addItemToDownloadQueue:(AFCacheableItem*)item\n{\n    if ([self offlineMode]) {\n        [item sendFailSignalToClientItems];\n        return;\n    }\n\n    //check if we can download\n    if (![item.url isFileURL] && [self offlineMode]) {\n        //we can not download this item at the moment\n        [item sendFailSignalToClientItems];\n        return;\n    }\n    \n    // check if we are downloading already\n    if ([self isDownloadingURL: item.url])\n    {\n        // don't start another connection\n        AFLog(@\"We are downloading already. Won't start another connection for %@\", item.url);\n        return;\n    }\n    \n\tNSURLRequest *theRequest = item.info.request;\n    \n    // no original request, check if we want to send an IMS request\n    if (!theRequest) {\n        theRequest = item.IMSRequest;\n    }\n    // this is a reqular request, create a new one\n    if (!theRequest) {\n        NSTimeInterval timeout = item.isPackageArchive ? self.networkTimeoutIntervals.PackageRequest : self.networkTimeoutIntervals.GETRequest;\n        theRequest = [NSMutableURLRequest requestWithURL: item.url\n                                             cachePolicy: NSURLRequestReloadIgnoringLocalCacheData\n                                         timeoutInterval: timeout];\n\t}\n\n    if ([theRequest isKindOfClass:[NSMutableURLRequest class]])\n    {\n#ifdef RESUMEABLE_DOWNLOAD\n        uint64_t dataAlreadyDownloaded = item.info.actualLength;\n        NSString* rangeToDownload = [NSString stringWithFormat:@\"%lld-\",dataAlreadyDownloaded];\n        uint64_t expectedFileSize = item.info.contentLength;\n        if(expectedFileSize > 0)\n            rangeToDownload = [rangeToDownload stringByAppendingFormat:@\"%lld\",expectedFileSize];\n        AFLog(@\"range %@\",rangeToDownload);\n        [(NSMutableURLRequest*)theRequest setValue:rangeToDownload forHTTPHeaderField:@\"Range\"];\n#endif\n        [(NSMutableURLRequest*)theRequest setValue:@\"\" forHTTPHeaderField:AFCacheInternalRequestHeader];\n    }\n    \n    item.info.requestTimestamp = [NSDate timeIntervalSinceReferenceDate];\n    item.info.responseTimestamp = 0.0;\n    item.info.request = theRequest;\n    \n    ASSERT_NO_CONNECTION_WHEN_IN_OFFLINE_MODE_FOR_URL(theRequest.URL);\n\n    AFDownloadOperation *downloadOperation = [[AFDownloadOperation alloc] initWithCacheableItem:item];\n    [self.downloadOperationQueue addOperation:downloadOperation];\n}\n\n- (BOOL)hasCachedItemForURL:(NSURL *)url\n{\n    AFCacheableItem* item = [self cacheableItemFromCacheStore:url];\n    if (item)\n    {\n        return nil != item.data;\n    }\n    \n    return NO;\n}\n\n#pragma mark - offline mode & pause methods\n\n- (BOOL)suspended {\n    return [self.downloadOperationQueue isSuspended];\n}\n\n- (void)setSuspended:(BOOL)pause {\n    [self.downloadOperationQueue setSuspended:pause];\n    [self.packageArchiveQueue setSuspended:pause];\n\n    // TODO: Do we really need to cancel already running downloads? If not, just remove the following lines\n\tif (pause) {\n        // TODO: Cancel current downloads and add running download operations to a list...\n    }\n\telse {\n        // TODO: ...whose items are now added back to the queue with highest priority to start downloading them again\n\t}\n}\n\n/*\n * Returns whether we currently have a working connection\n * Note: This should be done asynchronously, i.e. use\n * SCNetworkReachabilityScheduleWithRunLoop and let it update our information.\n */\n- (BOOL)isConnectedToNetwork  {\n\t// Create zero address\n\tstruct sockaddr_in zeroAddress;\n\tbzero( &zeroAddress, sizeof(zeroAddress) );\n\tzeroAddress.sin_len = sizeof(zeroAddress);\n\tzeroAddress.sin_family = AF_INET;\n\t\n\t// Recover reachability flags\n\tSCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);\n\tSCNetworkReachabilityFlags flags;\n\tBOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);\n\tCFRelease(defaultRouteReachability);\n\tif (!didRetrieveFlags) {\n\t\t//NSLog(@\"Error. Could not recover network reachability flags\\n\");\n\t\treturn 0;\n\t}\n\tBOOL isReachable = (flags & kSCNetworkFlagsReachable) == kSCNetworkFlagsReachable;\n\tBOOL needsConnection = (flags & kSCNetworkFlagsConnectionRequired) == kSCNetworkFlagsConnectionRequired;\n    \n\treturn isReachable && !needsConnection;\n}\n\n- (void)setConnectedToNetwork:(BOOL)connected\n{\n    if (_connectedToNetwork != connected) {\n        [self willChangeValueForKey:@\"connectedToNetwork\"];\n        _connectedToNetwork = connected;\n        [self didChangeValueForKey:@\"connectedToNetwork\"];\n    }\n}\n\n#pragma mark - Helper\n\n/**\n * @return is that url valid to be requested\n */\n- (BOOL)isValidRequestURL:(NSURL*)url\n{\n    // url should not be nil nor having a zero length, also it must have a scheme\n    return [[url absoluteString] length] > 0 && [[url scheme] length] > 0;\n}\n\n/**\n *\n */\n- (void)handleInvalidURLRequest:(AFCacheableItemBlock)failBlock\n{\n    NSError *error = [NSError errorWithDomain:@\"URL is not set\" code:-1 userInfo:nil];\n    \n    AFCacheableItem *item = [[AFCacheableItem alloc] init];\n    item.error = error;\n    \n    if (failBlock) {\n        failBlock(item);\n    }\n}\n#pragma mark helper\n\n-(NSString *)infoDictionaryPath\n{\n    return [self.dataPath stringByAppendingPathComponent: kAFCachePackageInfoDictionaryFilename];\n}\n\n-(NSString *)metaDataDictionaryPath\n{\n    return [self.dataPath stringByAppendingPathComponent: kAFCacheMetadataFilename];\n}\n\n-(NSString *)expireInfoDictionaryPath\n{\n    return [self.dataPath stringByAppendingPathComponent: kAFCacheExpireInfoDictionaryFilename];\n}\n\n#pragma mark migration\n-(NSString *)version\n{\n    if (!_version) {\n        _version = [SPVIVersionIntrospection sharedIntrospection].versionsForDependency[@\"AFCache\"];\n        if (!_version) {\n            static dispatch_once_t onceToken;\n            dispatch_once(&onceToken, ^{\n                NSLog(@\"ERROR: could not get current version of AFCache\");\n            });\n        }\n    }\n    return _version;\n}\n\n-(BOOL)migrateFromVersion:(NSString*)version\n{\n    NSString* currentVersion = self.version;\n    if (!currentVersion) {\n        return NO;\n    }\n    if (!version || [version length] == 0) {\n        if ([currentVersion hasPrefix:@\"0.11.\"]) {\n            return [self migrateFromUnversionedToZeroDotEleven];\n        }\n        else\n        {\n            NSLog(@\"ERROR: unsupportedMigration from %@ to %@\", version ?: @\"unknown\", currentVersion);\n        }\n    }\n    else\n    {\n        if ([version isEqualToString:currentVersion]) {\n            //no migration necessary\n            return YES;\n        }\n        if ([version hasPrefix:@\"0.11.\"] && [currentVersion hasPrefix:@\"0.11.\"]) {\n            //no migration should be necessary\n            return YES;\n        }\n        NSLog(@\"WARNING: we don't have a migration for %@ of AFCache, this might lead to problems\", version);\n    }\n    return NO;\n}\n\n-(BOOL)migrateFromUnversionedToZeroDotEleven\n{\n    // unknown => 0.11\n    [self performBlockOnAllCacheFiles:^(NSURL *url) {\n        [AFCache addSkipBackupAttributeToItemAtURL:url];\n    }];\n    return YES;\n}\n@end\n\n#pragma mark - additional implementations\n\n#ifdef USE_ENGINEROOM\n#import <EngineRoom/logpoints.m>\n#endif\n\n@implementation AFCache( LoggingSupport )\n\n+ (void) setLoggingEnabled: (BOOL) enabled\n{\n#ifdef USE_ENGINEROOM\n\tif( enabled ) {\n\t\tER_ADDRESS_OF_GLOBAL_OR_EMBEDDED( logPointEnableSimple )(\"AFCache\");\n\t} else {\n\t\tER_ADDRESS_OF_GLOBAL_OR_EMBEDDED( logPointDisableSimple )(\"AFCache\");\n\t}\n    \n\tlpkdebugf(\"AFCache\", \"using %s\", ER_ADDRESS_OF_GLOBAL_OR_EMBEDDED( logPointLibraryIdentifier )() );\n\t\n#else\n\tAFLog(@\"AFCache setLoggingEnabled: ignored (EngineRoom not embedded)\");\n#endif\n}\n\n+ (void) setLogFormat: (NSString *) logFormat\n{\n#ifdef USE_ENGINEROOM\n\tif( NULL == logPointSetLogFormat ) {\n\t\tER_ADDRESS_OF_GLOBAL_OR_EMBEDDED( logPointSetLogFormat )( [logFormat UTF8String] );\n\t} else {\n\t\tlpkdebugf(\"AFCache\", \"%s\", \"ignored (using non-embedded EngineRoom)\");\n\t}\n#else\n\tAFLog(@\"AFCache setLogFormat: ignored (EngineRoom not embedded)\");\n#endif\n}\n\n@end\n\n@implementation AFCache( BLOCKS )\n\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n                        completionBlock: (AFCacheableItemBlock)aCompletionBlock\n                              failBlock: (AFCacheableItemBlock)aFailBlock\n\t\t\t\t\t\t\t\toptions: (int) options\n{\n    return [self cachedObjectForURL: url\n                    completionBlock: aCompletionBlock\n                          failBlock: aFailBlock\n                            options: options\n                           userData: nil\n                           username: nil\n                           password: nil];\n}\n\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n                        completionBlock: (AFCacheableItemBlock)aCompletionBlock\n                              failBlock: (AFCacheableItemBlock)aFailBlock\n\t\t\t\t\t\t\t\toptions: (int) options\n                               userData: (id)userData\n\t\t\t\t\t\t\t   username: (NSString *)aUsername\n\t\t\t\t\t\t\t   password: (NSString *)aPassword\n{\n    AFCacheableItem *item = [self cachedObjectForURL:url\n                                            delegate:nil\n                                            selector:nil\n                                     didFailSelector:nil\n                                     completionBlock:aCompletionBlock\n                                           failBlock:aFailBlock\n                                       progressBlock:nil\n                                             options:options\n                                            userData:userData\n                                            username:aUsername\n                                            password:aPassword\n                                             request:nil];\n    \n    \n    \n    return item;\n}\n\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n                        completionBlock: (AFCacheableItemBlock)aCompletionBlock\n                              failBlock: (AFCacheableItemBlock)aFailBlock\n                          progressBlock: (AFCacheableItemBlock)aProgressBlock\n\t\t\t\t\t\t\t\toptions: (int) options\n                               userData: (id)userData\n\t\t\t\t\t\t\t   username: (NSString *)aUsername\n\t\t\t\t\t\t\t   password: (NSString *)aPassword\n{\n    AFCacheableItem *item = [self cachedObjectForURL:url\n                                            delegate:nil\n                                            selector:nil\n                                     didFailSelector: nil\n                                     completionBlock:aCompletionBlock\n                                           failBlock:aFailBlock\n                                       progressBlock:aProgressBlock\n                                             options:options\n                                            userData:userData\n                                            username:aUsername\n                                            password:aPassword\n\t\t\t\t\t\t\t\t\t\t\t request:nil];\n    \n    \n    \n    return item;\n}\n\n- (AFCacheableItem *)cachedObjectForURL: (NSURL *) url\n                        completionBlock: (AFCacheableItemBlock)aCompletionBlock\n                              failBlock: (AFCacheableItemBlock)aFailBlock\n                          progressBlock: (AFCacheableItemBlock)aProgressBlock\n\t\t\t\t\t\t\t\toptions: (int) options\n{\n    \n    \n    return [self cachedObjectForURL: url\n                    completionBlock: aCompletionBlock\n                          failBlock: aFailBlock\n                      progressBlock: aProgressBlock\n                            options: options\n                           userData: nil\n                           username: nil\n                           password: nil];\n}\n\n@end\n"
  },
  {
    "path": "src/shared/AFCachePackageCreator.h",
    "content": "//\n//  AFCachePackageCreator.h\n//  AFCache\n//\n//  Created by Michael Markowski on 22.03.12.\n//  Copyright (c) 2012 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"AFCache.h\"\n#import \"AFCacheableItem.h\"\n#import \"AFCache+Packaging.h\"\n#import \"AFCacheableItem+Packaging.h\"\n\n#define kPackagerOptionResourcesFolder @\"folder\"\n#define kPackagerOptionBaseURL @\"baseurl\"\n#define kPackagerOptionMaxAge @\"maxage\"\n#define kPackagerOptionMaxItemFileSize @\"maxItemFileSize\"\n#define kPackagerOptionLastModifiedMinus @\"lastmodifiedminus\"\n#define kPackagerOptionLastModifiedPlus @\"lastmodifiedplus\"\n#define kPackagerOptionOutputFormatJSON @\"json\"\n#define kPackagerOptionOutputFilename @\"outfile\"\n#define kPackagerOptionIncludeAllFiles @\"a\"\n#define kPackagerOptionUserDataFolder @\"userdata\"\n#define kPackagerOptionUserDataKey @\"userdatakey\"\n#define kPackagerOptionFileToURLMap @\"FileToURLMap\"\n\n@interface AFCachePackageCreator : NSObject\n\n- (AFCacheableItem*)newCacheableItemForFileAtPath:(NSString*)filepath lastModified:(NSDate*)lastModified baseURL:(NSString*)baseURL maxAge:(NSNumber*)maxAge baseFolder:(NSString*)folder;\n- (BOOL)createPackageWithOptions:(NSDictionary*)options error:(NSError**)inError;\n\n@end\n"
  },
  {
    "path": "src/shared/AFCachePackageCreator.m",
    "content": "//\n//  AFCachePackageCreator.m\n//  AFCache\n//\n//  Created by Michael Markowski on 22.03.12.\n//  Copyright (c) 2012 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import \"AFCachePackageCreator.h\"\n#import \"ZipArchive.h\"\n\n#define kDefaultMaxItemFileSize kAFCacheInfiniteFileSize\n\n@implementation AFCachePackageCreator\n\n/* ================================================================================================\n * Create a new AFCacheableItem with file at path and a given last modification data\n * ================================================================================================ */\n\n- (AFCacheableItem*)newCacheableItemForFileAtPath:(NSString*)filepath lastModified:(NSDate*)lastModified baseURL:(NSString*)baseURL maxAge:(NSNumber*)maxAge baseFolder:(NSString*)folder {\t\n\tNSURL *url;\t\n\tNSString* escapedUrlString = [AFCacheableItem urlEncodeValue:filepath];\n\tif (baseURL) {\n\t\turl = [NSURL URLWithString:[NSString stringWithFormat:@\"%@/%@\", baseURL, escapedUrlString]];\n\t} else {\n\t\turl = [NSURL URLWithString:[NSString stringWithFormat:@\"afcpkg://localhost/%@\", escapedUrlString]];\n\t}\n\tNSDate *expireDate = nil;\n\tif (maxAge) {\n\t\tNSTimeInterval seconds = [maxAge doubleValue];\n\t\texpireDate = [lastModified dateByAddingTimeInterval:seconds];\n\t}\n\tNSString *completePathToFile = [NSString stringWithFormat:@\"%@/%@\", folder, filepath];\n\tAFCacheableItem *item = [[AFCacheableItem alloc] initWithURL:url lastModified:lastModified expireDate:expireDate];\n\tNSData *data = [NSData dataWithContentsOfMappedFile:completePathToFile];\n\t[item setDataAndFile:data];\n\treturn item;\n}\n\n\n- (void)enumerateFilesInFolder:(NSString*)aFolder processHiddenFiles:(BOOL)processHiddenFiles usingBlock:(void (^)(NSString *file, NSDictionary *fileAttributes))block\n{\t\n\tNSFileManager *localFileManager=[[NSFileManager alloc] init];\n\t// A directory enumarator for iterating through a folder's files\n\tNSDirectoryEnumerator *dirEnum = [localFileManager enumeratorAtPath:aFolder];\n\t\n\t// write meta descriptions\n\tfor (NSString *file in dirEnum) {\n\t\t// Create an inner autorelease pool, because we will create many objects in a loop\n        @autoreleasepool {\n            \n        \n            NSDictionary *attributes = [dirEnum fileAttributes];\n            NSString *fileType = [attributes objectForKey:NSFileType];\n            BOOL hidden = [[file lastPathComponent] hasPrefix:@\".\"] || ([file rangeOfString:@\"/.\"].location!=NSNotFound);\n            \n            if ([fileType isEqualToString:NSFileTypeRegular]) {\n                if (!hidden || processHiddenFiles) {\n                    block(file, attributes);\n                }\n            }\n        }\n    }\n}\n\n/* ================================================================================================\n * Create AFCache Package with given commandline args\n * ================================================================================================ */\n\n- (BOOL)createPackageWithOptions:(NSDictionary*)options error:(NSError**)inError {\n    NSError *error = *inError;    \n    NSString *folder;\n\tNSString *baseURL;\n\tNSNumber *maxAge;\n\tNSTimeInterval lastModifiedOffset;\n    BOOL success = YES;\n    \n\t// folder containing resources\n\tfolder = [options valueForKey:kPackagerOptionResourcesFolder];\n\t\n\t// base url, e.g. http://www.foo.bar (WITHOUT trailig slash)\t\n\tbaseURL = [options valueForKey:kPackagerOptionBaseURL];\n\tif ([baseURL hasSuffix:@\"/\"]) {\n        baseURL = [baseURL substringToIndex:[baseURL length] -1];\n    }\n\t// max-age in seconds\n\tmaxAge = [NSNumber numberWithDouble:[[options valueForKey:kPackagerOptionMaxAge] doubleValue]];\n\t\n\t// Maximum filesize of a cacheable item. Default is unlimited.\n\tdouble maxItemFileSize = [[options valueForKey:kPackagerOptionMaxItemFileSize] doubleValue];\n\tif (maxItemFileSize == 0) {\n\t\tmaxItemFileSize = kDefaultMaxItemFileSize;\n\t}\n#if MAINTAINER_WARNINGS\n#warning not good to change the max item file size in the cache singleton then calling this method!\n#endif\n\t[AFCache sharedInstance].maxItemFileSize = maxItemFileSize;\n\t\n\t// add n seconds to file's lastmodfied date\n\tif ([[options valueForKey:kPackagerOptionLastModifiedMinus] doubleValue] > 0) {\n\t\tlastModifiedOffset = -1 * [[options valueForKey:kPackagerOptionLastModifiedMinus] doubleValue];\n\t}\n\t\n\t// substract n seconds from file's lastmodfied date\n\tif ([[options valueForKey:kPackagerOptionLastModifiedPlus] doubleValue] > 0) {\n\t\tlastModifiedOffset = [[options valueForKey:kPackagerOptionLastModifiedPlus] doubleValue];\n\t}\n    \n\t// write manifest file in json format (just for testing purposes)\n\tNSString *json = [options valueForKey:kPackagerOptionOutputFormatJSON];\n    \n\t// include all files. By default, files starting with a dot are excluded.\n\tNSString *addAllFiles = [options valueForKey:kPackagerOptionIncludeAllFiles];\n    \n\t// output filename\n\tNSString *outfile = [options valueForKey:kPackagerOptionOutputFilename];\n\t\n\t// Folder containing arbitrary user data (will be accesible via userDataPathForPackageArchiveKey: in AFCache+Packaging.m\n\tNSString *userDataFolder = [options valueForKey:kPackagerOptionUserDataFolder];\n    \n\t// Key under which userdata can be accessed. Default is no key.\n\tNSString *userDataKey = [options valueForKey:kPackagerOptionUserDataKey];\n\t\n    NSDictionary *fileToURLMap = [options valueForKey:kPackagerOptionFileToURLMap];\n    \n\t// Create ZIP archive\n\t__block ZipArchive *zip = [[ZipArchive alloc] init];\n    \n\tNSMutableString *result = [[NSMutableString alloc] init];\n\t@try {\n\t\t\tif (!folder) folder = @\".\";\n\t\t\t// Create ZIP file or exit on error\n\t\t\tBOOL ret = [zip CreateZipFile2:(outfile)?outfile:@\"afcache-archive.zip\"];\n\t\t\tif (!ret) {\n\t\t\t\tNSLog(@\"Failed creating zip file.\\n\");\n                return NO;\n\t\t\t}\n            \n\t\t\t// Exit if given folder containing data doesn't exist\n\t\t\tNSFileManager *localFileManager=[[NSFileManager alloc] init];\n\t\t\tBOOL folderExists = [localFileManager fileExistsAtPath:folder];\n\t\t\tif (!folderExists) {\n\t\t\t\tNSLog(@\"Folder '%s' does not exist. Aborting.\\n\", [folder cStringUsingEncoding:NSUTF8StringEncoding]);\n                return NO;\n\t\t\t}\n\t\t\tif (json) {\n\t\t\t\t[result appendFormat:@\"{\\n\\\"resources\\\":[\\n\"];\n\t\t\t}\n            \n\t\t\t\n\t\t\tBOOL processHiddenFiles = ([addAllFiles length] > 0)?YES:NO;\n\t\t\t__block NSMutableArray *metaDescriptions = [[NSMutableArray alloc] init];\n\t\t\t\n\t\t\t[self enumerateFilesInFolder:folder processHiddenFiles:processHiddenFiles usingBlock: ^ (NSString *file, NSDictionary *fileAttributes) {\n\t\t\t\tNSDate *lastModificationDate = [fileAttributes objectForKey:NSFileModificationDate];\n\t\t\t\tNSString *fileType = [fileAttributes objectForKey:NSFileType];\n\t\t\t\tBOOL hidden = [[file lastPathComponent] hasPrefix:@\".\"] || ([file rangeOfString:@\"/.\"].location!=NSNotFound);\n\t\t\t\t\n\t\t\t\tif ([fileType isEqualToString:NSFileTypeRegular]) {\n\t\t\t\t\tif (!hidden || addAllFiles) {\n\t\t\t\t\t\tif (lastModifiedOffset != 0) {\n\t\t\t\t\t\t\tlastModificationDate = [lastModificationDate dateByAddingTimeInterval:lastModifiedOffset];\n\t\t\t\t\t\t}\t\t\t\t\t\t\n\t\t\t\t\t\tAFCacheableItem *item = [self newCacheableItemForFileAtPath:file lastModified:lastModificationDate baseURL:baseURL maxAge:maxAge baseFolder:folder];\n                        NSString *mappedURL = [fileToURLMap valueForKey:item.info.filename];\n                        if (mappedURL) {\n                            item.url = [NSURL URLWithString:mappedURL];\n                        }\n\t\t\t\t\t\tNSString *completePathToFile = [NSString stringWithFormat:@\"%@/%@\", folder, file];\n\t\t\t\t\t\tNSLog(@\"Adding %s\\n\", [item.info.filename cStringUsingEncoding:NSUTF8StringEncoding]); //, [file cStringUsingEncoding:NSUTF8StringEncoding]);\n\t\t\t\t\t\t[zip addFileToZip:completePathToFile newname:item.info.filename];\n\t\t\t\t\t\tNSString *metaDescription = (json)?[item metaJSON]:[item metaDescription];\t\t\t\t\t\t\n\t\t\t\t\t\tif (metaDescription) {\n\t\t\t\t\t\t\t[metaDescriptions addObject:metaDescription];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n                \n\t\t\t}];\n            \n\t\t\t\n\t\t\tif ([userDataFolder length] > 0) {\n\t\t\t\t[self enumerateFilesInFolder:userDataFolder processHiddenFiles:processHiddenFiles usingBlock: ^ (NSString *file, NSDictionary *fileAttributes) {\n\t\t\t\t\tNSString *completePathToFile = [NSString stringWithFormat:@\"%@/%@\", userDataFolder, file];\n\t\t\t\t\tNSString *userDataPath = ([userDataKey length] > 0)?[NSString stringWithFormat:@\"%@/%@\", kAFCacheUserDataFolder, userDataKey]:kAFCacheUserDataFolder;\n\t\t\t\t\tNSString *filePathInZip = [NSString stringWithFormat:@\"%@/%@\", userDataPath, file];\t\t\t\t\t\n\t\t\t\t\tprintf(\"Adding userdata: %s\\n\", [filePathInZip cStringUsingEncoding:NSUTF8StringEncoding]);\n\t\t\t\t\t[zip addFileToZip:completePathToFile newname:filePathInZip];\t\t\t\t\n\t\t\t\t}];\n\t\t\t}\t\t\t\t\n            \n\t\t\tif ([metaDescriptions count] == 0 && [userDataFolder length] == 0) {\n\t\t\t\tprintf(\"No input files. Aborting.\\n\");\n                return NO;\n\t\t\t}\n\t\t\t\n\t\t\t[result appendFormat:@\"baseURL = %@\\n\", baseURL];\n\t\t\t\n\t\t\t// write meta descriptions into result string\n\t\t\tNSUInteger i = [metaDescriptions count];\n\t\t\tfor (NSString *desc in metaDescriptions) {\n\t\t\t\tif (json) {\n\t\t\t\t\t[result appendString:@\"\\t\"];\n\t\t\t\t}\n\t\t\t\t[result appendFormat:@\"%@\", desc];\n\t\t\t\tif (json && i>1) {\n\t\t\t\t\t[result appendString:@\",\\n\"];\n\t\t\t\t}\n\t\t\t\ti--;\n\t\t\t}\n\t\t\t\n\t\t\tif (json) {\n\t\t\t\t[result appendString: @\"]\\n}\"];\n\t\t\t}\n\t\t\ti++;\n\t\t\t\n\t}\n\t@catch (NSException * e) {\n        NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[e description] forKey:NSLocalizedDescriptionKey];\n        error = [NSError errorWithDomain:@\"AFCache\" code:99 userInfo:userInfo];\n        return NO;\n\t}\n\t\n\t// create manifest tmp file\n\tconst char *template = (char*)[[NSTemporaryDirectory() stringByAppendingPathComponent:@\"AFCache.XXXXXX\"] UTF8String];\n    char *buffer = strdup(template);\n    mktemp(buffer);\n    NSString *manifestPath = [NSString stringWithFormat:@\"%s\", buffer];\n    free(buffer);\n\n\tBOOL ok = [result writeToFile:manifestPath atomically:YES\n\t\t\t\t\t\t encoding:NSASCIIStringEncoding error:&error];\n\tif (!ok) {\n        NSDictionary *userInfo = [NSDictionary dictionaryWithObject: [NSString stringWithFormat: @\"Error writing file at %s\\n%@\", \n                                                                      [manifestPath cStringUsingEncoding:NSUTF8StringEncoding], \n                                                                      [error localizedFailureReason]]\n                                                             forKey:NSLocalizedDescriptionKey];\n        error = [NSError errorWithDomain:@\"AFCache\" code:0 userInfo:userInfo];\n        return NO;\n\t}\n\t\n\t[zip addFileToZip:manifestPath newname:@\"manifest.afcache\"];\n    \n\t// cleanup\n\t[[NSFileManager defaultManager] removeItemAtPath:manifestPath error:&error];\nbailout:\n    return success;\n}\n\n@end\n"
  },
  {
    "path": "src/shared/AFCache_Logging.h",
    "content": "/*\n *  AFCache_Logging.h\n *  AFCache\n *\n *  Created by Michael Markowski on 08.02.11.\n *  Copyright 2011 Artifacts - Fine Software Development. All rights reserved.\n *\n */\n\n#ifdef AFCACHE_LOGGING_ENABLED\n\n#define AFLog(fmt, ...) NSLog((fmt), ## __VA_ARGS__)\n\n#else\n\n#define AFLog(fmt, ...) /* */\n\n#endif\n\n#ifdef USE_ENGINEROOM\n// to use EngineRoom, include EngineRoom-OSX.xcodeproj in the \n\n// if we use EngineRoom we should log all the time\n#undef AFCACHE_LOGGING_ENABLED\n#define AFCACHE_LOGGING_ENABLED true\n\n#import <EngineRoom/logpoints_default.h>\n\n// define an NSLog compatible macro which creates logpoints with keyword AFCache\n#define AFCacheLPLog(fmt, ...) ( (void) lplog_c_printf_v1( LOGPOINT_FLAGS_DEBUG | LOGPOINT_NSSTRING, \"NSLog\", \"AFCache\", kLogPointLabelNone, kLogPointFormatInfoNone, fmt, ## __VA_ARGS__ ) )\n\n#define NSLog AFCacheLPLog\n\n#else\n\n#define AFCacheLPLog AFLog\n\n#endif\n"
  },
  {
    "path": "src/shared/AFCacheableItem+FileAttributes.h",
    "content": "//\n//  AFCacheableItem+FileAttributes.h\n//  AFCache\n//\n//  Created by Sebastian Grimme on 17.05.16.\n//  Copyright © 2016 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <AFCache/AFCache.h>\n\nextern const char* kAFCacheContentLengthFileAttribute;\nextern const char* kAFCacheDownloadingFileAttribute;\n\n@interface AFCacheableItem (FileAttributes)\n- (BOOL)hasDownloadFileAttribute;\n- (void)flagAsDownloadStartedWithContentLength:(uint64_t)contentLength;\n- (void)flagAsDownloadFinishedWithContentLength:(uint64_t)contentLength;\n- (uint64_t)getContentLengthFromFile;\n@end\n"
  },
  {
    "path": "src/shared/AFCacheableItem+FileAttributes.m",
    "content": "//\n//  AFCacheableItem+FileAttributes.m\n//  AFCache\n//\n//  Created by Sebastian Grimme on 17.05.16.\n//  Copyright © 2016 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import \"AFCacheableItem+FileAttributes.h\"\n\n#import \"AFCache+PrivateAPI.h\"\n#import \"AFCache_Logging.h\"\n#import \"AFCacheableItem.h\"\n#include <sys/xattr.h>\n\nconst char* kAFCacheContentLengthFileAttribute = \"de.artifacts.contentLength\";\nconst char* kAFCacheDownloadingFileAttribute = \"de.artifacts.downloading\";\n\n@implementation AFCacheableItem (FileAttributes)\n\n- (BOOL)hasDownloadFileAttribute {\n    unsigned int downloading = 0;\n    NSString *filePath = [self.cache fullPathForCacheableItem:self];\n    return sizeof(downloading) == getxattr([filePath fileSystemRepresentation], kAFCacheDownloadingFileAttribute, &downloading, sizeof(downloading), 0, 0);\n}\n\n- (void)flagAsDownloadStartedWithContentLength:(uint64_t)contentLength {\n    NSString *filePath = [self.cache fullPathForCacheableItem:self];\n    if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) {\n        return;\n    }\n    if (0 != setxattr(filePath.fileSystemRepresentation, kAFCacheContentLengthFileAttribute, &contentLength, sizeof(uint64_t), 0, 0)) {\n        AFLog(@\"Could not set contentLength attribute on %@\", self);\n    }\n    unsigned int downloading = 1;\n    if (0 != setxattr(filePath.fileSystemRepresentation, kAFCacheDownloadingFileAttribute, &downloading, sizeof(downloading), 0, 0)) {\n        AFLog(@\"Could not set downloading attribute on %@\", self);\n    }\n}\n\n- (void)flagAsDownloadFinishedWithContentLength:(uint64_t)contentLength {\n    NSString *filePath = [self.cache fullPathForCacheableItem:self];\n    if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) {\n        return;\n    }\n    if (0 != setxattr(filePath.fileSystemRepresentation, kAFCacheContentLengthFileAttribute, &contentLength, sizeof(uint64_t), 0, 0)) {\n        AFLog(@\"Could not set contentLength attribute on %@, errno = %ld\", self, (long)errno );\n    }\n    if (0 != removexattr(filePath.fileSystemRepresentation, kAFCacheDownloadingFileAttribute, 0)) {\n        AFLog(@\"Could not remove downloading attribute on %@, errno = %ld\", self, (long)errno );\n    }\n}\n\n- (uint64_t)getContentLengthFromFile {\n    if ([self isQueuedOrDownloading]) {\n        return 0LL;\n    }\n    \n    NSString *filePath = [self.cache fullPathForCacheableItem:self];\n    \n    uint64_t realContentLength = 0LL;\n    ssize_t const size = getxattr([filePath fileSystemRepresentation],\n                                  kAFCacheContentLengthFileAttribute,\n                                  &realContentLength,\n                                  sizeof(realContentLength),\n                                  0, 0);\n    if (sizeof(realContentLength) != size) {\n        AFLog(@\"Could not get content length attribute from file %@. This may be bad (errno = %ld\", filePath, (long)errno);\n        return 0LL;\n    }\n    return realContentLength;\n}\n\n@end\n"
  },
  {
    "path": "src/shared/AFCacheableItem+Packaging.h",
    "content": "//\n//  AFCacheableItem+MetaDescription.h\n//  AFCache\n//\n//  Created by Michael Markowski on 16.07.10.\n//  Copyright 2010 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"AFCacheableItem.h\"\n\n@interface AFCacheableItem (Packaging)\n\n- (NSString*)metaDescription;\n- (NSString*)metaJSON;\n\n+ (NSString *)urlEncodeValue:(NSString *)str;\n- (void)setDataAndFile:(NSData*)data;\n\n@end\n"
  },
  {
    "path": "src/shared/AFCacheableItem+Packaging.m",
    "content": "//\n//  AFCacheableItem+MetaDescription.m\n//  AFCache\n//\n//  Created by Michael Markowski on 16.07.10.\n//  Copyright 2010 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import \"AFCacheableItem+Packaging.h\"\n#import \"AFCacheableItem+FileAttributes.h\"\n#import \"DateParser.h\"\n#import \"AFCache+PrivateAPI.h\"\n\n@implementation AFCacheableItem (Packaging)\n\n- (NSString*)metaJSON {\n    DateParser* dateParser = [[DateParser alloc] init];\n\tNSString *filename = self.info.filename;\n\tDateParser *parser = [[DateParser alloc] init];\n\tNSMutableString *metaDescription = [NSMutableString stringWithFormat:@\"{\\\"url\\\": \\\"%@\\\",\\n\\\"file\\\": \\\"%@\\\",\\n\\\"last-modified\\\": \\\"%@\\\", valid until: %@\",\n\t self.url,\n\t filename,\n\t [dateParser formatHTTPDate:self.info.lastModified],\n\t [dateParser formatHTTPDate:self.validUntil]];\n\tif (self.validUntil) {\n\t\t[metaDescription appendFormat:@\",\\n\\\"expires\\\": \\\"%@\\\"\", self.validUntil];\n\t}\n\t[metaDescription appendFormat:@\"\\n}\"];\n\treturn metaDescription;\n}\n\n- (NSString*)metaDescription {\n    DateParser* dateParser = [[DateParser alloc] init];\n    if (self.validUntil) {\n        // TODO: A getter is not supposed to modify internal states. This is unexpected.\n        self.validUntil = self.info.lastModified;\n    }\n\tNSMutableString *metaDescription = [NSMutableString stringWithFormat:@\"%@ ; %@ ; %@ ; %@ ; %@\",\n\t\t\t\t\t\t\t\t\t\tself.url,\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t[dateParser formatHTTPDate:self.info.lastModified],\n                                        self.validUntil?[dateParser formatHTTPDate:self.validUntil]:@\"NULL\",\n                                        self.info.mimeType?:@\"NULL\",\n                                        self.info.filename];\n\t[metaDescription appendString:@\"\\n\"];\n\treturn metaDescription;\n}\n\n+ (NSString *)urlEncodeValue:(NSString *)str\n{\n\tCFStringRef preprocessedString =CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, (CFStringRef)str, CFSTR(\"\"), kCFStringEncodingUTF8);\n\tCFStringRef urlString = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, preprocessedString, NULL, NULL, kCFStringEncodingUTF8);\n\tCFRelease(preprocessedString);\n    return (__bridge NSString*)urlString;\n}\n\n- (void)setDataAndFile:(NSData*)data {\n\tself.data = data;\n\tself.info.contentLength = [data length];\n\n    // Store data into file\n    NSOutputStream *outputStream = [self.cache createOutputStreamForItem:self];\n    if (outputStream.hasSpaceAvailable) {\n        NSInteger bytesWritten = [outputStream write:data.bytes maxLength:data.length];\n        if (bytesWritten != data.length) {\n            if ([self.delegate respondsToSelector:@selector(cannotWriteDataForItem:)]) {\n                [self.delegate cannotWriteDataForItem:self];\n            }\n        }\n    } else {\n        if ([self.delegate respondsToSelector:@selector(cannotWriteDataForItem:)]) {\n            [self.delegate cannotWriteDataForItem:self];\n        }\n    }\n    [outputStream close];\n    \n    [self flagAsDownloadFinishedWithContentLength:data.length];\n}\n\n@end\n"
  },
  {
    "path": "src/shared/AFCacheableItem.h",
    "content": "/*\n *\n * Copyright 2008 Artifacts - Fine Software Development\n * http://www.artifacts.de\n * Author: Michael Markowski (m.markowski@artifacts.de)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n#if TARGET_OS_IPHONE\n#import <UIKit/UIKit.h>\n#endif\n\n#import \"AFCacheableItemInfo.h\"\n\n#ifdef USE_TOUCHXML\n#import \"TouchXML.h\"\n#endif\n\n@class AFCache;\n@class AFCacheableItem;\n@protocol AFCacheableItemDelegate;\n\nenum AFCacheableItemStatus : NSUInteger {\n\tkCacheStatusNew = 0,\n\tkCacheStatusFresh = 1, // written into cacheableitem when item is fresh, either after fetching it for the first time or by revalidation.\n\tkCacheStatusModified = 2, // if ims request returns status 200\n\tkCacheStatusNotModified = 4,\n\tkCacheStatusRevalidationPending = 5,\n\tkCacheStatusStale = 6,\n};\n\ntypedef void (^AFCacheableItemBlock)(AFCacheableItem* item);\n\n// TODO: Rename to AFCacheRequest\n@interface AFCacheableItem : NSObject\n\n@property (nonatomic, strong) NSURL *url;\n@property (nonatomic, strong) NSData *data;\n@property (nonatomic, strong) AFCache *cache;\n@property (nonatomic, weak) id <AFCacheableItemDelegate> delegate;\n@property (nonatomic, strong) NSError *error;\n/*\n    validUntil holds the calculated expire date of the cached object.\n\tIt is either equal to Expires (if Expires header is set), or the date\n\tbased on the request time + max-age (if max-age header is set).\n\tIf neither Expires nor max-age is given or if the resource must not\n\tbe cached valitUntil is nil.\n */\n@property (nonatomic, strong) NSDate *validUntil;\n@property (nonatomic, assign) BOOL justFetchHTTPHeader;\n@property (nonatomic, assign) enum AFCacheableItemStatus cacheStatus;\n@property (nonatomic, strong) AFCacheableItemInfo *info;\n@property (nonatomic, weak) id userData;\n@property (nonatomic, assign) BOOL isPackageArchive;\n@property (nonatomic, assign) uint64_t currentContentLength;\n/*\n Data for URL authentication\n */\n@property (nonatomic, strong) NSURLCredential *urlCredential;\n\n@property (nonatomic, assign) BOOL isRevalidating;\n@property (nonatomic, readonly) BOOL canMapData;\n\n@property (nonatomic, strong) NSURLRequest *IMSRequest;\n@property (nonatomic, assign) BOOL servedFromCache;\n@property (nonatomic, assign) BOOL URLInternallyRewritten;\n\n// for debugging and testing purposes\n@property (nonatomic, assign) int tag;\n\n\n- (AFCacheableItem*)initWithURL:(NSURL*)URL\n                   lastModified:(NSDate*)lastModified\n                     expireDate:(NSDate*)expireDate\n                    contentType:(NSString*)contentType;\n\n- (AFCacheableItem*)initWithURL:(NSURL*)URL\n                   lastModified:(NSDate*)lastModified\n                     expireDate:(NSDate*)expireDate;\n\n// TODO: Move completionBlocks to AFDownloadOperation\n- (void)addCompletionBlock:(AFCacheableItemBlock)completionBlock failBlock:(AFCacheableItemBlock)failBlock progressBlock:(AFCacheableItemBlock)progressBlock;\n- (void)removeBlocks;\n\n- (void)sendFailSignalToClientItems;\n- (void)sendSuccessSignalToClientItems;\n- (void)sendProgressSignalToClientItems;\n\n- (BOOL) isDownloading;\n- (BOOL)isFresh;\n- (BOOL)isCachedOnDisk;\n- (NSString*)guessContentType;\n- (uint64_t)currentContentLength;\n- (BOOL)isComplete;\n- (BOOL)isDataLoaded;\n\n- (NSString *)asString;\n- (NSString*)mimeType __attribute__((deprecated)); // mimeType moved to AFCacheableItemInfo. \n// TODO: (Michael Markowski:) This method is implicitly guessing the mimetype which might be confusing because there's a property mimeType in AFCacheableItemInfo.\n\n#ifdef USE_TOUCHXML\n// TODO: This should be provided via a category\n- (CXMLDocument *)asXMLDocument;\n#endif\n\n- (BOOL)isDownloading;\n@end\n\n// TODO: AF(Debug)HTTPURLProtocol uses this delegate, but delegate methods are currently not called (any more). Elaborate on this.\n@protocol AFCacheableItemDelegate < NSObject >\n\n@optional\n- (void) connectionDidFail: (AFCacheableItem *) cacheableItem;\n- (void) connectionDidFinish: (AFCacheableItem *) cacheableItem;\n- (void) connectionHasBeenRedirected: (AFCacheableItem *) cacheableItem;\n\n- (void) packageArchiveDidReceiveData: (AFCacheableItem *) cacheableItem;\n- (void) packageArchiveDidFinishLoading: (AFCacheableItem *) cacheableItem;\n- (void) packageArchiveDidFinishExtracting: (AFCacheableItem *) cacheableItem;\n- (void) packageArchiveDidFailExtracting: (AFCacheableItem *) cacheableItem;\n- (void) packageArchiveDidFailLoading: (AFCacheableItem *) cacheableItem;\n\n- (void) cacheableItemDidReceiveData: (AFCacheableItem *) cacheableItem;\n- (void) cannotWriteDataForItem: (AFCacheableItem*)cacheableItem;\n\n@end\n"
  },
  {
    "path": "src/shared/AFCacheableItem.m",
    "content": "/*\n *\n * Copyright 2008 Artifacts - Fine Software Development\n * http://www.artifacts.de\n * Author: Michael Markowski (m.markowski@artifacts.de)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n#import \"AFCacheableItem.h\"\n#import \"AFCacheableItem+FileAttributes.h\"\n#import \"AFCache+PrivateAPI.h\"\n#import \"AFCache_Logging.h\"\n\n@interface AFCacheableItem ()\n@property NSMutableArray *completionBlocks;\n@property NSMutableArray *failBlocks;\n@property NSMutableArray *progressBlocks;\n@property BOOL hasReturnedCachedItemBeforeRevalidation;\n@end\n\n@implementation AFCacheableItem\n\n- (instancetype)init {\n\tself = [super init];\n\tif (self) {\n\t\t_data = nil;\n        _canMapData = YES;\n\t\t_cacheStatus = kCacheStatusNew;\n\t\t_info = [[AFCacheableItemInfo alloc] init];\n        _IMSRequest = nil;\n        _URLInternallyRewritten = NO;\n\n        _completionBlocks = [NSMutableArray array];\n        _failBlocks = [NSMutableArray array];\n        _progressBlocks = [NSMutableArray array];\n\t}\n\treturn self;\n}\n\n- (AFCacheableItem*)initWithURL:(NSURL*)URL\n                   lastModified:(NSDate*)lastModified\n                     expireDate:(NSDate*)expireDate\n                    contentType:(NSString*)contentType\n{\n    self = [self init];\n    if (self) {\n        _info = [[AFCacheableItemInfo alloc] init];\n        _info.lastModified = lastModified;\n        _info.expireDate = expireDate;\n        _info.mimeType = contentType;\n        _url = URL;\n        _cacheStatus = kCacheStatusFresh;\n        _validUntil = _info.expireDate;\n        _cache = [AFCache sharedInstance];\n    }\n    return self;\n}\n\n- (AFCacheableItem*)initWithURL:(NSURL*)URL\n                   lastModified:(NSDate*)lastModified\n                     expireDate:(NSDate*)expireDate\n{\n    return [self initWithURL:URL lastModified:lastModified expireDate:expireDate contentType:nil];\n}\n\n- (void)addCompletionBlock:(AFCacheableItemBlock)completionBlock failBlock:(AFCacheableItemBlock)failBlock progressBlock:(AFCacheableItemBlock)progressBlock {\n    @synchronized (self) {\n        if (completionBlock) {\n            [self.completionBlocks addObject:completionBlock];\n        }\n        if (failBlock) {\n            [self.failBlocks addObject:failBlock];\n        }\n        if (progressBlock) {\n            [self.progressBlocks addObject:progressBlock];\n        }\n\n    }\n}\n\n- (void)removeBlocks {\n    @synchronized (self) {\n        [self.completionBlocks removeAllObjects];\n        [self.failBlocks removeAllObjects];\n        [self.progressBlocks removeAllObjects];\n    }\n}\n\n- (void)performBlocks:(NSArray*)blocks {\n    @synchronized (self) {\n        blocks = [blocks copy];\n    }\n    for (AFCacheableItemBlock block in blocks) {\n        block(self);\n    }\n}\n\n- (NSData*)data {\n    if (!_data) {\n        \n\t\tif (!self.cache.skipValidContentLengthCheck && ![self hasValidContentLength])\n\t\t{\n\t\t\treturn nil;\n\t\t}\n\t\t\n\t\tNSString* filePath = [self.cache fullPathForCacheableItem:self];\n\t\tif (![[NSFileManager defaultManager] fileExistsAtPath:filePath])\n\t\t{\n\t\t\treturn nil;\n\t\t}\n\n        NSError* error = nil;\n        _data = [NSData dataWithContentsOfFile:filePath options:NSDataReadingMappedIfSafe error:&error];\n        if (!_data)\n        {\n            NSLog(@\"Error: Could not map file %@ because of error: %@\", filePath, error);\n        }\n        _canMapData = (_data != nil);\n    }\n\t\n    return _data;\n}\n\n- (void)sendFailSignalToClientItems {\n    if (self.isPackageArchive) {\n        // TODO: Setting a status does not conform to method's name\n        self.info.packageArchiveStatus = kAFCachePackageArchiveStatusLoadingFailed;\n    }\n\n    [self performBlocks:self.failBlocks];\n}\n\n- (void)sendSuccessSignalToClientItems {\n    if (self.isPackageArchive) {\n        // TODO: Setting a status does not conform to method's name\n        if (self.info.packageArchiveStatus == kAFCachePackageArchiveStatusUnknown) {\n            self.info.packageArchiveStatus = kAFCachePackageArchiveStatusLoaded;\n        }\n    }\n    [self performBlocks:self.completionBlocks];\n}\n\n- (void)sendProgressSignalToClientItems {\n    [self performBlocks:self.progressBlocks];\n}\n    \n/*\n * calculate freshness of object according to algorithm in rfc2616\n * http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html\n *\n * age_value\n *      is the value of Age: header received by the cache with this response.\n * date_value\n *      is the value of the origin server's Date: header\n * request_time\n *      is the (local) time when the cache made the request that resulted in this cached response\n * response_time\n *      is the (local) time when the cache received the response\n * now\n *      is the current (local) time\n */\n\n- (BOOL)isFresh {\n#if USE_ASSERTS\n\tNSAssert(self.info!=nil, @\"AFCache internal inconsistency detected while validating freshness. AFCacheableItem's info object must not be nil. This is a software bug.\");\n#endif\n\t\n\tNSTimeInterval apparent_age = fmax(0, self.info.responseTimestamp - [self.info.serverDate timeIntervalSinceReferenceDate]);\n\tNSTimeInterval corrected_received_age = fmax(apparent_age, self.info.age);\n\tNSTimeInterval response_delay = (self.info.responseTimestamp>0)?self.info.responseTimestamp - self.info.requestTimestamp:0;\n\n    // A zero (or negative) response delay indicates a transfer or connection error.\n    // This happened when the archiever started between request start and response.\n    if (response_delay < 0) {\n        NSLog(@\"WARNING: response_delay must never be negative!\");\n        return NO;\n    }\n    \n\tNSTimeInterval corrected_initial_age = corrected_received_age + response_delay;\n\tNSTimeInterval resident_time = [NSDate timeIntervalSinceReferenceDate] - self.info.responseTimestamp;\n\tNSTimeInterval current_age = corrected_initial_age + resident_time;\n\t\n\tNSTimeInterval freshness_lifetime = 0;\n\t\n\tif (self.info.expireDate) {\n\t\tfreshness_lifetime = [self.info.expireDate timeIntervalSinceReferenceDate] - [self.info.serverDate timeIntervalSinceReferenceDate];\n\t}\n\t\n\t// The max-age directive takes priority over Expires! Thanks, Serge ;)\n\tif (self.info.maxAge) {\n\t\tfreshness_lifetime = [self.info.maxAge doubleValue];\n\t}\n\t\n\t// Note:\n\t// If none of Expires, Cache-Control: max-age, or Cache-Control: s- maxage (see section 14.9.3) appears in the response,\n\t// and the response does not include other restrictions on caching, the cache MAY compute a freshness lifetime using a heuristic.\n\t// The cache MUST attach Warning 113 to any response whose age is more than 24 hours if such warning has not already been added.\n\t\n\tBOOL fresh = (freshness_lifetime > current_age);\n\tAFLog(@\"freshness_lifetime: %@\", [NSDate dateWithTimeIntervalSinceReferenceDate: freshness_lifetime]);\n\tAFLog(@\"current_age: %@\", [NSDate dateWithTimeIntervalSinceReferenceDate: current_age]);\n\t\n\treturn fresh;\n}\n\n- (BOOL)hasValidContentLength\n{\n\tNSString* filePath = [self.cache fullPathForCacheableItem:self];\n\tif (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) {\n\t\treturn NO;\n\t}\n\t\n\tNSError* err = nil;\n\tNSDictionary* attr = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:&err];\n\tif (!attr) {\n\t\tAFLog(@\"Error getting file attributes: %@\", err);\n\t\treturn NO;\n    }\n\t\n\tuint64_t fileSize = [attr fileSize];\n\tif (self.info.contentLength == 0 || fileSize != self.info.contentLength) {\n\t\tuint64_t realContentLength = [self getContentLengthFromFile];\n\t\tif (realContentLength == 0 || realContentLength != fileSize) {\n\t\t\treturn NO;\n\t\t}\n\t}\n\t\n\treturn YES;\n}\n\n- (BOOL)isQueuedOrDownloading\n{\n    return [self.cache isQueuedOrDownloadingURL:self.url];\n}\n\n- (NSString *)asString {\n\tif (!self.data) return nil;\n\treturn [[NSString alloc] initWithData: self.data encoding: NSUTF8StringEncoding];\n}\n\n- (NSString*)description {\n\tNSMutableString *s = [NSMutableString stringWithString:@\"URL: \"];\n\t[s appendString:[self.url absoluteString]];\n\t[s appendString:@\", \"];\n\t[s appendFormat:@\"tag: %d\", self.tag];\n\t[s appendString:@\", \"];\n\t[s appendFormat:@\"cacheStatus: %u\", self.cacheStatus];\n\t[s appendString:@\", \"];\n\t[s appendFormat:@\"body content size: %ld\\n\", (long)[self.data length]];\n\t[s appendString:[self.info description]];\n\t[s appendString:@\"\\n\"];\n\t\n\treturn s;\n}\n\n- (BOOL)isCachedOnDisk {\n\treturn [self.cache.cachedItemInfos objectForKey: [self.url absoluteString]] != nil;\n}\n\n- (NSString*)guessContentType {\n\tNSString *extension = [self.url lastPathComponent];\n\treturn [self.cache.suffixToMimeTypeMap valueForKey:extension];\n}\n\n- (NSString*)mimeType {\n\tif (!self.info.mimeType) {\n\t\treturn [self guessContentType];\n\t}\n\t\n\treturn self.info.mimeType;\n}\n\n\n#ifdef USE_TOUCHXML\n- (CXMLDocument *)asXMLDocument {\n\tif (self.data == nil) return nil;\n\tNSError *err = nil;\n\tCXMLDocument *doc = [[[CXMLDocument alloc] initWithData: self.data options: 0 error: &err] autorelease];\n\treturn (err) ? nil : doc;\n}\n#endif\n\n- (BOOL)isComplete {\n\t//[[NSString alloc] initWithFormat:@\"Item %@ has %lld of %lld data loaded, complete ? %d\", self.info.filename, self.info.actualLength, self.info.contentLength,(self.currentContentLength >= self.info.contentLength)];\n\t//assumed complete if there is data and the actual data length is at least as big as the expected content length. (should be exactly the expected content length but sometimes there is no expected content lenght present; self.info.contentLength = 0)\n    return [self isDataLoaded] && (self.info.actualLength >= self.info.contentLength);\n}\n\n- (BOOL)isDataLoaded {\n\treturn self.info.actualLength > 0;\n}\n\n-(uint64_t)currentContentLength{\n\treturn self.info.actualLength;\n}\n\n-(void)setCurrentContentLength:(uint64_t)contentLength\n{\n\tself.info.actualLength = contentLength;\n}\n\n- (BOOL)isDownloading {\n    return [self.cache isDownloadingURL: self.url];\n}\n@end\n"
  },
  {
    "path": "src/shared/AFCacheableItemInfo.h",
    "content": "/*\n *\n * Copyright 2008 Artifacts - Fine Software Development\n * http://www.artifacts.de\n * Author: Michael Markowski (m.markowski@artifacts.de)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n#import <Foundation/Foundation.h>\n\ntypedef enum {\n    kAFCachePackageArchiveStatusUnknown = 0,\n    kAFCachePackageArchiveStatusLoaded = 1,\n    kAFCachePackageArchiveStatusConsumed = 2,\n    kAFCachePackageArchiveStatusUnarchivingFailed = 3,\n    kAFCachePackageArchiveStatusLoadingFailed = 4,\n} AFCachePackageArchiveStatus;\n\n@interface AFCacheableItemInfo : NSObject <NSCoding>\n\n@property (nonatomic, assign) NSTimeInterval requestTimestamp;\n@property (nonatomic, assign) NSTimeInterval responseTimestamp;\n\n@property (nonatomic, strong) NSDate *lastModified;\n@property (nonatomic, strong) NSDate *serverDate;\n@property (nonatomic, assign) NSTimeInterval age;\n@property (nonatomic, copy) NSNumber *maxAge;\n@property (nonatomic, strong) NSDate *expireDate;\n@property (nonatomic, copy) NSString *eTag;\n@property (nonatomic, assign) NSUInteger statusCode;\n@property (nonatomic, assign) uint64_t contentLength;\n@property (nonatomic, assign) uint64_t actualLength;\n@property (nonatomic, copy) NSString *mimeType;\n@property (nonatomic, strong) NSDictionary *headers;\n@property (nonatomic, strong) NSURL *responseURL; // may differ from url when redirection or URL rewriting has occured. nil if URL has not been modified.\n\n@property (nonatomic, strong) NSURLRequest *request;\n@property (nonatomic, strong) NSURLResponse *response;\n@property (nonatomic, strong) NSURLRequest *redirectRequest;\n@property (nonatomic, strong) NSURLResponse *redirectResponse;\n@property (nonatomic, strong) NSString *filename;\n@property (nonatomic, strong) NSString *cachePath;\n@property (nonatomic, assign) AFCachePackageArchiveStatus packageArchiveStatus;\n\n@end\n\n"
  },
  {
    "path": "src/shared/AFCacheableItemInfo.m",
    "content": "/*\n *\n * Copyright 2008 Artifacts - Fine Software Development\n * http://www.artifacts.de\n * Author: Michael Markowski (m.markowski@artifacts.de)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n#import \"AFCacheableItemInfo.h\"\n#import \"AFCache+PrivateAPI.h\"\n\n@implementation AFCacheableItemInfo\n\n- (NSString*)newUniqueFilename {\n    CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);\n    CFStringRef strRef = CFUUIDCreateString(kCFAllocatorDefault, uuidRef);\n    NSString *uuidString = [[NSString alloc] initWithString:(__bridge NSString*)strRef];\n    CFRelease(strRef);\n    CFRelease(uuidRef);\n    return uuidString;\n}\n\n\n- (id)init {\n    self = [super init];\n    if (self) {\n        // TODO: We cannot assume that this item's cache is the default sharedInstance\n        _filename = [AFCache sharedInstance].cacheWithHashname ? [self newUniqueFilename] : nil;\n    }\n    return self;\n}\n\n- (id)initWithCoder: (NSCoder *) coder {\n    self = [super init];\n    if (self) {\n        _requestTimestamp = [[coder decodeObjectForKey:@\"requestTimestamp\"] doubleValue];\n        _responseTimestamp = [[coder decodeObjectForKey:@\"responseTimestamp\"] doubleValue];\n        _serverDate = [coder decodeObjectForKey:@\"serverDate\"];\n        _lastModified = [coder decodeObjectForKey:@\"lastModified\"];\n        _age = [[coder decodeObjectForKey:@\"age\"] doubleValue];\n        _maxAge = [coder decodeObjectForKey:@\"maxAge\"];\n        _expireDate = [coder decodeObjectForKey:@\"expireDate\"];\n        _eTag = [coder decodeObjectForKey:@\"eTag\"];\n        _statusCode = [[coder decodeObjectForKey:@\"statusCode\"] unsignedIntegerValue];\n        _contentLength = [[coder decodeObjectForKey:@\"contentLength\"] unsignedIntValue];\n        _mimeType = [coder decodeObjectForKey:@\"mimeType\"];\n        _responseURL = [coder decodeObjectForKey:@\"responseURL\"];\n        _request = [coder decodeObjectForKey:@\"request\"];\n        _response = [coder decodeObjectForKey:@\"response\"];\n        _redirectRequest = [coder decodeObjectForKey:@\"redirectRequest\"];\n        _redirectResponse = [coder decodeObjectForKey:@\"redirectResponse\"];\n        _filename = [coder decodeObjectForKey:@\"filename\"];\n        _headers = [coder decodeObjectForKey:@\"headers\"];\n    }\n\n    return self;\n}\n\n- (void)encodeWithCoder: (NSCoder *) coder {\n\t[coder encodeObject: [NSNumber numberWithDouble: self.requestTimestamp] forKey: @\"requestTimestamp\"];\n\t[coder encodeObject: [NSNumber numberWithDouble: self.responseTimestamp] forKey: @\"responseTimestamp\"];\n\t[coder encodeObject: self.serverDate forKey: @\"serverDate\"];\n\t[coder encodeObject: self.lastModified forKey: @\"lastModified\"];\n\t[coder encodeObject: [NSNumber numberWithDouble: self.age] forKey: @\"age\"];\n\t[coder encodeObject: self.maxAge forKey: @\"maxAge\"];\n\t[coder encodeObject: self.expireDate forKey: @\"expireDate\"];\n\t[coder encodeObject: self.eTag forKey: @\"eTag\"];\n\t[coder encodeObject: [NSNumber numberWithUnsignedInteger:self.statusCode] forKey: @\"statusCode\"];\n\t[coder encodeObject: [NSNumber numberWithUnsignedLongLong:self.contentLength] forKey: @\"contentLength\"];\n\t[coder encodeObject: self.mimeType forKey: @\"mimeType\"];\n\t[coder encodeObject: self.responseURL forKey: @\"responseURL\"];\n\t[coder encodeObject: self.request forKey: @\"request\"];\n    [coder encodeObject: self.response forKey: @\"response\"];\n\t[coder encodeObject: self.redirectRequest forKey: @\"redirectRequest\"];\n    [coder encodeObject: self.redirectResponse forKey: @\"redirectResponse\"];\n\t[coder encodeObject: self.filename forKey: @\"filename\"];\n\t[coder encodeObject: self.headers forKey: @\"headers\"];\n}\n\n- (NSString*)description {\n\tNSMutableString *s = [NSMutableString stringWithString:@\"Cache information:\\n\"];\n\t[s appendFormat:@\"responseURL: %@\\n\", [self.responseURL absoluteString]];\n\t[s appendFormat:@\"requestTimestamp: %f\\n\", self.requestTimestamp];\n\t[s appendFormat:@\"responseTimestamp: %f\\n\", self.responseTimestamp];\n\t[s appendFormat:@\"serverDate: %@\\n\", [self.serverDate description]];\n\t[s appendFormat:@\"lastModified: %@\\n\", [self.lastModified description]];\n\t[s appendFormat:@\"age: %f\\n\", self.age];\n\t[s appendFormat:@\"maxAge: %@\\n\", self.maxAge];\n\t[s appendFormat:@\"expireDate: %@\\n\", [self.expireDate description]];\n\t[s appendFormat:@\"eTag: %@\\n\", self.eTag];\n\t[s appendFormat:@\"statusCode: %ld\\n\", (long)self.statusCode];\n\t[s appendFormat:@\"expectedContentLength: %ld\\n\", (long)self.contentLength];\n\t[s appendFormat:@\"currentContentLength: %ld\\n\", (long)self.actualLength];\n\t[s appendFormat:@\"mimeType: %@\\n\", self.mimeType];\n    [s appendFormat:@\"request: %@\\n\", self.request];\n    [s appendFormat:@\"response: %@\\n\", self.response];\n    [s appendFormat:@\"redirectRequest: %@\\n\", self.redirectRequest];\n    [s appendFormat:@\"redirectResponse: %@\\n\", self.redirectResponse];\n    [s appendFormat:@\"filename: %@\\n\", self.filename];\n\t[s appendFormat:@\"packageArchiveStatus: %d\\n\", self.packageArchiveStatus];\n\t[s appendFormat:@\"headers: %d\\n\", self.headers];\n\treturn s;\n}\n\n-(uint64_t)actualLength\n{\n\tif(!_actualLength)\n\t{\n\t\tif(self.cachePath)\n\t\t{\n\t\t\tNSError* err = nil;\n\t\t\tNSDictionary* attr = [[NSFileManager defaultManager] attributesOfItemAtPath:self.cachePath error:&err];\n\t\t\tif (attr == nil)\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\t\n\t\t\tuint64_t fileSize = [attr fileSize];\n\t\t\t_actualLength = fileSize;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t_actualLength = 0;\n\t\t}\n\t}\n\treturn _actualLength;\n}\n\n@end"
  },
  {
    "path": "src/shared/AFDownloadOperation.h",
    "content": "//\n//  AFDownloadOperation.h\n//  AFCache\n//\n//  Created by Sebastian Grimme on 28.07.14.\n//  Copyright (c) 2014 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface AFDownloadOperation : NSOperation\n\n@property(nonatomic, readonly) AFCacheableItem *cacheableItem;\n@property (nonatomic, readonly) BOOL isExecuting;\n@property (nonatomic, readonly) BOOL isFinished;\n\n- (instancetype)initWithCacheableItem:(AFCacheableItem*)cacheableItem;\n\n@end\n"
  },
  {
    "path": "src/shared/AFDownloadOperation.m",
    "content": "//\n//  AFDownloadOperation.m\n//  AFCache\n//\n//  Created by Sebastian Grimme on 28.07.14.\n//  Copyright (c) 2014 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <AFCache/AFCacheableItem.h>\n#import <AFCache/AFCacheableItem+FileAttributes.h>\n#import <AFCache/AFCache.h>\n#import \"AFDownloadOperation.h\"\n#import \"AFCache+PrivateAPI.h\"\n#import \"AFCache_Logging.h\"\n#import \"DateParser.h\"\n\n@interface AFDownloadOperation () <NSURLConnectionDataDelegate>\n@property(nonatomic, strong) NSURLConnection *connection;\n@property(nonatomic, strong) NSOutputStream *outputStream;\n@end\n\n@implementation AFDownloadOperation\n\n- (instancetype)initWithCacheableItem:(AFCacheableItem *)cacheableItem {\n    self = [super init];\n    if (self) {\n        _cacheableItem = cacheableItem;\n        _isExecuting = NO;\n        _isFinished = NO;\n    }\n    return self;\n}\n\n- (void)dealloc {\n    [_connection cancel];\n}\n\n#pragma mark - Core NSOperation methods\n\n- (BOOL)isConcurrent {\n    // I don't want NSOperationQueue to spawn a thread for me as my code needs to run on the main thread\n    return YES;\n}\n\n- (BOOL)isAsynchronous {\n    return YES;\n}\n\n- (void)start {\n    \n    // Do not execute cancelled operations\n    if (self.isCancelled) {\n        [self finish];\n        return;\n    }\n    \n    // Always perform operation on main thread as NSURLConnection wants to be started on the main thread\n    if (![NSThread isMainThread])\n    {\n        [self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:NO];\n        return;\n    }\n    \n    [self willChangeValueForKey:@\"isExecuting\"];\n    _isExecuting = YES;\n    [self didChangeValueForKey:@\"isExecuting\"];\n    \n    self.connection = [[NSURLConnection alloc] initWithRequest:self.cacheableItem.info.request delegate:self startImmediately:YES];\n}\n\n- (void)finish {\n    [self.connection cancel];\n    [self.outputStream close];\n    [self.outputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];\n    \n    [self willChangeValueForKey:@\"isExecuting\"];\n    [self willChangeValueForKey:@\"isFinished\"];\n    _isExecuting = NO;\n    _isFinished  = YES;\n    [self didChangeValueForKey:@\"isFinished\"];\n    [self didChangeValueForKey:@\"isExecuting\"];\n}\n\n#pragma mark - NSURLConnectionDelegate and NSURLConnectionDataDelegate methods\n\n/*\n * This method gives the delegate an opportunity to inspect the request that will be used to continue loading the\n * request, and modify it if necessary. The URL-change determinations mentioned above can occur as a result of\n * transforming a request URL to its canonical form, or can happen for protocol-specific reasons, such as an HTTP\n * redirect.\n */\n- (NSURLRequest*)connection:(NSURLConnection*)connection willSendRequest:(NSURLRequest*)request redirectResponse:(NSURLResponse*)redirectResponse {\n    NSMutableURLRequest *theRequest = [request mutableCopy];\n    \n    if (self.cacheableItem.cache.userAgent) {\n        [theRequest setValue:self.cacheableItem.cache.userAgent forHTTPHeaderField:@\"User-Agent\"];\n    }\n    \n    if (self.cacheableItem.justFetchHTTPHeader) {\n        [theRequest setHTTPMethod:@\"HEAD\"];\n    }\n    \n    // TODO: Check if this redirect code is fine here, it seemed broken in the original place and I corrected it as I thought it should be\n    if (redirectResponse && [request URL]) {\n        self.cacheableItem.info.responseURL = [request URL];\n        self.cacheableItem.info.redirectRequest = request;\n        self.cacheableItem.info.redirectResponse = redirectResponse;\n        \n        // TODO: Do not access #urlRedirects directly but provide access method\n        [self.cacheableItem.cache.urlRedirects setValue:[self.cacheableItem.info.responseURL absoluteString] forKey:[self.cacheableItem.url absoluteString]];\n    }\n    \n    return theRequest;\n}\n\n/*\n * This method is called when the server has determined that it has enough information to create the NSURLResponse it\n * can be called multiple times, for example in the case of a redirect, so each time we reset the data.\n *\n * After the response headers are parsed, we try to load the object from disk. If the cached object is fresh, we call\n * connectionDidFinishLoading: with the cached object and cancel the original request. If the object is stale, we go on\n * with the request.\n */\n- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response {\n    self.cacheableItem.cache.connectedToNetwork = YES;\n    \n    if (self.isCancelled) {\n        [self finish];\n        return;\n    }\n    \n    [self handleResponse:response];\n    \n    // call didFailSelector when statusCode >= 400\n    if (self.cacheableItem.cache.failOnStatusCodeAbove400 && self.cacheableItem.info.statusCode >= 400) {\n        [self connection:connection didFailWithError:[NSError errorWithDomain:kAFCacheNSErrorDomain code:self.cacheableItem.info.statusCode userInfo:nil]];\n        return;\n    }\n    \n    if (self.cacheableItem.validUntil) {\n        // TODO: Do not expose #cachedItemInfos directly but provide access method\n        [self.cacheableItem.cache.cachedItemInfos setObject: self.cacheableItem.info forKey: [self.cacheableItem.url absoluteString]];\n    }\n    \n    if (self.cacheableItem.justFetchHTTPHeader) {\n        [self connectionDidFinishLoading:connection];\n    }\n}\n\n- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data {\n    if (self.isCancelled) {\n        [self finish];\n        return;\n    }\n    \n    if (self.outputStream.hasSpaceAvailable) {\n        NSInteger bytesWritten = [self.outputStream write:data.bytes maxLength:data.length];\n        if (bytesWritten != data.length) {\n            if ([self.cacheableItem.delegate respondsToSelector:@selector(cannotWriteDataForItem:)]) {\n                [self.cacheableItem.delegate cannotWriteDataForItem:self.cacheableItem];\n            }\n            [self finishWithError];\n            return;\n        }\n    } else {\n        if ([self.cacheableItem.delegate respondsToSelector:@selector(cannotWriteDataForItem:)]) {\n            [self.cacheableItem.delegate cannotWriteDataForItem:self.cacheableItem];\n        }\n        [self finishWithError];\n        return;\n    }\n    \n    self.cacheableItem.info.actualLength += [data length];\n    [self.cacheableItem sendProgressSignalToClientItems];\n}\n\n/*\n *  The connection did finish loading. Everything should be okay at this point. If so, store object into cache and call\n *  delegate. If the server has not been delivered anything (response body is 0 bytes) we won't cache the response.\n */\n- (void)connectionDidFinishLoading: (NSURLConnection *) connection {\n    if (self.isCancelled) {\n        [self finish];\n        return;\n    }\n    \n    switch (self.cacheableItem.info.statusCode) {\n        case 204: // No Content\n        case 205: // Reset Content\n            // TODO: case 206: Partial Content\n        case 400: // Bad Request\n        case 401: // Unauthorized\n        case 402: // Payment Required\n        case 403: // Forbidden\n        case 404: // Not Found\n        case 405: // Method Not Allowed\n        case 406: // Not Acceptable\n        case 407: // Proxy Authentication Required\n        case 408: // Request Timeout\n        case 409: // Conflict\n        case 410: // Gone\n        case 411: // Length Required\n        case 412: // Precondition Failed\n        case 413: // Request Entity Too Large\n        case 414: // Request-URI Too Long\n        case 415: // Unsupported Media Type\n        case 416: // Requested Range Not Satisfiable\n        case 417: // Expectation Failed\n        case 500: // Internal Server Error\n        case 501: // Not Implemented\n        case 502: // Bad Gateway\n        case 503: // Service Unavailable\n        case 504: // Gateway Timeout\n        case 505: // HTTP Version Not Supported\n            break;\n            \n        default: {\n            NSError *error = nil;\n            \n            if (!self.cacheableItem.url) {\n                error = [NSError errorWithDomain:@\"URL is nil\" code:99 userInfo:nil];\n            }\n            \n            // Test for correct content length\n            NSString *path = [self.cacheableItem.cache fullPathForCacheableItem:self.cacheableItem];\n            NSDictionary *attr = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:&error];\n            if (attr) {\n                uint64_t fileSize = [attr fileSize];\n                if (fileSize != self.cacheableItem.info.contentLength) {\n                    self.cacheableItem.info.contentLength = fileSize;\n                }\n            } else {\n                AFLog(@\"Failed to get file attributes for file at path %@. Error: %@\", path, [err description]);\n            }\n            \n            [self.cacheableItem flagAsDownloadFinishedWithContentLength:self.cacheableItem.info.contentLength];\n            \n            if (error) {\n                AFLog(@\"Error while finishing download: %@\", [err localizedDescription]);\n            } else {\n                // Only cache response if it has a validUntil date and only if we're not in offline mode.\n                if (self.cacheableItem.validUntil) {\n                    AFLog(@\"Updating file modification date for object with URL: %@\", [self.cacheableItem.url absoluteString]);\n                    [self.cacheableItem.cache updateModificationDataAndTriggerArchiving:self.cacheableItem];\n                }\n            }\n        }\n    }\n    \n    [self finish];\n    \n    BOOL hasAlreadyReturnedCacheItem = (self.cacheableItem.hasReturnedCachedItemBeforeRevalidation && self.cacheableItem.cacheStatus == kCacheStatusNotModified);\n    if (!hasAlreadyReturnedCacheItem) {\n        [self.cacheableItem sendSuccessSignalToClientItems];\n    }\n}\n\n/*\n * The connection did fail. Remove item from cache.\n * TODO: This comment is wrong. Item is not removed from cache here. Should it be removed as the comment says?\n */\n\n- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)anError {\n    if (self.isCancelled) {\n        [self finish];\n        return;\n    }\n    \n    self.cacheableItem.error = anError;\n    \n    BOOL connectionLostOrNoConnection = ([anError code] == kCFURLErrorNotConnectedToInternet || [anError code] == kCFURLErrorNetworkConnectionLost);\n    if (connectionLostOrNoConnection) {\n        self.cacheableItem.cache.connectedToNetwork = NO;\n    }\n    else\n    {\n        NSLog(@\"ERROR in download operation: %@\", anError);\n    }\n    \n    [self finish];\n    \n    // There are cases when we send success, despite of the error. Requirements:\n    // - We have no network connection or the connection has been lost\n    // - The response status is below 400 (e.g. no 404)\n    // - The item is complete (the data size on disk matches the content size in the response header)\n    // - OR: Connection lost while revalidating\n    BOOL sendSuccessDespiteError =\n    (connectionLostOrNoConnection && self.cacheableItem.info.statusCode < 400 && self.cacheableItem.isComplete) ||\n    (self.cacheableItem.isRevalidating && connectionLostOrNoConnection);\n    if (sendSuccessDespiteError) {\n        [self.cacheableItem sendSuccessSignalToClientItems];\n    } else {\n        self.cacheableItem.info.actualLength = 0;\n        self.cacheableItem.currentContentLength = 0;\n        [self.cacheableItem sendFailSignalToClientItems];\n    }\n}\n\n- (void)finishWithError {\n    [self finish];\n    self.cacheableItem.info.actualLength = 0;\n    self.cacheableItem.currentContentLength = 0;\n    [self.cacheableItem sendFailSignalToClientItems];\n}\n\n#pragma mark - NSURLConnectionDelegate authentication methods\n\n/*\n * If implemented, will be called before connection:didReceiveAuthenticationChallenge: to give the delegate a chance to\n * inspect the protection space that will be authenticated against. Delegates should determine if they are prepared to\n * respond to the authentication method of the protection space and if so, return YES, or NO to allow default processing\n * to handle the authentication.\n */\n- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {\n    if ([[protectionSpace authenticationMethod] isEqualToString:NSURLAuthenticationMethodServerTrust]) {\n        // Server is using a SSL certificate that the OS can't validate, see whether the client settings allow validation here\n        if (self.cacheableItem.cache.disableSSLCertificateValidation) {\n            return YES;\n        }\n    }\n    return self.cacheableItem.urlCredential.user && self.cacheableItem.urlCredential.password;\n}\n\n/*\n * Gets called when basic http authentication is required. Provide given username and password. If login has failed,\n * aborts the authentication.\n */\n- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge\n{\n    if ([challenge previousFailureCount] > 0) {\n        // Last authentication failed, abort authentication\n        [self connection:connection didCancelAuthenticationChallenge:challenge];\n        return;\n    }\n    \n    if (self.cacheableItem.urlCredential.user && self.cacheableItem.urlCredential.password) {\n        [[challenge sender] useCredential:self.cacheableItem.urlCredential forAuthenticationChallenge:challenge];\n    }\n    \n    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust] && self.cacheableItem.cache.disableSSLCertificateValidation) {\n        [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];\n    }\n    else {\n        [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];\n    }\n}\n\n- (void)connection:(NSURLConnection *)connection didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {\n    NSError *err = [NSError errorWithDomain: @\"HTTP Authentifcation failed\" code:99 userInfo:nil];\n    [self connection:connection didFailWithError:err];\n}\n\n#pragma mark - Response handling\n\n- (void)handleResponse:(NSURLResponse *)response {\n    self.cacheableItem.info.mimeType = [response MIMEType];\n    \n    NSDate *now = [NSDate date];\n    \n    self.cacheableItem.info.responseTimestamp = [now timeIntervalSinceReferenceDate];\n    self.cacheableItem.info.mimeType = [response MIMEType];\n    \n    // Get HTTP-Status code from response\n    if ([response isKindOfClass:[NSHTTPURLResponse class]]) {\n        self.cacheableItem.info.statusCode = (NSUInteger) [(NSHTTPURLResponse *) response statusCode];\n    } else {\n        self.cacheableItem.info.statusCode = 200;\n    }\n    \n    // Update modified status\n    if (self.cacheableItem.cacheStatus == kCacheStatusRevalidationPending) {\n        switch (self.cacheableItem.info.statusCode) {\n            case 304:\n                self.cacheableItem.cacheStatus = kCacheStatusNotModified;\n                self.cacheableItem.validUntil = self.cacheableItem.info.expireDate;\n                // The resource has not been modified, so we exit here\n                return;\n            case 200:\n                self.cacheableItem.cacheStatus = kCacheStatusModified;\n                break;\n        }\n    } else {\n        self.cacheableItem.info.responseTimestamp = [now timeIntervalSinceReferenceDate];\n        self.cacheableItem.info.response = response;\n    }\n    \n    if (self.cacheableItem.info.statusCode == 200) {\n        self.outputStream = [self.cacheableItem.cache createOutputStreamForItem:self.cacheableItem];\n    }\n    \n    // TODO: Isn't self.cacheableItem.info.contentLength always 0 at this moment?\n    [self.cacheableItem flagAsDownloadStartedWithContentLength:self.cacheableItem.info.contentLength];\n    \n    if ([response isKindOfClass:[NSHTTPURLResponse class]]) {\n        // Handle response header fields to calculate expiration time for newly fetched object to determine until when we may cache it\n        [self handleResponseHeaderFields:[(NSHTTPURLResponse *) response allHeaderFields] now:now];\n    }\n}\n\n- (void)handleResponseHeaderFields:(NSDictionary *)headerFields now:(NSDate*) now {\n#ifdef AFCACHE_LOGGING_ENABLED\n    // log headers\n    NSLog(@\"status code: %d\", self.cacheableItem.info.statusCode);\n    for (NSString *key in [headerFields allKeys]) {\n        NSString *logString = [NSString stringWithFormat: @\"%@: %@\", key, [headerFields objectForKey: key]];\n        NSLog(@\"Headers: %@\", logString);\n    }\n#endif\n    // get headers that are used for cache control\n    NSString *ageField =           headerFields[@\"Age\"];\n    NSString *dateField =          headerFields[@\"Date\"];\n    NSString *modifiedField =      headerFields[@\"Last-Modified\"];\n    NSString *expiresField =       headerFields[@\"Expires\"];\n    NSString *cacheControlField =  headerFields[@\"Cache-Control\"];\n    NSString *pragmaField =        headerFields[@\"Pragma\"];\n    NSString *eTagField =          headerFields[@\"Etag\"];\n    NSString *contentLengthField = headerFields[@\"Content-Length\"];\n    \n    self.cacheableItem.info.headers = headerFields;\n    self.cacheableItem.info.contentLength = contentLengthField ? strtoull([contentLengthField UTF8String], NULL, 0) : 0;\n    self.cacheableItem.info.eTag = eTagField;\n    self.cacheableItem.info.maxAge = nil;\n    \n    // Parse 'Age', 'Date', 'Last-Modified', 'Expires' header field by using a date formatter capable of parsing the\n    // date strings with 3 different formats (see http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3)\n    self.cacheableItem.info.age = [ageField intValue];\n    self.cacheableItem.info.serverDate = dateField ? [DateParser gh_parseHTTP:dateField] : now;\n    NSDate *lastModifiedDate = modifiedField ? [DateParser gh_parseHTTP:modifiedField] : now;\n    self.cacheableItem.info.lastModified = lastModifiedDate;\n    self.cacheableItem.info.expireDate = [DateParser gh_parseHTTP:expiresField];\n    \n    // Check if Pragma: no-cache is set (for compatibility with HTTP/1.0 clients)\n    BOOL pragmaNoCacheSet = NO;\n    if (pragmaField) {\n        pragmaNoCacheSet = [pragmaField rangeOfString:@\"no-cache\"].location != NSNotFound;\n    }\n    \n    // Parse cache-control field (if present)\n    if (cacheControlField) {\n        // check if max-age is set in header fields\n        NSRange range = [cacheControlField rangeOfString:@\"max-age=\"];\n        if (range.location != NSNotFound) {\n            // Parse max-age (in seconds)\n            unsigned long start = range.location + range.length;\n            unsigned long length =  [cacheControlField length] - (range.location + range.length);\n            NSString *maxAgeString = [cacheControlField substringWithRange:NSMakeRange(start, length)];\n            self.cacheableItem.info.maxAge = @([maxAgeString intValue]);\n        }\n        \n        // Check no-cache in \"Cache-Control\" (see http://www.ietf.org/rfc/rfc2616.txt - 14.9 Cache-Control, Page 107)\n        pragmaNoCacheSet =\n        ([cacheControlField rangeOfString:@\"no-cache\"].location != NSNotFound) ||\n        [cacheControlField rangeOfString:@\"no-store\"].location != NSNotFound;\n        \n        // since AFCache can be classified as a private cache, we'll cache objects with the Cache-Control 'private' header too.\n        // see 14.9.1 What is Cacheable\n        // TODO: Consider all Cache-Control parameters\n        /*\n         cache-request-directive =\n         \"no-cache\"                          ; Section 14.9.1\n         | \"no-store\"                          ; Section 14.9.2\n         | \"max-age\" \"=\" delta-seconds         ; Section 14.9.3, 14.9.4\n         | \"max-stale\" [ \"=\" delta-seconds ]   ; Section 14.9.3\n         | \"min-fresh\" \"=\" delta-seconds       ; Section 14.9.3\n         | \"no-transform\"                      ; Section 14.9.5\n         | \"only-if-cached\"                    ; Section 14.9.4\n         | cache-extension                     ; Section 14.9.6\n         \n         cache-response-directive =\n         \"public\"                               ; Section 14.9.1\n         | \"private\" [ \"=\" <\"> 1#field-name <\"> ] ; Section 14.9.1\n         | \"no-cache\" [ \"=\" <\"> 1#field-name <\"> ]; Section 14.9.1\n         | \"no-store\"                             ; Section 14.9.2\n         | \"no-transform\"                         ; Section 14.9.5\n         | \"must-revalidate\"                      ; Section 14.9.4\n         | \"proxy-revalidate\"                     ; Section 14.9.4\n         | \"max-age\" \"=\" delta-seconds            ; Section 14.9.3\n         | \"s-maxage\" \"=\" delta-seconds           ; Section 14.9.3\n         | cache-extension                        ; Section 14.9.6\n         */\n    }\n    \n    // Calculate \"valid until\" field. The 'max-age' directive takes priority over 'Expires', takes priority over 'Last-Modified'\n    BOOL mustNotCache = pragmaNoCacheSet || (self.cacheableItem.info.maxAge && [self.cacheableItem.info.maxAge intValue] == 0);\n    if (mustNotCache) {\n        // Do not cache as either \"no-cache\" or \"no-store\" is set or max-age is 0\n        self.cacheableItem.validUntil = nil;\n    } else if (self.cacheableItem.info.maxAge) {\n        // Create future expire date for max age by adding the given seconds to now.\n#if ((TARGET_OS_IPHONE == 0 && 1060 <= MAC_OS_X_VERSION_MAX_ALLOWED) || (TARGET_OS_IPHONE == 1 && 40000 <= __IPHONE_OS_VERSION_MAX_ALLOWED))\n        self.cacheableItem.validUntil = [now dateByAddingTimeInterval: [self.cacheableItem.info.maxAge doubleValue]];\n#else\n        self.cacheableItem.validUntil = [now addTimeInterval: [self.cacheableItem.info.maxAge doubleValue]];\n#endif\n    } else if (self.cacheableItem.info.expireDate) {\n        self.cacheableItem.validUntil = self.cacheableItem.info.expireDate;\n    } else {\n        self.cacheableItem.validUntil = lastModifiedDate;\n    }\n}\n\n@end\n"
  },
  {
    "path": "src/shared/AFHTTPURLProtocol.h",
    "content": "//\n//  AFHTTPURLProtocol.h\n//  AFCache-iOS\n//\n//  Created by Michael Markowski on 11.03.12.\n//  Copyright (c) 2012 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"AFCache.h\"\n\n@interface AFHTTPURLProtocol : NSURLProtocol <AFCacheableItemDelegate> {\n    NSURLRequest *m_request;\n}\n\n@property (nonatomic, strong) NSURLRequest *request;\n\n@end\n"
  },
  {
    "path": "src/shared/AFHTTPURLProtocol.m",
    "content": "//\n//  AFHTTPURLProtocol.m\n//  AFCache-iOS\n//\n//  Created by Michael Markowski on 11.03.12.\n//  Copyright (c) 2012 Artifacts - Fine Software Development. All rights reserved.\n//\n\n/*\n *\n * Copyright 2012 artifacts Software GmbH & Co. KG\n * http://www.artifacts.de\n * Author: Michael Markowski (m.markowski@artifacts.de)\n * Many thanks to Rob Napier's excellent post about using NSURLProtocol\n * instead of NSURLCache for WebView offline caching:\n * http://robnapier.net/blog/offline-uiwebview-nsurlprotocol-588/\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n \n#import \"AFHTTPURLProtocol.h\"\n\n@implementation AFHTTPURLProtocol\n\n@synthesize request = m_request;\n\n+ (BOOL)canInitWithRequest:(NSURLRequest *)request\n{\n    return [[[request URL] scheme] isEqualToString:@\"http\"] &&\n            [request valueForHTTPHeaderField:AFCachingURLHeader] == nil &&\n            [request valueForHTTPHeaderField:AFCacheInternalRequestHeader] == nil;\n}\n\n+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request\n{\n    return request;\n}\n\n- (id)initWithRequest:(NSURLRequest *)aRequest\n       cachedResponse:(NSCachedURLResponse *)cachedResponse\n               client:(id <NSURLProtocolClient>)client\n{\n    // Modify request so we don't loop\n    NSMutableURLRequest *myRequest = [aRequest mutableCopy];\n    [myRequest setValue:@\"\" forHTTPHeaderField:AFCachingURLHeader];\n    \n    self = [super initWithRequest:myRequest\n                   cachedResponse:cachedResponse\n                           client:client];\n    \n    if (self)\n    {\n        [self setRequest:myRequest];\n    }\n    return self;\n}\n\n- (void)startLoading\n{\n    [[AFCache sharedInstance] cachedObjectForRequest:self.request delegate:self];\n}\n\n- (void) connectionDidFail: (AFCacheableItem *) cacheableItem {\n    [[self client] URLProtocol:self didFailWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorCannotConnectToHost userInfo:nil]];    \n}\n\n- (void) connectionDidFinish: (AFCacheableItem *) cacheableItem {\n    NSAssert(cacheableItem.info.response != nil, @\"Response must not be nil - this is a software bug\");\n    if (cacheableItem.info.redirectRequest && cacheableItem.info.redirectResponse) {\n        // for some reason this does not work when in flight mode...\n        NSURLRequest *redirectRequest = cacheableItem.servedFromCache && !cacheableItem.URLInternallyRewritten ? self.request : cacheableItem.info.redirectRequest;\n        NSURLResponse *redirectResponse = cacheableItem.info.redirectResponse;\n        [[self client] URLProtocol:self wasRedirectedToRequest:redirectRequest redirectResponse:redirectResponse];\n    } else {\n        [[self client] URLProtocol:self didReceiveResponse:cacheableItem.info.response cacheStoragePolicy:NSURLCacheStorageAllowed];\n        [[self client] URLProtocol:self didLoadData:cacheableItem.data];\n        [[self client] URLProtocolDidFinishLoading:self];\n    }\n}\n\n- (void)connectionHasBeenRedirected: (AFCacheableItem*) cacheableItem {\n    // don't inform client right now, but when finished downloading. Otherwise the response will not come back to AFCache...\n}\n\n- (void)stopLoading\n{\n   [[AFCache sharedInstance] cancelAsynchronousOperationsForURL:[[self request] URL] itemDelegate:self];\n}\n\n- (NSCachedURLResponse *)cachedResponse {\n    return [super cachedResponse];\n}\n\n\n@end\n"
  },
  {
    "path": "src/shared/AFMediaTypeParser.h",
    "content": "//\n//  AFMIMEParser.h\n//  AFCache-iOS\n//\n//  Created by Martin Jansen on 25.02.12.\n//  Copyright (c) 2012 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n/**\n * Implements a RFC 2616 confirming parser for extracting the\n * content type and the character encoding from Internet Media\n * Types\n */\n@interface AFMediaTypeParser : NSObject {\n    NSString* mimeType;\n    NSString* __unsafe_unretained _textEncoding;\n    NSString* __unsafe_unretained _contentType;\n}\n\n@property (unsafe_unretained, nonatomic, readonly) NSString* textEncoding;\n@property (unsafe_unretained, nonatomic, readonly) NSString* contentType;\n\n- (id) initWithMIMEType:(NSString*)theMIMEType;\n\n@end\n"
  },
  {
    "path": "src/shared/AFMediaTypeParser.m",
    "content": "//\n//  AFMIMEParser.m\n//  AFCache-iOS\n//\n//  Created by Martin Jansen on 25.02.12.\n//  Copyright (c) 2012 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import \"AFMediaTypeParser.h\"\n\n#define kCharsetName @\"charset\"\n#define kTokenDelimiter @\";\"\n#define kParameterDelimiter @\"=\"\n\n@interface AFMediaTypeParser (private)\n\n- (void) parse;\n- (NSString*) trim:(NSString*)aString;\n\n@end\n\n@implementation AFMediaTypeParser\n\n@synthesize textEncoding = _textEncoding;\n@synthesize contentType = _contentType;\n\n#pragma mark Object lifecycle\n\n- (id) initWithMIMEType:(NSString*)aMIMEType\n{\n    self = [super init];\n\n    if (self) {\n        mimeType = aMIMEType;\n        _textEncoding = nil;\n        _contentType = nil;\n\n        [self parse];\n    }\n\n    return self;\n}\n\n\n#pragma mark -\n\n- (void) parse\n{\n    NSArray *components = [mimeType componentsSeparatedByString:kTokenDelimiter];\n\n    if (1 >= [components count]) {\n        _contentType = [self trim:mimeType];\n        return;\n    }\n\n    _contentType = [self trim:(NSString*)[components objectAtIndex:0]];\n    for (NSUInteger i = 1; i < [components count]; i++) {\n        NSString *parameter = [components objectAtIndex:i];\n        NSArray *parameterComponents = [parameter componentsSeparatedByString:kParameterDelimiter];\n\n        if (2 != [parameterComponents count]) {\n            continue;\n        }\n\n        NSString *name = [self trim:[parameterComponents objectAtIndex:0]];\n        NSString *value = [self trim:[parameterComponents objectAtIndex:1]];\n\n        if ([name isEqualToString:kCharsetName]) {\n            _textEncoding = value;\n            break;\n        }\n    }\n}\n\n- (NSString*) trim:(NSString*)aString\n{\n    // http://stackoverflow.com/a/8293671/132475\n\n    NSMutableString *mStr = [aString mutableCopy];\n    CFStringTrimWhitespace((CFMutableStringRef)mStr);\n\n    NSString *result = [mStr copy];\n\n    return result;\n}\n\n@end\n"
  },
  {
    "path": "src/shared/AFPackageInfo.h",
    "content": "//\n//  AFPackageItemInfo.h\n//  AFCache\n//\n//  Created by Michael Markowski on 28.01.11.\n//  Copyright 2011 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n\n@interface AFPackageInfo : NSObject {\n\tNSURL *packageURL;\n\tNSURL *baseURL;\n\tNSArray *resourceURLs;\n\tNSMutableDictionary *userData;\n}\n\n@property (nonatomic, strong) NSURL *packageURL;\n@property (nonatomic, strong) NSURL *baseURL;\n@property (nonatomic, strong) NSArray *resourceURLs;\n@property (nonatomic, strong) NSMutableDictionary *userData;\n\n@end\n"
  },
  {
    "path": "src/shared/AFPackageInfo.m",
    "content": "//\n//  AFPackageItemInfo.m\n//  AFCache\n//\n//  Created by Michael Markowski on 28.01.11.\n//  Copyright 2011 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import \"AFPackageInfo.h\"\n\n\n@implementation AFPackageInfo\n\n@synthesize packageURL, baseURL, resourceURLs, userData;\n\n- (id)init {\n\tself = [super init];\n\tif (self != nil) {\n\t\tresourceURLs = [[NSArray alloc] init];\n\t\tuserData = [[NSMutableDictionary alloc] init];\n\t}\n\treturn self;\n}\n\n- (void)encodeWithCoder: (NSCoder *) coder {\n\t[coder encodeObject: packageURL\t\t\tforKey: @\"AFPkgInfo_packageURL\"];\n\t[coder encodeObject: baseURL\t\t\tforKey: @\"AFPkgInfo_baseURL\"];\n\t[coder encodeObject: resourceURLs\t\tforKey: @\"AFPkgInfo_resourceURLs\"];\n\t[coder encodeObject: userData\t\t\tforKey: @\"AFPkgInfo_userData\"];\n}\n\n- (id)initWithCoder: (NSCoder *) coder {\n\tself.packageURL\t\t\t= [coder decodeObjectForKey: @\"AFPkgInfo_packageURL\"];\t\n\tself.baseURL\t\t\t= [coder decodeObjectForKey: @\"AFPkgInfo_baseURL\"];\t\n\tself.resourceURLs\t\t= [coder decodeObjectForKey: @\"AFPkgInfo_resourceURLs\"];\t\n\tself.userData\t\t\t= [coder decodeObjectForKey: @\"AFPkgInfo_userData\"];\t\n\treturn self;\n}\n\n- (NSString*)description {\n\tNSMutableString *s = [NSMutableString stringWithString:@\"Cache information:\\n\"];\n\t[s appendFormat:@\"packageURL: %@\\n\",\t\tpackageURL];\n\t[s appendFormat:@\"baseURL: %@\\n\",\t\t\tbaseURL];\n\t[s appendFormat:@\"resourceURLs: %@\\n\",\t\t[resourceURLs description]];\n\t[s appendFormat:@\"userData: %@\\n\",\t\t\t[userData description]];\n\treturn s;\n}\n\n@end\n"
  },
  {
    "path": "src/shared/AFRequestConfiguration.h",
    "content": "//\n//  AFRequestConfiguration.h\n//  AFCache\n//\n//  Created by Sebastian Grimme on 24.07.14.\n//  Copyright (c) 2014 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface AFRequestConfiguration : NSObject\n\n@property (nonatomic, assign) int options;\n@property (nonatomic, strong) id userData;\n@property (nonatomic, strong) NSURLRequest *request;\n\n@end\n"
  },
  {
    "path": "src/shared/AFRequestConfiguration.m",
    "content": "//\n//  AFRequestConfiguration.m\n//  AFCache\n//\n//  Created by Sebastian Grimme on 24.07.14.\n//  Copyright (c) 2014 Artifacts - Fine Software Development. All rights reserved.\n//\n\n#import \"AFRequestConfiguration.h\"\n\n@implementation AFRequestConfiguration\n\n@end\n"
  },
  {
    "path": "src/shared/AFURLCache.h",
    "content": "/*\n *\n * Copyright 2008 Artifacts - Fine Software Development\n * http://www.artifacts.de\n * Contributed by Nico Schmidt - savoysoftware.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n#import <Foundation/Foundation.h>\n\n\n@interface AFURLCache : NSURLCache\n{\n\n}\n\n@end\n"
  },
  {
    "path": "src/shared/AFURLCache.m",
    "content": "/*\n *\n * Copyright 2008 Artifacts - Fine Software Development\n * http://www.artifacts.de\n * Contributed by Nico Schmidt - savoysoftware.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n#import \"AFURLCache.h\"\n#import \"AFCache+PrivateAPI.h\"\n#import \"AFCache+Packaging.h\"\n#import \"DateParser.h\"\n#import \"AFMediaTypeParser.h\"\n\n@implementation AFURLCache\n\n-(NSCachedURLResponse*)cachedResponseForRequest:(NSURLRequest*)request\n{\n    NSURL* url = request.URL;\n\tAFCacheableItem* item = [[AFCache sharedInstance] cacheableItemFromCacheStore:url];\t\n\tif (item && item.cacheStatus == kCacheStatusFresh) {\n\n        AFMediaTypeParser *parser = [[AFMediaTypeParser alloc] initWithMIMEType:item.info.mimeType];\n\n\t\tNSURLResponse* response = [[NSURLResponse alloc] initWithURL:item.url \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tMIMEType:parser.contentType\n\t\t\t\t\t\t\t\t\t\t\t   expectedContentLength:[item.data length]\n\t\t\t\t\t\t\t\t\t\t\t\ttextEncodingName:parser.contentType];\t\t\n\t\tNSCachedURLResponse *cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:response data:item.data userInfo:nil storagePolicy:NSURLCacheStorageAllowedInMemoryOnly];\n        return cachedResponse;\n\t} else {\n\t\t//NSLog(@\"Cache miss for file: %@\", [[AFCache sharedInstance] filenameForURL: url]);\n\t}\n\t\n\tNSCachedURLResponse *response = [super cachedResponseForRequest:request];\n\treturn response;    \n}\n\n- (void)storeCachedResponse:(NSCachedURLResponse *)cachedResponse forRequest:(NSURLRequest *)request\n{\n\t//NSLog(@\"request %@ resulted in response: %@\", [request description], [cachedResponse description]);\n\tNSDate *lastModified = nil;\n\tNSDate *expireDate = nil;\n\t\n\tif ([cachedResponse.response isKindOfClass: [NSHTTPURLResponse self]]) {\t\t\n\t\tNSDictionary *headers = [(NSHTTPURLResponse *) cachedResponse.response allHeaderFields];\t\t\n\t\tNSString *modifiedHeader                = [headers objectForKey: @\"Last-Modified\"];\n\t\tNSString *expiresHeader                 = [headers objectForKey: @\"Expires\"];\n\t\tNSString *contentTypeHeader             = [headers objectForKey: @\"Content-Type\"];\n\t\t\n\t\tlastModified = (modifiedHeader) ? [DateParser gh_parseHTTP: modifiedHeader] : [NSDate date];\n\t\texpireDate\t = (expiresHeader)  ? [DateParser gh_parseHTTP: expiresHeader]  : nil;\n\n\t\tAFCacheableItem *item = [[AFCacheableItem alloc] initWithURL:request.URL lastModified:lastModified expireDate:expireDate contentType:contentTypeHeader];\n\t\t[[AFCache sharedInstance] importCacheableItem:item withData:cachedResponse.data];\t\n\t}\t\t\t\t\n}\n\n@end\n"
  },
  {
    "path": "src/shared/DateParser.h",
    "content": "//\n//  AFNSDate+Parsing.h copied from GHNSDate+Parsing.h by Gabriel Handford\n//  Original copyright notice below.\n//\n\n//\n//  Created by Gabe on 3/18/08.\n//  Copyright 2008 Gabriel Handford\n//\n//  Permission is hereby granted, free of charge, to any person\n//  obtaining a copy of this software and associated documentation\n//  files (the \"Software\"), to deal in the Software without\n//  restriction, including without limitation the rights to use,\n//  copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the\n//  Software is furnished to do so, subject to the following\n//  conditions:\n//\n//  The above copyright notice and this permission notice shall be\n//  included in all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n//  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n//  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n//  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n//  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n//  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n//  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n//  OTHER DEALINGS IN THE SOFTWARE.\n//\n#import <Foundation/Foundation.h>\n\n\n@interface DateParser : NSDate {\n    NSDateFormatter*    gh_rfc1123DateFormatter;\n    NSDateFormatter*    gh_rfc850DateFormatter;\n    NSDateFormatter*    gh_ascTimeDateFormatter;\n    NSDateFormatter*    gh_is8601DateFormatter;\n    NSDateFormatter*    gh_rfc822DateFormatter;\n    \n}\n\n- (NSDate *)gh_parseISO8601: (NSString *) dateString;\n+ (NSDate *)gh_parseISO8601: (NSString *) dateString;\n\n/*!\n   @method gh_parseRFC822\n   @abstract Parse RFC822 encoded date\n   @param dateString Date string to parse, eg. 'Wed, 01 Mar 2006 12:00:00 -0400'\n   @result Date\n */\n- (NSDate *)gh_parseRFC822: (NSString *) dateString;\n+ (NSDate *)gh_parseRFC822: (NSString *) dateString;\n\n/*!\n   @method gh_parseHTTP\n   @abstract Parse http date, currently only handles RFC1123 date\n   @param dateString Date string to parse\n\n   HTTP-date    = rfc1123-date | rfc850-date | asctime-date\n\n   Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, updated by RFC 1123\n   Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036\n   Sun Nov  6 08:49:37 1994       ; ANSI C's asctime() format\n */\n- (NSDate *)gh_parseHTTP: (NSString *) dateString;\n+ (NSDate *)gh_parseHTTP: (NSString *) dateString;\n\n/*!\n   Parse time since epoch.\n   @param timeSinceEpoch An NSNumber or NSString (responds to longLongValue)\n   @result NSDate or nil if timeSinceEpoch was nil\n */\n- (NSDate *)gh_parseTimeSinceEpoch: (id) timeSinceEpoch;\n+ (NSDate *)gh_parseTimeSinceEpoch: (id) timeSinceEpoch;\n\n- (NSDate *)gh_parseTimeSinceEpoch: (id) timeSinceEpoch withDefault: (id) value;\n+ (NSDate *)gh_parseTimeSinceEpoch: (id) timeSinceEpoch withDefault: (id) value;\n\n/*!\n   @method gh_formatRFC822\n   @abstract Get date formatted for RFC822\n   @result The date string, like \"Wed, 01 Mar 2006 12:00:00 -0400\"\n */\n- (NSString *)gh_formatRFC822;\n\n/*!\n   @method gh_formatHTTP\n   @abstract Get date formatted for RFC1123 (HTTP date)\n   @result The date string, like \"Sun, 06 Nov 1994 08:49:37 GMT\"\n */\n- (NSString *)gh_formatHTTP;\n\n/*!\n   @method gh_formatISO8601\n   @abstract Get date formatted for ISO8601 (XML date)\n   @result The date string, like ... TODO(gabe)\n */\n- (NSString *)gh_formatISO8601;\n\n/*!\n   @method gh_iso8601DateFormatter\n   @abstract For example, '2007-10-18T16:05:10.000Z'. Returns a new autoreleased formatter since NSDateFormatter is not thread-safe.\n   @result Date formatter for ISO8601\n */\n- (NSDateFormatter *)gh_iso8601DateFormatter;\n+ (NSDateFormatter *)gh_iso8601DateFormatter;\n\n/*!\n   @method gh_rfc822DateFormatter\n   @abstract For example, 'Wed, 01 Mar 2006 12:00:00 -0400'. Returns a new autoreleased formatter since NSDateFormatter is not thread-safe.\n   @result Date formatter for RFC822\n */\n- (NSDateFormatter *)gh_rfc822DateFormatter;\n+ (NSDateFormatter *)gh_rfc822DateFormatter;\n\n/*!\n @method gh_rfc1123DateFormatter\n @abstract For example, 'Wed, 01 Mar 2006 12:00:00 GMT'. Returns a new autoreleased formatter since NSDateFormatter is not thread-safe.\n @result Date formatter for RFC1123\n */\n- (NSDateFormatter *)gh_rfc1123DateFormatter;\n+ (NSDateFormatter *)gh_rfc1123DateFormatter;\n\n/*!\n   @method gh_rfc850DateFormatter\n   @abstract For example, 'Sunday, 06-Nov-94 08:49:37 GMT'. Returns a new autoreleased formatter since NSDateFormatter is not thread-safe.\n   @result Date formatter for RFC850\n */\n- (NSDateFormatter *)gh_rfc850DateFormatter;\n+ (NSDateFormatter *)gh_rfc850DateFormatter;\n\n/*!\n   @method gh_ascTimeDateFormatter\n   @abstract For example, 'Sun Nov  6 08:49:37 1994'. Returns a new autoreleased formatter since NSDateFormatter is not thread-safe.\n   @result Date formatter for asctime\n */\n- (NSDateFormatter *)gh_ascTimeDateFormatter;\n+ (NSDateFormatter *)gh_ascTimeDateFormatter;\n\n- (NSString *)formatHTTPDate:(NSDate*)date;\n+ (NSString *)formatHTTPDate:(NSDate*)date;\n\n@end"
  },
  {
    "path": "src/shared/DateParser.m",
    "content": "//\n//  AFNSDate+Parsing.h copied from GHNSDate+Parsing.h by Gabriel Handford\n//  Original copyright notice below.\n//\n\n//\n//  Created by Gabe on 3/18/08.\n//  Copyright 2008 Gabriel Handford\n//\n//  Permission is hereby granted, free of charge, to any person\n//  obtaining a copy of this software and associated documentation\n//  files (the \"Software\"), to deal in the Software without\n//  restriction, including without limitation the rights to use,\n//  copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the\n//  Software is furnished to do so, subject to the following\n//  conditions:\n//\n//  The above copyright notice and this permission notice shall be\n//  included in all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n//  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n//  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n//  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n//  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n//  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n//  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n//  OTHER DEALINGS IN THE SOFTWARE.\n//\n\n#import \"DateParser.h\"\n\n@implementation DateParser\n\n\n- (NSDate *)gh_parseISO8601: (NSString *) dateString {\n\tif (!dateString) return nil;\n\treturn [[self gh_iso8601DateFormatter] dateFromString: dateString];\n}\n\n+ (NSDate *)gh_parseISO8601: (NSString *) dateString {\n\tif (!dateString) return nil;\n\treturn [[self gh_iso8601DateFormatter] dateFromString: dateString];\n}\n\n- (NSDate *)gh_parseRFC822: (NSString *) dateString {\n\tif (!dateString) return nil;\n\treturn [[self gh_rfc822DateFormatter] dateFromString: dateString];\n}\n\n+ (NSDate *)gh_parseRFC822: (NSString *) dateString {\n\tif (!dateString) return nil;\n\treturn [[self gh_rfc822DateFormatter] dateFromString: dateString];\n}\n\n- (NSDate *)gh_parseHTTP: (NSString *) dateString {\n\tif (!dateString) return nil;\n\tNSDate *parsed = nil;\n\tparsed = [[self gh_rfc1123DateFormatter] dateFromString: dateString];\n\tif (parsed) return parsed;\n\tparsed = [[self gh_rfc850DateFormatter] dateFromString: dateString];\n\tif (parsed) return parsed;\n\tparsed = [[self gh_ascTimeDateFormatter] dateFromString: dateString];\n\treturn parsed;\n}\n\n+ (NSDate *)gh_parseHTTP: (NSString *) dateString {\n\tif (!dateString) return nil;\n\tNSDate *parsed = nil;\n\tparsed = [[self gh_rfc1123DateFormatter] dateFromString: dateString];\n\tif (parsed) return parsed;\n\tparsed = [[self gh_rfc850DateFormatter] dateFromString: dateString];\n\tif (parsed) return parsed;\n\tparsed = [[self gh_ascTimeDateFormatter] dateFromString: dateString];\n\treturn parsed;\n}\n\n- (NSDate *)gh_parseTimeSinceEpoch: (id) timeSinceEpoch {\n\treturn [self gh_parseTimeSinceEpoch: timeSinceEpoch withDefault: timeSinceEpoch];\n}\n\n+ (NSDate *)gh_parseTimeSinceEpoch: (id) timeSinceEpoch {\n\treturn [self gh_parseTimeSinceEpoch: timeSinceEpoch withDefault: timeSinceEpoch];\n}\n\n- (NSDate *)gh_parseTimeSinceEpoch: (id) timeSinceEpoch withDefault: (id) value {\n\tif (!timeSinceEpoch) return value;\n\treturn [NSDate dateWithTimeIntervalSince1970: [timeSinceEpoch longLongValue]];\n}\n\n+ (NSDate *)gh_parseTimeSinceEpoch: (id) timeSinceEpoch withDefault: (id) value {\n\tif (!timeSinceEpoch) return value;\n\treturn [NSDate dateWithTimeIntervalSince1970: [timeSinceEpoch longLongValue]];\n}\n\n- (NSString *)gh_formatRFC822 {\n\treturn [[self gh_rfc822DateFormatter] stringFromDate: self];\n}\n\n- (NSString *)gh_formatHTTP {\n\treturn [[self gh_rfc1123DateFormatter] stringFromDate: self];\n}\n\n- (NSString *)formatHTTPDate: (NSDate *) date {\n\treturn [[self gh_rfc1123DateFormatter] stringFromDate: date];\n}\n\n+ (NSString *)formatHTTPDate: (NSDate *) date {\n\treturn [[self gh_rfc1123DateFormatter] stringFromDate: date];\n}\n\n- (NSString *)gh_formatISO8601 {\n\treturn [[self gh_iso8601DateFormatter] stringFromDate: self];\n}\n\n+ (NSDateFormatter *)gh_rfc822DateFormatter {\n    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];\n    [dateFormatter setFormatterBehavior: NSDateFormatterBehavior10_4];\n    // Need to force US locale when generating otherwise it might not be 822 compatible\n    [dateFormatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier: @\"en_US\"]];\n    [dateFormatter setTimeZone: [NSTimeZone timeZoneForSecondsFromGMT: 0]];\n    [dateFormatter setDateFormat: @\"EEE, dd MMM yyyy HH:mm:ss ZZZ\"];\n    \n    return dateFormatter;\n}\n\n- (NSDateFormatter *)gh_rfc822DateFormatter {\n\tif (nil == gh_rfc822DateFormatter)\n    {\n        gh_rfc822DateFormatter = [[self class] gh_rfc822DateFormatter];\n    }\n    \n\treturn gh_rfc822DateFormatter;\n}\n\n+ (NSDateFormatter *)gh_iso8601DateFormatter {\n    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];\n    [dateFormatter setFormatterBehavior: NSDateFormatterBehavior10_4];\n    // Need to force US locale when generating otherwise it might not be 8601 compatible\n    [dateFormatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier: @\"en_US\"]];\n    [dateFormatter setTimeZone: [NSTimeZone timeZoneForSecondsFromGMT: 0]];\n    [dateFormatter setDateFormat: @\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\"];\n    \n    return dateFormatter;\n}\n\n- (NSDateFormatter *)gh_iso8601DateFormatter {\n\t// Example: 2007-10-18T16:05:10.000Z\n\tif (nil == gh_is8601DateFormatter)\n    {\n        gh_is8601DateFormatter = [[self class] gh_iso8601DateFormatter];\n\t}\n    \n    return gh_is8601DateFormatter;\n}\n\n+ (NSDateFormatter *)gh_rfc1123DateFormatter {\n    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];\n    [dateFormatter setFormatterBehavior: NSDateFormatterBehavior10_4];\n    // Need to force US locale when generating otherwise it might not be 822 compatible\n    [dateFormatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier: @\"en_US\"]];\n    [dateFormatter setTimeZone: [NSTimeZone timeZoneForSecondsFromGMT: 0]];\n    [dateFormatter setDateFormat: @\"EEE, dd MMM yyyy HH:mm:ss zzz\"];\n    \n    return dateFormatter;\n}\n\n- (NSDateFormatter *)gh_rfc1123DateFormatter {\n\t// Example: \"Wed, 01 Mar 2006 12:00:00 GMT\"\n    if (nil == gh_rfc1123DateFormatter)\n    {\n        gh_rfc1123DateFormatter = [[self class] gh_rfc1123DateFormatter];\n    }\n    \n\treturn gh_rfc1123DateFormatter;\n}\n\n+ (NSDateFormatter *)gh_rfc850DateFormatter {\n    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];\n    [dateFormatter setFormatterBehavior: NSDateFormatterBehavior10_4];\n    [dateFormatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier: @\"en_US\"]];\n    [dateFormatter setTimeZone: [NSTimeZone timeZoneForSecondsFromGMT: 0]];\n    [dateFormatter setDateFormat: @\"EEEE, dd-MMM-yy HH:mm:ss zzz\"];\n    \n    return dateFormatter;\n}\n\n- (NSDateFormatter *)gh_rfc850DateFormatter {\n\t// Example: Sunday, 06-Nov-94 08:49:37 GMT\n\tif (nil == gh_rfc850DateFormatter)\n    {\n        gh_rfc850DateFormatter = [[self class] gh_rfc850DateFormatter];\n\t}\n    \n    return gh_rfc850DateFormatter;\n}\n\n+ (NSDateFormatter *)gh_ascTimeDateFormatter {\n    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];\n    [dateFormatter setFormatterBehavior: NSDateFormatterBehavior10_4];\n    [dateFormatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier: @\"en_US\"]];\n    [dateFormatter setTimeZone: [NSTimeZone timeZoneForSecondsFromGMT: 0]];\n    [dateFormatter setDateFormat: @\"EEE MMM d HH:mm:ss yyyy\"];\n    \n    return dateFormatter;\n}\n\n- (NSDateFormatter *)gh_ascTimeDateFormatter {\n\t// Example: Sun Nov  6 08:49:37 1994\n\tif (nil == gh_ascTimeDateFormatter)\n    {\n        gh_ascTimeDateFormatter = [[self class] gh_ascTimeDateFormatter];\n\t}\n    \n    return gh_ascTimeDateFormatter;\n}\n\n\n@end"
  },
  {
    "path": "testserver.py",
    "content": "#! /usr/bin/env python\n\nimport time\nimport BaseHTTPServer\nimport urlparse\n\nHOST_NAME = 'localhost'\nPORT_NUMBER = 49000\n\ndef makeBestType(s):\n\ttry:\n\t\treturn int(s)\n\texcept:\n\t\tpass\n\n\ttry:\n\t\treturn float(s)\n\texcept:\n\t\tpass\n\n\treturn s\n\ndef sendFile(s, numBytes=100, delay=0.0, blockSize=100):\n\ts.send_response(200)\n\ts.send_header(\"Content-type\", \"text/html\")\n\ts.send_header(\"Content-Length\", \"%d\" % numBytes)\n\ts.end_headers()\n\n\tsentBytes = 0\n\t\n\twhile sentBytes < numBytes:\n\t\ttime.sleep(delay)\n\t\tactualBytes = (sentBytes + blockSize)\n\t\tif actualBytes > numBytes:\n\t\t\tactualBytes = numBytes\n\n\t\ts.wfile.write(\"a\" * (actualBytes - sentBytes))\n\t\ts.wfile.flush()\n\n\t\tsentBytes = actualBytes\n\t\tprint sentBytes\n\nresponses = {\n\t\"/file\" : sendFile\n}\n\nclass MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):\n\tdef do_HEAD(self):\n\t\tself.send_response(200)\n\t\tself.send_header(\"Content-type\", \"text/html\")\n\t\tself.end_headers()\n\n\tdef do_GET(self):\n\t\t\"\"\"Respond to a GET request.\"\"\"\n\n\t\tif self.headers.has_key('If-Modified-Since'):\n\t\t\tself.send_response(304)\n\t\t\treturn\n\n\t\tcomponents = urlparse.urlsplit(self.path)\n\t\tpath = components[2]\n\t\tparams = components[3].split('&')\n\t\tprint params\n\t\tparameters = {}\n\t\tfor p in params:\n\t\t\tk, v = p.split('=')\n\t\t\tv = makeBestType(v)\n\t\t\tparameters[k] = v\n\t\tif responses.has_key(path):\n\t\t\tresponses[path](self, **parameters)\n\nif __name__ == '__main__':\n\tserver_class = BaseHTTPServer.HTTPServer\n\thttpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)\n\ttry:\n\t\thttpd.serve_forever()\n\texcept KeyboardInterrupt:\n\t\tpass\n\thttpd.server_close()\n"
  }
]