From d0ce900a529431d8305dc777d9f76a3369c52c3e Mon Sep 17 00:00:00 2001 From: Abhishek Banthia Date: Fri, 11 Dec 2015 00:03:55 -0500 Subject: [PATCH] Localization/DragDropEffect/iRate --- Clocker.xcodeproj/project.pbxproj | 64 +- .../UserInterfaceState.xcuserstate | Bin 128465 -> 111741 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 50 + .../xcschemes/Clocker.xcscheme | 2 +- Clocker/ApplicationDelegate.m | 43 +- Clocker/PanelController.h | 2 + Clocker/PanelController.m | 37 +- Clocker/Rate App/Info.plist | 26 + .../iRate.bundle/ar.lproj/Localizable.strings | Bin 0 -> 650 bytes .../iRate.bundle/bn.lproj/Localizable.strings | Bin 0 -> 986 bytes .../iRate.bundle/cs.lproj/Localizable.strings | 6 + .../iRate.bundle/da.lproj/Localizable.strings | 6 + .../de-AT.lproj/Localizable.strings | 6 + .../iRate.bundle/de.lproj/Localizable.strings | Bin 0 -> 906 bytes .../iRate.bundle/el.lproj/Localizable.strings | Bin 0 -> 940 bytes .../iRate.bundle/en.lproj/Localizable.strings | Bin 0 -> 888 bytes .../iRate.bundle/es.lproj/Localizable.strings | Bin 0 -> 848 bytes .../iRate.bundle/fa.lproj/Localizable.strings | 6 + .../iRate.bundle/fr.lproj/Localizable.strings | 6 + .../iRate.bundle/he.lproj/Localizable.strings | Bin 0 -> 802 bytes .../iRate.bundle/hi.lproj/Localizable.strings | Bin 0 -> 852 bytes .../iRate.bundle/id.lproj/Localizable.strings | Bin 0 -> 902 bytes .../iRate.bundle/it.lproj/Localizable.strings | Bin 0 -> 824 bytes .../iRate.bundle/ja.lproj/Localizable.strings | Bin 0 -> 628 bytes .../iRate.bundle/ko.lproj/Localizable.strings | Bin 0 -> 664 bytes .../iRate.bundle/mk.lproj/Localizable.strings | Bin 0 -> 940 bytes .../iRate.bundle/nl.lproj/Localizable.strings | 6 + .../iRate.bundle/no.lproj/Localizable.strings | Bin 0 -> 856 bytes .../iRate.bundle/pa.lproj/Localizable.strings | Bin 0 -> 1030 bytes .../iRate.bundle/pl.lproj/Localizable.strings | Bin 0 -> 862 bytes .../iRate.bundle/pt.lproj/Localizable.strings | Bin 0 -> 884 bytes .../iRate.bundle/ru.lproj/Localizable.strings | Bin 0 -> 938 bytes .../iRate.bundle/sk.lproj/Localizable.strings | 6 + .../iRate.bundle/sl.lproj/Localizable.strings | Bin 0 -> 888 bytes .../iRate.bundle/sv.lproj/Localizable.strings | 6 + .../iRate.bundle/th.lproj/Localizable.strings | Bin 0 -> 896 bytes .../iRate.bundle/tr.lproj/Localizable.strings | Bin 0 -> 928 bytes .../iRate.bundle/uk.lproj/Localizable.strings | Bin 0 -> 960 bytes .../ur-IN.lproj/Localizable.strings | 7 + .../ur-PK.lproj/Localizable.strings | 7 + .../iRate.bundle/ur.lproj/Localizable.strings | 7 + .../iRate.bundle/vi.lproj/Localizable.strings | 6 + .../zh-Hans.lproj/Localizable.strings | Bin 0 -> 520 bytes .../zh-Hant.lproj/Localizable.strings | Bin 0 -> 510 bytes Clocker/Rate App/iRate.h | 174 +++ Clocker/Rate App/iRate.m | 1195 +++++++++++++++++ Clocker/de.lproj/Localizable.strings | 19 + Clocker/de.lproj/MainMenu.xib | 652 +++++++++ Clocker/de.lproj/Panel.xib | 209 +++ Clocker/de.lproj/PreferencesWindow.xib | 374 ++++++ Clocker/en.lproj/Localizable.strings | 11 +- Clocker/fr.lproj/Localizable.strings | 12 +- Clocker/ja.lproj/Localizable.strings | 19 + Clocker/ja.lproj/MainMenu.xib | 652 +++++++++ Clocker/ja.lproj/Panel.xib | 209 +++ Clocker/ja.lproj/PreferencesWindow.xib | 374 ++++++ 56 files changed, 4149 insertions(+), 50 deletions(-) create mode 100755 Clocker/Rate App/Info.plist create mode 100755 Clocker/Rate App/iRate.bundle/ar.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/bn.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/cs.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/da.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/de-AT.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/de.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/el.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/en.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/es.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/fa.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/fr.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/he.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/hi.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/id.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/it.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/ja.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/ko.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/mk.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/nl.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/no.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/pa.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/pl.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/pt.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/ru.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/sk.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/sl.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/sv.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/th.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/tr.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/uk.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/ur-IN.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/ur-PK.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/ur.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/vi.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/zh-Hans.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.bundle/zh-Hant.lproj/Localizable.strings create mode 100755 Clocker/Rate App/iRate.h create mode 100755 Clocker/Rate App/iRate.m create mode 100644 Clocker/de.lproj/Localizable.strings create mode 100755 Clocker/de.lproj/MainMenu.xib create mode 100755 Clocker/de.lproj/Panel.xib create mode 100644 Clocker/de.lproj/PreferencesWindow.xib create mode 100644 Clocker/ja.lproj/Localizable.strings create mode 100755 Clocker/ja.lproj/MainMenu.xib create mode 100755 Clocker/ja.lproj/Panel.xib create mode 100644 Clocker/ja.lproj/PreferencesWindow.xib diff --git a/Clocker.xcodeproj/project.pbxproj b/Clocker.xcodeproj/project.pbxproj index cf12b96..b369e48 100755 --- a/Clocker.xcodeproj/project.pbxproj +++ b/Clocker.xcodeproj/project.pbxproj @@ -8,6 +8,9 @@ /* Begin PBXBuildFile section */ 9A2000D11BFBD472002BFDE8 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 9A2000CF1BFBD472002BFDE8 /* Localizable.strings */; settings = {ASSET_TAGS = (); }; }; + 9A25F7451C1A5E17007D369B /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9A25F7421C1A5E17007D369B /* Info.plist */; settings = {ASSET_TAGS = (); }; }; + 9A25F7461C1A5E17007D369B /* iRate.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 9A25F7431C1A5E17007D369B /* iRate.bundle */; settings = {ASSET_TAGS = (); }; }; + 9A25F7471C1A5E17007D369B /* iRate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A25F7441C1A5E17007D369B /* iRate.m */; settings = {ASSET_TAGS = (); }; }; 9A4379251BEC223900F4E27F /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A4379211BEC223900F4E27F /* Security.framework */; settings = {ASSET_TAGS = (); }; }; 9A4379261BEC223900F4E27F /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A4379221BEC223900F4E27F /* SystemConfiguration.framework */; settings = {ASSET_TAGS = (); }; }; 9A4379271BEC223900F4E27F /* Fabric.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A4379231BEC223900F4E27F /* Fabric.framework */; settings = {ASSET_TAGS = (); }; }; @@ -41,6 +44,18 @@ 9A2000CE1BFBD3D7002BFDE8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/PreferencesWindow.xib; sourceTree = ""; }; 9A2000D01BFBD472002BFDE8 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = Clocker/en.lproj/Localizable.strings; sourceTree = ""; }; 9A2000D21BFBD47C002BFDE8 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Clocker/fr.lproj/Localizable.strings; sourceTree = ""; }; + 9A25F7411C1A5E17007D369B /* iRate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iRate.h; path = "Clocker/Rate App/iRate.h"; sourceTree = ""; }; + 9A25F7421C1A5E17007D369B /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Clocker/Rate App/Info.plist"; sourceTree = ""; }; + 9A25F7431C1A5E17007D369B /* iRate.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = iRate.bundle; path = "Clocker/Rate App/iRate.bundle"; sourceTree = ""; }; + 9A25F7441C1A5E17007D369B /* iRate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = iRate.m; path = "Clocker/Rate App/iRate.m"; sourceTree = ""; }; + 9A25F7491C1A672A007D369B /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Clocker/ja.lproj/Localizable.strings; sourceTree = ""; }; + 9A25F74A1C1A672A007D369B /* ja */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ja; path = Clocker/ja.lproj/MainMenu.xib; sourceTree = ""; }; + 9A25F74B1C1A672A007D369B /* ja */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ja; path = ja.lproj/Panel.xib; sourceTree = ""; }; + 9A25F74C1C1A672A007D369B /* ja */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ja; path = ja.lproj/PreferencesWindow.xib; sourceTree = ""; }; + 9A25F74D1C1A6C08007D369B /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Clocker/de.lproj/Localizable.strings; sourceTree = ""; }; + 9A25F74E1C1A6C08007D369B /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = Clocker/de.lproj/MainMenu.xib; sourceTree = ""; }; + 9A25F74F1C1A6C08007D369B /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = de.lproj/Panel.xib; sourceTree = ""; }; + 9A25F7501C1A6C08007D369B /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = de.lproj/PreferencesWindow.xib; sourceTree = ""; }; 9A4379211BEC223900F4E27F /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Security.framework; sourceTree = ""; }; 9A4379221BEC223900F4E27F /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = SystemConfiguration.framework; sourceTree = ""; }; 9A4379231BEC223900F4E27F /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Fabric.framework; sourceTree = ""; }; @@ -112,6 +127,17 @@ name = "Localization Strings"; sourceTree = ""; }; + 9A25F7481C1A5E21007D369B /* Rate */ = { + isa = PBXGroup; + children = ( + 9A25F7411C1A5E17007D369B /* iRate.h */, + 9A25F7421C1A5E17007D369B /* Info.plist */, + 9A25F7431C1A5E17007D369B /* iRate.bundle */, + 9A25F7441C1A5E17007D369B /* iRate.m */, + ); + name = Rate; + sourceTree = ""; + }; 9A8605E01BEC15F400A810A4 /* XIB */ = { isa = PBXGroup; children = ( @@ -184,6 +210,7 @@ DD4F7BF913C30F9F00825C6E = { isa = PBXGroup; children = ( + 9A25F7481C1A5E21007D369B /* Rate */, 9A5B1A8D1BECDFB700A77C68 /* Clocker.entitlements */, 9A43792D1BEC256200F4E27F /* Media.xcassets */, 9A2000C61BFBCEF6002BFDE8 /* Localization Strings */, @@ -270,6 +297,8 @@ en, fr, Base, + ja, + de, ); mainGroup = DD4F7BF913C30F9F00825C6E; productRefGroup = DD4F7C0513C30F9F00825C6E /* Products */; @@ -291,9 +320,11 @@ 9A8605D91BEC155B00A810A4 /* Status.png in Resources */, 9ABA38AC1BFAD7F80073EA4D /* Panel.xib in Resources */, 9A43792E1BEC256200F4E27F /* Media.xcassets in Resources */, + 9A25F7461C1A5E17007D369B /* iRate.bundle in Resources */, 9A2000D11BFBD472002BFDE8 /* Localizable.strings in Resources */, 9A8605DC1BEC155B00A810A4 /* StatusHighlighted@2x.png in Resources */, 9A8605DA1BEC155B00A810A4 /* Status@2x.png in Resources */, + 9A25F7451C1A5E17007D369B /* Info.plist in Resources */, 9A8605DB1BEC155B00A810A4 /* StatusHighlighted.png in Resources */, 9A8605D81BEC155B00A810A4 /* PowerIcon.png in Resources */, ); @@ -323,6 +354,7 @@ buildActionMask = 2147483647; files = ( 9A8605BF1BEC14F600A810A4 /* BackgroundView.m in Sources */, + 9A25F7471C1A5E17007D369B /* iRate.m in Sources */, 9A8605C01BEC14F600A810A4 /* Panel.m in Sources */, 9A8605C11BEC14F600A810A4 /* PreferencesWindowController.m in Sources */, 9A8605BA1BEC14DC00A810A4 /* StatusItemView.m in Sources */, @@ -342,6 +374,8 @@ children = ( 9A2000D01BFBD472002BFDE8 /* en */, 9A2000D21BFBD47C002BFDE8 /* fr */, + 9A25F7491C1A672A007D369B /* ja */, + 9A25F74D1C1A6C08007D369B /* de */, ); name = Localizable.strings; sourceTree = ""; @@ -352,6 +386,8 @@ 9A2000CC1BFBD3D7002BFDE8 /* Base */, 9A825E3B1C064F6C0037CA3B /* en */, 9A825E3C1C064F700037CA3B /* fr */, + 9A25F74A1C1A672A007D369B /* ja */, + 9A25F74E1C1A6C08007D369B /* de */, ); name = MainMenu.xib; sourceTree = ""; @@ -362,6 +398,8 @@ 9ABA38B31BFAD8520073EA4D /* fr */, 9A2000CD1BFBD3D7002BFDE8 /* Base */, 9A825E3F1C06538B0037CA3B /* en */, + 9A25F74B1C1A672A007D369B /* ja */, + 9A25F74F1C1A6C08007D369B /* de */, ); name = Panel.xib; path = Clocker; @@ -373,6 +411,8 @@ 9ABA38B41BFAD8520073EA4D /* fr */, 9A2000CE1BFBD3D7002BFDE8 /* Base */, 9A825E3D1C06534E0037CA3B /* en */, + 9A25F74C1C1A672A007D369B /* ja */, + 9A25F7501C1A6C08007D369B /* de */, ); name = PreferencesWindow.xib; path = Clocker; @@ -392,7 +432,7 @@ CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application: Abhishek Banthia (AJS5SNW8EY)"; + CODE_SIGN_IDENTITY = "Mac Developer: Abhishek Banthia (75WFZYE9LW)"; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -408,7 +448,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.10; - PROVISIONING_PROFILE = "1885f3d2-2a35-4a0b-b465-4c0119f4bbaf"; + PROVISIONING_PROFILE = ""; SDKROOT = macosx; }; name = Distribution; @@ -419,7 +459,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_ENTITLEMENTS = Clocker/Clocker.entitlements; - CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application: Abhishek Banthia (AJS5SNW8EY)"; + CODE_SIGN_IDENTITY = "Mac Developer: Abhishek Banthia (75WFZYE9LW)"; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -431,7 +471,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_BUNDLE_IDENTIFIER = com.abhishek.Clocker; PRODUCT_NAME = Clocker; - PROVISIONING_PROFILE = "1885f3d2-2a35-4a0b-b465-4c0119f4bbaf"; + PROVISIONING_PROFILE = ""; WRAPPER_EXTENSION = app; }; name = Distribution; @@ -447,7 +487,7 @@ CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application: Abhishek Banthia (AJS5SNW8EY)"; + CODE_SIGN_IDENTITY = "Mac Developer: Abhishek Banthia (75WFZYE9LW)"; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -471,7 +511,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.10; ONLY_ACTIVE_ARCH = YES; - PROVISIONING_PROFILE = "1885f3d2-2a35-4a0b-b465-4c0119f4bbaf"; + PROVISIONING_PROFILE = ""; SDKROOT = macosx; }; name = Debug; @@ -487,7 +527,7 @@ CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application: Abhishek Banthia (AJS5SNW8EY)"; + CODE_SIGN_IDENTITY = "Mac Developer: Abhishek Banthia (75WFZYE9LW)"; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -503,7 +543,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.10; - PROVISIONING_PROFILE = "1885f3d2-2a35-4a0b-b465-4c0119f4bbaf"; + PROVISIONING_PROFILE = ""; SDKROOT = macosx; }; name = Release; @@ -514,7 +554,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_ENTITLEMENTS = Clocker/Clocker.entitlements; - CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application: Abhishek Banthia (AJS5SNW8EY)"; + CODE_SIGN_IDENTITY = "Mac Developer: Abhishek Banthia (75WFZYE9LW)"; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = ( @@ -527,7 +567,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_BUNDLE_IDENTIFIER = com.abhishek.Clocker; PRODUCT_NAME = Clocker; - PROVISIONING_PROFILE = "1885f3d2-2a35-4a0b-b465-4c0119f4bbaf"; + PROVISIONING_PROFILE = ""; WRAPPER_EXTENSION = app; }; name = Debug; @@ -538,7 +578,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_ENTITLEMENTS = Clocker/Clocker.entitlements; - CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application: Abhishek Banthia (AJS5SNW8EY)"; + CODE_SIGN_IDENTITY = "Mac Developer: Abhishek Banthia (75WFZYE9LW)"; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -550,7 +590,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_BUNDLE_IDENTIFIER = com.abhishek.Clocker; PRODUCT_NAME = Clocker; - PROVISIONING_PROFILE = "1885f3d2-2a35-4a0b-b465-4c0119f4bbaf"; + PROVISIONING_PROFILE = ""; WRAPPER_EXTENSION = app; }; name = Release; diff --git a/Clocker.xcodeproj/project.xcworkspace/xcuserdata/abhishekbanthia.xcuserdatad/UserInterfaceState.xcuserstate b/Clocker.xcodeproj/project.xcworkspace/xcuserdata/abhishekbanthia.xcuserdatad/UserInterfaceState.xcuserstate index 2d21c7318493355b22568a145c99563779bfae80..d9ca43634260e1d574e63fbc4c7cf1c9d6afc4b7 100644 GIT binary patch literal 111741 zcmdQs2Y?er*E=)2$tJs-Y;s9RLFriFj_UUbqrt^$Ibxmny#hA{OMHd8$Yiq`KF03w|S_+Rxbgr$evU6y`@{Km*yPS~| zxfssDIk_{qGr6<4v$<|ucP^HT<9cxMTr$^_JBKUaMsOp!QQT;53^$e=$BpMEa1*(i z+$?T3H;0?c&Ew{C7jhSI8b`T{xhuFUxof$bxm&nfx!btgxux7HZZ&row~o7qyPtc2 z+stj@p5dP5p5vb9UgqBCKHxs&KH~OqA9J5@`?&+$_uLQMkK9k(&)hHE9|$3g2;z|i zS&VUeSuILQZ4RuGcCNk0j|K6cs8DoufvP*9e62T zhVR77aRXk3H{wnBUVI;Z2yez)@N@Wi`~rRvzl2}Lui!WE4!j$`i{HZ^<4^Ht_#plg zO~i-sxA;5!6aE?hf`7$-5=;oO5|!A9oy3rKq&?|CI+9N0EOIvKLDEP%$sm~|i)54j zWB?gLMv$?jkQ9+(GL4jx3&}-9Ba~cBE+Lna%g8O{R&pD;oh%`Dkfmf9SwU8kN64dO zGucA6l5J!=d5keE`0jixAIJCLWBGCXB;LTqFzM8M$Yxz2U20xF#n7@R-lE02$#NW){!8h>h_znC6{AT`1{we-x{$>6Z{#AZA z{}#W8|B(NP-^YK|9p|>I1kYgBN7-$%37-<+~7;TtfC^Aeo zOf!@j$_+J!TEi^Ee8Yu?iwu_;78tHFTxVEhSZuh(u*9(3u)?s?u*Pt=;a6;fRql@`Njg{MB^l*-*~>U z&{$%uFjg9?jMI(P#u>)h#!HNs8m};3ZG70c#kke@xbX?&Gsb6)FB)GmzGi&gxXbva zaj)@hL zi*v-e;yh6kFBLBn7mL@6H;6ZiH;Ffkw~Ncfb>e#QZt)&*gLt2Kzqn1@Eql(=5|G(-o#GO$$wnO-oHHOe;-yn>Lvq zFgsG)5XLjg!Vp6Qqe!p%jp&OVv`1R4dg)Nvoy1r1jFn(i74%(hJg?(r)P;>0RkP=_Bb&=^N==>35lvd0CZh zvP*6w`{Xm^Gv%}7v*m7b4>?}$DW4;sEBBH!l6-+&A5-f?9R7;xW9Lu?uK9)>Nt|iYhz%tM>)RJ!*VHs%|YZ+&mWbs>yEhUzz zmQqW(rNUBesj#g+w@%Pm)1uCXk#EVkTax!H2NWr^iZ%W_MDWtC;E zWu0Y%WuxVO%LA52ERR~YS+-lAv^-^b&hotFWy>p;H!M3WyDe{7-m$!E`Oxx_WxwTs z<#Wpymai;dTfVpaVEM)JtL0D25i7CsR?%v*DprftZjG_FvAV5ot*2Q#SUXy~TFLax>p9lm);`u8Yp%7wb%1qI`}I@UVTI>}mOEw)avPPLX< z%dOL`)z%r-nbx`1dDbheS6Z*KUTwX_daLy|>+RMh);p|At;?+Itn00JTko-Mux_+& zvfgXmX5DUm%=)sv~cUX5?cUj-Geq`Ne{n+}6b-(q1^;7F-*6*!9Sbwzs zq!N`^1=XP1)fm;GI@JzpN41mMS&df{)I>E&?XC7vGu6TB5Ot`UuTD@Ws*_Z|I!!H8 z%hlQH9CfZbPo1w`s9vOAtzM%pRIgQUSC^=Fs7uwg>N<73`mp+l`lz~DeO7%=eO`S* zeN)}7zNLPwexmMI52&B2pQ#7cAJiY!pVXgiyiKqfY(|@CGug~G$=1f^ws~w`TUXl| zwli&K*-~t&wlrJ1EytE?%d_>h71&1DM%qT%ifqNU5?jDF-BxX@vDMl%8?{|*yTo># zZINxU?RwiX+nu)MwiUK}Y#VGFZJTUcZQE?yZI9Vrvb}73#rCT0ZQDDxcWv+44%$Aq zePKIf``Px3?N__OZnTSbhuvv++1uDV**n|2*c0rD_9T0^X-N9a(jin(mvNd&pzLNq5UfR)%I)b3+>n1ud^?*FSakWFSFliUvIzLevf^F zeY1UweXD(&{RR7r_LuB$+4tD@+V|TJ*gv&@X8+#)gZ)SQPcbBhj}c-FG4`047)OjV zrbA4}m`*XBW8z~HViIGLVtU8)iOGz~iWw3!G$uc0Sj@zjNiqJI^JB_l%3~^GDr4rx z%!`>Hb7jm`F;~Z26LV|KZ85jUEQz@*W=+i6m~}A^#XKDINX(-#&%`_%^IXi%m|Zb% z#_W#S7xQtu!A_P4%K0E*d3=k+Bw=gIygEyIypK!;vET& zL`RaNx1*0E(~;#E;uz}4cMNk(bWC#i9n&0Tj&jFr#~jC8$2`Y;$AylI9Gc@A$3n-o zj_Vvt9CtXDI+i)sIo3PwcHHB5)UnyI#j(}#yyFGOi;kBZZ#nij_B!5n9B_Q<_{?$8 z@q^<>$4`!*oxD?U8k|OFjML$CI$h3=&Q8wG&MwXbXQDI7ne0q)raIG{y`BA?1Dpe$ zqn%@%W1Zui=Q~TB0cWYR#yQhD%Q??E-$|VpI~O?@JFj=%;Jnd!lk;Zh9nPiBmCkj} z_0GGU_c%8=A96nIe9rm2^9ARN&X=4oJ700W;oRZe?R?w$zH^`Rfb)>^OXp$d&(2?* zzdC<&{_f&jyvyV=yWB31%j@#F+PY42o$l)FI?I*dN_6#fo#Q&!)yI|V%5(K~4Rz(a zhPj5j3S6UIrLGHH(_Ce)a#w|`(pBY}?waYE<(luh%(cLEx$6qoBG+QqO|IKqOI<5n z^{xij2G>T{CfB{L`&qXZ~u9sb}yLPtuu+7J94zxMg=1`lj+I-vQ zhc-XA`K`^LZsg|OMz`6mxK($I+vWDS+q&DiJG#5L&vbWl$GH>S$?i0FPj@eOA9uDp z&)wfW$UW3O+&$7g#y#FW$zA9!aZhny;4XJpxog}r+_T;D+!whoc3N(|KZ_0#AEQ7JhI2?v3r~zx5wu>-P6I-*>i^HY)`Bw z-jn1>^<;R?_4M{+d2&7dJOe#LJi|OAJfl71JQF?Vdx|}iJ*A#9Po<~YQ|FoGnd`aG zLp_&zF85sJS?F2hxxsU@=QhtBo;y7&J*zxxJnKChJokDY@I36zz2|t(^JaQ;ynVd`yo0^@-U9C^?^y2yuisnb4S1(| zr+F*9)4jFcncg|x`CiR?iFbkbO7At^>%7-{Z}Q&iUE*ElUEyu;-sN5Ay~n%Bd%yP~ z@1x$W-p9O8dY|z=?|sSps`m}=F7I33x4rLqKlFa=J>Wg)J>>n$`>po}@6X=fynp(z zPxQ$?#n;Z)-q*p`(bvh>+1JI_)pxcp&X?#*@+JGyedqal`?7sGzC2%F-$36m-*8`n zZ;EfKuhe&eZnSMICuRr;!Y(|y&x8egq%o=@{p-(|i9zH5Eg`4;&W`>yxh?pxwp z;R;XjmgFIhC_%JVh64@qV>)LUK-aLT*ZY zY)(#ka%^&HPGW3ULUM9!QgU8WN=8azQg&{xUv>1)$sJu;J*}pyusD!YSzK2hsHhEL zc5$b3UGL)BaBj}Sc{v}~mOD)oG=pZ;M9rj`HR&#{9oL@g03@8ob>_NgvZiQ^7)et# zo0j5N-3)$dMM>q%5rsurh1LCQMwQl-7L^4ig+IuvE-VlD)ei7rXmv@TI#3cO2)>hD zSy5YESyl!m55L+yl3E>X)8`{AN~hNa`j-F$rISko)qb@d49_gCg~CYd5dEqrOvQ-G z%Ce#e`uys7k;tMb@#p2`r6p(QB*kVXq-Dn@=Vm0uW@W@D#>VI7B_wCWXC%bO=ZJpQ zId^V+_x8#2ySJa4keCiXrllp#pT8qGs|j4v3XrCxS$A+LTq>8wrH|7mv;xF2M*lHT z1M{9)U0pbPB@Du;OD1&Ct1AU#{yqt`~P6*PH9ZWpY_uHkZTYa(S9vi_sjK zQ*&u;G`Hr_yqa$v*AHfC05^~u#0}<#z})3?!?dR`SM8|Mz)T%>7_N>kYPzFlASX~$I;A2C!UP5;Cs0&3WeS`75UDz{ z(m)MUIDnB?S{BGJterYu|8-DdQ6Ow-lei1GuIo8JcRp9h6>-H}2^Zidb5ppfT&Z@N zcDmM1Yp-?CI%=J?&RQ3(t9HhEZW>p{l?SCdfSb-$b2VHo*I7GLOVuu5a)tlR)Na?l zqez5b!60lQ5+hi50WG@p23M8@`~@J*lEUheab-bKj;Ia<*hDbF>!ZMIN9iR%{r7^p zqH_4+xCj`kGa6>&c-`P5#`O(Ul-7Y|#lY~Kz~sWZvf3bl`UJFZe3Z|y)zpGz4G&aR z2WsGl!dj?6!WUIWR){C|t&nP7!d=F7UBO+dowb5npq;JrK59gm?f$ia@*3S1uHqK1 zuweI>VuTdZ~0VpnoEa5rjkS`RILV$P@$k!G&K?`-l17fz`t zt*t8wj1BYNsn6Uhj{VV%YzcSAgdqhvrQj1PD+;T@s+MpWA$-fY6;b$Ba`jrGmc*Q? zH7FfjwHS|``c!KXVApVKCk-hWTvuBNjxA`e_1qd}usYWD+}$AH@PH=t_1yYM0yc1) zn8Y?}X)CyUwR9%2F8Wk8+SJjeA;iIh+`|mOLt4fP?h&o0mNH^+VQEF^)2-a&oV}jg z#%<>w)6UV()q2%)Pk=XgN;?mXIOf5^x)^fC5 zE$=RFH}@8|huh1&&Ar3DtM%3TX$4w|Hd+g4leLry%%F1$YYRurt_qCTX$n#cu_rTF z6=#zYt+rr=x~G9pm>LcV1|Ux;{I&9#FZ5aNEU*Grd~Z^~@uAN~4j%*&rK+x|thBf> zNJHp}Esm|Jtg9{#gjoKR`;xP-;y&XJa-VZwaEG-1+5l~!Hb@)1iaX4G1z!0Z?ptk$ zmJiW%m^NICADa!vomW{_0#bM9SC^K9=7w;NC@l}v)E1UkP3%`%638qo>t9n-$EK%q zvw@9aH+yPfbsvw?Hd z6O&WBw@*x&-|W*G_%xyE3-h~2eU~9?4J}Klm@2d%QZT5pxDb9g`)Fv>GEM|-5bIew z9Xi1f;S-Wl)6zl&GeYCfF+;>>5&lo^2zZjP8z=~hv7Y-Aaly#0|K2Hct9Q{&TWT(x zFgGD7B^CHjOGuhO4t~irA37bi^Q&!vj3%?zWfuH?eqm|#O4OdqIL??xDo{t%33;{g+5~Ov_$F*M zsu&t@CN}^EOaj+9c64@GW%0B?waV>8aUlC1C>|xC#PKDK`7#*(*xHaGYK2;n#`)Dz zlfg0d?9rpg$Qp>AJqnAamex!SOe=y+X=-U<56EDq!CqaDM$oZ?3n9K%hkgzJ+d>+; zEK*P^gcOK-p{WZ^`$`01r}dBYZ)TvLe)Y`eli4KFXivEkox{ML@OT&+8;pW19``IP zE)G=H=2TZ!^{lR(*|P+G7+Mvm4(caR(KW1C150b;bk`l?C$1pqGnwbxiF$*~`=CUW zh2q&dsHm_eFdqJ`4wM0?83B#crf7vad$}lYOKZ`Zp%ul0~MpH3gPeC z@x=^oMJ$F)b&|+=&|2vgKH=$cXsT{gho1>+KATL38LKcVaKuggwZLT&?n_rKX z!$hpqE`*7=^?#7Xp*3u()@m1pvp94&dH}LGbPw8qHlj`FUUVP2U(+UaXw41eC{%u)YNY>Aw7dd+adKNv0o<}ceS7=vi zS7}!_pqJ3gTs!otc8#_WaF^WGL`d6hmPnSQKiCym96Kuh?-~{;@%&o>*+jt}F+yTUt|Dp*!x#ShEi#G)22X zm(gLS^IvJVu^8eAmUV(LBrQD@LP9$89r}^$x)Oble$bX^cdSG|p`W#-+A^r61XsTK zl{KX-Jv-5*UB~l|tR5SJ{U=5Y_7Pa&-Kk})#26E8x%P~fGB&del7|Xdt~CzDMl6Aw zz#=wbv$jH8snyqGNEER}YXCR#)c?RuU8kR z+G_1CZH=~8Tc@qp?glr3JK|2bGwy=B;xoWa+@n3HJ*GXbJ)u4MFLe_*0jGkSz==2s zC*u@tgSJuIq}|(q({MW14)@gV)9wd1@xVXnCbk^PQ$~%EC(KPu$Vg(Vl%%BjW9KF% zB&Rp?5;zCvGB3dm(6(t01-*nnXaRTtm$VWO#DlblwasDAkB8!65T|gy_Q(o6TzixS zI(tR1I@q|j_Oo)PUp=%DB>qa_%{eHVx@f^<*elXVpRC z6sTs&qh7|!1_PKJqsS< z8!cXkHwPRao~u3AH02lK1;?{ud^x@XUx}~6SL18&LhX6&1??m4u(n_OO8YvP3l&$E z#}!spmBF&I*=#1oWmgtg7RHU~pB18XF}|7E*Y)@Yd?UU|dr^Byds%y>0pEge#W&&G zwO6&*wO6#an0(;^cpBJKKT^_yK(U0M=esj@{%Qv`ywXIO9Yt1D-K z>aqHE|E%o7iW!BlZxK0I7tRVMoR!*Znsr=NO+{=VJGMMyN{H;$cpcZZ9^Zx6;I-Nt z+74}JJzkIR#`kEuv^TZgOb%`OXAP~ZEi0`EL_=p~+ALTKO>6$xGYFQ611l1IEN=&j=;KcqiVa^Axep!EfO`aC+%&@LY$qkHK^8`^&`(3>i^9{s4c7Khi$Y zKGi-CuZ%#U_d``+zjlDtDx58nkhoc;MJjGwAmPvP7clrU?VvWcfax;|7C`Vh5XWsmZw*jpJaMUs+w-KC5nuUyYB-m6{u5^M!ekk?@Kfe;;%{ zU+VU71SXAe+PBTKq@;vs=R&yf8i<)lct26JpS3@<0~8sw zlre(>lN)!4*p^0k`yjkaF-~6!vYnH$!%L@34GwNpapE8zhQ~=W%)iu}WG{Tp3)XM}5d_ zwg7|+6`tbi(kd_-um@MvkRWunzz@;cnRJD~N4jW#t{`V0?-RF(yx91s41%|?i~fn-pWMk?EwG)R0<=Y!ulkilN9sk&_}9MQ!dPGssLbi_9i-$XqgyA~!`H zDN3U#oud8}jiM+hgwvudNiUbe{Kpl{E-$JqgKExEKF=zwEuNYOi9$FA1xmu-hMeIj zUklax+aBffppE!d-%&mu0XqjrrzspIL-V+RT+5_&Ik|#dNv9hetvEVpNWbpT_NnYOT6iY}Beo6IJ{wVt6BWwZ7D z`&LHvgU$Uy*xG>+Y?n88Ru$}*21Oi>q#x>9roMQ2iU7DZ=M)NL)@-0Of6!oO&9E#4Rs24@&Q3OG%4@H@4!4!TVKa!u| z-(SeD@b~Y`2(l>3rYM*Fm`71x_HRFC7wjxjZgq8KwH~8j6EnAh1^g0rG^BBVbU5r{ z!z99ku)V-&rp4@8*wq9#S=rZukvwa*uA;#NrO^O%MPuniGjMDuJYy%102yS{&8dND zh(sSU*NCc9ViN2$rY2`Jo+aWiAIYB+(WnKZzZ9I&?G!vd!xD418fnS0yiC078 zq43Vf1pSl#fh+O@kN!*Jobqk?PF&a3{Av8@d^^59`GSW4IDn#o6b+(iaBzx-tj7EK zE^wrv9e*bHeMsPjLUI7&AE|qNHUVH}#nV{X4UUnpee|IEu$2%ye*z~gMpPHV{yK;y zXpbPMHaS^+!&b{2EPSS0d=MOXUFK_t*Hu)&gl4ggI`|TE7Hn$RN5O;^LLGeE`1KG= z3498y(D+0?iBF~|pQ2$D4X@`@xz0Sq^#T^LMli);^BN>BJpb(MieF8D=lu$21p33V zlhVSnve}`}v-3v=$4_B68@G3Y{OE2ocUGXdj#UA3D`u2dS5~kycbO%y2UG)Ih;6Pj zH^g>D`15%43jCG!1G}>24-Xr)?;6wP46iryc14R>$;Y0ZG{DhDXiQqIT0k*_bBRM^vpThLA zkT2qk`4T?BPp0U6iV7(zqNtdn5{d$=`Kf#3E?He?t?>8!4)2LU{{+TNBFLDXMG&xRhTGm27?? z%c9G)@$gd+ZV+^coK^f?O_0}6G`$J(dj9UHB?Z5czZXyimlXVc6xB2?DfkDuh4uVH z{KNbs6hRE1Nzt6}x`N-rZ;xCm@Q?A2Q&dOM45pSWvkXs*e&(y}!^o8e{|x_p)Yo6& zU!-UjMYG|A8q=2Wxyep_7L`PO^EG}))HiqXyC|AV(Yz4i@S#N=@$BHY;b>IwKrp|T zf0qgGZT=mKU_LKe$?|QMWiwyZE*O!T`8~EI)eADE}`gBxYA3}0*XKpub}8kimqA%Zux8e8~$7V zJN|qA2mVLqpRcCI>#6Z3YOJTmjnw!$HNL^5;K+hgdef>{m8vFq0vIa8u(ShDyV`@unRGQgQA-#dYNLC z;%rK8p~5#*_=O68P$O(NL!gRUHAWK?H>h$-h%h~s8CF+XJZ(^ACs$XN#|GK)t7-aof`2DLA(>s#FQ}_x^|ltZ zG}qy6Mb~ zkjg526y4%i6KBQFVid;$32?G0H8mkSFFQRmHZMLs0ZzeZ<;JF`$LGeTWThviXXPYh zOu< z(2^E_60-8Lr~JOIkeiA~Q*%!^G-Ow7!VPlU5Rc^Q#_a&UCWAieT)3Q@C^Rm)2av}i@&;i}q0#H&~azc7qZcc1UdP;6= zat2%%$VkY_jLphQjR!{4(sHsBBLNN70j+2OC?z#FH9kE%Jr)+TsjoImnF!G(rbd-vSU^T*!>i%8rjs%E`_G86|=HG7~ehvNO`6 zW^JqvXjKb98R;-LS$WB^xjCsRvB`-!8L^qU85yyO@kzOG8X+e&DK8=9u_g$UAU+Ed zDY|Qg0ELS+%)^8?YeKFhycQ28zd|uolLbiM)@s%_VM*RYn1bSjsX{62PR0qT0vs4n z1Hsx)aLo{`wT^{yKwuU-@JP|!8YhCTQl~60x!Ev+jS5^u$xQxgL`lwmLY`t0%;TuB?)eCckxoq*xswu5} z-ui*PknrXUEOiqg)NfcJKdy0=L_*9z4t6g=05 zP%jp4V5lL8+`mGA?CyaRL47Mj4R9Z94Rs#@ypfK22}KVzpvda4QW#3-)b z72aj2CJr@Qp9D*4k5kmV)_@+r{-%>ac)d>Cv z2L4BiUTh8gSjZ?ECwvt}FExQb0^p(0ADVCjHpr0G7>I#42nK_}Xb=r1gV_K>UZLnU zia1$2PlFi^EVXzMA7dQBZ>_a zOHpCX;MM)wt9~_Q@(G>PErN38wAf-+VTh}$m=fV^4efMTulv=45;8~mk*zC!E=dst;`A1hGOCvjGDOr3R1JN#Ckui)#1m1euAf$D`&zcd~sz(b2j31M7#ZJ{&5ifzXaACO_Gjgk6-Qgx6!mR8RN%wz+WE>GJ7h#4HJd6(B(S4F$XYI7^)bVl@uLX zVVF+QmnSljb&Q1>6djIcVUA(0&cfFeeHCQkWVta$woAT9%MFpO87^jIQ;NP_VYq~% z?@om5%Nf~MQ1pE?+1D5r>SRNZ`yoj7De#YsgK0;;=w}XbaJ}KiCjEf5`p+T#UaEu(QAMSn)qxWTY7 zNF(MbIufMuqJ^lX%udCc&*PMbh6|F>z2 za_fvX%NfGhxDaj67@ljQ?RkogA=+MIv_VxyjHc~%!y7tnW{OQg+D=YP2ny}06i?`k zv0=Ai4m9*TXd4PP0)Hhg3F*6^L-dx}q^xHHAwC{Cm} zo#Ninso*ccV2JI0b?nIthJorh*w!hnErSgas6s}ji+}3)9DeoW9Pt_s)y*!6@tIXs zJ^EKnu8a$Ij*LKPBsxOZ@uPj~=~h(M7^seI9gC=Aar@QLCsT|^!KUcgync1?aj><{ zlb&-oa&{CPb{$7szdG=5;Lub32$|^_lF?~|!)f(Km$8k}P4Vdzx1+dyJ=$yZ8QW@$ zDDFUUM;5f$Mw~x?Q2&Av{@k4YBZdz57vv7g%^uNz=n((FT*y?~w-_+0e?kAOLAk?W zls=>-jNCE#nNZaT!HC#b3SMeRN`c+PpyeAo!6u{;%%@Xuj~TWljc0J|OiQCLGoEdX zV|;Wob~naS+=b$<6raKPh&LuMKF*{#c>TX64bAvyIiMMl$7NI}IE@huW)A0PU{jnC zd`^(yR<8dA*$gq#+nCK5>0`_^W>MUoVqhnZF_LS{V~q5mIR2lQkkn+h-=7}p9bz2J z_!~lTLYTi{Q4=!4IEL{t(m2XEn&KpilPOMNe2g=WXMChmoc2%f(Oj{LqD~kX1IAKD z_GIG}<5Y?>DDFw|IgIRS#xh3sxfJ*MC&+Ft{u(C!T8hsLi+^U6_~#feY@H9yNEsh} zD9&VjM3`K26qhj+3nYnP&|p^ z^C>Q(xP;=#6vI4Rz|gET)*Bm)tBk9ScNy0h*BaLu*BkFP-ecTg+-Tfnyw`Z2@qXh2 z#s?`bqgbQ(W{THS{20YAP`s1k4=DbO;;$+Gof3f(DT#pr6)3_xGz4jsyC{ zmf8`lu=XB<0~K}6QNEy~9Ozf`j)SuG*cgiUt%~YZ9r$3sT6`SfC&mx-7HFK9=2!Zf zv$a#lJk+lSP73A-Nw#{DKT<*V=(vZSEUqsoJW;OS(=ituzbJR?$qZC9VmzAG1TQ>N zJo04aZwZ88kV|R*X*c=-8(D z)j`K$=~!mKni9={rbJB)>B}^+t=NI<+8~}Lo-Vc%+f!UlaRtSd6jwE%y<#V^z1W3i zb<^Pih1-*n8{4P)7GmSVMeHudL&hn_ig6;WQK~7fp}4kQOb`?CJrvhbJmXZ|Hxx6( zo>52f#9rcg(GN03xGmHmW{KHij+jgFEQ)7SJcr`BaMe)kC-xTyXzx-ykK*|hUv%nj z8^R^SWVi&I9G@JzWGD`YnwD5V@r9aoSm<)0I9i0&Q^XBQalCjwV_nBGcjK-ULjs7UPbYB6oXkUrucfMCkw@E#p{@!+(7Y-6s`fEvRkR3C-Klc zBRM`HtS7fL=}E}smWX#mGj^xgz{p=Nt`Jv>^%UPi@vRi!M)BqZ4_@ml?suN2D$)u z)>D%7GO4L;3sIWdn;>IfHdRj>TO+%p{h$-JRjN)f0hV~HS#-;X;9Wpz%u@rPHGL?DC z1X=|H-#eblykL4Unu1qMI~WD6c~jF)(=PFV2?X>Z#UBN|=_esE?PYeUhrQ4Yyl48T z6&GjPXZo1QW*@~LN6O|?(`V6yd|^5i{opIp_dwavywZ=RpG-e9+3cqnf&d)zm^3%! zJ(AMH2K9RjI?bFJMIkctW)l-Z>uV9SB(^sz%zqpVu0;-oJ%U*^I~c>w76@ji*~J+C zoZ>Gc7&d#&zG$?ko7+V{=x9EJ(b0NNZ$8U>wz(T)_)CfpQ@FntGK`4a+uVb(tLNU0 z(_&6CgO`hNm*zC{xeQHfnYX!@`8?5Y?nCi66n_`Yynk$*adS3+Hs??beJI8i_m7Vq zoEDp%5$cd)?q?pvWYH`gHV-xrVd?Pq6#o!RheJdSHy1<`HOd_A%FN@;L08s#;%Y85 z7nzHhFn*%=XNrG=m;_#eHMUKR*CU5{3fP5ts=1V62)Mr<$1cnjW^i(mQmQu3WKwD^ z^EA&g&lc;=b1D9V;y;=DASfiI3tLXW#b&qx)*=@)Uv9pFsmT!vy*--3jQJY#!e~Mk znHNVtxX}zZz>elW%}dO8n3sZN2&M#HLB}&SNlJ@eqM2EXon~sX%Dg%n%~~@!ucHWH zqj?hu;66$Wl!!qAz&X(1s>%EyQQ&UxLUUOJJz2ELyk~wt8qG)M z1AxZ7&-}6Z6Z3vbR7z}=*eQu=Fn?RIF7cB1LDPl2MAzJ|#(F*{38+ zie!;s8|ySmPN$?DCG8>mlMXJBQ|cmhmClgPq@)WaT`4((k~15mv!!m*nNlnzXHjxCJfS4G)g8X0ajHvML6ek{ znYBm7YAIcU7*H=|NIj)UGrC!o`Od;YZ>2b;wB3H_bGA^mVG$8uHU}-p$ z=n!eBlrIgVB!QAdN|Go^W(qMv8Yzup3XwudDkZSzeyTcYv6=;}PvNRmD4mcdwG?HM zR2)tIWN8{Be~L6!DwQsvB!iNklz^DeZIH^Oa_Iu8l9FDO^oA#t_R^3l><=^~~Z^Q8IGg_QK6B$JY?dP$SmI-9_)#+*~88&^nIM$7UV zDLNWTi=>;Fa2HG0OE*Y2Qj$kWUrPE>(x2(ZEz+&hZA>=?P%@B`A*W6^CV_4wGG~#T zm=e|w2&*fll~O$=gD4ps<%uH}av@K$Mp_%q?A;RFw{AV+qP^1nV!iYr1 zd8qV=w6&F>Ds7Xtvk3zO8Xgf;r6;AQqR~DpJs17pMd>w0N9*+==?!Uzw3Eqr1SKOW z853NTq$IKi0!?=E7L&vtX)h(CC>afsIMzB=dSCh=nu2}Or;LKuQdH?P>7eMBzMy0r zB@g_5Zaa!0w7++K!|Q%cD+ctXka|Ghtv zyMx?ih;kReM7OAv%Ly`T2qGuSNpdnJWt5atQc*9b%4tkJ!53DYDt{uMC-;t)WtI$w z(ISPLCl6%8?JM__`^(@pswt_V(6Efufj^N4%R}U$Y$|6^0;)3W)cF&LH9-|g4|@}N zG>bJ+iK#qZo)AsGUoK&q*xD*Z4#<=8x2JcZf!(^u9Rz9aUyc9 zT*qc<9wqZ5oQOPIjxOrR^X2F*37N{U>N%Pdk*|=il&@lfy@(Qx5*l30vSL`oVphJk zr2wv%;p$}M{M{@sVe@y3e5-t$3@lzk33!CdC|S@T-ytuRm&tchaycbeQgRg~*Zl*= zv6>mjU6fn_#xZP0cI@Dc*x6~J%jWWWc_TB9W%51ph9HSoQ*uqcyh*;7iG3j@*Pb%t zctnQlnvt^HDsPK^@VE@?uLk)E`APXH`DscZ_$;R6dP;6!#_^o|y!-;2LkPn+QF8OC zG>#-aGf&P)*H`!Q8%Kee%ch zC-Q#zfc&ZanS4e5nB!4L%mcNp}mcNm|mA{j}mw%9dlz)7|^f^j7*PnM#(Dt>h@VN}keJ>8JEp z1}FoSLCRodh%!{kSB5FWl>%jiGEy0(j8?`dW0i5rcx8ezQJJLpmGhNCrAR4ON|b;y zS(&0tRZ5i$lxa$tQm#}el}eQ|U8z=Tlv<@unW4;7W+}6kIm%pRo-$v#P`OCa6slaT zT%ug6T&65gE?2Hlu2im4u2!y57An^&*C~sX#me={4a$wmP0G#6Ey}IRZOZMGA4B;G zlrN!t8Rcs!KZ`;?A^uXzUqSh6D8GpEH&Xr<$}ge(os?fm`L&e4hw}GQ{s9Voc=)Z9 ze~j|aQfQaM@1Xo{%D+wd_bI=R@&_pYIpq&i{#(lbNcmqW|0fkN6$})bn+O&v*eLWZ z5!_VpQK20bI#J;aDs-bl92F9&(31+isE|p8Tq^XV!aynvr9uG}MpI!tg|-7iF%_mz zVHy=GsZc|O8B~}<;a*g=KeRCt>T?^9tP6%J70bI8t`nrA3?2G6FD+x+Ub(AgBYrU5Sq z3pSLgX?(X5w8HMu*qf{d-V6k-l%cO|b&q^_zYVm2DzE7=xUhI=!5FyMp+ATiQ;;(- z^l?IbTtY%zP06$#1+(F0LghUMl@>vx%-KDHeQIX1w|w>hzsz_ycL`MdFMvf=56FUv8AHOP(M6pdr0UbzYhxF}ly;CdVx>PCqIj#tFr!3GT ze6*9b?I1pfs$(&Xu)HS}ejo%Mh3UR5(2h!WTvI);1v>b?IVf#t!;+h|Gc z*7?|YvTp9N1F)sgRiZe`E4`y*x%cm#J&n-F9O!}yF9;4qYw?FVn*06gh|r|`EklMD zt>F4gvg&GUp~Xbh{O{LMJ$SNCptkTCQS$p-$M&#a9eGk1%YsfLQ=mfNOdj*A5B)0y2Lzu$dO18$Q&kC#x}wuBi+)R)JmFWj|0|d|aV>y;z0lY(__pEZ zOzD@R$y3ModB;i?GG{;|UY3u9PN~=Ec~Yb@So9mwkxwXVI@mljlyElZ|xg zmNvTMd%>@s`j^o~$+fMH_@%#>tsKLrTRP|%UOCknZuoY{u`^stSDl{MPF6fSMy6)z zrsI0!_zQ?*8A$U*SCr<&>nL{m)xwZt`CEC%iHb2r$NQ#Vy)T3}!lwTBVeQ1cb1R;u zr_RV*e)Zx15F<@m7Zsf?y>)K({BLG|>}GyZVf9f;ftDg2-KVEI=!dVM9w+Ee z(djw(S6d*2N|P-sc$P99^cQ}0>fe)Wbz#lavf1!H&zgubZ>Vma9r0;Y0tYWWgAUf@ zOTXIxIOvb%Bgetz(Ck22S&JpPWrhy_E5Dlkm*9saR}SUBs4|9St`7Mdzj}WN@;_?c zCze6zo$RBnTGKiC?qua)Cs?etT&Cmw!LL5?uaMyX!$CHC6H~N2uhRMY=~R1<@YU<% zc#rFJdVV?nz4F#=EMx=C6Zt4ZzEMZ=+rK4q`+rPkb#>wF=o!3CXXcNSwa99=z>ErQ z%XC~v{%V0YG&{!$Y4t%gJUaeL`NSe;Kj?6lnK?wREt9fNTEg3XEX z5S>~_sq=k0D&z4BHmx%gnw1t^EsmCQJgg%${ng#a=$?74?j=~Z>Nup6xgd#>+7mhg z<*(|p&O}5QZMC#&c~(bb{co*%GRp$+nvp1Zy`(c@J5}4kQOI7`k;R;>Fn^-S>zg`W z=f7oFv%i; zw@ReL>&gO+Z|sV4a%aTq(gF84evCdQ z;O5QYjy5ko9bLk|#mk&{niC8|(Z1T+UgsvsuTDA6ten_VE4(k)VnNi(F+OV-9ec{j z_6?Da)Oxm#B+ajCAr>Q69;a#xu&$=MM`=ZISzSp0vNrZc;hJcB=%JI9ar~9%iAg?! zr|@bj%10*a2+#SeyS$;LZuDw83PpyFqSx_JoET57So?W8iry!&kQ~KAwhlk@zZG^_ zQ9N3``ssXRpA2^!C7{7N;M~7g{y9da%sO1h(D(S|pJO@nqn+1@VrI0Cs{g-b&3a;a zgI?S}T7a6M^EB|kmpFvh;nA90sPi-UzqJ9=cp^3`5>3`Q8G33@tw*7prlTBo>XM@< zd#cjW75LR>{)e&l=yz>SJUL?FGY~wo0B@TPZi!b$pN+KE>Aa2ftC=C*{z3xVqMmM@ zqr)A2vNj=_&fGLE#`Feu*7;V}New6BB%F*>v<=!uZIgCygY^>YrCdAf0?Lo2{5Vaf z{CMaL3NQT0PL_VKjEAms>Cn|8J~egzIB18H2>rwoGv+tmqO@LPg?2*?)`iw-YUYUgGj zHNG1?dum~IVKLkk8eUj2B`~pHX-OcntgL@cOa4O}mr2JJ3+|@dTlW)7b1j8(*WH8T@ z2(Ltf-ff9&MiatrNOh^uEw6RURokkk0pNC&Ur70D8DO~9&)l2sied9&S%U9~EvlwL8F#qx@pZU(ev)p!5IYfh{-D33F33(x8b)LRtbN zI3a~;T}l(d$!Z1z+?sW&J=Jq`>jc+%GXo6P$q050D}N*=DA zNE}G{TPc4VgLJzNN#6HFH*=#WgjX7Y8YQPhP0}!R6a(6tRj8xYF#vQNUQU-Kc z5a{8)mp;9`J7{N0BD1#CcqY!o_$aXFs{sJpLOa#T>J**h<&<9$=6I{upMBxE>iD@S zaG$?>`}D-b@Vr#0(0-yptyHVj>1s9Q!C5y@eih|cH>kC0oeu0S%CBhz_77U^p+Byy ze;dMRLOf^|s9D%nRZYE&3Awd!qb^V{2O)zgtfTyT#>Cyaa&2F{@XhWM=BCFdgFb=r z$AfaEr=_sIQ|V#pT&Lc6RKPc>Hv?eMhYgh9$N+EBRRY!E^*m^8LNY}Agw*sD0GyV< z8d@c!h5;{A>lxrywYEWBrHlPO%HJQJ!!3u}zIAZc(?MNJNP~V1jh;olTV>sgTGz1q z)cb+P2PqH#e~5vCuFPNnhx6`ztZiW8+=PT=)|D?IBO`S_$Q7Ic7+P|Z(QZ*6KPvlA zs80gurz!s^!$H@lM<7lt4MkZ<31rN9pJ)`A(CHIS)-#?a~<_{ z^$nf-ZIs{M#QnidIqN2G4%%!|guB|Kz6X%hz3SWQJLbVuYRCI z0wSMjg!B)p@2?3Dm(Mt&&mZ(;4-4aS^($bZr73@{eggvjj`Gh@{&`0J3rxUUy;H>A zw$GrqWO8Z-xChvc1PLdlBqT)!WAzsmdMP!izpB5fzpH;x{w2!4O!-$R|7wGJ#Kv*$ zY?$(|QT}xX_>F%u7;hDqytCuT+2iJBq=ARaNK0o1p5L@QJO5(wn0Hf5tO20<)ruCt0kJ=W2))B z7t?!BjOjh5{r8#KT^3n1ChvFs@AutT5BvnN-C0?^FXi&H)N+37z32+v`@h zu5K|*X4``8iOCEb{_!`oJe2E^g7@dpd7<+Wd8Fw6ndttx6uHOHanDWp#|%2oJDR0R z!^g|PXPkd#3SAT`uk#BY^t#aH2xSSrS9JeU3gu^uM5E^g`SLH7EN^KAEn@*48dRaer!X}iwtd(k|xMCwUGwwKK$yQ9eP2RQZEd> z2&pU`ei7Y&l~R8*)!kHhXUbFaxF#X^Dw)U{8^&lJ*HB^ybjpk=kiv9C}CSok+Y} zbpKme6eL=>w^t^r^WstG&X7w|x%N&>Wd}KDT~ewX$`TXXgZ4nEybh_;2pRfV=;KIz zQdkZXmhMujMM~Wj*|_oXD|WKoPLsbhIl-KQ@B`jxxBvOjmysEC;s|{u^i|}(E-ad` z^pJ87H?-ZCxO3NM!{x34qm4YEBP4c^`flh)K{fq2^b;h0CM>;#rMHyW$JF%5isqUG zb0|qm^NuO}i*HQ%D)f8A1zjbC{t)`3F}qp%3QIpk`q#FDuf4mQuV1x``aMiRRHw*< zg@ko8#e@kua_jUFoX+OL^cin_>a?4LI98XrKvS#B}#dfQc!?@3?bN+=* z3Y(13slpO1EQ6&`e&AN-U)||X6z?>B#~@U(ZbFCD3(E}4MO^1l%m|x_xO`z5CM?6H zxDkeqU&cLr^-rmCdo`XFRU#{RIZ`CZg?#%uKFl4)@B9SOu`+BnLgxz0C}9~bh4SOI z#wudTo>!(AI?4gf|1Z8kF9=&KeHmk{N3!Fv6&I&ufOP^m5cA@F>Ny0KY(C4)wmu)wDdusdkB5ZTmc0_d=F~fF* zU5Q(+78a6rnsm!_GaDA1^1@eB%?_26LN>4y2pBBGZVbDv%Mk7iyB(2t3QM}MWJr;j zX4dwJd@(cGmks95xWlnp*nMH#huTGVeI)Er)7&g!$!<6I>+FPQN6j$Jl~>aFQtX+q z7rXS_OJTcBQMtl0qg~XO_SqM`KGxJPA<;iCguNNYm8e~0>-%9JVCqN0k|!+r(p2ub zm9to{D{p;ync+QooKVi5GSGQ@!sJ0x@cjQKjKid`?}epESY}Cy#iqpGFYLWwk7*}I zZpH#GjfG6Rn!kp1d7KpXR~W}h;UU6OA}pm+Xqi{&TM_xcnL_3MvD1n;Tni6+pcLLG zoCBrse!@~AER|B=Y$;d^mH`RL2$D;JPHW=u;oIU}4@Z#`tnNUI1tq89~DEGtF3CnURwBA&A$Cyc<{$j>HHBBB*rjF|% zvnqU%lo@Q04qqI;1er^PWreV;lrkF)nO|JF@V!S~VoVz+Hv@@@sq%P^-x*_FJi)(; z4_^^3NB_>DS{2U7&%wE+Sy+tIX5(m%gQ~(~TVFJ%Bj!$@A2)^{9aPFO;m4xd@xroN zSk_3@TBT~cA{)Lx_D%bob!mxmr8Z%lu~tn@#$t9aKAES6pA}T*+2Q9P^E_c$CoJow z%nhc@rN5lFc)Oula&m%7gHVI3c6v@4-a=ViG{gYc? z;}|B1b2$`E8E+iJj2oXwe`-JC48Jz~rY=R_9DWO;Zxa?Kz+XZ=fR1eo^-VQoeX)DktBZosVzPC%kUxt5$ z;BSQGEMYlY3O>gW{AHg$Pt2+@ZD)HCWDNZ&d|#JBe-Hlyp??Vr$#uRIdVyDHw+FRq zLn!y&%hTROUOo@VEo*n{;av%}_O$j=23h+E%SFO+u@riV>4MQ~ci#E{zjVdn2QFYQ zNbgMM(FA_>hu<1*?T=uq)oQcat-7#WCM=f=%VuHOa)mX*8fk`qtFUZCunhnIzvHuA zsyq9d=d9keW1a3z59@Gimk$=KF;?aSEAs(eZ-?~Fm8QdcfA&M$VpEh{HFcT^t>dl6 zj1X)%v`(}#BUqUcSVmnVgP{Y#%v%!Est;O`LDBdzkGLeSaDy2xriSg}(gcZ|uJB-+Ih+ zrR)&CsMK5KV+Cu2b%k}MwNY5^5Ehn*cL~egS6G{^JXWwWVx!nDY3#lKKNIVoJ!7Z7 z@z`8*@oNn1Nr{2$H>tvGu*kz?%adNANvq$hH-)AJd-!d=!FsFIG}x$az0JB4p@jBnVR=Rh zebx}V=cc1~O}fo+XiBQwO^omG?8W-|}AX!#><mv|-` z`=w;#6ee-MgH+ob+dO5&78{$meOqkvh2@V9S4P_w8n0wo_{hEdAg_A;v-g<2uTID2 z)-P({2I<?D+j3#~OQ?!ayKS>I*jCt93bngXrabc?tpqp0_&B6pw$Hmq+jzdQ-FA%aSle;7<83Dh)gn|?sG3lF2=(yowv%ip z+fK2aYCBD+J%!p!s5YSv5o(;A+hZ%FKgJc|5Z)*=Khff=hE=rtnuqKa)$2Af7=2cuc?CBR1q^QUIv-FnQy6U1ORZTTbW|N+NV}q3Tz2@e7 zjZS{s(Ok;~#=(pG^e(AtTwLR|#jAEiK)ddm=4Sb&g4wdqi|5-el%3@Qq4wTlyGW=! z2JrL?%`7W%ON-=7hVnE1CgWFiY?mpgZna%*+bq;0gc{y9-X~<6ZHE%J)pmt#yHNWI zwcl3TmA0#d8Y^Ev##3 zs;MsE+V>`It4xYZU}KV*IX-JbMnYoZxQuZLS!r1b38_iR87aJ7@B1rGy1V+Tq^|!e zq4QsjSQZfJzzpLCsD`?_q6RL$MlUmr&voy)#rC{V2a1qPPd{5m!;04EbmNZhXs!-5 zlDf&~=iN4*N(GK#ui0Mj_y=#<*bN7kc+bY_ME-%<+DH68hwWpb4sGlEvhA~w_>efI zm+f=g9@`hTy_HSI8=d5~P)7)LxKM`)m9NOM|J6XzX{?KvTMOH}pE>9F%=yOlgB*ds zwS8y%UZ^95I!dUcx7mK|_Kodlp^jILK|L(uduGxDid{cDbVxE5C^sxOa^NWsM zXy{X@mpzp6)ZW|P$9{ypuf3m86NH*5)Fh#f6YBWw_Aq<6-DpWL_yGpg1B}+*Fvxk`H(Gmr*y(S4J{)8p%xJ0{(>8jGovCJmw-4Bd zGjQ5R*vYq4p-%Ju(I1>boi5aAM!)=D zFB9aNuCDjgsvW(w8SmR#=jySICmd;7aTwYv;U ziM_PL5M{5hAE}JE(q3twZJ%SGYoBMIZ}$i_N2s|%rRAAI%@Zo^7F=nsvM;bNv{&0} z?2GJ+g<2@oBB53YwNj|Fg*r!Q9Ps|1t|x*e^a1ie*vckw`O$G1z>E1E#vE^=n|~IV z`N6a}K(`vvwba1;^YlCD3dP=NZ>CS#n}j-Ri@imtJdo;gg<@}&9c`_BolxCEEpP8= z8|{J~V&7zM6KaW2OSjsOl3lIrf44&MW$=miQ#!U3xG?!A_MT-wyJNDRXFuOJQ}k4N z*)Nj4^p)g?l$73xxHx{jX&YRzY>fNH*UXRX9CKH6KbR(`1B?L>y%jfFpeElvUNWbZlrSAK}(jtzbFXv8C4N4DPU5+|Xz=>0JZ_X;P|ddh1!`)GhYs zgu1+K{7XtNWuNl9{iQa(P#bG}5EY%5SC$_=Aub_0Had^bZ(6Dr*Q{Tkosr=wDt2Y% zR(Nt;&P-RaDe7hA)Eh%XdfH#HziNNY{<{4Q`~GuOvA=77&;Gvs1N(>ekL(}Y zKe2ym|IGfmeUJSM`(FE(_OI+;+rP1YYyZyvz5NIKkM^JJKihw?|7!ouzR&)<{SW(} z_P^|Z>xv$tche8kyXzKR)iu3`ez@LK@1^(F`{+mLef55Ns2-+=>sH;S+jU*MlJ?&(?GFTz!T9DS}nPoJ-Q^dt2ueSyAEuhwhyMfzfWiC(KO)tBjY`f|NqZ_roh zEA>XbNpIF$^i}$5eU09#uhrM->-7!#MtzgsrVITj{b>Cd{aF1t{doNZ{Y3pF{bc-8J-8}*y?oAq1tTlL%Yo%-$i9r~U6UHaYnJ^C*FUj07(e*FRc zLH!~9Vf_*PQT;Lfas3JXN&PAPY5f`fS^YWvdHn_bMg1jxxBjyJivFtpn*O@}hW@7h zmj1T>j{dGt8-%(-s2pK53YBrXS*VQDtAx5*sB47UD%7SaQ`T&SCcx<#m4g}P0sR|u7j=?(4&A=EpCdY4e|7V14h-6d4UmivTy zzfd0#>VrakNT?4B^%0>yD%8h>`nXV^5bBdceM+cL3-uYHJ}XrE-}6F!L8vbZ^(CS1 z7V67FeMP9R3iUOizAn@^g!-mX-xBKELVZW5`13uXzAw}dg!-XSKN9N4Lj6Rjp9=Le zp?)q@hOaM#%2@xUP`?uD*Fyb9sNV|pJE49r)E|WUqfmbm>d!*`MX0|D^*5pJ6YB3m z{X?jK3iU6c{w*{`Xdy!DCbYwZ)?H{8p{YXCgw{i7hYPKz(0U22x6t|s?Fgau6=AhbfE6$x#Y z(29lT7FvnWN`+P?v~r~&=v`8 zvCx(XtyXADg|T{3nx^&Zotc@rCAozK&O8slHRtw@)A}c}u&q=GyoPw2a}_w#^IV?70#Bxk_A))iE_Y#RafZup$Ua#i(ce^%k~D_vaeQup zyTqB7=P7Y!`>X#ctH&I$x|}9mB^f!M!eV2dG-lZTimVtBVlEQ=3!L@q-Ie(Pf$4u( z7sU$GX9N~gWwGHwq~$n^W%!C+8HM>pZck<|6Sb+p;j&7Uw@Tp(GcP`0bURqQNr$>hk&&C4ywrm6Ny{bi-;`&aTi zC$}IYuQb!;UC_8aS;d92M0Q&w7C7HIg5(&ax01FoF)s7>Y`wgt2jT`Eo~zgWJdVJr^{M{JJh0=r{@-s!nv7bTyDNIyS=ze z7LV>wJkwQ_S6C?n@5w7Plh!9ZN0uJZRq3KacL`o*9ChPxU!9q|d2Mf9` z*TH|YWVxuI@}&1XGJw9eOJrGVhq9SOxqXi7UoJ~TbSUA|E-)cy%VNVj6w7yJ@Vl=} zA%1U_IE%Ag{{A(ua~1D^L7gmP`d|!TTyXoV94V{Bc4)=dN!&~@Qaa;hrmHMB13R7h zx$R@e!p?TMXXY09rYE067Rh46I<#P9y|0`xEf`a%uSTt`(LYEHcS)sxhV5S`OLa_Y zx2wo$47)}HK5-4Q;E)jS?*hmHr>N3DwicHbcuJZ7@sF>3qp5K4^4_vW$o(Cl#Z+Zx zO=EpcT{Ih7?onL7p44EJ@f0}o{Ug8{S#Ur|@PbV0#s0XgJCI0sNuhrf*eDA|bs=)U zSy9NcdPrVv{W4?dHJ2=OIdkJ|&d0~dLc`k&Wme|prZWcSlbpHfOlBpO`_Hz=%PNC9 zRVghlmOXkuB~Frs2L=>o+wL7=}&m2*G8F+~-9NsP)MG6W%MY(=ym&*e7_5#u%4|78a zW3ErgR#|35dl~6GPkC-hj)z1m$aEHGdI)SWE39_kZI^Xy?R6M%ST1@>DvSJLuaZTq z?L~~mq%j}(8opMR7!Xjxm_%u-q_8lr!(4ZREE$lG=5(8v*`d(QvQXsy;!5O7rbD^g zWVwL6^{>J5oo>SHVWsL~nJ#B8pQd-nDgkaJRSYkot3RFYmSv*ao1f`&6)~~rmdW{8 zF06_R{AKTzWhb6= zc&vR?Hd5W=Vh8Dq!1J^zMAz(oJZgV@x{Dl9FUdE=ZDAy@!&?XV)O@b~N|uWbEa$3lWt5f}n_d5|!&mxSS$bd>rHMR; zxW1x4$f7ZUMccK;_j2eqcZlrb8T9=7;Ql|$ih~0y`h8k7Gg}Jj;Md$8ZlvQ~!< zU0%$%gx~k?`w{W7=*SRvO%=b38(mb@yhI+t<(122oOco_WtrAtCW%Orm4@$Esl9^+ znS3IWWtAcORWXyo*G}Nv7Lh8;58bc4Z`KUfz$95=(0&z)U9*EqpDGJa-mkE$!Z<^b zXMh={oLaFo4QR;YE=}ij%$T#!ngG)_6c%S3nP z=9RLB_th_w^@oL&)igHoB9?iCT-Z|SF*Cr_eowL%MR{Z4`ae? zAFFC)@%T~oEp>IHd88V6DwSK5Q&`|CWX$d2q#%3OZu*B_FwiqsUgqjEWDoIVtDHYty@ zd>&jWg-!mant2a|jq}TlLNba&E}x`kDJl8jlH}2~9BJ8@@W{d$aEKMLT8fzd&qVmw zIEJ@a=E&SI_LV+`)=FvVhbYbHe?HTUZsK><1}Sg+Ka-bP$%MxIW9(rwd>XYKf_=FK z-Z7zA9;pZJy?oM+J_P&ZcD~ryh{+S$Y&KP_!V1gf^CG`}$4PnrAW3Bay@|llM1d=h zge5%-i{w7fr`(BB*qDPmOTOXY$tx-J)jLJj8+Y(}Qi)=h9K*e{wokz6Qb5W-6F_v> zk>=CE(m8|mKiZ2pOUiH_T!z_Q3yVr}^K)mLJr(cD1yzRu_FO40{@~)IOhDdit@bE9*5k7t5s-DOfz(m&Iuw4k_+al}#gFbHhRt7kje|^!uLP`tLCtI4D8No=*e|+h%28V$!B}~ zfzKm1NePLa;?q%rxBEKX`JS1sN{&}DebsN3)jNl`WAzM=oTo||{QU=OzWTSz`UiV^ zDT9HBrrnhVB~IV|H{vc?Gxi{g=N1@?e|lKJ0bRr{S#{z;s>%Z?^DxjiIGbzUfEDNc zQcmZN+R=Eg@0h_DMvMGMMiCFm%AKd1pp_YW>7GnkMTNQY0g!PhS?S5(0i?g9Jo-=M zu^gt$(@9uyc@Nhzy{lS}o2&@fxjZ4|O*n{?+QmqTfv=dE`{Adhkb{LcXwB#TN%LOc z8V`Osp~)&O=(t*WQ3~nY-GlnL$mzzP`%e!qO9`FlrH&HZIlOwo99QZ;D35qe)|+w= z@0rt)_oUhPNZZ`#1O(zuDXQ~W>{Ee-X+}(pZ!MTnQPFj0dq+y@y0Zq6WG0%gv%W9u zcinG%^#dmSjG`hox*0B}ynsdIM^aALVd+9nF~?XwO+J+pW_RgcB$$tw7{twqfu6$h zrGTm1IA)LoqW3vH|HA77zEflK5W?T7_Q-a+?xdaD@n)p=EW^Ln^y&Sjl$Ul0dUufL zSL+)oX3`;u@tWmvmX;LCfz7AS_fk;CfdmyUkl)kQuBwU7FkdD0YQ(bwmUW#%`;!#d zdAbfr)(!&A;21-#A&^6J7DxU)!mm==)PJm=DJ@Vz)~h~Kf0wd4Cmk=|uV`#oD1Vnx zzG~sE%=3Hs4pVW5wEas;=$!t+C3v?ihE@6QY`3exH)lqMNIA1QS+$=W*^3w%Ss=G^-oQG1!+Jk=>>E&LJqTYLrI-(M1h)wF`OS*o>xJRv;vY$Ch$` zmFMxUGyKxD;BGsBv?5m~FC^vq93R-0kodO=LeQxZvLicBXU2D9-_yQjwb3 zX&Q?!Oc1vona;;Zp3sO4O9`o{~b(xFjAp8L!{%r|+o$-~zcs38HI^6q)(& zTp-t@ot+vdB_2v|3dqaceEC`)wi|D}b(WndWtaRrZ3{~C@{A{Mc$me2{LdiTkC!dD z51|ErKk&YPnme0LAjjw|8laCA^AfFmOUReT6J!I2lE(f9%)zGERZ_~h9k8c~oG3+R z{~Mis=gPbo#L$w%1110PGUZTRy`P>w(L4a+(QSZp{4GqEEgZ_w*hLFWlO=`HAAZRh zQu3kn>nN}B+%>9q{8yiBB&D`1ZP{410 zo|JqjQ-j}rZ@=ShreeR@g;LtT>~wApKj_efrMwL8>)V~Xb+K%r>JSsyTrRMb_r80@ zNt(|iG8z1&*Ym|4JUp(yFh z=A9y6pQ(}pvkt)l0eyxuK^L!B8H0Af3*wR0|3OJ(etA4z4Uh419EB>qdjPDNkV8iFWCMmGtb?aXOAx4``BrZ6jumvRcTIJnO!_C3mo+$3doKIb`r2RZCX zsAzwYz^~m=QqlpZz95@$bGKnUR+ldVW^iKcWRKbY#4hq!DfWO%+OEWUGE2=*EnFUQ zI;SvGKC;O0eOM5Af)sqf^;TDcO+|g&1x5E(Fo7}m?L z3q1T``}*ioDX`)|lTv`d=&JhaXbzKn$B9N~F$D9rgSlHVK8JAU@OFRTvV5~_rSw0y z;$Jth^5<(T=^g(XVB7zu367fNyN{XjT*<@ORPJ*6jtL`o$R_@22My{g`Q(^=P;MsA zfHLGWOUCQ=!@0<-WdpNv>-pWtMO6!H%+KU`5Lc0#-u_fBHroH~TW)#=`!?^(!E*89 z;o!l1=$%o@yZ=0{=KD2&_q-%xHD+!+o;)xC2)AS7e%#ug%I2ME&2_L_R15Om;W(I?TdoXMI&&>speAGeG&T zO|?ztVQ1_5_3|4Qb4ZXUf6Nh1KF_UWm+l*09+8p?|AC~SQshGgzdE`IQg2^7tGIitw`q~%X3yx@Q4l`=kgnCZREDe`ZJ(&4%($6*c& z_iZ`26lC2N2bY5IV-o?lxjK3o*XL^MIfp&S^->4EGd91by0(g2UAbPB`y=AL>Nt*Y z*twa_(bv(>5$XtYggdMb?i$%Bv`s>56Pgg(Q9?UfXvbXX&>j695spZQ!!f|Yy(7m8 z?RcS`D72G=cCygU5ZamYZYSNmVzQ=M-ecN+p=i?_^P)@Rc2h1Tt*&XVs;$dtsBf0{ zW!5y#<3>*&eAX|Ht!k{PqJUXER^IRH{iD8I4cna6u&{-jnw%7x*RZOlQQiS-{QXOg zkxH+SHyoqqH#An)G}cs`(@;|ziXHco!kv$f7{^$?{Nu95{Fdgb1$8xrW%giQIjp>f`Eewbj8wN>gr+w`k+kFTj5M{dWa@*D+9*cJy@wVb`h!Bs8iaA&Oi5`+u5 z+|7-Iz<1G~PeO@fo)UJIqtsF6D0fsiDjl;Oa~xdWa-Pu67up3vyHIEs3GHH`T_Utg zuX4;+hAD#_RgMLYg^p^4+h{IplfO@=T`siELfay=t^9XFWwUXAF88O*u5EJF)h@0j zBz(vY-n1Om=Kqk$QK#atD36~onq^_9=I-cA#WqLupydg z{O6K}rslFWyqujfzG!}a)xz|KhGpD1mY6g)(dWe$#~Q9$bgXi4OU)HR+p*Qr>R2nZ ztAuua#~#1Q?D5-~Uk=ja4{(2TJnt(kq8rrn?nHTQeRad?_9Tp35;(vdV>Wl?|6Oy- zeJ(iOaT0g+IZkjeYFsU}YqmO0cAO%#YlU`QTSDpT+Un*dWlL&m7cXfZI{ifB7ENX7 z^yAJ5yjs|Cw&T1`GDtyW+#qk?#2WcOUyGMGHgk8L<5I_E4zlkiq1`OBTedm2IJP>r z3GG&)JukHTWLHa|2RP-MG%PZTYgRNgHp@*@U5&iW#oe-ec~xVp**V-bi{;H1BxL_i zRlNHuQmWHmmDD!Z)tLSFYUR}Jj%ys(I<9kE@3=u|w+ZbYq1`XEhlTdI{|ZIN&5oT? z^;;abIw-MIXtxXPj%|+H9d|hH6dM13m(cE(s*mW@SO-mu8f&@2u9*%HbKrvMe4FX6 zSy9F33k}>GJ^H|<%{GkN^oCCFVK`k`s6-F%rbO>Qemv-SG?*oiIUbim*d?@kjUWu2 zZc0&RMVA`;R9_IEbG#I+{%*(1j#q^CfY2Tk+CyAeKfRwRpm<^@72a~Z7eqw2ha4X` zK5TniXpabuAKCEg|B~ZVrI+I~$LHk*?zn1(^1{$=RSS%(<`WWL4(WDScZ)h{a>X!4 zcliZR#jpnBEv%->Ve;EBUdC!H8P?peB1{Q6Zu9k8kG}mP9Rr39kKw1bONYs?RdyfV zvsdpvM^qHBvXkR&*|3H3*7LaqZf7%puz+EusjXXE@3zA#-7O0j*3>Wq><$g<8E%h| z8ZE17ZJNzLy{&Gw+SYoUGmwP|fVNZvT(K+N6R#0*}VD}|*u)K$MUV&tgNvrSd& zsaRqDYfY24!L6glAlsaEcaM$j85f^`4&_T~n`^Ml(8axi)1&kRrQcy~JrS2Q&Zp$o zq%r(=atZ}AYw3jz_4K!`$?^|VnUli;JX3A@Z0p1^LI0ddv%t;G+j5Cu#^S{(Q%f2f z8k*Zelpac`5~&PTVwEIig5pwUD#gkiWr5P5tW=tm7G;xioN}6Sp>m0GnX*~grfgTP zRIXNTQtnh9RGv^?R9;s;P(D^ZRXz_12~k5rLn1>4hYSme4H+LYIV3kEFQg!(D5NxG zUdWLlH6e{5Eg@?|P7gUNEdR^bE53I8#66sh58pbzbKK_m!SSOpN<1O7CmAS&_LR_`-r=~t z+g``7j^DcN?Y5UegR3~TXN2}#+aCUpp<~E_`*=y~3g*Xy6hbEojXbao=6KJ=>b=70B9PQ7M8zX74z1==M8tiAspU>~4s zXUg@=OG0~Dbek=@aT(pK{1S)IUKiS%qFbKmR>A1p{&NlkqRg3dx2Ip(K_==0FU`I8 zD#sU9ar;WZG`&2qv7u&Tul!#%7PuxDFv@J~HBY~q|A}Sk`~*W>9dB|j?Yu6DTT{Cr z(9l@3?KeFA?((%Q$D>;BZ!*Lice=_Ycf53!oQmUF=hf87Yh>e#>Z+O-H8d`7if0kV zRYUwhi1`NrWms|g{@PgF#Whtgi#JER_`KQ$jSM~US&fWvs~Z}ZHN|H&a830O!VK9t>Scr#2NP$$C1XG|I*1-vIK3oVF!=-RJY=LdC z9d3i$;ZC?4cENq{06YYbzFKo|qq7KW^_3~)g<?Hl`C+StRj>{=0RFS#JKJ$^ z0-OYw0D9SOfO`R3ZRlkC2)+Pxu<0&UxA+y0lL=nCLty*uC&y$A4zdIaEe zeIN{i!7vnt!$=qp=%>$t1~?h6hMj=lb=uO2pH6%FSMUvd2gE_AUEHknr``Uv+n;v( z({BHsKpgtV1NQf?hEw2NxE#o*h^OIY_!N*E@iXAV$lie7kz-*R5VJ^p6uAL5fqK|$KlWm(9tmth?S!p(9^L9mH_c^ zkRNP}6$foOXv=XToD63Jwm7x|x#74I?uK1(pP~#v{{hjE0_4DeSuh)rGvFk^w*%f+ zl!53m&<;^B2C#Wx9MD$>rUCX3%!GWP-wrH>5~u_GF_3;f@H%)Lo&@Y4i2Vbxf8ghU z%>#c`lqg~oMXaN+H7Xe<0P>^IEsFR=AvX%SQDsm8=o&Q_YJj$)>Vce$A}6Doffz&) zgDC8Y!Y@(hz1Tm)Cb)o?9b57-+;jG`Wa$KVP006v0G;4|0*-@{Mv3;f2*zkv7Y4vk7!D(0 zG~n;(Bp44VkP5UFy&kYF`cl{o#5?*5xEUS*+Kn6#?EN$jNS`h!9GP9jE;i`192Hlo(yh)b#MZl3FO+~bK!ir5YS;TIt<k;^R1il`DuSc8&UfNPIYw_D4Pj zuK+$76$LSX&7y01v0?N$D1?=8ETG5eE8!Zr4)Et_+8>QCMn4PB!;7#RWP5MJyYN1I2>5qQ zI3Rz_WWYaTrowc{hXSCzF|%McEC&2E20x8yhE=cz@X?r~0iDJi4=2LOK#q;s3cKJV zAg*JGYYcYB5X%@14hM2HW-tr^@+xLHOayd_L7y1(iAje{pv@TK5<`B)kY6#xCgv14 z4K9XD;d0ml_#%c_#5@7SBZhdyJO{)g<~{fT&@1K>_zLy`K8g8DQN}7T50(IO$6f{a zdF*v?0}$)6cLTPKy${H}u^+--K-SoA;5+yMkU18avB-?Y_E>C>#r9ZoId&8f*I0ZX zI|JNM3XB!8l`sdYVG*E9>{6(MdN>8HhGzg9V!sFSKlT^EmRQ=2rQNtNa6mNR-?$M# zyK%{YpW`OORLFoV$c33e-;TovakLrN0OVa<6A<&bb+8fI;3PO3Hp4d90q7NXEnE)| z0)CHs9_R}^Us2-le;odb`xrihFW^f+|2TAy`%_Wk@mDoiNrk-zb4|>#JAxa_#V(J@mKgAh<_4tlDY#q zm(&yRUlRUH8Upw)iCjpEfjCHnaX_0%so;TQ0e>Vt0lz59xFdkFcom54cw#!<0Z}j#@aOn3fF9!up$r<~csK{n2ih5b zDQt$VfN#e?2>53F!|*744)`Lu2lN8;P7Vbt=nx6`A{k#Kg0Xe$NZro=%!Bmr_$asZoBN?|_W-;@P_yp%eq z2jZN9UsKk>F@XP5PJnZPwoIKm*|42`xao6E?w7K-&}W`GgZ;3%mk;;S(uiN$DX!yyTh zVFFA9d^ibPC*=U~n?(F3l|ltz>!ig{2ju6Z70?1}U>$6LGXUEr?SO0Hdcdwpx4|8N zO_O#3Hci5oN$` zKMv&1P(#s_;G4FkTX;9=hT@{0Q7^YoK6gcYy2D{-Ecn#iE6lY(cZD$l~NCsk&f$R)qXSjfPWDt)Gbk0D}j7=cm z7@)0;3*j=j25yCC03T$0sVJG<0Q)n;zy|%n0Rw^9XVOk4ZDi6$Ch^Mjzyhd-8dw6$ zU=6GVe4dHVGif&y8#B*_^WXxY-(=nk55U9lDB%Chci=t1?#z#XT+I9deu7^W#bp8f z;KC2CBY<3Yg#$5j4T2#s4A9p#8K%NCKzA3qyNaO{(A$O1E_8OGv#TD+RaYwzAJ-

8clK`EwoIp&o$oH&5K<_N{&SE^sBCc5tuo4=f1=hf^a6I7itn=X_xD+UVsVDOqknc3 z3;e7D~Gmn zD4T=LIjezqN&A@LnXmn~Siy2%C$rdDh`T|C==k$g5ezY8H7lD;bE{tVu8x zh}kS+Hft7?Ksn5YdEkLMsD~BM1kc0U@GjuHS=d=T9q?6gAt0w1ImJ8RR@e#XQ+&6g zxUE1O-9uqGi~{n*jcxAZ;Y2tE-h|KKYrtpjAK@4HOHmN5lpF>s^nlTj2g~6YI2FzS zd{lyuN-l@ZuoZ5E+kt#2*#-B*V?a)nJPpsm3qYHt_^uRRmExmPCu9P7QCbApSn7sl zfc~YMfEblxM=3EXJsr-3bKra+PNmpiO1_n1LmBZdivoO6MoyQFgak;0aezO|Xse7I zEW@v5v{^=6$|_+l5SKFYu#7g#wgWblA-n8Tz;9(=0RAeYt@04)4jLQ*{U99dK+ct? z0W!-s0Q#0+3izvh8|(mlR(=!Q0{E+(w#uJ`XW)5w6r681#+O|j{*Nx;J=Em;9K|}{#KMq z{8))SmDp2>ew7V?PL)lt3TUtLDWHu?@~HAfMVXxdQ(zi6fgGAme$KuKE`iHni=xaS zHgl{%Oy&@iIS#|qI@TuoJ_yK-`UlrxZnNR_%C{33e~R?j_j01iNdoyOx;O_J$+C0mEP|&Rh(+yX zfZet9?b!-+t@ zTt+@DBOjJs48&*Im2fp&2RFhkK)jYc2*hX^@mcl)yaeyT`|tq}uVvV^Oxp7Y{H-W; z*j0yJb=XrE3Rch|60oaoIE;cAh=o*eK^_zWv8f|2b#uW3#HX$r7C{pbpSl(xMs>%) zv2Yxm0N7QBJ#|~)3c#+qYv5Mc33mcT2OP~sf&vIh3ydKE63&5^=;#H4L^=AQg)f2CJY^uK&ZUF46zYXpH?5ckV9)&01X&_$p*i`=!d;#H4r_1M;cZ4F^ygZ|)vC>RN2fV^u+fN?A<#ESLrJp$3Ro!!jUV z4J|;t8i-c|@oK=fhEw4*AZ88N)^HhI4x0hn8g7I;;U2gT9)w2#TN<8+m*5q69k8w8 z6Zjf_0LF?2>}vR3QC6rB3Q;f!qG1TcLn=&ysem0Tuwz9&6oDHUBUTWr6?32(7Q<2? zRx4ToJ60SG$H9p}?yVp`E6#%p;3A+et+)!VhHC+vR@?=5!!CFduw@0dtiYBPZ^66p z8SH^C;T!lK$irX_gUK)r(t+GtSpdXnWeJqSY#VIeF6>}os)(6tetH|~bF;XU{e(5VssHvXX~O^1OBheK}&2XtvdmnH`c zgb6@)z;{g-0={b64p#y3Z@K~SQ`23r3+{)90KYXo55&I- zzcdek(U1hmkO~ta8?d`M7qGp#0;-@I76W=U6T{|JfL_h(VG|q$_@Q|-&|dSafZfgb zzZw5GJte`_AU~|hb7zty5IJCq8I<$BIyIZik1-o0Yy9K*ju)F0VxEL;l zYk)jyxgD^(1-o0YyX6UZ3Z8`*fY`LW0`J3@in5AWtRm*CuzOVoWC3=s!tPbry{Zys z!(6BZ5@;1htXc!;wQ3_A59qb(R5%09hI8R&puJU}DGFg!Rv!+%p)Z62{$D*B=u4}| zK?HY=&~9gteye*el_i_J|C_C;=OtYTm?G;yH^wQ)!4rJF(A&XUxHWQb$AOt zhEHJ+VEbxfv-&&uLs8cBfFY0z*u92$uUQ1OPzUwU3dg{ia28YsGJ^X)qb4K@Q-v)_f=eH5*tqsCAWmzE(^}%R_Gx$yUV}H`9e5u;f=?7>9rmmn3KIbTuB(K( zKwn)~1?0=RR%io!yY4tR5zc_K;XJqiE`r;D_SWIEbw9#S@H70XDC;et0)AV6IM`tj z41wV=3SwY9q(BpQR49~#x@DjWX#B&pNZ~6$Zebe`f(uQtr_^It4xDOtLM*x4dJq6Fg z3$Pnrg*V`Bz=v(fYC}%j|7+?#!*ekE{(+xYYm^qHRH@c1wUtIl^rmz#-Fv9+sZ)mz zp+;$yQlp9*rDki^N=S?(f((fuVkLy2F>99R)BmggeH@=RPp|7dzvuV&yK>z3n?Byu zTZg^><|w-Ct;^oJ?5#^<3vriHhH_j%CA>e*+vBd`T67&(7ahbkq6y7ug+AiiVu#}N z5~r6qy~ODyPA_ryVwd9d6K7U&Pw+I)(T$gQ6+OkhO%FamXK|lm$KuR0PT06_7{DOD zXDGuN$ryfN0+aZS-09_wWMM$apn?dE^#>_^cl@q#xs#AOk)Q2 zsEoaP)CLg*Wz6lEz- z1+L^OuBHaHs7*a?;6|F#f}6ORXkxg9PITc8?&dza@-UC_B+u|XFY+?4@h0!^9v{+^ z&-j9`=|evTGMFI@V+5o4nQ{EeWTrBmS^U8~7P1(#>YI%D^wniwU4G-dZ_MQzXMAJc z-zpdo4BZU6C=pT#s_wPt&oYmj1^f%Z3GW3_Bzs?6-j-Cfp zq6+RE;IjkVJHWjI+&j=*23Eu@2KvmvYGjblPIglm!ndt)-?z7-^KW(j?b#3pndhK# zxNDGe26aQXgL?2j-ZaSj2W7LFEqKdd=M8q=VCM~X-eBhq*5}~a$Uk^43qttr3hc&r z*K!?o*u`N=ILe6-zW@Vxa6Jvbj|X^=NB9eG9KIIWho^-wqBrgw;m#4m7!krxzVp*F zJjV-k4`HM(N9tsxPDVDPC3b)0x5z!x86$^=FzR+5=20H!sSrljq!Ep2N(rDj9%E0iDo-77w1oO{>1&*kxAY#$+?rB;3=L(CzG5#X&HVKlk_=R50lMq zvaFMxKe;YCpKR|Y_oW{LLzr?4I+>!ADY8#_h#AN`#hFu_IVB;4-*ohwz4`4X+R&DN zLYR6frSW%Rs&`E_->K$1)m>A~cd9o{Jrlw-Gn#f8J~K_WY4&%TzYWv2v7MbE{QeBD z^CtTEy+;Vs?cDTs#LxkIG2M)&o6&SLnr=qZWu5UpU!k`deek}S?YRS;&Af;E8P7~+ z^9RnD<-4tnWA&Nj>0I-mVB)0mDkX3q&>PC2gT8uUHqI?Qd3 zxy>=RIr}*n!XLi>M|WQ4Ro-AJ$)u9T#t{D0|DVs(4WIv0pMNHiP9~e!9KzfiXwA*E z#arhN@Nb9Oj-6VV>^h*^_xINMv;g^Sxufcg**W`Q9<#JLbQ|r+m&A ze2u&37qFKiibGg112b5#1pBfeA%um#vv2_4GMFJDEV>QvTl5I}So9>mx5)jA){=rA z{%VLF`zwlQVnSGa36-eKRmi&dXF3wr3qs80V!7lbt$YG9f9Gxsa&Dju^ z*x@D4UQ&}rw8H&M^twc^OFD2ncX2QFXok7O@NWo91MXN_ z20bsWLN#=~)SXLpy|gwlyhsm5@hiGrYR8wF(^BUz-9QHJS!xzbcjA3Z&10!Mmlks< zgk@!Ef$Ym(M$ToQV9%GC$Fh-(=4XCkJnmaIliB>qJQlJTk65+}cQ4DsUM)L{H!eHH zS-f?*H!ktHj@MiKMCKrOyk6qtkw0EP@#{$^3)$mkkKc+J#g}j(6XZ_Fr--9m2w_E8%2Rbu(vDfA^VC(G^REG<1Wm6#q)GS*DG|r zLf0#L@Btt537_)?vacA%c&0G}`?$hBu9(kqR*=MMl1Zg7gq4?5gIl?W$FXlK-^P6_ z-M7+xD?cTUZy12NuKbQ6jA9CZ;I5TxNFj}lWU>wYtlWjUuJqemS%jTj`ELk`mr;%D zsY?SI(S$a%r9H9eDX|lG^9XuMd;^&iWloeiQRc+2kU3H2#Qw;f=y#Mjf=SrNL^DlX zO)~2+)5HwyU*dNBtw`KWA^RxdTnI__G08lWYGIy9^|*l>xrv*JM&_gr$eeU15Aq!5 znIv6h)hXDg)%Iz1 z5&z{m&Oe;tds&Fkg(wdIk#l1YhLp+Lp)^y_~Ug34#y5lT@O^Idxd6{${L z%y?}(Zsj)aJy-1Zk^+BFO?o_!`?M15Gsjt$5&*;w&3}ZMyF$%x=RC}E|6>muOhSb^E zk5t)H*OS8*^4P&{iaCtmWvYEi^`2Dk@yxK!8`f2!HaF4~+1K5~&D=sKx^O#p;VtWQ zzs?)h>3W^6*L}>V^g{3J1~7>4@s@QzGJ?u+VK#KCal->`YWh}&evB%_VsmXKtmei z4eNEkUgq`pA@lm~yu$0e#ka?%Cj;4RPpcLqCQvj1lN*!x+Xgh1o1(6$;ppP8K=X(G9yP z#C$jCX~QA@#%^wma5>jd7yWE(L=&3RmiBZ&{*AX{M>pzg1Ld62I*#;elxPC-^F7*&x^c_&ePw-ex~>2GkWnAy^%eAIOCYXd=?^m`VyA0 znq<}?f4YF_nQWs7nKNY0kU2xw85NK_qcVP58P`zCDTJ zJF_A(XUd!@bEeFhGH1%1DRZXGnf5&MHXh<>on!`7buHH;cUFDm z&T2t4GH2aSS7gu9dDdg-Jjm_lq&I!($3O-#oN?I0%?ohXW_N8i&&}q!Ih8CFv3U#I$Y&?}Il;vc za`ls24S90)l56*JucIN2(NS&-Zo+(XJ0Nqe%(*h>%A6~6uFSbI=gOS>B{JvAoGWv# z%(*h>%A7k6e`9m!vxp@uX9X#wv5^cmA%E@;_H&X8A#90Iin5gFDy~NUE%I-VoyJ@eNM;=}Z`ILO z9c|stPUPKMND&7(#<>u->1tbLY9jYGxwpx^P3~Er=A7@o{Nen>D0G!SmMO@PKZ9BP!Cds0ueW@2&eu`Cz0BW>`Q{(wFlRZ> zg%EZ`cm{j6!`(Y{u;Xn$qc?pqvmM`JRy$B@?sVnaeiv*@dh-|He-4Ji#gC-YNI4W;}tJ>{>tp7em2jLWG=W$fi1d%33pjc7u1?B|}=*o8g4(D9zRxNFZz%&New3QD2d zg4*bzz;_G0ufX>U{0|4QT z%(%e23jXF?2!-BN=v{^0Rp?!XRnT=|b#z@=i~4w1;r-~c@ICyV3VZS??kTiWg#)lx zh3+eyhn*Ey?3v-?v2G;_j>2v+qjc^xQ{QG#^w>cnP+X z$2g8X*?$S{+V8IYX0qQ*_FqRG%w>N=qG(4fI^3_r{W{!#Cpz4(!~HtkKMn6YPzG5K zJd2zMCL+@TnGP(#Z{xsHmXm=Q9@xQdWIV7B`3{`s92Y_;z7*#cn{%-}Dz1TjE`AU* zD(=oJ_`6j64)5_H=2Sckb10sGu8Jq|2Y(_{v7U-$DPDoDip{Dx2XiXUL$+es4mPGW z9l3+M@%DpVd7P*4=7TTrB5zD9Y63RKOs}eSjIDvDcF&c8O%l} zCAu$Jgl9OES3U1EPqE`)GIe@9AD z7Tq1Gz?EFZ)zqLCwW-Gq+(=Vea1%EZO$@iti7wcMBX?sLj&$W=9^*-#;dx%o%8HZgyGMTANXBK}jkA*B|83`n^nq=0ofebdW znXPPRCwth-eh%_CM>)YM&hl>v{!iiPrIeu@S5S#6RO1@1<$CJUfJQW-Ijv|zTiVls zj&$aB?&4k^;2|F637+OTy73aP@&<3ygAe$aPwB;1#PJOS7{vDsWjG@l!!Jx=62I{~ zGnvC&7VsBKiDxCNSW7DFNhgaOwvfjTc2h_Z#T@1c$N7gdoabT)$1b5XmvK22sZ3R> zQ)C~ zEv~04PvY)>eqb~|W8VLm^FJvZ;SA?OI8~b)X~I+J?vy)E4Q2#(>(p}GcPbfsa7s_7 z4ux>qY)_l%>8mlX)8=%#6VLM+cKWn4PLIR8PwV@%9Xl=e>7$(Gdo|V*|3B|A*5d{9BKvH0N1fL8t$I%a3@^zl%vkAOG&< zZ_M^W87d*mg(i5vV^$aM z$BZtT(Z%=qoG%#1RDNd<2RR%fp(@u=o7=dbu6)Foe9dHLF^6=vu#FS^%f%3h)TbFO zxQ9o0jF0(>-b`UOe~?Btn>iICmjo`M32lhtReJC~Lm0&vma~Rria5ft5V^DtjcJNE zT>2zW^ErL#$0TMV$E7>){YwvoNU2I(Lrw1GQ6A?De6Q31e@b(2#quGv)0}d0m$u%8z(w zdEYC)F+?uEk{bBl<xhtAY#c0~|0loMVZ>;Ftin3O`5F(YzQVzRNNw1Zz8;#_}XBUhR2Rd@0r5Az*AF^aXMlNlma&A)0@uEzVSKF*W) ztyJ~Sszb@Z`>N)JNHxE!YC5jwozqH9ENFDZ2AA6PdxR5UJtaHO#7pH`RCm zch>OP8s1Q23}eY>ANxb3W?SrgO}ka|NBr}eiSGwpQ&pmb$zaGH~wNJ zNg-0NA>LE(CcL5E&zM_1oz&AwJ)P9oSN(gq553jbTYbIM*K7R}j)q8sXgc9d4fqDefWoja8D;Zn8gU(y|Oe>#hOG(HXri|-g#3BKG(V$-rBkj@9`PE zNG5}<5NXq#w#d{**KI~IhC`g>REXSsClB&4Q_$1Re}sttx)q74Kt(Dcca;00WQuBl z{-T=D3^Vob6OTmQf_|cY;1~2BHHW#FRn%WB#mu5sl8&5FIoOe?Ja(`fvx?GdTRGZZ zfj-)LPh01=m9=d*{07^8%IADZf5tHtceGtgD(i7qTjxcW!LCGCMTgPV@t$b!iT0jo zcSPHZ=+@lE{pcs!-bFvolf1~Qyw6vdb#!m~;O)^r@)M)6C($xR>mu4-MXw~2Y;xH~ zKD#L3zl{E7MW5wgE`~_E2&E`XdCa9s|p?ypA(EfXV#!TCfXCmiAB&HnBh;c@YK4Y8_ zjAfkyyRN>Ld0VbP+4Re-C&h)=XpFAKMtef!JG+A+`&5AWN*d#+qxa-uyejBe8M( zK^}$tcmDAZ=@8I;2im44({^r@s4zO8t?AV zjqbdKcX#NCzl$9P@jXKsj@~=yy~6}1F@>4J{||Gdleu-8#tdfjC-Ygv66Ei+f+W_EjNe74&1}IOZoQdXF}GW9=Po8P2j|^7 zkA)%9*&I4I!QZ3KEs(kMVa{@%3n9`ag3MjsLkC@Yh5z@TQvQe4fB*5{GyeboM7n(W Ee_`6cSpWb4 literal 128465 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�wep8@|! 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

W@l8Tu9W%BCk^y zeO~QGPt<$Wj$EC=Ax?8Hgx_;gfI_rKf4?WPh?T72ZU}!o#G|~7v;U~aD8A-9%S&upmo&-}be6W(P6<8khv=^WvB2!E;XuM)gKYoduo zKYuMmu7An$uiM-U;qP+To4;%FA@cj%zW=?6-PqIXS$T@5k@xkMnDg}s{D{1+A4G50 z&xUZrXK$$E#IE`#?n&r)cL}Bl4CSe{om$M$V{1bSD$EZpz z?9D%e7{=#pU?+RH6T-g_;+cQz&o(F<)aA2Q0pzZ-ICj_ZOHf5 zz7YQNe*UM%|9tMhwsaw$x!AY=?Aw1bz3rX6osoJpr5WEah3UBS_IWOaaK~A9N>P>} zjARV%yJMbrWO~=m-hBr9ac8i#d&TI*U_NFG_UPW;5DA4S!3%Vu z8$DUeR(6C)Bo_sVB8fiqXA`^mB}DGa%`+6HI|CTZK~8ZtMDDLjEnedbzTzAH_qVHD z3y}w2ry*}MnK{hozYxjr01r_Yf6vgAY504F6s~hO_~C!vr8Vu?!q4dUp>kBGCL@`^ zx18g5{tS_aEAbL)efV>}#OEG9&IK-q$Rj1GNEHS#44-{u4|;y&NQgWtk4KB+vyXPA zFLHS_jqU6Tk&M~MOMW_$NHU99$(j&(EF;;;Nqge(xyLr+zQ@u-rGi3a@ zY#+bMwGhc9|4e$yB>znQmP!7ZwH|>Tg*KQxtV(RcBUp`VI3)))lPgPKZ45Adk?1_xONuOyma+bB6OFlC3Ig z&Zg#UA0gvxBe9p+e&s-jWY0`4^3WLPWp9c8vO6#P6#n-)eP(xVj;FBqIi5wGInC7jc`D7bn@VO_=<;j(p%ab>_7a}?DLwz~*lhge@ypO%jH6PjJx)mb1??*1VWuLnl&6&#*QbXh^&p(xktaPCpJ=w*64uwdb z=czztK4mm=%_GM=fACj`*X>|3@*Ar{$LK3G(v{g|RdFilc{oFYyNQ%BRkJ zYRuOZ_4%#lNIw1Ni^qGC&$;<}(--exzVBFvT=J!}kAob;{PUgRT!`d16TjOW$)5$8 z=Fdg}3Zka`QK%(^q$}MXa3D>L(lp5@C!G&6Cwq2 zT|ojd=$%DqubZWKh697KlX-1rq7X1k9kokq{}Uzk<#$ z=&XXyDAWnh6pF*=3(2mK>q2H&=m(}SomtF9|AiK@ zgjBpEg}ft$(%8rrwqq`Zer7NGImA&;a2m5IbdlfqojclDuc(rgrX2E)szP;Y@(N}gWyVov9A(B)W*pUock$jvwV*Za z=twl?5S4%#M0KYZ_AzPzgZY@D3}*zR7|VFR<~t@anQ6>q4)aODOrw_Jy^31RIySJG zZR}(Z>Fnbmb|C6Fr#Q<6E_0P@{LM{naVJFlYedBFOGo^^bfoYjJVs`oAP2d~Lp}-; zMG=beJf$d01u9dG7kQaid7Zk{qakn8lx8%i6>aH2XSxti65Z%YANn(hj~K!*K4&Cj z_>u{H%lG`qRAw-nc`W27ma?2xtYtl$*vbxe^9#RnfWsW)Bxg9!C9d!Xe{q9$2}2phSeCGcG!Ai^b0OkiDm?x6~oRwSAn-_ zPAlB|oO_>h?{jK@ZVTJF&fO3x7D0Z+#Rf5q&(UWwpDnhFYuv(}#S2rC(lnt3 zt+98-Ct%--+n?h0rntQ+?ylnQD&ejYd5FUMQld8XX@ohHkbepJ`%ULai78A+uO$w1 zEJU8a4>>(=Z=QGe^Hr!$2jWTM3%0A^fidvXs=?2KMv>h(}35!{c zEK1wi(!cS0h?L1jUh?x2Z{YbdYABD%kLXU$~mW;bIPfuoOigKT+8)CALV3P zZXQdKX}RNE;BttR&x|a}=fNz?%d-6Im`C{-;uy_0OvLl$*Q1~E=a5JFKSQL#lgOjO zGt|KMN(Hr4a7Kk>d{0#Po*B&M2zIN2Ix5}4hSRk{-*l^^60p2Z9*mqGrOTOj|+ za<4pwFIkHjR^GuiZsCk7g(*pCWM9SIRa(-U5BY?-EFqOsT;^(sRLzadsyd_UtJI?* zefS8ouR5P)n0-|!Qb9o}R(_O6aAf% zYFrPI7mHAeva}pJVX5bMXqb_gLlrM00&2Koyc`k*>OXl`cC90A{ANsQn zyYiAgUY6C%d63o1tx)gFU6{a+Oyw|VaPBJwc#aaN@0DKkWgbgej(%Rb8zQyjT1%F- z>hLCmus5|nXAknLW#3=TMqcdct1akAH1hWQt&vyF`PFm$j=X9=i{5IN!Dnl$qjp!+ zTYENYseKIf)|SI-MJR=AUo*?s;z-2ay|xDPc>N)=pqAI);vL>&D5J19ukT_%heD)I zR-WQ%-k>p_sq-b@qn0`+aetjFA@asE6sIIHB+~=6z9F|aR@pp*4<<7UtQ4wdo)sKPf7O^nnS}aY!8t}X3)q!G_ntk)YC{kjnvavZN-uAb*t5Sn;Oymdt;9qWsNR!uT$lG{_n)rJYIX3x=|NZ@5h`jSM zb*aZx%g zc$e0+BZU?CT=VR>uXzEwGl0SD;UF?@A=?&Jse$}k=&6PLTm0{D@^2ykmL;)wEvq2^ zmJ|5_*|)ln3^b<$YHhWKE!ct9`6)_qI*~{+-i6kwti+63-{xM3v~f?Hn!G|^WZh;c zKG$X=&TVryMA~}K+dfJi8qoyrOk3x+U4%2+I<3;R9hcWn`=x~hl_>Smk{vBo6@g-#0@oT=r z^Bw=>dWdvtzmza7 z%n}|T0}qptT;!oB#VJW?%25HeCa5t%jR~!3i)<76&=2`0$Tva038NUx4@^PL3A31s zj1%OVpzZ{9C#>aH4j|iv!yMxzSGmUB5J`-n=ER4Pb>d^>K;4OX@SY}?p*$6-L{(}~ zm$zs@b7Y*T{=^P+CWc<9KXC-#Bkx3cC(1f;HuG4BT})ic7PhmK-TZ<+67`X&heSJ) zc$|y;9U@7O6Gdg};qIgX497c^i6iKdz z_cvLN$-Wzs-{C#vnJmv_JtfOCIfjX(B9~-&B%ebT$?8vbck-XOKlx^ebTij(8Bs&G ztYk+m-SSZoxph-dxBB#BCMh_-+d6h3`);!D=B{qXu=Cw6aG9(8f!wf2wP?t@yiW^SBlqrd?;cA6N%Uec!$PE|UVG}br+a%n zLKbqOr(SaHRgQ{Op*l5rg$BsDR}HRRy?wy;w=*90S zMS8oVx7vHxMt;2;@iu1H+gZKsOYeBp-Mbq-=|g`8@;P5Him}MB&x5$H&!gDuJ{?J> zJD%_3`953O#{s<8eU4)H`j~$o^XPLeMEbr(Gd@6`ef8CM6Q1eo^LB P&F8-_|9}5P`kwtiN-$&$ diff --git a/Clocker.xcodeproj/xcuserdata/abhishekbanthia.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Clocker.xcodeproj/xcuserdata/abhishekbanthia.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index fe2b454..734d44f 100644 --- a/Clocker.xcodeproj/xcuserdata/abhishekbanthia.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/Clocker.xcodeproj/xcuserdata/abhishekbanthia.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -2,4 +2,54 @@ + + + + + + + + + + + + + + diff --git a/Clocker.xcodeproj/xcuserdata/abhishekbanthia.xcuserdatad/xcschemes/Clocker.xcscheme b/Clocker.xcodeproj/xcuserdata/abhishekbanthia.xcuserdatad/xcschemes/Clocker.xcscheme index ba89cbf..36ace82 100644 --- a/Clocker.xcodeproj/xcuserdata/abhishekbanthia.xcuserdatad/xcschemes/Clocker.xcscheme +++ b/Clocker.xcodeproj/xcuserdata/abhishekbanthia.xcuserdatad/xcschemes/Clocker.xcscheme @@ -52,7 +52,7 @@ debugServiceExtension = "internal" allowLocationSimulation = "YES" showNonLocalizedStrings = "YES" - language = "en" + language = "fr" region = "AU"> diff --git a/Clocker/ApplicationDelegate.m b/Clocker/ApplicationDelegate.m index ff70c3f..f82965f 100755 --- a/Clocker/ApplicationDelegate.m +++ b/Clocker/ApplicationDelegate.m @@ -28,6 +28,7 @@ #import "ApplicationDelegate.h" #import #import +#import "iRate.h" @implementation ApplicationDelegate @@ -55,38 +56,19 @@ void *kContextActivePanel = &kContextActivePanel; } } ++ (void)initialize +{ + //Configure iRate + [iRate sharedInstance].daysUntilPrompt = 0; + [iRate sharedInstance].usesUntilPrompt = 5; + [iRate sharedInstance].appStoreID = 1056643111; + [iRate sharedInstance].useAllAvailableLanguages = NO; +} + #pragma mark - NSApplicationDelegate - (void)applicationDidFinishLaunching:(NSNotification *)notification { - - if ([[NSUserDefaults standardUserDefaults] objectForKey:@"noOfLaunches"] == nil) - { - NSNumber *numberOfLaunches = @1; - [[NSUserDefaults standardUserDefaults] setObject:numberOfLaunches forKey:@"noOfLaunches"]; - } - else - { - //Check the number of times app has been launched. - - NSNumber *numberOfLaunches = [[NSUserDefaults standardUserDefaults] objectForKey:@"noOfLaunches"]; - NSInteger launches = numberOfLaunches.integerValue; - launches++; - numberOfLaunches = [NSNumber numberWithInteger:launches]; - [[NSUserDefaults standardUserDefaults] setObject:numberOfLaunches forKey:@"noOfLaunches"]; - - if (numberOfLaunches.integerValue == 151) - { - NSAlert *reviewAlert = [[NSAlert alloc] init]; - reviewAlert.alertStyle = NSInformationalAlertStyle; - reviewAlert.messageText = NSLocalizedString(@"SpreadTheWordTitle", nil); - reviewAlert.informativeText = NSLocalizedString(@"SpreadTheWordMessage", nil); - [reviewAlert addButtonWithTitle:NSLocalizedString(@"Cancel", nil)]; - [reviewAlert runModal]; - - } - } - NSArray *defaultPreference = [[NSUserDefaults standardUserDefaults] objectForKey:@"defaultPreferences"]; if (defaultPreference.count == 0) @@ -106,6 +88,11 @@ void *kContextActivePanel = &kContextActivePanel; [Fabric with:@[[Crashlytics class]]]; } +- (void) initialize +{ + //App ID: 1056643111 +} + - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { // Explicitly remove the icon from the menu bar diff --git a/Clocker/PanelController.h b/Clocker/PanelController.h index a00a18a..dbff934 100755 --- a/Clocker/PanelController.h +++ b/Clocker/PanelController.h @@ -56,6 +56,8 @@ @property (nonatomic, strong) NSMutableArray *defaultPreferences; @property (nonatomic) BOOL hasActivePanel; +@property (nonatomic) NSInteger previousSelectedRow; //for color changes on row selection + @property (nonatomic, unsafe_unretained, readonly) id delegate; @property (weak) IBOutlet NSTableView *mainTableview; diff --git a/Clocker/PanelController.m b/Clocker/PanelController.m index e44f573..a2caebc 100755 --- a/Clocker/PanelController.m +++ b/Clocker/PanelController.m @@ -266,7 +266,7 @@ timeCell.stringValue = [self getTimeForTimeZone:self.defaultPreferences[row]]; NSNumber *shouldShowOnlyCity = [[NSUserDefaults standardUserDefaults] objectForKey:@"showOnlyCity"]; - + cellText.stringValue = [self formatStringShouldContainCity:shouldShowOnlyCity.boolValue withTimezoneName:self.defaultPreferences[row]]; return cell; @@ -365,6 +365,38 @@ return [self compareSystemDate:[self getLocalCurrentDate] toTimezoneDate:[dateFormatter stringFromDate:currentDate]];; } +#pragma mark - +#pragma mark NSTableview Minor Customization when selecting rows +#pragma mark - + +-(void)tableViewSelectionDidChange:(NSNotification *)notification +{ + if (self.mainTableview.selectedRow != -1) { + [self updateCellForOldSelection:self.mainTableview.selectedRow andColor:[NSColor whiteColor]]; + } + if (self.previousSelectedRow != -1) { + [self updateCellForOldSelection:self.previousSelectedRow andColor:[NSColor blackColor]]; + } + + self.previousSelectedRow = self.mainTableview.selectedRow; +} + +- (void)updateCellForOldSelection:(NSInteger)rowNumber andColor:(NSColor *)colorName +{ + NSTableCellView *cellView = [self.mainTableview viewAtColumn:self.mainTableview.selectedColumn + row:rowNumber + makeIfNecessary:NO]; + + NSTextField *cellText = [cellView viewWithTag:100]; + NSTextField *timeCell = [cellView viewWithTag:101]; + NSTextField *dateCell = [cellView viewWithTag:102]; + + cellText.textColor = colorName; + timeCell.textColor = colorName; + dateCell.textColor = colorName; +} + + #pragma mark - #pragma mark NSTableview Drag and Drop #pragma mark - @@ -377,6 +409,9 @@ [pboard setData:data forType:@"public.text"]; + [self updateCellForOldSelection:rowIndexes.firstIndex andColor:[NSColor blackColor]]; + NSLog(@"Write row with indexes"); + return YES; } diff --git a/Clocker/Rate App/Info.plist b/Clocker/Rate App/Info.plist new file mode 100755 index 0000000..d3de8ee --- /dev/null +++ b/Clocker/Rate App/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/Clocker/Rate App/iRate.bundle/ar.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/ar.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..38c59cb1312a95610032808638888d6d0076a6bd GIT binary patch literal 650 zcmbu6-AV&75QXRJT!`=Bx>B+h?GJjhh@jiet`rI?zCh6;h57@oudjZIl(lrd5DAk^ zPBJGab3Q*(TiUJ7t+9p8h&RUE9?9-FX>3K7T4Lu!YK5k{(Y3r1>)8d!ne8yQ9GCXW z*ko$!dm716d!SrL$}}O*G*$)bLB3gcS!&o$K90M zwe~*uZBQdjZKDk^n4;U!PxL{MImWn`fj|5NS$qS5T5JjQ>+1R;tPoQcktvze1W1x3iSt!FW{lqoN7S}9@H92Omh+o(oiow zNMA|)W|MRq8hrv;c6W9*-#4=}U%tOQX~==p#Fx74b6#@P8CZ+vOe^2EpnrzZ&} zxQCGy+2Uzkmbg0nwp?(OSsb>7K0>59+DL>c28b}k2noGyt`qJr_(TV*jOP#mqbjn9 zAE2FkVvNb~LF^Qd{G!7>q36Lernuw1k(iN{TVq7DHpyOa&U2+ULw(^bzZ&4(q7?CJ zmpX7*&`>nppo^xa0Db1NdQhvkZT?y(c63w`;kq9b(4 z7P5l>b#%JiWgXAth?Q*0j$BdIzMRwJDyh9w#g%)qsPN)Xsb&dq!`eG#Wok`vO`j@n l%-br?I=kFpKF7ag*C$rh+oGCARKD8ticV)r?NOy!j324k`YZqd literal 0 HcmV?d00001 diff --git a/Clocker/Rate App/iRate.bundle/cs.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/cs.lproj/Localizable.strings new file mode 100755 index 0000000..e31014f --- /dev/null +++ b/Clocker/Rate App/iRate.bundle/cs.lproj/Localizable.strings @@ -0,0 +1,6 @@ +"iRateMessageTitle" = "Ohodnotit %@"; +"iRateAppMessage" = "Pokud se vám líbí %@, našli byste si chvilku na ohodnocení aplikace? Nebude to trvat víc než minutu.\nDěkujeme za vaši podporu!"; +"iRateGameMessage" = "Pokud se vám %@ líbí, našli byste si chvilku na ohodnocení hry? Nebude to trvat víc než minutu. Děkujeme za vaši podporu!"; +"iRateCancelButton" = "Ne, děkuji"; +"iRateRateButton" = "Ohodnotit nyní"; +"iRateRemindButton" = "Připomenout později"; diff --git a/Clocker/Rate App/iRate.bundle/da.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/da.lproj/Localizable.strings new file mode 100755 index 0000000..c4fbf79 --- /dev/null +++ b/Clocker/Rate App/iRate.bundle/da.lproj/Localizable.strings @@ -0,0 +1,6 @@ +"iRateMessageTitle" = "Vurdér %@"; +"iRateAppMessage" = "Hvis du kan lide at bruge %@, vil du så ikke bruge et øjeblik på at give en vurdering? Det tager ikke mere end et minut. Mange tak for hjælpen!"; +"iRateGameMessage" = "Hvis du kan lide at spille %@, vil du så ikke bruge et øjeblik på at vurdere det? Det tager ikke mere end et minut. Mange tak for hjælpen!"; +"iRateCancelButton" = "Nej tak"; +"iRateRateButton" = "Vurdér nu"; +"iRateRemindButton" = "Påmind mig senere"; diff --git a/Clocker/Rate App/iRate.bundle/de-AT.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/de-AT.lproj/Localizable.strings new file mode 100755 index 0000000..fc060f7 --- /dev/null +++ b/Clocker/Rate App/iRate.bundle/de-AT.lproj/Localizable.strings @@ -0,0 +1,6 @@ +"iRateMessageTitle" = "Bewerte %@"; +"iRateAppMessage" = "Wenn dir %@ gefällt, würdest Du es bitte bewerten? Dies wird nicht länger als eine Minute dauern.\nDanke für die Unterstützung!"; +"iRateGameMessage" = "Wenn dir %@ gefällt, würdest Du es bitte bewerten? Dies wird nicht länger als eine Minute dauern. Danke für die Unterstützung!"; +"iRateCancelButton" = "Nein, danke"; +"iRateRateButton" = "Jetzt bewerten"; +"iRateRemindButton" = "Später erinnern"; \ No newline at end of file diff --git a/Clocker/Rate App/iRate.bundle/de.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/de.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..399e881469f1232436120c924670e88ee457a34b GIT binary patch literal 906 zcmeH`-Acni5QWdRPq7BP6JJ0?t%6Xf7yjUNbW<&+t85bjK5rkRsNYO0@h9R7$g;`o z%-J)OnUlBILNi^cRHI50_JURF9_xxoqZ+GF&;h&9h*QVTjt|<=5#D`m@$7ky_00Op z)^pr&Ke2)$cQS8d37&JRB^hhjcky&u5s%;(c!EyV^0ZUXtygDNoBg?}q(jHfHptGi zM0^SBP7lsilPP<Dq#Ou~s0Gb57i9H{TgSwD>d8J!dbm9vwOLD%W3Q)m#&?y0TZj z!hYed<=P(T)fvol(Er`C8UNL-6S|d{Va2>gbhTkU;px?NPRwR#`mw34r}R^!ADSO# m8N*_8Gu3@p*AQ353@vN?rK(H*hb3&L3R78jv?ynL#fJc zE%vs_2h!0Vm6RC!bA57MUukjD!7A0s4AE*0&8tsThMM{Mh%RDqGEf4EIAzHBzKq_C zU+cTyoQL)6w67(Y+=KMtSvqbqlrelwk2%&HW$4-3o+i8;n2D|zD0YDI=PPsgi)K0N z9&8@9!)qzp j7ok;{Xca!Ezp#728!=vMd-s@=%>U;7h&PryHAnseu3`En literal 0 HcmV?d00001 diff --git a/Clocker/Rate App/iRate.bundle/en.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/en.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..ddaf461aac50519aca7ce115fd1c807796a0a48e GIT binary patch literal 888 zcmd^-O-{o=429pC8?YN9u|vH8Li{aICCZ}e1tJKgZIV{$L{%>je0Dkwh_GOdqM7m7 z&o7>5f4pZ}XsTRMg(j>mU#>aUj7U_8l_}_ol^u~m=eps3sT1~|;Z_^I?>v3>Sg)|` zwN}ensMZpDkKOXu1@}3&F<)@*99QZEJLOc4GEbz+)iEc>Q-QCXHF|u_-W*;QKt^5T z8FO~rwN68aG^PTtF*I&Py^&et>zJ*!mdrvUe6vGzMb&{fSyrmitSwm6!TeEY13Epx zYqkDesSO>;(c?d>C>rXCTz$3c(0!RDuN#!qANmiPbw literal 0 HcmV?d00001 diff --git a/Clocker/Rate App/iRate.bundle/es.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/es.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..dc96e46863e6c06e651442ec1210f0e142c608f8 GIT binary patch literal 848 zcmdUt%}v8V5QX14RV0@;WH$=Kv%~7QREqr1f}xDmaml;X9pY8vH+zF-UHC6OO?WTxw-o|< zMU>YIwu;*_GcrE%%~pcb(8Wq8ST~vxol>zp)VF>-o{rU_w(YZ#7G}amSfiu!I+66z6rf8u8?Q=sVwyS=HU5MSaM5j z-u|rS_>*ahuVX#d0gSU{%oxNRoU^%>;kQ65VXN`k#n+KZ>t9*HpL3O9a%`Ie^`Fwe zo3(EKr2`FF)I|8t)t^xPtuCp5s$)H}L6PpT^z|1On@_dt>-q+D`#6m6=36m=hB;(5 g#4u(C6XIU|l0|AW@ILFJ-J6oEGWze9ZV#OI8-@ef9{>OV literal 0 HcmV?d00001 diff --git a/Clocker/Rate App/iRate.bundle/hi.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/hi.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..67a532e3898a4be0b873d47764464e39b24963fa GIT binary patch literal 852 zcmdr~%}T>S7#xHa#!F7oi{ct>TBIZr5F3hVtA_}Zi}(UXixlb)7++tV-K2!t_yV%* z^5xr|na%8ce+5|L9&?mfpwRr#nB!U1gLX=+R0S}&(hLytoCZBiRgbZ&wL#DDuCd9{ zAiF%Pkp@&9^N#!K_{_9+Ip7XMRS9zrrFE)(+qbBgsn$x{XTeLJ)F%xhAq`T;mT@9v zb=sq^e#D9Pk5rAsYtUg|9lJ9S=Tw@NqQQag;ps*hBXL+=-yuef^v?x*PN(W6;_!s* zt5@hxE`$ns+~P?tFJHEtZFgl)dWl$nJCgGDA31U(M_%zLPgc0brxI4;O`XP*^~=~4 zY&yK1xpi{enK~TG&n7)>_=VnQDgCEEZWD3FLzjf1du5xc+~p>&zeA-VQSGT~6@CDf CV`HEI literal 0 HcmV?d00001 diff --git a/Clocker/Rate App/iRate.bundle/id.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/id.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..37589219b229bddd7e57ac453283d6aa040877f9 GIT binary patch literal 902 zcmdUuK~BRk5JhLrDMBQ6hzlSDg#{D|7Nr*mq%u_#Q#I*=%LDIEDdM`=r&S!KN~?19-aDhur9-1OG4E3L2#W@*=)HrNY$WNq-&{=}}hJGUd&j5e_~ z;}A0=-Q&3;zFeqBc8e`|8%b$g*I4GP;*|K8rnE~`aaR7F>w<@c`Sp8Ql`()BoI(sHU{R!Bi# l7hc=4#5rZSR>%6DXNtZj zS4Moz*>MJyt{J>$a@q2px_zsJ{Xwt1B6TBo1s;pu5Nr3~+9yZV>JrV}r)TMQvn19F z7OS}T*eP;{E|R6k?+n`l-=Jr-hP2~M+%;7V_kdRh)&WcBnJw;krVk6U?1=trCn{>S z{5nwA5R9Gv{~fvIFVXpKbmJYj-bH#h&XzG}|E#`n@N>e(S)I=@&8P7mW|%4H>j&$b XUvLy~P=Y1-lo^W+FPpj6SvO4Y`{j;B literal 0 HcmV?d00001 diff --git a/Clocker/Rate App/iRate.bundle/ja.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/ja.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..60c071053dd3fafff4743204774be40ca3032922 GIT binary patch literal 628 zcmd5)%Sr=55Uh9*AKxI#f_N>@B4}Jx#F)5QA9IR}#&sc%0oRM5ft)0X7f*sG#jnv1 z$UlhRV64p|A#S`&Gc!&1RCjgF^u8QK@DLzI6$PzJS%6TUuS|@ZJO^`F)^ae96`8UAnCBhy^Z~Nt0)b+dShseeNrBOT#fXdB8i~Yu{yu zbuMDuo4yV?VH^D$mLYR2)AEH~e&|d%CG`&jMXmK-nH1yLJu^$E~K2_Wt`4${}Wru8^X$C1qkjwvt*tXXpa*(6MVxC6r=7b8Tl z`-JBz#}1(FgVrz3K)>WMBm;eu!{EeF3XIbdhJ2t1!Z$K&_0DWP1PUX}kbtEP>^cve r|~9Jcbk;cF))#c=Ezg1%@Y^?f_%V=jfiDAU6O22*=rJ literal 0 HcmV?d00001 diff --git a/Clocker/Rate App/iRate.bundle/mk.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/mk.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..6c99ce5da4775fe4f473093578b6cefd40c3fa72 GIT binary patch literal 940 zcmd^;%}c{T5XI*(Cr|nZsB6HRNQ|uwrb*KT)QcDKAmXKHkwX0d-;@k?WRT`SrZbb^w!!eXfDw zMlINe=mIVW|3b^2?;ZOQ=1uZ+{Kxn#qDq-;qgs7{i`>#EPg@BzC+ufPR(BV&Sh4tB|Kde%DW@S<0+6>nMO;fN+PVvPN_ zsx)v98kp{X(`A=0{9H-V!Pz6SWV}O?bQ1C7bfgFdSG*& zZH#qfRReW(r9{`7uP|au!K?DM&;DFBysmE5fa~Y^f;#-oqH7?w%GWXC#}ne8es@;_6iJT@+?5bbKDt hgkG4E(bF&aHOU~Gmj*qx=leXR_ZB*YC3L<+{sviofCc~n literal 0 HcmV?d00001 diff --git a/Clocker/Rate App/iRate.bundle/pl.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/pl.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..9d4f94d9f2ea614d5504c9e7571efe4a1a36a2c1 GIT binary patch literal 862 zcmeH_-Acni5QWcP3BEz^)uhxbKGUX>awV>{+fu->?HeNe;1EwL74EA`C%O8m$roCjcuo@7V{=2cL& zC(7z8K)drCbPjG2hI%r@O3Bb#9p@UXjd_R7yag53aG!ur`DMAcU@0tlsM44`HB{6W zYe#P5JR0cBHU1pme`kIw=8Db~VQQHsq2o2vD(GRSxx3I+Q^#s=3M2Phf1Q$tnR@k_ m+IM7b24*!2^R@Y}{;24Izot`DWlr2CXs1N8jcZkw2HtPoOp;9i literal 0 HcmV?d00001 diff --git a/Clocker/Rate App/iRate.bundle/pt.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/pt.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..6ff1900a567df3426e1cb88a6135964b9b8f6769 GIT binary patch literal 884 zcmds#K~97~5JmsmQ?w-R)C(A+=)%pYiFyGPLfQ;40ml0pcOF80Rft5yjZ4!hsIIF1 z^}G7Nza@&gQKnvnF0qc4sl>Y@(`${FDCihVlnoOpa$evD#9%+Z~gp+E+`i?eX z+=3XuY4o61yb`aYQ-+^=ZtENjzrn1>KL6=N=T%V^T^e}U+15FY2-z3UXC1(|(Fq7w zdT~U%Lu7B=Dn}S@Q+d4m%mi)81}v(^@2Nawf317(R#Kfi-oPTjx}Yu)w@Acx7p8MT zzM}H)^LYf>x{ojLpQdxpy=s(E@M>p1b(?$597hcfuV{Ckzr;@^j>=v}nyWc=Ew(UN ZLNcwG67pYotz1o}jk%fzeVW<~_X922nvVbg literal 0 HcmV?d00001 diff --git a/Clocker/Rate App/iRate.bundle/ru.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/ru.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..fdd3af9474df7f07d27e6884289f2cb55ca34fa3 GIT binary patch literal 938 zcmchWO-sW-5QgV4C+{AWG~mrc8k>HYCe5Z`4pv0*4-_p@s2^bc`|2~Bme3l(gGkt9 zvLDa9`_As?M<`3VmAR~CAy>3Fp1C{{-7&J36;UXGWVBF@^+FTPbf~4yG>{W1=uPE- zcf)b=%Ck#r7>DXKg%C)rk&gLhS`fva>hzkPiRR3i>42}zvTXH;Wjr-K=m?~%Q|%Fz z{%=dY^z59~#_ey`8?}H}k|$~KJDy{n$rTcGM3UZ=&q3jd#Q{Wt!Z-pprAdG}#Q8#kP<&k$v{=aJV^ z*Xw`Xi^-o*WvgntcQ^W1&P{RdS?=*}C8fM`de`zoPjmK;ygTNA+o{y|GrYYM?VSC4 i;NXt5@|9>~EvV=cB@aL9iqMneQ**cMe?UzWHR2aWRd-bY literal 0 HcmV?d00001 diff --git a/Clocker/Rate App/iRate.bundle/sk.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/sk.lproj/Localizable.strings new file mode 100755 index 0000000..84c739b --- /dev/null +++ b/Clocker/Rate App/iRate.bundle/sk.lproj/Localizable.strings @@ -0,0 +1,6 @@ +"iRateMessageTitle" = "Ohodnotiť %@"; +"iRateAppMessage" = "Ak sa vám páči %@, našli by ste si chvíľku na ohodnotenie aplikácie? Nebude to trvať viac ako minútu.\nĎakujeme za vašu podporu!"; +"iRateGameMessage" = "Ak sa vám hra %@ páči, našli by ste si chvíľku na ohodnotenie aplikácie? Nebude to trvať viac ako minútu. Ďakujeme za vašu podporu!"; +"iRateCancelButton" = "Nie, Ďakujem"; +"iRateRateButton" = "Ohodnotiť teraz"; +"iRateRemindButton" = "Pripomenúť neskôr"; \ No newline at end of file diff --git a/Clocker/Rate App/iRate.bundle/sl.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/sl.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..25112d2ee92661007d207cc3d7bf30bba489087a GIT binary patch literal 888 zcmd^;O-{rx4255}2<{Ln%?@z^g!o$w8$cSkK!;Y4p?{hwEavdQXO~hCWx*OnX&gIw zez9NQUQhAGNT(7jRnRdr)s61i*F=J5I>mFO9lj&RnOeqor1Ac4 zQgHKy3>E7NtRBaG#P*T{JWI#7QyX@z)@raKT%s(V6AA9Ids{~<`~?BrhG`r-&P3LL zXJBowJi&AAnU_RHHilG?qxTt?peJ^QQ#sNzcB4b~m;Q#*d074)B}?pX%bDE2#(RIF zM)MEGf2mTWCu`4Sb^l-Wy5QZl_psEttP9qMn#vBkw0@d09zXl?Q<;OxrxCs?d+Q2Y hO>}NSo?Z+2FHCN|^A+suA2B7GicHBhwkh72y#uZCOGD+6L)EFVPo}k`U|iu$mx!k)E1l?7TN`~VTrn$sH~nw3K*faY>55b zs;oKE$X*%icsWW}u}Yu}w4gN2;^NYAR8cj6P3jK4zQz&t` zdyMaTbrCp$uE3t~($tv_xkVa-=ieNXxA;6OqyRKmM;qUm*g&V8D(tcL)F*xmtorf~ z9UW)*dDR^}-OcR-rt_{Wy*JsqhViEj{)_qYh@~}-hWvg^mjBIC0!zdMH3M#^y(YHA@Jp55n3Dr53$7r;c=`YYe3XHHg Fyf3^GYn=c9 literal 0 HcmV?d00001 diff --git a/Clocker/Rate App/iRate.bundle/tr.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/tr.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..807f9293f7fdc1c712a48c3f78dc5485b7c6ce0a GIT binary patch literal 928 zcmd^;PfNrw5XE1weu=Gxy@}vi#Q*3;gmt~T6s>FNwv}uuv|rdSA?j~Zm!eegE@7HU zCVg)*^YZbYDA!D>yfR&3YeuRi-kgZn3NKNt11!;0N6fcsInfYHRbp%HMHLq7nuzTt z+SeA}0sC0bjPDEs?ztvWCI@!U(EMO1LGOq@sn#NDRKecC6O)H!>G`(gk!gp$8b8(x zD@T5r3RXE$yQ6WGVU>fDgL25u37$nBz%1|!X7eld9+|svs~C*8FU%IK`+#lSPP?2u zW8Je%q7Aw+zhZ`D{0r_`Fbv0P>$E*mtqV9U^S{>1ZroR;43+sml{yVwvQDh%ViUAb zQ|&=p^UVkMOkj71DiK7j(JCaOB9lW^1J3|Fq_sYPLAW;pw$Wun363UAF{C* HxMpCP6g literal 0 HcmV?d00001 diff --git a/Clocker/Rate App/iRate.bundle/uk.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/uk.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..055fe50a20a51dce43597e993f448f0e16927c93 GIT binary patch literal 960 zcmd^;Pfx-?5XI*(C%=ORns_s@K#>M0E!!xXC?E>oRq4pyDqF^p3XE8^A_8!KZ_f$w~ceUDe)q2`EwJkW)|=xII4e8vGRP1O@v znx^ef-CDltvF8%{_dirDQSni3(QzqGUYYEbJh8Kx%YC|GS|rS#^>(a3CwqNUb|Y-x l4(oD(b#@}n>FNRocfaz9naP+QhPe;((&6@1dQLx$-3R*Id))v4 literal 0 HcmV?d00001 diff --git a/Clocker/Rate App/iRate.bundle/ur-IN.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/ur-IN.lproj/Localizable.strings new file mode 100755 index 0000000..b174a90 --- /dev/null +++ b/Clocker/Rate App/iRate.bundle/ur-IN.lproj/Localizable.strings @@ -0,0 +1,7 @@ +"iRateMessageTitle" = "کو ریٹ کیجیے %@"; +"iRateAppMessage" = "اگر آپ نے %@ کو مفید پایا ہے تو کیا آپ اپنے قیمتی وقت میں سے چند لمحے نکال کر اس کو ریٹ کریں گے؟ اس میں ایک منٹ سے زیادہ نہیں لگے گا، آپ کے تعاون کا شکریہ!"; +"iRateGameMessage" = "اگر آپ %@ کھیل کر محظوظ ہوئے ہیں تو کیا آپ اپنے قیمتی وقت میں سے چند لمحے نکال کر اس کو ریٹ کریں گے؟ اس میں ایک منٹ سے زیادہ نہیں لگے گا، آپ کے تعاون کا شکریہ!"; +"iRateCancelButton" = "نہیں، شکریہ"; +"iRateRateButton" = "ابھی ریٹ کیجیے"; +"iRateRemindButton" = "مجھے بعد میں یاد دلائیں"; +"iRateOkay" = "ٹھیک ہے"; diff --git a/Clocker/Rate App/iRate.bundle/ur-PK.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/ur-PK.lproj/Localizable.strings new file mode 100755 index 0000000..b174a90 --- /dev/null +++ b/Clocker/Rate App/iRate.bundle/ur-PK.lproj/Localizable.strings @@ -0,0 +1,7 @@ +"iRateMessageTitle" = "کو ریٹ کیجیے %@"; +"iRateAppMessage" = "اگر آپ نے %@ کو مفید پایا ہے تو کیا آپ اپنے قیمتی وقت میں سے چند لمحے نکال کر اس کو ریٹ کریں گے؟ اس میں ایک منٹ سے زیادہ نہیں لگے گا، آپ کے تعاون کا شکریہ!"; +"iRateGameMessage" = "اگر آپ %@ کھیل کر محظوظ ہوئے ہیں تو کیا آپ اپنے قیمتی وقت میں سے چند لمحے نکال کر اس کو ریٹ کریں گے؟ اس میں ایک منٹ سے زیادہ نہیں لگے گا، آپ کے تعاون کا شکریہ!"; +"iRateCancelButton" = "نہیں، شکریہ"; +"iRateRateButton" = "ابھی ریٹ کیجیے"; +"iRateRemindButton" = "مجھے بعد میں یاد دلائیں"; +"iRateOkay" = "ٹھیک ہے"; diff --git a/Clocker/Rate App/iRate.bundle/ur.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/ur.lproj/Localizable.strings new file mode 100755 index 0000000..b174a90 --- /dev/null +++ b/Clocker/Rate App/iRate.bundle/ur.lproj/Localizable.strings @@ -0,0 +1,7 @@ +"iRateMessageTitle" = "کو ریٹ کیجیے %@"; +"iRateAppMessage" = "اگر آپ نے %@ کو مفید پایا ہے تو کیا آپ اپنے قیمتی وقت میں سے چند لمحے نکال کر اس کو ریٹ کریں گے؟ اس میں ایک منٹ سے زیادہ نہیں لگے گا، آپ کے تعاون کا شکریہ!"; +"iRateGameMessage" = "اگر آپ %@ کھیل کر محظوظ ہوئے ہیں تو کیا آپ اپنے قیمتی وقت میں سے چند لمحے نکال کر اس کو ریٹ کریں گے؟ اس میں ایک منٹ سے زیادہ نہیں لگے گا، آپ کے تعاون کا شکریہ!"; +"iRateCancelButton" = "نہیں، شکریہ"; +"iRateRateButton" = "ابھی ریٹ کیجیے"; +"iRateRemindButton" = "مجھے بعد میں یاد دلائیں"; +"iRateOkay" = "ٹھیک ہے"; diff --git a/Clocker/Rate App/iRate.bundle/vi.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/vi.lproj/Localizable.strings new file mode 100755 index 0000000..05b75cc --- /dev/null +++ b/Clocker/Rate App/iRate.bundle/vi.lproj/Localizable.strings @@ -0,0 +1,6 @@ +"iRateMessageTitle" = "Đánh giá %@"; +"iRateAppMessage" = "Nếu thích sử dụng %@, bạn có muốn giành một chút thời gian để đánh giá nó? Sẽ không lâu hơn một phút. Cảm ơn sự hỗ trợ của bạn!"; +"iRateGameMessage" = "Nếu thích chơi %@, bạn có muốn giành một chút thời gian để đánh giá nó? Sẽ không lâu hơn một phút. Cảm ơn sự hỗ trợ của bạn!"; +"iRateCancelButton" = "Không, Cảm ơn"; +"iRateRateButton" = "Đánh Giá Ngay"; +"iRateRemindButton" = "Nhắc Tôi Sau"; diff --git a/Clocker/Rate App/iRate.bundle/zh-Hans.lproj/Localizable.strings b/Clocker/Rate App/iRate.bundle/zh-Hans.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..0db893bebdbb5c282c8b1824adac4b61a547dac8 GIT binary patch literal 520 zcmezWPl+LuA&4Q7p@boo!54^&fiRIF9mom+%9JqV09i^53JkVDti)jDC!?Us;J_fO zaHN|pNQuFkfeR>#Fu{?b00>ddLFjIZoRhvH;biCZc$g_2@wJf}r9A)N2djlx`IQA8 z>1OcL@?#4sNR|H&vf+3?ch#$4hUpudEPFfR1!G#uzNLPd%48s)sMNC}p`}bel`)y| zKc+j}fquxv@DU-GtSqL!OPql&$zwUV^c>XK(03k+r n!eR!y&JD#H;k$#e$3zg&##~^`*kgG8T6_H_F!-?rNlalfP+*YlmhE1V&{C$K%9zafAJY}? zK-cGD_ywCgRu-$%% g5e|w6Z2D4xe$NEjl7h?5s-E}@$&)4uCV_MV0R1_2mH+?% literal 0 HcmV?d00001 diff --git a/Clocker/Rate App/iRate.h b/Clocker/Rate App/iRate.h new file mode 100755 index 0000000..12f981c --- /dev/null +++ b/Clocker/Rate App/iRate.h @@ -0,0 +1,174 @@ +// +// iRate.h +// +// Version 1.11.4 +// +// Created by Nick Lockwood on 26/01/2011. +// Copyright 2011 Charcoal Design +// +// Distributed under the permissive zlib license +// Get the latest version from here: +// +// https://github.com/nicklockwood/iRate +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// + + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wobjc-missing-property-synthesis" + + +#import +#undef weak_delegate +#if __has_feature(objc_arc_weak) && \ +(TARGET_OS_IPHONE || __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_8) +#define weak_delegate weak +#else +#define weak_delegate unsafe_unretained +#endif + + +#import +#if TARGET_OS_IPHONE +#import +#define IRATE_EXTERN UIKIT_EXTERN +#else +#import +#define IRATE_EXTERN APPKIT_EXTERN +#endif + +//! Project version number for iRate. +FOUNDATION_EXPORT double iRateVersionNumber; + +//! Project version string for iRate. +FOUNDATION_EXPORT const unsigned char iRateVersionString[]; + +IRATE_EXTERN NSUInteger const iRateAppStoreGameGenreID; +IRATE_EXTERN NSString *const iRateErrorDomain; + +//localisation string keys +IRATE_EXTERN NSString *const iRateMessageTitleKey; //iRateMessageTitle +IRATE_EXTERN NSString *const iRateAppMessageKey; //iRateAppMessage +IRATE_EXTERN NSString *const iRateGameMessageKey; //iRateGameMessage +IRATE_EXTERN NSString *const iRateUpdateMessageKey; //iRateUpdateMessage +IRATE_EXTERN NSString *const iRateCancelButtonKey; //iRateCancelButton +IRATE_EXTERN NSString *const iRateRemindButtonKey; //iRateRemindButton +IRATE_EXTERN NSString *const iRateRateButtonKey; //iRateRateButton + +//notification keys +IRATE_EXTERN NSString *const iRateCouldNotConnectToAppStore; +IRATE_EXTERN NSString *const iRateDidDetectAppUpdate; +IRATE_EXTERN NSString *const iRateDidPromptForRating; +IRATE_EXTERN NSString *const iRateUserDidAttemptToRateApp; +IRATE_EXTERN NSString *const iRateUserDidDeclineToRateApp; +IRATE_EXTERN NSString *const iRateUserDidRequestReminderToRateApp; +IRATE_EXTERN NSString *const iRateDidOpenAppStore; + + +typedef NS_ENUM(NSUInteger, iRateErrorCode) +{ + iRateErrorBundleIdDoesNotMatchAppStore = 1, + iRateErrorApplicationNotFoundOnAppStore, + iRateErrorApplicationIsNotLatestVersion, + iRateErrorCouldNotOpenRatingPageURL +}; + + +@protocol iRateDelegate +@optional + +- (void)iRateCouldNotConnectToAppStore:(NSError *)error; +- (void)iRateDidDetectAppUpdate; +- (BOOL)iRateShouldPromptForRating; +- (void)iRateDidPromptForRating; +- (void)iRateUserDidAttemptToRateApp; +- (void)iRateUserDidDeclineToRateApp; +- (void)iRateUserDidRequestReminderToRateApp; +- (BOOL)iRateShouldOpenAppStore; +- (void)iRateDidOpenAppStore; + +@end + + +@interface iRate : NSObject + ++ (instancetype)sharedInstance; + +//app store ID - this is only needed if your +//bundle ID is not unique between iOS and Mac app stores +@property (nonatomic, assign) NSUInteger appStoreID; + +//application details - these are set automatically +@property (nonatomic, assign) NSUInteger appStoreGenreID; +@property (nonatomic, copy) NSString *appStoreCountry; +@property (nonatomic, copy) NSString *applicationName; +@property (nonatomic, copy) NSString *applicationVersion; +@property (nonatomic, copy) NSString *applicationBundleID; + +//usage settings - these have sensible defaults +@property (nonatomic, assign) NSUInteger usesUntilPrompt; +@property (nonatomic, assign) NSUInteger eventsUntilPrompt; +@property (nonatomic, assign) float daysUntilPrompt; +@property (nonatomic, assign) float usesPerWeekForPrompt; +@property (nonatomic, assign) float remindPeriod; + +//message text, you may wish to customise these +@property (nonatomic, copy) NSString *messageTitle; +@property (nonatomic, copy) NSString *message; +@property (nonatomic, copy) NSString *updateMessage; +@property (nonatomic, copy) NSString *cancelButtonLabel; +@property (nonatomic, copy) NSString *remindButtonLabel; +@property (nonatomic, copy) NSString *rateButtonLabel; + +//debugging and prompt overrides +@property (nonatomic, assign) BOOL useUIAlertControllerIfAvailable; +@property (nonatomic, assign) BOOL useAllAvailableLanguages; +@property (nonatomic, assign) BOOL promptForNewVersionIfUserRated; +@property (nonatomic, assign) BOOL onlyPromptIfLatestVersion; +@property (nonatomic, assign) BOOL onlyPromptIfMainWindowIsAvailable; +@property (nonatomic, assign) BOOL promptAtLaunch; +@property (nonatomic, assign) BOOL verboseLogging; +@property (nonatomic, assign) BOOL previewMode; + +//advanced properties for implementing custom behaviour +@property (nonatomic, strong) NSURL *ratingsURL; +@property (nonatomic, strong) NSDate *firstUsed; +@property (nonatomic, strong) NSDate *lastReminded; +@property (nonatomic, assign) NSUInteger usesCount; +@property (nonatomic, assign) NSUInteger eventCount; +@property (nonatomic, readonly) float usesPerWeek; +@property (nonatomic, assign) BOOL declinedThisVersion; +@property (nonatomic, readonly) BOOL declinedAnyVersion; +@property (nonatomic, assign) BOOL ratedThisVersion; +@property (nonatomic, readonly) BOOL ratedAnyVersion; +@property (nonatomic, weak_delegate) id delegate; + +//manually control behaviour +- (BOOL)shouldPromptForRating; +- (void)promptForRating; +- (void)promptIfNetworkAvailable; +- (void)promptIfAllCriteriaMet; +- (void)openRatingsPageInAppStore; +- (void)logEvent:(BOOL)deferPrompt; + +@end + + +#pragma clang diagnostic pop diff --git a/Clocker/Rate App/iRate.m b/Clocker/Rate App/iRate.m new file mode 100755 index 0000000..e7fc9f7 --- /dev/null +++ b/Clocker/Rate App/iRate.m @@ -0,0 +1,1195 @@ +// +// iRate.m +// +// Version 1.11.4 +// +// Created by Nick Lockwood on 26/01/2011. +// Copyright 2011 Charcoal Design +// +// Distributed under the permissive zlib license +// Get the latest version from here: +// +// https://github.com/nicklockwood/iRate +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// + + +#import "iRate.h" + + +#import +#if !__has_feature(objc_arc) +#error This class requires automatic reference counting +#endif + + +#pragma clang diagnostic ignored "-Wreceiver-is-weak" +#pragma clang diagnostic ignored "-Warc-repeated-use-of-weak" +#pragma clang diagnostic ignored "-Wobjc-missing-property-synthesis" +#pragma clang diagnostic ignored "-Wdirect-ivar-access" +#pragma clang diagnostic ignored "-Wunused-macros" +#pragma clang diagnostic ignored "-Wconversion" +#pragma clang diagnostic ignored "-Wformat-nonliteral" +#pragma clang diagnostic ignored "-Wselector" +#pragma clang diagnostic ignored "-Wgnu" + + +NSUInteger const iRateAppStoreGameGenreID = 6014; +NSString *const iRateErrorDomain = @"iRateErrorDomain"; + + +NSString *const iRateMessageTitleKey = @"iRateMessageTitle"; +NSString *const iRateAppMessageKey = @"iRateAppMessage"; +NSString *const iRateGameMessageKey = @"iRateGameMessage"; +NSString *const iRateUpdateMessageKey = @"iRateUpdateMessage"; +NSString *const iRateCancelButtonKey = @"iRateCancelButton"; +NSString *const iRateRemindButtonKey = @"iRateRemindButton"; +NSString *const iRateRateButtonKey = @"iRateRateButton"; + +NSString *const iRateCouldNotConnectToAppStore = @"iRateCouldNotConnectToAppStore"; +NSString *const iRateDidDetectAppUpdate = @"iRateDidDetectAppUpdate"; +NSString *const iRateDidPromptForRating = @"iRateDidPromptForRating"; +NSString *const iRateUserDidAttemptToRateApp = @"iRateUserDidAttemptToRateApp"; +NSString *const iRateUserDidDeclineToRateApp = @"iRateUserDidDeclineToRateApp"; +NSString *const iRateUserDidRequestReminderToRateApp = @"iRateUserDidRequestReminderToRateApp"; +NSString *const iRateDidOpenAppStore = @"iRateDidOpenAppStore"; + +static NSString *const iRateAppStoreIDKey = @"iRateAppStoreID"; +static NSString *const iRateRatedVersionKey = @"iRateRatedVersionChecked"; +static NSString *const iRateDeclinedVersionKey = @"iRateDeclinedVersion"; +static NSString *const iRateLastRemindedKey = @"iRateLastReminded"; +static NSString *const iRateLastVersionUsedKey = @"iRateLastVersionUsed"; +static NSString *const iRateFirstUsedKey = @"iRateFirstUsed"; +static NSString *const iRateUseCountKey = @"iRateUseCount"; +static NSString *const iRateEventCountKey = @"iRateEventCount"; + +static NSString *const iRateMacAppStoreBundleID = @"com.apple.appstore"; +static NSString *const iRateAppLookupURLFormat = @"https://itunes.apple.com/%@/lookup"; + +static NSString *const iRateiOSAppStoreURLScheme = @"itms-apps"; +static NSString *const iRateiOSAppStoreURLFormat = @"itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=%@&pageNumber=0&sortOrdering=2&mt=8"; +static NSString *const iRateiOS7AppStoreURLFormat = @"itms-apps://itunes.apple.com/app/id%@"; +static NSString *const iRateMacAppStoreURLFormat = @"macappstore://itunes.apple.com/app/id%@"; + + +#define SECONDS_IN_A_DAY 86400.0 +#define SECONDS_IN_A_WEEK 604800.0 +#define MAC_APP_STORE_REFRESH_DELAY 5.0 +#define REQUEST_TIMEOUT 60.0 + + +@implementation NSObject (iRate) + +- (void)iRateCouldNotConnectToAppStore:(__unused NSError *)error {} +- (void)iRateDidDetectAppUpdate {} +- (BOOL)iRateShouldPromptForRating { return YES; } +- (void)iRateDidPromptForRating {} +- (void)iRateUserDidAttemptToRateApp {} +- (void)iRateUserDidDeclineToRateApp {} +- (void)iRateUserDidRequestReminderToRateApp {} +- (BOOL)iRateShouldOpenAppStore { return YES; } +- (void)iRateDidOpenAppStore {} + +@end + + +@interface iRate() + +@property (nonatomic, strong) id visibleAlert; +@property (nonatomic, assign) BOOL checkingForPrompt; +@property (nonatomic, assign) BOOL checkingForAppStoreID; + +@end + + +@implementation iRate + ++ (void)load +{ + [self performSelectorOnMainThread:@selector(sharedInstance) withObject:nil waitUntilDone:NO]; +} + ++ (instancetype)sharedInstance +{ + static iRate *sharedInstance = nil; + if (sharedInstance == nil) + { + sharedInstance = [(iRate *)[self alloc] init]; + } + return sharedInstance; +} + +- (NSString *)localizedStringForKey:(NSString *)key withDefault:(NSString *)defaultString +{ + static NSBundle *bundle = nil; + if (bundle == nil) + { + NSString *bundlePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"iRate" ofType:@"bundle"]; + if (self.useAllAvailableLanguages) + { + bundle = [NSBundle bundleWithPath:bundlePath]; + NSString *language = [[NSLocale preferredLanguages] count]? [NSLocale preferredLanguages][0]: @"en"; + if (![[bundle localizations] containsObject:language]) + { + language = [language componentsSeparatedByString:@"-"][0]; + } + if ([[bundle localizations] containsObject:language]) + { + bundlePath = [bundle pathForResource:language ofType:@"lproj"]; + } + } + bundle = [NSBundle bundleWithPath:bundlePath] ?: [NSBundle mainBundle]; + } + defaultString = [bundle localizedStringForKey:key value:defaultString table:nil]; + return [[NSBundle mainBundle] localizedStringForKey:key value:defaultString table:nil]; +} + +- (iRate *)init +{ + if ((self = [super init])) + { + +#if TARGET_OS_IPHONE + + //register for iphone application events + if (&UIApplicationWillEnterForegroundNotification) + { + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(applicationWillEnterForeground) + name:UIApplicationWillEnterForegroundNotification + object:nil]; + } + +#endif + + //get country + self.appStoreCountry = [(NSLocale *)[NSLocale currentLocale] objectForKey:NSLocaleCountryCode]; + if ([self.appStoreCountry isEqualToString:@"150"]) + { + self.appStoreCountry = @"eu"; + } + else if (!self.appStoreCountry || [[self.appStoreCountry stringByReplacingOccurrencesOfString:@"[A-Za-z]{2}" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, 2)] length]) + { + self.appStoreCountry = @"us"; + } + + //application version (use short version preferentially) + self.applicationVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; + if ([self.applicationVersion length] == 0) + { + self.applicationVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; + } + + //localised application name + self.applicationName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]; + if ([self.applicationName length] == 0) + { + self.applicationName = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleNameKey]; + } + + //bundle id + self.applicationBundleID = [[NSBundle mainBundle] bundleIdentifier]; + + //default settings + self.useAllAvailableLanguages = YES; + self.promptForNewVersionIfUserRated = NO; + self.onlyPromptIfLatestVersion = YES; + self.onlyPromptIfMainWindowIsAvailable = YES; + self.promptAtLaunch = YES; + self.usesUntilPrompt = 10; + self.eventsUntilPrompt = 10; + self.daysUntilPrompt = 10.0f; + self.usesPerWeekForPrompt = 0.0f; + self.remindPeriod = 1.0f; + self.verboseLogging = NO; + self.previewMode = NO; + +#if DEBUG + + //enable verbose logging in debug mode + self.verboseLogging = YES; + NSLog(@"iRate verbose logging enabled."); + +#endif + + //app launched + [self performSelectorOnMainThread:@selector(applicationLaunched) withObject:nil waitUntilDone:NO]; + } + return self; +} + +- (id)delegate +{ + if (_delegate == nil) + { + +#if TARGET_OS_IPHONE +#define APP_CLASS UIApplication +#else +#define APP_CLASS NSApplication +#endif + + _delegate = (id)[[APP_CLASS sharedApplication] delegate]; + } + return _delegate; +} + +- (NSString *)messageTitle +{ + return [_messageTitle ?: [self localizedStringForKey:iRateMessageTitleKey withDefault:@"Rate %@"] stringByReplacingOccurrencesOfString:@"%@" withString:self.applicationName]; +} + +- (NSString *)message +{ + NSString *message = _message; + if (!message) + { + message = (self.appStoreGenreID == iRateAppStoreGameGenreID)? [self localizedStringForKey:iRateGameMessageKey withDefault:@"If you enjoy playing %@, would you mind taking a moment to rate it? It won’t take more than a minute. Thanks for your support!"]: [self localizedStringForKey:iRateAppMessageKey withDefault:@"If you enjoy using %@, would you mind taking a moment to rate it? It won’t take more than a minute. Thanks for your support!"]; + } + return [message stringByReplacingOccurrencesOfString:@"%@" withString:self.applicationName]; +} + +- (NSString *)updateMessage +{ + NSString *updateMessage = _updateMessage; + if (!updateMessage) + { + updateMessage = [self localizedStringForKey:iRateUpdateMessageKey withDefault:self.message]; + } + return [updateMessage stringByReplacingOccurrencesOfString:@"%@" withString:self.applicationName]; +} + +- (NSString *)cancelButtonLabel +{ + return _cancelButtonLabel ?: [self localizedStringForKey:iRateCancelButtonKey withDefault:@"No, Thanks"]; +} + +- (NSString *)rateButtonLabel +{ + return _rateButtonLabel ?: [self localizedStringForKey:iRateRateButtonKey withDefault:@"Rate It Now"]; +} + +- (NSString *)remindButtonLabel +{ + return _remindButtonLabel ?: [self localizedStringForKey:iRateRemindButtonKey withDefault:@"Remind Me Later"]; +} + +- (NSURL *)ratingsURL +{ + if (_ratingsURL) + { + return _ratingsURL; + } + + if (!self.appStoreID && self.verboseLogging) + { + NSLog(@"iRate could not find the App Store ID for this application. If the application is not intended for App Store release then you must specify a custom ratingsURL."); + } + + NSString *URLString; + +#if TARGET_OS_IPHONE + + float iOSVersion = [[UIDevice currentDevice].systemVersion floatValue]; + if (iOSVersion >= 7.0f && iOSVersion < 7.1f) + { + URLString = iRateiOS7AppStoreURLFormat; + } + else + { + URLString = iRateiOSAppStoreURLFormat; + } + +#else + + URLString = iRateMacAppStoreURLFormat; + +#endif + + return [NSURL URLWithString:[NSString stringWithFormat:URLString, @(self.appStoreID)]]; + +} + +- (NSUInteger)appStoreID +{ + return _appStoreID ?: [[[NSUserDefaults standardUserDefaults] objectForKey:iRateAppStoreIDKey] unsignedIntegerValue]; +} + +- (NSDate *)firstUsed +{ + return [[NSUserDefaults standardUserDefaults] objectForKey:iRateFirstUsedKey]; +} + +- (void)setFirstUsed:(NSDate *)date +{ + [[NSUserDefaults standardUserDefaults] setObject:date forKey:iRateFirstUsedKey]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +- (NSDate *)lastReminded +{ + return [[NSUserDefaults standardUserDefaults] objectForKey:iRateLastRemindedKey]; +} + +- (void)setLastReminded:(NSDate *)date +{ + [[NSUserDefaults standardUserDefaults] setObject:date forKey:iRateLastRemindedKey]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +- (NSUInteger)usesCount +{ + return [[NSUserDefaults standardUserDefaults] integerForKey:iRateUseCountKey]; +} + +- (void)setUsesCount:(NSUInteger)count +{ + [[NSUserDefaults standardUserDefaults] setInteger:(NSInteger)count forKey:iRateUseCountKey]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +- (NSUInteger)eventCount +{ + return [[NSUserDefaults standardUserDefaults] integerForKey:iRateEventCountKey]; +} + +- (void)setEventCount:(NSUInteger)count +{ + [[NSUserDefaults standardUserDefaults] setInteger:(NSInteger)count forKey:iRateEventCountKey]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +- (float)usesPerWeek +{ + return (float)self.usesCount / ([[NSDate date] timeIntervalSinceDate:self.firstUsed] / SECONDS_IN_A_WEEK); +} + +- (BOOL)declinedThisVersion +{ + return [[[NSUserDefaults standardUserDefaults] objectForKey:iRateDeclinedVersionKey] isEqualToString:self.applicationVersion]; +} + +- (void)setDeclinedThisVersion:(BOOL)declined +{ + [[NSUserDefaults standardUserDefaults] setObject:(declined? self.applicationVersion: nil) forKey:iRateDeclinedVersionKey]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +- (BOOL)declinedAnyVersion +{ + return [(NSString *)[[NSUserDefaults standardUserDefaults] objectForKey:iRateDeclinedVersionKey] length] != 0; +} + +- (BOOL)ratedVersion:(NSString *)version +{ + return [[[NSUserDefaults standardUserDefaults] objectForKey:iRateRatedVersionKey] isEqualToString:version]; +} + +- (BOOL)ratedThisVersion +{ + return [self ratedVersion:self.applicationVersion]; +} + +- (void)setRatedThisVersion:(BOOL)rated +{ + [[NSUserDefaults standardUserDefaults] setObject:(rated? self.applicationVersion: nil) forKey:iRateRatedVersionKey]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +- (BOOL)ratedAnyVersion +{ + return [(NSString *)[[NSUserDefaults standardUserDefaults] objectForKey:iRateRatedVersionKey] length] != 0; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (void)incrementUseCount +{ + self.usesCount ++; +} + +- (void)incrementEventCount +{ + self.eventCount ++; +} + +- (BOOL)shouldPromptForRating +{ + //preview mode? + if (self.previewMode) + { + NSLog(@"iRate preview mode is enabled - make sure you disable this for release"); + return YES; + } + + //check if we've rated this version + else if (self.ratedThisVersion) + { + if (self.verboseLogging) + { + NSLog(@"iRate did not prompt for rating because the user has already rated this version"); + } + return NO; + } + + //check if we've rated any version + else if (self.ratedAnyVersion && !self.promptForNewVersionIfUserRated) + { + if (self.verboseLogging) + { + NSLog(@"iRate did not prompt for rating because the user has already rated this app, and promptForNewVersionIfUserRated is disabled"); + } + return NO; + } + + //check if we've declined to rate the app + else if (self.declinedAnyVersion) + { + if (self.verboseLogging) + { + NSLog(@"iRate did not prompt for rating because the user has declined to rate the app"); + } + return NO; + } + + //check how long we've been using this version + else if ([[NSDate date] timeIntervalSinceDate:self.firstUsed] < self.daysUntilPrompt * SECONDS_IN_A_DAY) + { + if (self.verboseLogging) + { + NSLog(@"iRate did not prompt for rating because the app was first used less than %g days ago", self.daysUntilPrompt); + } + return NO; + } + + //check how many times we've used it and the number of significant events + else if (self.usesCount < self.usesUntilPrompt && self.eventCount < self.eventsUntilPrompt) + { + if (self.verboseLogging) + { + NSLog(@"iRate did not prompt for rating because the app has only been used %@ times and only %@ events have been logged", @(self.usesCount), @(self.eventCount)); + } + return NO; + } + + //check if usage frequency is high enough + else if (self.usesPerWeek < self.usesPerWeekForPrompt) + { + if (self.verboseLogging) + { + NSLog(@"iRate did not prompt for rating because the app has only been used %g times per week on average since it was installed", self.usesPerWeek); + } + return NO; + } + + //check if within the reminder period + else if (self.lastReminded != nil && [[NSDate date] timeIntervalSinceDate:self.lastReminded] < self.remindPeriod * SECONDS_IN_A_DAY) + { + if (self.verboseLogging) + { + NSLog(@"iRate did not prompt for rating because the user last asked to be reminded less than %g days ago", self.remindPeriod); + } + return NO; + } + + //lets prompt! + return YES; +} + +- (NSString *)valueForKey:(NSString *)key inJSON:(id)json +{ + if ([json isKindOfClass:[NSString class]]) + { + //use legacy parser + NSRange keyRange = [json rangeOfString:[NSString stringWithFormat:@"\"%@\"", key]]; + if (keyRange.location != NSNotFound) + { + NSInteger start = keyRange.location + keyRange.length; + NSRange valueStart = [json rangeOfString:@":" options:(NSStringCompareOptions)0 range:NSMakeRange(start, [(NSString *)json length] - start)]; + if (valueStart.location != NSNotFound) + { + start = valueStart.location + 1; + NSRange valueEnd = [json rangeOfString:@"," options:(NSStringCompareOptions)0 range:NSMakeRange(start, [(NSString *)json length] - start)]; + if (valueEnd.location != NSNotFound) + { + NSString *value = [json substringWithRange:NSMakeRange(start, valueEnd.location - start)]; + value = [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + while ([value hasPrefix:@"\""] && ![value hasSuffix:@"\""]) + { + if (valueEnd.location == NSNotFound) + { + break; + } + NSInteger newStart = valueEnd.location + 1; + valueEnd = [json rangeOfString:@"," options:(NSStringCompareOptions)0 range:NSMakeRange(newStart, [(NSString *)json length] - newStart)]; + value = [json substringWithRange:NSMakeRange(start, valueEnd.location - start)]; + value = [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + } + + value = [value stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\""]]; + value = [value stringByReplacingOccurrencesOfString:@"\\\\" withString:@"\\"]; + value = [value stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"]; + value = [value stringByReplacingOccurrencesOfString:@"\\\"" withString:@"\""]; + value = [value stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"]; + value = [value stringByReplacingOccurrencesOfString:@"\\r" withString:@"\r"]; + value = [value stringByReplacingOccurrencesOfString:@"\\t" withString:@"\t"]; + value = [value stringByReplacingOccurrencesOfString:@"\\f" withString:@"\f"]; + value = [value stringByReplacingOccurrencesOfString:@"\\b" withString:@"\f"]; + + while (YES) + { + NSRange unicode = [value rangeOfString:@"\\u"]; + if (unicode.location == NSNotFound || unicode.location + unicode.length == 0) + { + break; + } + + uint32_t c = 0; + NSString *hex = [value substringWithRange:NSMakeRange(unicode.location + 2, 4)]; + NSScanner *scanner = [NSScanner scannerWithString:hex]; + [scanner scanHexInt:&c]; + + if (c <= 0xffff) + { + value = [value stringByReplacingCharactersInRange:NSMakeRange(unicode.location, 6) withString:[NSString stringWithFormat:@"%C", (unichar)c]]; + } + else + { + //convert character to surrogate pair + uint16_t x = (uint16_t)c; + uint16_t u = (c >> 16) & ((1 << 5) - 1); + uint16_t w = (uint16_t)u - 1; + unichar high = 0xd800 | (w << 6) | x >> 10; + unichar low = (uint16_t)(0xdc00 | (x & ((1 << 10) - 1))); + + value = [value stringByReplacingCharactersInRange:NSMakeRange(unicode.location, 6) withString:[NSString stringWithFormat:@"%C%C", high, low]]; + } + } + return value; + } + } + } + } + else + { + return json[key]; + } + return nil; +} + +- (void)setAppStoreIDOnMainThread:(NSString *)appStoreIDString +{ + _appStoreID = [appStoreIDString integerValue]; + [[NSUserDefaults standardUserDefaults] setInteger:_appStoreID forKey:iRateAppStoreIDKey]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +- (void)connectionSucceeded +{ + if (self.checkingForAppStoreID) + { + //no longer checking + self.checkingForPrompt = NO; + self.checkingForAppStoreID = NO; + + //open app store + [self openRatingsPageInAppStore]; + } + else if (self.checkingForPrompt) + { + //no longer checking + self.checkingForPrompt = NO; + + //confirm with delegate + if (![self.delegate iRateShouldPromptForRating]) + { + if (self.verboseLogging) + { + NSLog(@"iRate did not display the rating prompt because the iRateShouldPromptForRating delegate method returned NO"); + } + return; + } + + //prompt user + [self promptForRating]; + } +} + +- (void)connectionError:(NSError *)error +{ + if (self.checkingForPrompt || self.checkingForAppStoreID) + { + //no longer checking + self.checkingForPrompt = NO; + self.checkingForAppStoreID = NO; + + //log the error + if (error) + { + NSLog(@"iRate rating process failed because: %@", [error localizedDescription]); + } + else + { + NSLog(@"iRate rating process failed because an unknown error occured"); + } + + //could not connect + [self.delegate iRateCouldNotConnectToAppStore:error]; + [[NSNotificationCenter defaultCenter] postNotificationName:iRateCouldNotConnectToAppStore + object:error]; + } +} + +- (void)checkForConnectivityInBackground +{ + if ([NSThread isMainThread]) + { + [self performSelectorInBackground:@selector(checkForConnectivityInBackground) withObject:nil]; + return; + } + + @autoreleasepool + { + //prevent concurrent checks + static BOOL checking = NO; + if (checking) return; + checking = YES; + + //first check iTunes + NSString *iTunesServiceURL = [NSString stringWithFormat:iRateAppLookupURLFormat, self.appStoreCountry]; + if (_appStoreID) //important that we check ivar and not getter in case it has changed + { + iTunesServiceURL = [iTunesServiceURL stringByAppendingFormat:@"?id=%@", @(_appStoreID)]; + } + else + { + iTunesServiceURL = [iTunesServiceURL stringByAppendingFormat:@"?bundleId=%@", self.applicationBundleID]; + } + + if (self.verboseLogging) + { + NSLog(@"iRate is checking %@ to retrieve the App Store details...", iTunesServiceURL); + } + + NSError *error = nil; + NSURLResponse *response = nil; + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:iTunesServiceURL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:REQUEST_TIMEOUT]; + NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; + NSInteger statusCode = ((NSHTTPURLResponse *)response).statusCode; + if (data && statusCode == 200) + { + //in case error is garbage... + error = nil; + + id json = nil; + if ([NSJSONSerialization class]) + { + json = [[NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingOptions)0 error:&error][@"results"] lastObject]; + } + else + { + //convert to string + json = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + } + + if (!error) + { + //check bundle ID matches + NSString *bundleID = [self valueForKey:@"bundleId" inJSON:json]; + if (bundleID) + { + if ([bundleID isEqualToString:self.applicationBundleID]) + { + //get genre + if (self.appStoreGenreID == 0) + { + self.appStoreGenreID = [[self valueForKey:@"primaryGenreId" inJSON:json] integerValue]; + } + + //get app id + if (!_appStoreID) + { + NSString *appStoreIDString = [self valueForKey:@"trackId" inJSON:json]; + [self performSelectorOnMainThread:@selector(setAppStoreIDOnMainThread:) withObject:appStoreIDString waitUntilDone:YES]; + + if (self.verboseLogging) + { + NSLog(@"iRate found the app on iTunes. The App Store ID is %@", appStoreIDString); + } + } + + //check version + if (self.onlyPromptIfLatestVersion && !self.previewMode) + { + NSString *latestVersion = [self valueForKey:@"version" inJSON:json]; + if ([latestVersion compare:self.applicationVersion options:NSNumericSearch] == NSOrderedDescending) + { + if (self.verboseLogging) + { + NSLog(@"iRate found that the installed application version (%@) is not the latest version on the App Store, which is %@", self.applicationVersion, latestVersion); + } + + error = [NSError errorWithDomain:iRateErrorDomain code:iRateErrorApplicationIsNotLatestVersion userInfo:@{NSLocalizedDescriptionKey: @"Installed app is not the latest version available"}]; + } + } + } + else + { + if (self.verboseLogging) + { + NSLog(@"iRate found that the application bundle ID (%@) does not match the bundle ID of the app found on iTunes (%@) with the specified App Store ID (%@)", self.applicationBundleID, bundleID, @(self.appStoreID)); + } + + error = [NSError errorWithDomain:iRateErrorDomain code:iRateErrorBundleIdDoesNotMatchAppStore userInfo:@{NSLocalizedDescriptionKey: [NSString stringWithFormat:@"Application bundle ID does not match expected value of %@", bundleID]}]; + } + } + else if (_appStoreID || !self.ratingsURL) + { + if (self.verboseLogging) + { + NSLog(@"iRate could not find this application on iTunes. If your app is not intended for App Store release then you must specify a custom ratingsURL. If this is the first release of your application then it's not a problem that it cannot be found on the store yet"); + } + if (!self.previewMode) + { + error = [NSError errorWithDomain:iRateErrorDomain + code:iRateErrorApplicationNotFoundOnAppStore + userInfo:@{NSLocalizedDescriptionKey: @"The application could not be found on the App Store."}]; + } + } + else if (!_appStoreID && self.verboseLogging) + { + NSLog(@"iRate could not find your app on iTunes. If your app is not yet on the store or is not intended for App Store release then don't worry about this"); + } + } + } + else if (statusCode >= 400) + { + //http error + NSString *message = [NSString stringWithFormat:@"The server returned a %@ error", @(statusCode)]; + error = [NSError errorWithDomain:@"HTTPResponseErrorDomain" code:statusCode userInfo:@{NSLocalizedDescriptionKey: message}]; + } + + //handle errors (ignoring sandbox issues) + if (error && !(error.code == EPERM && [error.domain isEqualToString:NSPOSIXErrorDomain] && _appStoreID)) + { + [self performSelectorOnMainThread:@selector(connectionError:) withObject:error waitUntilDone:YES]; + } + else if (self.appStoreID || self.previewMode) + { + //show prompt + [self performSelectorOnMainThread:@selector(connectionSucceeded) withObject:nil waitUntilDone:YES]; + } + + //finished + checking = NO; + } +} + +- (void)promptIfNetworkAvailable +{ + if (!self.checkingForPrompt && !self.checkingForAppStoreID) + { + self.checkingForPrompt = YES; + [self checkForConnectivityInBackground]; + } +} + +- (void)promptIfAllCriteriaMet +{ + if ([self shouldPromptForRating]) + { + [self promptIfNetworkAvailable]; + } +} + +- (BOOL)showRemindButton +{ + return [self.remindButtonLabel length]; +} + +- (BOOL)showCancelButton +{ + return [self.cancelButtonLabel length]; +} + +- (void)promptForRating +{ + if (!self.visibleAlert) + { + NSString *message = self.ratedAnyVersion? self.updateMessage: self.message; + +#if TARGET_OS_IPHONE + + UIViewController *topController = [UIApplication sharedApplication].delegate.window.rootViewController; + while (topController.presentedViewController) + { + topController = topController.presentedViewController; + } + + if ([UIAlertController class] && topController && self.useUIAlertControllerIfAvailable) + { + UIAlertController *alert = [UIAlertController alertControllerWithTitle:self.messageTitle message:message preferredStyle:UIAlertControllerStyleAlert]; + + //rate action + [alert addAction:[UIAlertAction actionWithTitle:self.rateButtonLabel style:UIAlertActionStyleDefault handler:^(__unused UIAlertAction *action) { + [self didDismissAlert:alert withButtonAtIndex:0]; + }]]; + + //cancel action + if ([self showCancelButton]) + { + [alert addAction:[UIAlertAction actionWithTitle:self.cancelButtonLabel style:UIAlertActionStyleCancel handler:^(__unused UIAlertAction *action) { + [self didDismissAlert:alert withButtonAtIndex:1]; + }]]; + } + + //remind action + if ([self showRemindButton]) + { + [alert addAction:[UIAlertAction actionWithTitle:self.remindButtonLabel style:UIAlertActionStyleDefault handler:^(__unused UIAlertAction *action) { + [self didDismissAlert:alert withButtonAtIndex:[self showCancelButton]? 2: 1]; + }]]; + } + + self.visibleAlert = alert; + + //get current view controller and present alert + [topController presentViewController:alert animated:YES completion:NULL]; + } + else + { + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:self.messageTitle + message:message + delegate:(id)self + cancelButtonTitle:nil + otherButtonTitles:self.rateButtonLabel, nil]; + if ([self showCancelButton]) + { + [alert addButtonWithTitle:self.cancelButtonLabel]; + alert.cancelButtonIndex = 1; + } + + if ([self showRemindButton]) + { + [alert addButtonWithTitle:self.remindButtonLabel]; + } + + self.visibleAlert = alert; + [self.visibleAlert show]; + } + +#else + + //only show when main window is available + if (self.onlyPromptIfMainWindowIsAvailable && ![[NSApplication sharedApplication] mainWindow]) + { + [self performSelector:@selector(promptForRating) withObject:nil afterDelay:0.5]; + return; + } + + NSAlert *alert = [[NSAlert alloc] init]; + alert.messageText = self.messageTitle; + alert.informativeText = message; + [alert addButtonWithTitle:self.rateButtonLabel]; + if ([self showCancelButton]) + { + [alert addButtonWithTitle:self.cancelButtonLabel]; + } + if ([self showRemindButton]) + { + [alert addButtonWithTitle:self.remindButtonLabel]; + } + + self.visibleAlert = alert; + +#if __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_9 + + if (![alert respondsToSelector:@selector(beginSheetModalForWindow:completionHandler:)]) + { + [alert beginSheetModalForWindow:[NSApplication sharedApplication].mainWindow + modalDelegate:self + didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:) + contextInfo:nil]; + } + else + +#endif + + { +// [alert beginSheetModalForWindow:[NSApplication sharedApplication].mainWindow completionHandler:^(NSModalResponse returnCode) { +// [self didDismissAlert:alert withButtonAtIndex:returnCode - NSAlertFirstButtonReturn]; +// }]; + + NSModalResponse modalResponse = [alert runModal]; + NSLog(@"Modal response code:%zd", modalResponse); + if (modalResponse == NSModalResponseStop) { + [self rate]; + } + else + { + [self remindLater]; + } + } + +#endif + + //inform about prompt + [self.delegate iRateDidPromptForRating]; + [[NSNotificationCenter defaultCenter] postNotificationName:iRateDidPromptForRating + object:nil]; + } +} + +- (void)applicationLaunched +{ + //check if this is a new version + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *lastUsedVersion = [defaults objectForKey:iRateLastVersionUsedKey]; + if (!self.firstUsed || ![lastUsedVersion isEqualToString:self.applicationVersion]) + { + [defaults setObject:self.applicationVersion forKey:iRateLastVersionUsedKey]; + if (!self.firstUsed || [self ratedAnyVersion]) + { + //reset defaults + [defaults setObject:[NSDate date] forKey:iRateFirstUsedKey]; + [defaults setInteger:0 forKey:iRateUseCountKey]; + [defaults setInteger:0 forKey:iRateEventCountKey]; + [defaults setObject:nil forKey:iRateLastRemindedKey]; + [defaults synchronize]; + } + else if ([[NSDate date] timeIntervalSinceDate:self.firstUsed] > (self.daysUntilPrompt - 1) * SECONDS_IN_A_DAY) + { + //if was previously installed, but we haven't yet prompted for a rating + //don't reset, but make sure it won't rate for a day at least + self.firstUsed = [[NSDate date] dateByAddingTimeInterval:(self.daysUntilPrompt - 1) * -SECONDS_IN_A_DAY]; + } + + //inform about app update + [self.delegate iRateDidDetectAppUpdate]; + [[NSNotificationCenter defaultCenter] postNotificationName:iRateDidDetectAppUpdate + object:nil]; + } + + [self incrementUseCount]; + [self checkForConnectivityInBackground]; + if (self.promptAtLaunch) + { + [self promptIfAllCriteriaMet]; + } +} + +- (void)didDismissAlert:(__unused id)alertView withButtonAtIndex:(NSInteger)buttonIndex +{ + //get button indices + NSInteger rateButtonIndex = 0; + NSInteger cancelButtonIndex = [self showCancelButton]? 1: 0; + NSInteger remindButtonIndex = [self showRemindButton]? cancelButtonIndex + 1: 0; + + if (buttonIndex == rateButtonIndex) + { + [self rate]; + } + else if (buttonIndex == cancelButtonIndex) + { + [self declineThisVersion]; + } + else if (buttonIndex == remindButtonIndex) + { + [self remindLater]; + } + + //release alert + self.visibleAlert = nil; +} + +#if TARGET_OS_IPHONE + +- (void)applicationWillEnterForeground +{ + if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) + { + [self incrementUseCount]; + [self checkForConnectivityInBackground]; + if (self.promptAtLaunch) + { + [self promptIfAllCriteriaMet]; + } + } +} + +- (void)openRatingsPageInAppStore +{ + if (!_ratingsURL && !self.appStoreID) + { + self.checkingForAppStoreID = YES; + if (!self.checkingForPrompt) + { + [self checkForConnectivityInBackground]; + } + return; + } + + NSString *cantOpenMessage = nil; + +#if TARGET_IPHONE_SIMULATOR + + if ([[self.ratingsURL scheme] isEqualToString:iRateiOSAppStoreURLScheme]) + { + cantOpenMessage = @"iRate could not open the ratings page because the App Store is not available on the iOS simulator"; + } + +#elif DEBUG + + if (![[UIApplication sharedApplication] canOpenURL:self.ratingsURL]) + { + cantOpenMessage = [NSString stringWithFormat:@"iRate was unable to open the specified ratings URL: %@", self.ratingsURL]; + } + +#endif + + if (cantOpenMessage) + { + NSLog(@"%@", cantOpenMessage); + NSError *error = [NSError errorWithDomain:iRateErrorDomain code:iRateErrorCouldNotOpenRatingPageURL userInfo:@{NSLocalizedDescriptionKey: cantOpenMessage}]; + [self.delegate iRateCouldNotConnectToAppStore:error]; + [[NSNotificationCenter defaultCenter] postNotificationName:iRateCouldNotConnectToAppStore + object:error]; + } + else + { + if (self.verboseLogging) + { + NSLog(@"iRate will open the App Store ratings page using the following URL: %@", self.ratingsURL); + } + + [[UIApplication sharedApplication] openURL:self.ratingsURL]; + [self.delegate iRateDidOpenAppStore]; + [[NSNotificationCenter defaultCenter] postNotificationName:iRateDidOpenAppStore + object:nil]; + } +} + +- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex +{ + [self didDismissAlert:alertView withButtonAtIndex:buttonIndex]; +} + +#else + +- (void)openAppPageWhenAppStoreLaunched +{ + //check if app store is running + for (NSRunningApplication *app in [[NSWorkspace sharedWorkspace] runningApplications]) + { + if ([app.bundleIdentifier isEqualToString:iRateMacAppStoreBundleID]) + { + //open app page + [[NSWorkspace sharedWorkspace] performSelector:@selector(openURL:) withObject:self.ratingsURL afterDelay:MAC_APP_STORE_REFRESH_DELAY]; + return; + } + } + + //try again + [self performSelector:@selector(openAppPageWhenAppStoreLaunched) withObject:nil afterDelay:0.0]; +} + +- (void)openRatingsPageInAppStore +{ + if (!_ratingsURL && !self.appStoreID) + { + self.checkingForAppStoreID = YES; + if (!self.checkingForPrompt) + { + [self checkForConnectivityInBackground]; + } + return; + } + + if (self.verboseLogging) + { + NSLog(@"iRate will open the App Store ratings page using the following URL: %@", self.ratingsURL); + } + + [[NSWorkspace sharedWorkspace] openURL:self.ratingsURL]; + [self openAppPageWhenAppStoreLaunched]; + [self.delegate iRateDidOpenAppStore]; +} + +- (void)alertDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(__unused void *)contextInfo +{ + [self didDismissAlert:alert withButtonAtIndex:returnCode - NSAlertFirstButtonReturn]; +} + +#endif + +- (void)logEvent:(BOOL)deferPrompt +{ + [self incrementEventCount]; + if (!deferPrompt) + { + [self promptIfAllCriteriaMet]; + } +} + +#pragma mark - User's actions + +- (void)declineThisVersion +{ + //ignore this version + self.declinedThisVersion = YES; + + //log event + [self.delegate iRateUserDidDeclineToRateApp]; + [[NSNotificationCenter defaultCenter] postNotificationName:iRateUserDidDeclineToRateApp + object:nil]; +} + +- (void)remindLater +{ + //remind later + self.lastReminded = [NSDate date]; + + //log event + [self.delegate iRateUserDidRequestReminderToRateApp]; + [[NSNotificationCenter defaultCenter] postNotificationName:iRateUserDidRequestReminderToRateApp + object:nil]; +} + +- (void)rate +{ + //mark as rated + self.ratedThisVersion = YES; + + //log event + [self.delegate iRateUserDidAttemptToRateApp]; + [[NSNotificationCenter defaultCenter] postNotificationName:iRateUserDidAttemptToRateApp + object:nil]; + + if ([self.delegate iRateShouldOpenAppStore]) + { + //launch mac app store + [self openRatingsPageInAppStore]; + } +} + +@end diff --git a/Clocker/de.lproj/Localizable.strings b/Clocker/de.lproj/Localizable.strings new file mode 100644 index 0000000..fd9be7a --- /dev/null +++ b/Clocker/de.lproj/Localizable.strings @@ -0,0 +1,19 @@ +/* + Localizable.strings + Clocker + + Created by Abhishek Banthia on 11/17/15. + +*/ + +"Yesterday" = "Gestern"; +"Today" = "Heute"; +"Tomorrow" = "Morgen"; +"MaximumTimezoneMessage" = "Maximal 10 Zeitzonen erlaubt!"; +"DuplicateTimezoneMessage" = "Zeitzone bereits angewählt!"; +"iRateMessageTitle" = "Bewerte %@"; +"iRateAppMessage" = "Wenn dir %@ gefällt, würdest Du es bitte bewerten? Dies wird nicht länger als eine Minute dauern. Danke für die Unterstützung!"; +"iRateGameMessage" = "Wenn dir %@ gefällt, würdest Du es bitte bewerten? Dies wird nicht länger als eine Minute dauern. Danke für die Unterstützung!"; +"iRateCancelButton" = "Nein, danke"; +"iRateRateButton" = "Jetzt bewerten"; +"iRateRemindButton" = "Später erinnern"; \ No newline at end of file diff --git a/Clocker/de.lproj/MainMenu.xib b/Clocker/de.lproj/MainMenu.xib new file mode 100755 index 0000000..926bcde --- /dev/null +++ b/Clocker/de.lproj/MainMenu.xib @@ -0,0 +1,652 @@ + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Clocker/de.lproj/Panel.xib b/Clocker/de.lproj/Panel.xib new file mode 100755 index 0000000..5ad46fb --- /dev/null +++ b/Clocker/de.lproj/Panel.xib @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Clocker/de.lproj/PreferencesWindow.xib b/Clocker/de.lproj/PreferencesWindow.xib new file mode 100644 index 0000000..08d4b63 --- /dev/null +++ b/Clocker/de.lproj/PreferencesWindow.xib @@ -0,0 +1,374 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + addToFavorites: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Clocker/en.lproj/Localizable.strings b/Clocker/en.lproj/Localizable.strings index e85e253..82cbfec 100644 --- a/Clocker/en.lproj/Localizable.strings +++ b/Clocker/en.lproj/Localizable.strings @@ -9,8 +9,11 @@ "Yesterday" = "Yesterday"; "Today" = "Today"; "Tomorrow" = "Tomorrow"; -"SpreadTheWordTitle" = "Spread the word, maybe"; -"SpreadTheWordMessage" = "Clocker is completely open source. If it helped you in any way, please leave a kind of opinion on the App Store!"; -"Cancel" = "Cancel"; "MaximumTimezoneMessage" = "Maximum 10 timezones allowed!"; -"DuplicateTimezoneMessage" = "Timezone has already been selected!"; \ No newline at end of file +"DuplicateTimezoneMessage" = "Timezone has already been selected!"; +"iRateMessageTitle" = "Rate %@"; +"iRateAppMessage" = "If you enjoy using %@, would you mind taking a moment to rate it? It won’t take more than a minute. Thanks for your support!"; +"iRateGameMessage" = "If you enjoy playing %@, would you mind taking a moment to rate it? It won’t take more than a minute. Thanks for your support!"; +"iRateCancelButton" = "No, Thanks"; +"iRateRateButton" = "Rate It Now"; +"iRateRemindButton" = "Remind Me Later"; \ No newline at end of file diff --git a/Clocker/fr.lproj/Localizable.strings b/Clocker/fr.lproj/Localizable.strings index 71962c3..4a87af9 100644 --- a/Clocker/fr.lproj/Localizable.strings +++ b/Clocker/fr.lproj/Localizable.strings @@ -10,8 +10,12 @@ "Yesterday" = "Hier"; "Today" = "Aujourd'hui"; "Tomorrow" = "Demain"; -"SpreadTheWordTitle" = "Passez le mot"; -"SpreadTheWordMessage" = "Clocker est complètement open source . Si cela vous a aidé de quelque façon , s'il vous plaît laisser un avis de genre sur l'App Store !"; -"Cancel" = "Annuler"; "MaximumTimezoneMessage" = "Maximum 10 fuseaux horaires autorisés!"; -"DuplicateTimezoneMessage" = "Fuseau horaire a déjà été sélectionnée!"; \ No newline at end of file +"DuplicateTimezoneMessage" = "Fuseau horaire a déjà été sélectionnée!"; + +"iRateMessageTitle" = "Notez %@"; +"iRateAppMessage" = "Si vous aimez utiliser %@, n'oubliez pas de donner votre avis sur l'App Store. Cela ne prend qu'une minute. Merci d'avance pour votre soutien !"; +"iRateGameMessage" = "Si vous aimez jouer à %@, n'oubliez pas de donner votre avis sur l'App Store. Cela ne prend qu'une minute. Merci d'avance pour votre soutien !"; +"iRateCancelButton" = "Non, merci"; +"iRateRateButton" = "Noter maintenant"; +"iRateRemindButton" = "Me le rappeler ultérieurement"; diff --git a/Clocker/ja.lproj/Localizable.strings b/Clocker/ja.lproj/Localizable.strings new file mode 100644 index 0000000..e54dda7 --- /dev/null +++ b/Clocker/ja.lproj/Localizable.strings @@ -0,0 +1,19 @@ +/* + Localizable.strings + Clocker + + Created by Abhishek Banthia on 11/17/15. + +*/ + +"Yesterday" = "昨日"; +"Today" = "今日"; +"Tomorrow" = "明日"; +"MaximumTimezoneMessage" = "最大10タイムゾーンを許可します"; +"DuplicateTimezoneMessage" = "タイムゾーンが既に選択されています"; +"iRateMessageTitle" = "%@の評価"; +"iRateAppMessage" = "%@をお使いいただき大変ありがとうございます。もしよろしければ1分程で済みますので、このアプリの評価をお願いします。ご協力感謝いたします!"; +"iRateGameMessage" = "%@をプレイしていただき大変ありがとうございます。もしよろしければ1分程で済みますので、このアプリの評価をお願いします。ご協力感謝いたします!"; +"iRateCancelButton" = "いえ、結構です"; +"iRateRateButton" = "今すぐ評価する"; +"iRateRemindButton" = "後でする"; \ No newline at end of file diff --git a/Clocker/ja.lproj/MainMenu.xib b/Clocker/ja.lproj/MainMenu.xib new file mode 100755 index 0000000..926bcde --- /dev/null +++ b/Clocker/ja.lproj/MainMenu.xib @@ -0,0 +1,652 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Clocker/ja.lproj/Panel.xib b/Clocker/ja.lproj/Panel.xib new file mode 100755 index 0000000..5ad46fb --- /dev/null +++ b/Clocker/ja.lproj/Panel.xib @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Clocker/ja.lproj/PreferencesWindow.xib b/Clocker/ja.lproj/PreferencesWindow.xib new file mode 100644 index 0000000..57dd157 --- /dev/null +++ b/Clocker/ja.lproj/PreferencesWindow.xib @@ -0,0 +1,374 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + addToFavorites: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +