Skip to content

Commit

Permalink
Merge pull request #131 from adjust/tvos_warnings
Browse files Browse the repository at this point in the history
Tvos
  • Loading branch information
nonelse committed Oct 13, 2015
2 parents 1a2c3f8 + 3dbdff3 commit 16c645c
Show file tree
Hide file tree
Showing 56 changed files with 1,635 additions and 831 deletions.
10 changes: 6 additions & 4 deletions Adjust.podspec
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
Pod::Spec.new do |s|
s.name = "Adjust"
s.version = "4.3.0"
s.version = "4.4.0"
s.summary = "This is the iOS SDK of adjust. You can read more about it at http://adjust.com."
s.homepage = "http://adjust.com"
s.license = { :type => 'MIT', :file => 'MIT-LICENSE' }
s.author = { "Christian Wellenbrock" => "[email protected]" }
s.source = { :git => "https://github.com/adjust/ios_sdk.git", :tag => "v4.3.0" }
s.platform = :ios, '5.0'
s.source = { :git => "https://github.com/adjust/ios_sdk.git", :tag => "v4.4.0" }
s.ios.deployment_target = '5.0'
s.tvos.deployment_target = '9.0'
s.framework = 'SystemConfiguration'
s.weak_framework = 'AdSupport', 'iAd'
s.ios.weak_framework = 'AdSupport', 'iAd'
s.tvos.weak_framework = 'AdSupport'
s.requires_arc = true
s.default_subspec = 'Core'

Expand Down
75 changes: 39 additions & 36 deletions Adjust.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@
969952D21A01309200928462 /* ADJAttribution.m in Sources */ = {isa = PBXBuildFile; fileRef = 969952D11A01309200928462 /* ADJAttribution.m */; };
96BCFBCD1AC99231005A65C5 /* Adjust.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E5E34C18BBB48A008E7B30 /* Adjust.h */; settings = {ATTRIBUTES = (Public, ); }; };
96BCFBCE1AC99235005A65C5 /* ADJEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9609BC6819EEA55800E02303 /* ADJEvent.h */; settings = {ATTRIBUTES = (Public, ); }; };
96BCFBCF1AC99239005A65C5 /* ADJLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E5E37318BBB48A008E7B30 /* ADJLogger.h */; settings = {ATTRIBUTES = (Public, ); }; };
96BCFBD01AC9923F005A65C5 /* ADJConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 960A8BB71A029A8000F2BB95 /* ADJConfig.h */; settings = {ATTRIBUTES = (Public, ); }; };
96BCFBD11AC99246005A65C5 /* ADJAttribution.h in Headers */ = {isa = PBXBuildFile; fileRef = 969952D01A01309200928462 /* ADJAttribution.h */; settings = {ATTRIBUTES = (Public, ); }; };
96BCFBD21AC99332005A65C5 /* NSString+ADJAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 96CD2BDC1A13BFC600A40AFB /* NSString+ADJAdditions.h */; };
Expand Down Expand Up @@ -96,19 +95,19 @@
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
960FCF4E1A1B9ACF00282BD4 /* PBXContainerItemProxy */ = {
963909661BCBFE5300A2E8A4 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 960FCF491A1B9ACE00282BD4 /* example.xcodeproj */;
containerPortal = 963909621BCBFE5200A2E8A4 /* AdjustExample-iOS.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 960FCF201A1B9ACE00282BD4;
remoteInfo = example;
remoteGlobalIDString = 9639093C1BCBFCF300A2E8A4;
remoteInfo = "AdjustExample-iOS";
};
960FCF501A1B9ACF00282BD4 /* PBXContainerItemProxy */ = {
963909CD1BCC0D8400A2E8A4 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 960FCF491A1B9ACE00282BD4 /* example.xcodeproj */;
containerPortal = 963909C91BCC0D8300A2E8A4 /* AdjustExample-tvOS.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 960FCF391A1B9ACE00282BD4;
remoteInfo = exampleTests;
remoteGlobalIDString = 963909B21BCC0D8300A2E8A4;
remoteInfo = "AdjustExample-tvOS";
};
9679922318BBAE2800394606 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
Expand Down Expand Up @@ -146,7 +145,6 @@
9609BC6919EEA55800E02303 /* ADJEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJEvent.m; sourceTree = "<group>"; };
960A8BB71A029A8000F2BB95 /* ADJConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJConfig.h; sourceTree = "<group>"; };
960A8BB81A029A8000F2BB95 /* ADJConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJConfig.m; sourceTree = "<group>"; };
960FCF491A1B9ACE00282BD4 /* example.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = example.xcodeproj; path = example/example.xcodeproj; sourceTree = "<group>"; };
9620EA431B062D6F009673F1 /* ADJTestActivityPackage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJTestActivityPackage.h; sourceTree = "<group>"; };
9620EA441B062D6F009673F1 /* ADJTestActivityPackage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJTestActivityPackage.m; sourceTree = "<group>"; };
9620EA4C1B06401B009673F1 /* ADJTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJTest.h; sourceTree = "<group>"; };
Expand All @@ -155,6 +153,8 @@
9620EA501B065177009673F1 /* ADJPackageFields.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJPackageFields.m; sourceTree = "<group>"; };
96325E84190E5CD900A97911 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; };
96325E86190E5CE400A97911 /* iAd.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iAd.framework; path = System/Library/Frameworks/iAd.framework; sourceTree = SDKROOT; };
963909621BCBFE5200A2E8A4 /* AdjustExample-iOS.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "AdjustExample-iOS.xcodeproj"; path = "examples/AdjustExample-iOS/AdjustExample-iOS.xcodeproj"; sourceTree = "<group>"; };
963909C91BCC0D8300A2E8A4 /* AdjustExample-tvOS.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "AdjustExample-tvOS.xcodeproj"; path = "examples/AdjustExample-tvOS/AdjustExample-tvOS.xcodeproj"; sourceTree = "<group>"; };
9644B7EA19F148F3008576FC /* ADJDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJDeviceInfo.h; sourceTree = "<group>"; };
965307F51A000DA400107FF9 /* ADJDeviceInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJDeviceInfo.m; sourceTree = "<group>"; };
9657BF6E1A3B029000CD6853 /* ADJAttributionHandlerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJAttributionHandlerTests.m; sourceTree = "<group>"; };
Expand Down Expand Up @@ -250,19 +250,27 @@
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
960FCF4A1A1B9ACE00282BD4 /* Products */ = {
963909631BCBFE5200A2E8A4 /* Products */ = {
isa = PBXGroup;
children = (
960FCF4F1A1B9ACF00282BD4 /* example.app */,
960FCF511A1B9ACF00282BD4 /* exampleTests.xctest */,
963909671BCBFE5300A2E8A4 /* AdjustExample-iOS.app */,
);
name = Products;
sourceTree = "<group>";
};
963909CA1BCC0D8300A2E8A4 /* Products */ = {
isa = PBXGroup;
children = (
963909CE1BCC0D8400A2E8A4 /* AdjustExample-tvOS.app */,
);
name = Products;
sourceTree = "<group>";
};
9679920418BBAE2800394606 = {
isa = PBXGroup;
children = (
960FCF491A1B9ACE00282BD4 /* example.xcodeproj */,
963909C91BCC0D8300A2E8A4 /* AdjustExample-tvOS.xcodeproj */,
963909621BCBFE5200A2E8A4 /* AdjustExample-iOS.xcodeproj */,
96E5E39A18BBB49E008E7B30 /* AdjustTests */,
96E5E34B18BBB48A008E7B30 /* Adjust */,
9679920F18BBAE2800394606 /* Frameworks */,
Expand Down Expand Up @@ -396,15 +404,13 @@
96BCFBCD1AC99231005A65C5 /* Adjust.h in Headers */,
96BCFBCE1AC99235005A65C5 /* ADJEvent.h in Headers */,
96BCFBD11AC99246005A65C5 /* ADJAttribution.h in Headers */,
96BCFBCF1AC99239005A65C5 /* ADJLogger.h in Headers */,
96BCFBD01AC9923F005A65C5 /* ADJConfig.h in Headers */,
96BCFBD91AC9934E005A65C5 /* ADJAdjustFactory.h in Headers */,
96BCFBD81AC9934B005A65C5 /* ADJActivityState.h in Headers */,
96BCFBD61AC99345005A65C5 /* ADJActivityKind.h in Headers */,
96BCFBD71AC99348005A65C5 /* ADJActivityPackage.h in Headers */,
96BCFBD51AC9933E005A65C5 /* ADJActivityHandler.h in Headers */,
96854A5F1B1F278C002B2874 /* ADJTimerCycle.h in Headers */,
96BCFBCF1AC99239005A65C5 /* ADJLogger.h in Headers */,
96854A591B1F2779002B2874 /* ADJTimerOnce.h in Headers */,
96BCFBDF1AC99368005A65C5 /* ADJDeviceInfo.h in Headers */,
96BCFBDB1AC99355005A65C5 /* ADJPackageHandler.h in Headers */,
Expand Down Expand Up @@ -463,7 +469,7 @@
9679920518BBAE2800394606 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0620;
LastUpgradeCheck = 0710;
ORGANIZATIONNAME = "adjust GmbH";
TargetAttributes = {
96BCFBE71AC99FBD005A65C5 = {
Expand All @@ -483,8 +489,12 @@
projectDirPath = "";
projectReferences = (
{
ProductGroup = 960FCF4A1A1B9ACE00282BD4 /* Products */;
ProjectRef = 960FCF491A1B9ACE00282BD4 /* example.xcodeproj */;
ProductGroup = 963909631BCBFE5200A2E8A4 /* Products */;
ProjectRef = 963909621BCBFE5200A2E8A4 /* AdjustExample-iOS.xcodeproj */;
},
{
ProductGroup = 963909CA1BCC0D8300A2E8A4 /* Products */;
ProjectRef = 963909C91BCC0D8300A2E8A4 /* AdjustExample-tvOS.xcodeproj */;
},
);
projectRoot = "";
Expand All @@ -497,18 +507,18 @@
/* End PBXProject section */

/* Begin PBXReferenceProxy section */
960FCF4F1A1B9ACF00282BD4 /* example.app */ = {
963909671BCBFE5300A2E8A4 /* AdjustExample-iOS.app */ = {
isa = PBXReferenceProxy;
fileType = wrapper.application;
path = example.app;
remoteRef = 960FCF4E1A1B9ACF00282BD4 /* PBXContainerItemProxy */;
path = "AdjustExample-iOS.app";
remoteRef = 963909661BCBFE5300A2E8A4 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
960FCF511A1B9ACF00282BD4 /* exampleTests.xctest */ = {
963909CE1BCC0D8400A2E8A4 /* AdjustExample-tvOS.app */ = {
isa = PBXReferenceProxy;
fileType = wrapper.cfbundle;
path = exampleTests.xctest;
remoteRef = 960FCF501A1B9ACF00282BD4 /* PBXContainerItemProxy */;
fileType = wrapper.application;
path = "AdjustExample-tvOS.app";
remoteRef = 963909CD1BCC0D8400A2E8A4 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
Expand Down Expand Up @@ -640,10 +650,6 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = (
"$(ARCHS_STANDARD)",
armv7s,
);
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
Expand All @@ -657,6 +663,7 @@
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
Expand All @@ -682,10 +689,6 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = (
"$(ARCHS_STANDARD)",
armv7s,
);
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
Expand Down Expand Up @@ -758,7 +761,6 @@
isa = XCBuildConfiguration;
buildSettings = {
FRAMEWORK_SEARCH_PATHS = (
"$(SDKROOT)/Developer/Library/Frameworks",
"$(inherited)",
"$(DEVELOPER_FRAMEWORKS_DIR)",
);
Expand All @@ -770,6 +772,7 @@
);
INFOPLIST_FILE = "AdjustTests/AdjustTests-Info.plist";
OTHER_CFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = "adjust.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = xctest;
};
Expand All @@ -779,14 +782,14 @@
isa = XCBuildConfiguration;
buildSettings = {
FRAMEWORK_SEARCH_PATHS = (
"$(SDKROOT)/Developer/Library/Frameworks",
"$(inherited)",
"$(DEVELOPER_FRAMEWORKS_DIR)",
);
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "AdjustTests/Adjust-Prefix.pch";
INFOPLIST_FILE = "AdjustTests/AdjustTests-Info.plist";
OTHER_CFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = "adjust.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = xctest;
};
Expand Down
7 changes: 7 additions & 0 deletions Adjust/ADJAdditions/NSString+ADJAdditions.m
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,19 @@ - (NSString *)adjSha1 {
}

-(NSString *)adjUrlEncode {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)self,
NULL,
(CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)));
#pragma clang diagnostic pop

// Alternative:
// return [self stringByAddingPercentEncodingWithAllowedCharacters:
// [NSCharacterSet characterSetWithCharactersInString:@"!*'\"();:@&=+$,/?%#[]% "]];
}

- (NSString *)adjRemoveColons {
Expand Down
11 changes: 8 additions & 3 deletions Adjust/ADJAdditions/UIDevice+ADJAdditions.m
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@
#import <AdSupport/ASIdentifierManager.h>
#endif

#if !ADJUST_NO_IAD
#ifdef asdfg
#endif
#if !ADJUST_NO_IAD && !defined(TARGET_OS_TV)
#import <iAd/iAd.h>
#endif

@implementation UIDevice(ADJAdditions)

- (BOOL)adjTrackingEnabled {
Expand Down Expand Up @@ -100,9 +101,13 @@ - (NSString *)adjIdForAdvertisers {
}

- (NSString *)adjFbAttributionId {
#if ADJUST_NO_UIPASTEBOARD || defined (TARGET_OS_TV)
return @"";
#else
NSString *result = [UIPasteboard pasteboardWithName:@"fb_app_attribution" create:NO].string;
if (result == nil) return @"";
return result;
#endif
}

- (NSString *)adjMacAddress {
Expand Down Expand Up @@ -184,7 +189,7 @@ - (NSString *)adjVendorId {
}

- (void) adjSetIad:(ADJActivityHandler *) activityHandler{
#if ADJUST_NO_IAD
#if ADJUST_NO_IAD || defined (TARGET_OS_TV)
return;
#else

Expand Down
27 changes: 22 additions & 5 deletions Adjust/ADJUtil.m
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
#include <sys/xattr.h>

static NSString * const kBaseUrl = @"https://app.adjust.com";
static NSString * const kClientSdk = @"ios4.3.0";
static NSString * const kClientSdk = @"ios4.4.0";

static NSString * const kDateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'Z";
static NSDateFormatter *dateFormat;
Expand All @@ -28,7 +28,24 @@ + (void) initialize {
dateFormat = [[NSDateFormatter alloc] init];

if ([NSCalendar instancesRespondToSelector:@selector(calendarWithIdentifier:)]) {
dateFormat.calendar = [NSCalendar calendarWithIdentifier:NSGregorianCalendar];
// http://stackoverflow.com/a/3339787
NSString * calendarIdentifier;

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wtautological-pointer-compare"
if (&NSCalendarIdentifierGregorian != NULL) {
#pragma clang diagnostic pop
calendarIdentifier = NSCalendarIdentifierGregorian;
} else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunreachable-code"
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
calendarIdentifier = NSGregorianCalendar;
#pragma clang diagnostic pop
}


dateFormat.calendar = [NSCalendar calendarWithIdentifier:calendarIdentifier];
}

dateFormat.locale = [NSLocale systemLocale];
Expand All @@ -52,8 +69,6 @@ + (void)excludeFromBackup:(NSString *)path {

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunreachable-code"

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wtautological-pointer-compare"
if (&NSURLIsExcludedFromBackupKey == nil) {
u_int8_t attrValue = 1;
Expand Down Expand Up @@ -82,7 +97,6 @@ + (void)excludeFromBackup:(NSString *)path {
}
}
#pragma clang diagnostic pop
#pragma clang diagnostic pop

}

Expand Down Expand Up @@ -254,9 +268,12 @@ + (void)sendNSURLConnectionRequest:(NSMutableURLRequest *)request
NSError *responseError = nil;
NSHTTPURLResponse *urlResponse = nil;

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
NSData *responseData = [NSURLConnection sendSynchronousRequest:request
returningResponse:&urlResponse
error:&responseError];
#pragma clang diagnostic pop

NSDictionary * jsonResponse = [ADJUtil completionHandler:responseData
response:(NSHTTPURLResponse *)urlResponse
Expand Down
6 changes: 6 additions & 0 deletions AdjustTests/ADJActivityHandlerTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -787,7 +787,10 @@ - (void)testAppWillOpenUrl
NSURL* mixed = [NSURL URLWithString:@"AdjustTests://example.com/path/inApp?adjust_foo=bar&other=stuff&adjust_campaign=campaignValue&adjust_adgroup=adgroupValue&adjust_creative=creativeValue"];
NSURL* emptyQueryString = [NSURL URLWithString:@"AdjustTests://"];
NSURL* emptyString = [NSURL URLWithString:@""];
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnonnull"
NSURL* nilString = [NSURL URLWithString:nil];
#pragma clang diagnostic pop
NSURL* nilUrl = nil;
NSURL* single = [NSURL URLWithString:@"AdjustTests://example.com/path/inApp?adjust_foo"];
NSURL* prefix = [NSURL URLWithString:@"AdjustTests://example.com/path/inApp?adjust_=bar"];
Expand Down Expand Up @@ -1445,7 +1448,10 @@ - (void)testTimer
ADJConfig * config = [ADJConfig configWithAppToken:@"123456789012" environment:ADJEnvironmentSandbox];

// create handler and start the first session
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
id<ADJActivityHandler> activityHandler = [ADJActivityHandler handlerWithConfig:config];
#pragma clang diagnostic pop

// it's necessary to sleep the activity for a while after each handler call
// to let the internal queue act
Expand Down
2 changes: 1 addition & 1 deletion AdjustTests/ADJPackageFields.m
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ - (id) init {

// default values
self.appToken = @"123456789012";
self.clientSdk = @"ios4.3.0";
self.clientSdk = @"ios4.4.0";
self.suffix = @"";
self.environment = @"sandbox";

Expand Down
3 changes: 3 additions & 0 deletions AdjustTests/ADJPackageHandlerMock.m
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@ @interface ADJPackageHandlerMock()
@implementation ADJPackageHandlerMock

- (id)init {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-designated-initializers"
return [self initWithActivityHandler:nil startPaused:NO];
#pragma clang diagnostic pop
}
- (id)initWithActivityHandler:(id<ADJActivityHandler>)activityHandler
startPaused:(BOOL)startPaused
Expand Down
Loading

0 comments on commit 16c645c

Please sign in to comment.