Skip to content

Commit 3e1c253

Browse files
committed
Turned on the standard Core Plot warnings in the AAPLot example app and fixed the resulting warnings.
1 parent 25a770b commit 3e1c253

9 files changed

Lines changed: 105 additions & 128 deletions

File tree

‎examples/AAPLot/AAPLot.xcodeproj/project.pbxproj‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
AB8F94570FDEFA1500E61485 /* APYahooDataPuller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APYahooDataPuller.m; sourceTree = "<group>"; };
7878
ABA5345D0FEB40CE0046A8DA /* AAPL.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = AAPL.plist; sourceTree = "<group>"; };
7979
C3BB7D43163343E700BC9515 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
80+
C3CA9B5819E1F79B008DF7A3 /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/CorePlotWarnings.xcconfig; sourceTree = "<group>"; };
8081
C3CD282F17DE9B9C008EED1E /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
8182
/* End PBXFileReference section */
8283

@@ -177,6 +178,7 @@
177178
children = (
178179
32CA4F630368D1EE00C91783 /* AAPLot_Prefix.pch */,
179180
29B97316FDCFA39411CA2CEA /* main.m */,
181+
C3CA9B5819E1F79B008DF7A3 /* CorePlotWarnings.xcconfig */,
180182
);
181183
name = "Other Sources";
182184
sourceTree = "<group>";
@@ -359,6 +361,7 @@
359361
};
360362
C01FCF4F08A954540054247B /* Debug */ = {
361363
isa = XCBuildConfiguration;
364+
baseConfigurationReference = C3CA9B5819E1F79B008DF7A3 /* CorePlotWarnings.xcconfig */;
362365
buildSettings = {
363366
ALWAYS_SEARCH_USER_PATHS = NO;
364367
GCC_C_LANGUAGE_STANDARD = c99;
@@ -375,6 +378,7 @@
375378
};
376379
C01FCF5008A954540054247B /* Release */ = {
377380
isa = XCBuildConfiguration;
381+
baseConfigurationReference = C3CA9B5819E1F79B008DF7A3 /* CorePlotWarnings.xcconfig */;
378382
buildSettings = {
379383
ALWAYS_SEARCH_USER_PATHS = NO;
380384
GCC_C_LANGUAGE_STANDARD = c99;

‎examples/AAPLot/APYahooDataPuller.h‎

Lines changed: 9 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,37 +10,15 @@
1010

1111
@end
1212

13-
@interface APYahooDataPuller : NSObject {
14-
NSString *symbol;
15-
NSDate *startDate;
16-
NSDate *endDate;
17-
18-
NSDate *targetStartDate;
19-
NSDate *targetEndDate;
20-
NSString *targetSymbol;
21-
22-
id delegate;
23-
NSDecimalNumber *overallHigh;
24-
NSDecimalNumber *overallLow;
25-
NSDecimalNumber *overallVolumeHigh;
26-
NSDecimalNumber *overallVolumeLow;
27-
28-
@private
29-
NSString *csvString;
30-
NSArray *financialData; // consists of dictionaries
31-
32-
BOOL loadingData;
33-
NSMutableData *receivedData;
34-
NSURLConnection *connection;
35-
}
36-
37-
@property (nonatomic, weak) id delegate;
38-
@property (nonatomic, copy) NSString *symbol;
39-
@property (nonatomic, strong) NSDate *startDate;
40-
@property (nonatomic, strong) NSDate *endDate;
41-
@property (nonatomic, copy) NSString *targetSymbol;
42-
@property (nonatomic, strong) NSDate *targetStartDate;
43-
@property (nonatomic, strong) NSDate *targetEndDate;
13+
@interface APYahooDataPuller : NSObject
14+
15+
@property (nonatomic, readwrite, weak) id delegate;
16+
@property (nonatomic, readwrite, copy) NSString *symbol;
17+
@property (nonatomic, readwrite, strong) NSDate *startDate;
18+
@property (nonatomic, readwrite, strong) NSDate *endDate;
19+
@property (nonatomic, readwrite, copy) NSString *targetSymbol;
20+
@property (nonatomic, readwrite, strong) NSDate *targetStartDate;
21+
@property (nonatomic, readwrite, strong) NSDate *targetEndDate;
4422
@property (nonatomic, readonly, strong) NSArray *financialData;
4523
@property (nonatomic, readonly, strong) NSDecimalNumber *overallHigh;
4624
@property (nonatomic, readonly, strong) NSDecimalNumber *overallLow;

‎examples/AAPLot/APYahooDataPuller.m‎

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,26 @@
11
#import "APFinancialData.h"
22
#import "APYahooDataPuller.h"
33

4+
@interface APYahooDataPuller()
5+
6+
@property (nonatomic, readwrite, copy) NSString *csvString;
7+
8+
@property (nonatomic, readwrite, strong) NSDecimalNumber *overallHigh;
9+
@property (nonatomic, readwrite, strong) NSDecimalNumber *overallLow;
10+
@property (nonatomic, readwrite, strong) NSDecimalNumber *overallVolumeHigh;
11+
@property (nonatomic, readwrite, strong) NSDecimalNumber *overallVolumeLow;
12+
@property (nonatomic, readwrite, strong) NSArray *financialData;
13+
14+
@property (nonatomic, readwrite, assign) BOOL loadingData;
15+
@property (nonatomic, readwrite, strong) NSMutableData *receivedData;
16+
@property (nonatomic, readwrite, strong) NSURLConnection *connection;
17+
18+
NSTimeInterval timeIntervalForNumberOfWeeks(double numberOfWeeks);
19+
20+
@end
21+
22+
#pragma mark -
23+
424
NSTimeInterval timeIntervalForNumberOfWeeks(double numberOfWeeks)
525
{
626
NSTimeInterval seconds = fabs(60.0 * 60.0 * 24.0 * 7.0 * numberOfWeeks);
@@ -10,16 +30,6 @@ NSTimeInterval timeIntervalForNumberOfWeeks(double numberOfWeeks)
1030

1131
@interface APYahooDataPuller()
1232

13-
@property (nonatomic, copy) NSString *csvString;
14-
@property (nonatomic, strong) NSMutableData *receivedData;
15-
@property (nonatomic, strong) NSURLConnection *connection;
16-
@property (nonatomic, assign) BOOL loadingData;
17-
@property (nonatomic, readwrite, strong) NSDecimalNumber *overallHigh;
18-
@property (nonatomic, readwrite, strong) NSDecimalNumber *overallLow;
19-
@property (nonatomic, readwrite, strong) NSDecimalNumber *overallVolumeHigh;
20-
@property (nonatomic, readwrite, strong) NSDecimalNumber *overallVolumeLow;
21-
@property (nonatomic, readwrite, strong) NSArray *financialData;
22-
2333
-(void)fetch;
2434
-(NSString *)URL;
2535
-(void)notifyPulledData;
@@ -46,6 +56,8 @@ @implementation APYahooDataPuller
4656
@synthesize connection;
4757
@synthesize loadingData;
4858

59+
@synthesize delegate;
60+
4961
-(id)delegate
5062
{
5163
return delegate;
@@ -173,8 +185,8 @@ -(NSString *)URL
173185
NSCalendar *gregorian = [[NSCalendar alloc]
174186
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
175187

176-
NSDateComponents *compsStart = [gregorian components:unitFlags fromDate:targetStartDate];
177-
NSDateComponents *compsEnd = [gregorian components:unitFlags fromDate:targetEndDate];
188+
NSDateComponents *compsStart = [gregorian components:unitFlags fromDate:self.targetStartDate];
189+
NSDateComponents *compsEnd = [gregorian components:unitFlags fromDate:self.targetEndDate];
178190

179191
NSString *url = [NSString stringWithFormat:@"http://ichart.yahoo.com/table.csv?s=%@&", [self targetSymbol]];
180192

@@ -194,8 +206,10 @@ -(NSString *)URL
194206

195207
-(void)notifyPulledData
196208
{
197-
if ( delegate && [delegate respondsToSelector:@selector(dataPullerDidFinishFetch:)] ) {
198-
[delegate performSelector:@selector(dataPullerDidFinishFetch:) withObject:self];
209+
id theDelegate = self.delegate;
210+
211+
if ( [theDelegate respondsToSelector:@selector(dataPullerDidFinishFetch:)] ) {
212+
[theDelegate performSelector:@selector(dataPullerDidFinishFetch:) withObject:self];
199213
}
200214
}
201215

‎examples/AAPLot/Classes/AAPLotAppDelegate.h‎

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@
1010

1111
@class RootViewController;
1212

13-
@interface AAPLotAppDelegate : NSObject<UIApplicationDelegate> {
14-
UIWindow *window;
15-
RootViewController *rootViewController;
16-
}
13+
@interface AAPLotAppDelegate : NSObject<UIApplicationDelegate>
1714

1815
@property (nonatomic, strong) IBOutlet UIWindow *window;
1916
@property (nonatomic, strong) IBOutlet RootViewController *rootViewController;

‎examples/AAPLot/Classes/FlipsideView.m‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ @implementation FlipsideView
1212

1313
-(id)initWithFrame:(CGRect)frame
1414
{
15-
if ( self = [super initWithFrame:frame] ) {
15+
if ( (self = [super initWithFrame:frame]) ) {
1616
// Initialization code
1717
}
1818
return self;

‎examples/AAPLot/Classes/MainViewController.h‎

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,8 @@
66
@class APYahooDataPuller;
77
@class CPTXYGraph;
88

9-
@interface MainViewController : UIViewController<APYahooDataPullerDelegate, CPTPlotDataSource> {
10-
CPTGraphHostingView *graphHost;
9+
@interface MainViewController : UIViewController<APYahooDataPullerDelegate, CPTPlotDataSource>
1110

12-
@private
13-
APYahooDataPuller *datapuller;
14-
CPTXYGraph *graph;
15-
}
16-
17-
@property (nonatomic, strong) IBOutlet CPTGraphHostingView *graphHost;
11+
@property (nonatomic, readwrite, strong) IBOutlet CPTGraphHostingView *graphHost;
1812

1913
@end

‎examples/AAPLot/Classes/MainViewController.m‎

Lines changed: 39 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
@interface MainViewController()
88

9-
@property (nonatomic, strong) CPTXYGraph *graph;
10-
@property (nonatomic, strong) APYahooDataPuller *datapuller;
9+
@property (nonatomic, readwrite, strong) CPTXYGraph *graph;
10+
@property (nonatomic, readwrite, strong) APYahooDataPuller *datapuller;
1111

1212
@end
1313

@@ -28,22 +28,25 @@ -(void)setView:(UIView *)aView
2828

2929
-(void)viewDidLoad
3030
{
31-
graph = [[CPTXYGraph alloc] initWithFrame:CGRectZero];
32-
CPTTheme *theme = [CPTTheme themeNamed:kCPTStocksTheme];
33-
[graph applyTheme:theme];
34-
graph.frame = self.view.bounds;
35-
graph.paddingRight = 50.0;
36-
graph.paddingLeft = 50.0;
37-
graph.plotAreaFrame.masksToBorder = NO;
38-
graph.plotAreaFrame.cornerRadius = 0.0;
31+
CPTXYGraph *newGraph = [[CPTXYGraph alloc] initWithFrame:self.view.bounds];
32+
CPTTheme *theme = [CPTTheme themeNamed:kCPTStocksTheme];
33+
34+
[newGraph applyTheme:theme];
35+
self.graph = newGraph;
36+
37+
newGraph.paddingRight = 50.0;
38+
newGraph.paddingLeft = 50.0;
39+
newGraph.plotAreaFrame.masksToBorder = NO;
40+
newGraph.plotAreaFrame.cornerRadius = 0.0;
41+
3942
CPTMutableLineStyle *borderLineStyle = [CPTMutableLineStyle lineStyle];
40-
borderLineStyle.lineColor = [CPTColor whiteColor];
41-
borderLineStyle.lineWidth = 2.0;
42-
graph.plotAreaFrame.borderLineStyle = borderLineStyle;
43-
self.graphHost.hostedGraph = graph;
43+
borderLineStyle.lineColor = [CPTColor whiteColor];
44+
borderLineStyle.lineWidth = 2.0;
45+
newGraph.plotAreaFrame.borderLineStyle = borderLineStyle;
46+
self.graphHost.hostedGraph = newGraph;
4447

4548
// Axes
46-
CPTXYAxisSet *xyAxisSet = (id)graph.axisSet;
49+
CPTXYAxisSet *xyAxisSet = (CPTXYAxisSet *)newGraph.axisSet;
4750
CPTXYAxis *xAxis = xyAxisSet.xAxis;
4851
CPTMutableLineStyle *lineStyle = [xAxis.axisLineStyle mutableCopy];
4952
lineStyle.lineCap = kCGLineCapButt;
@@ -54,21 +57,21 @@ -(void)viewDidLoad
5457
yAxis.axisLineStyle = nil;
5558

5659
// Line plot with gradient fill
57-
CPTScatterPlot *dataSourceLinePlot = [[CPTScatterPlot alloc] initWithFrame:graph.bounds];
60+
CPTScatterPlot *dataSourceLinePlot = [[CPTScatterPlot alloc] initWithFrame:newGraph.bounds];
5861
dataSourceLinePlot.identifier = @"Data Source Plot";
5962
dataSourceLinePlot.dataLineStyle = nil;
6063
dataSourceLinePlot.dataSource = self;
6164
dataSourceLinePlot.cachePrecision = CPTPlotCachePrecisionDouble;
62-
[graph addPlot:dataSourceLinePlot];
65+
[newGraph addPlot:dataSourceLinePlot];
6366

64-
CPTColor *areaColor = [CPTColor colorWithComponentRed:1.0 green:1.0 blue:1.0 alpha:0.6];
67+
CPTColor *areaColor = [CPTColor colorWithComponentRed:CPTFloat(1.0) green:CPTFloat(1.0) blue:CPTFloat(1.0) alpha:CPTFloat(0.6)];
6568
CPTGradient *areaGradient = [CPTGradient gradientWithBeginningColor:areaColor endingColor:[CPTColor clearColor]];
6669
areaGradient.angle = -90.0;
6770
CPTFill *areaGradientFill = [CPTFill fillWithGradient:areaGradient];
6871
dataSourceLinePlot.areaFill = areaGradientFill;
6972
dataSourceLinePlot.areaBaseValue = CPTDecimalFromDouble(200.0);
7073

71-
areaColor = [CPTColor colorWithComponentRed:0.0 green:1.0 blue:0.0 alpha:0.6];
74+
areaColor = [CPTColor colorWithComponentRed:CPTFloat(0.0) green:CPTFloat(1.0) blue:CPTFloat(0.0) alpha:CPTFloat(0.6)];
7275
areaGradient = [CPTGradient gradientWithBeginningColor:[CPTColor clearColor] endingColor:areaColor];
7376
areaGradient.angle = -90.0;
7477
areaGradientFill = [CPTFill fillWithGradient:areaGradient];
@@ -79,7 +82,7 @@ -(void)viewDidLoad
7982
CPTMutableLineStyle *whiteLineStyle = [CPTMutableLineStyle lineStyle];
8083
whiteLineStyle.lineColor = [CPTColor whiteColor];
8184
whiteLineStyle.lineWidth = 1.0;
82-
CPTTradingRangePlot *ohlcPlot = [[CPTTradingRangePlot alloc] initWithFrame:graph.bounds];
85+
CPTTradingRangePlot *ohlcPlot = [[CPTTradingRangePlot alloc] initWithFrame:newGraph.bounds];
8386
ohlcPlot.identifier = @"OHLC";
8487
ohlcPlot.lineStyle = whiteLineStyle;
8588
CPTMutableTextStyle *whiteTextStyle = [CPTMutableTextStyle textStyle];
@@ -91,12 +94,12 @@ -(void)viewDidLoad
9194
ohlcPlot.dataSource = self;
9295
ohlcPlot.plotStyle = CPTTradingRangePlotStyleOHLC;
9396
ohlcPlot.cachePrecision = CPTPlotCachePrecisionDecimal;
94-
[graph addPlot:ohlcPlot];
97+
[newGraph addPlot:ohlcPlot];
9598

9699
// Add plot space for bar chart
97100
CPTXYPlotSpace *volumePlotSpace = [[CPTXYPlotSpace alloc] init];
98101
volumePlotSpace.identifier = @"Volume Plot Space";
99-
[graph addPlotSpace:volumePlotSpace];
102+
[newGraph addPlotSpace:volumePlotSpace];
100103

101104
// Volume plot
102105
CPTBarPlot *volumePlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor blackColor] horizontalBars:NO];
@@ -110,7 +113,7 @@ -(void)viewDidLoad
110113
volumePlot.barWidth = CPTDecimalFromFloat(1.0f);
111114
volumePlot.identifier = @"Volume Plot";
112115
volumePlot.cachePrecision = CPTPlotCachePrecisionDouble;
113-
[graph addPlot:volumePlot toPlotSpace:volumePlotSpace];
116+
[newGraph addPlot:volumePlot toPlotSpace:volumePlotSpace];
114117

115118
// Data puller
116119
NSDate *start = [NSDate dateWithTimeIntervalSinceNow:-60.0 * 60.0 * 24.0 * 7.0 * 12.0]; // 12 weeks ago
@@ -124,7 +127,7 @@ -(void)viewDidLoad
124127

125128
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
126129
{
127-
if ( self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil] ) {
130+
if ( (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) ) {
128131
}
129132
return self;
130133
}
@@ -600,8 +603,10 @@ -(void)dataPullerDidFinishFetch:(APYahooDataPuller *)dp
600603
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace;
601604
CPTXYPlotSpace *volumePlotSpace = (CPTXYPlotSpace *)[self.graph plotSpaceWithIdentifier:@"Volume Plot Space"];
602605

603-
NSDecimalNumber *high = [datapuller overallHigh];
604-
NSDecimalNumber *low = [datapuller overallLow];
606+
APYahooDataPuller *thePuller = self.datapuller;
607+
608+
NSDecimalNumber *high = thePuller.overallHigh;
609+
NSDecimalNumber *low = thePuller.overallLow;
605610
NSDecimalNumber *length = [high decimalNumberBySubtracting:low];
606611

607612
NSLog(@"high = %@, low = %@, length = %@", high, low, length);
@@ -613,18 +618,18 @@ -(void)dataPullerDidFinishFetch:(APYahooDataPuller *)dp
613618
NSDecimalNumber *lowDisplayLocation = [low decimalNumberBySubtracting:lengthDisplacementValue];
614619
NSDecimalNumber *lengthDisplayLocation = [length decimalNumberByAdding:lengthDisplacementValue];
615620

616-
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0f) length:CPTDecimalFromUnsignedInteger(datapuller.financialData.count + 1)];
617-
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:[lowDisplayLocation decimalValue] length:[lengthDisplayLocation decimalValue]];
621+
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0.0) length:CPTDecimalFromUnsignedInteger(thePuller.financialData.count + 1)];
622+
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:lowDisplayLocation.decimalValue length:lengthDisplayLocation.decimalValue];
618623

619-
CPTScatterPlot *linePlot = (CPTScatterPlot *)[graph plotWithIdentifier:@"Data Source Plot"];
624+
CPTScatterPlot *linePlot = (CPTScatterPlot *)[self.graph plotWithIdentifier:@"Data Source Plot"];
620625
linePlot.areaBaseValue = [high decimalValue];
621626
linePlot.areaBaseValue2 = [low decimalValue];
622627

623628
// Axes
624-
CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet;
629+
CPTXYAxisSet *axisSet = (CPTXYAxisSet *)self.graph.axisSet;
625630

626-
NSDecimalNumber *overallVolumeHigh = [datapuller overallVolumeHigh];
627-
NSDecimalNumber *overallVolumeLow = [datapuller overallVolumeLow];
631+
NSDecimalNumber *overallVolumeHigh = thePuller.overallVolumeHigh;
632+
NSDecimalNumber *overallVolumeLow = thePuller.overallVolumeLow;
628633
NSDecimalNumber *volumeLength = [overallVolumeHigh decimalNumberBySubtracting:overallVolumeLow];
629634

630635
// make the length aka height for y 3 times more so that we get a 1/3 area covered by volume
@@ -636,7 +641,7 @@ -(void)dataPullerDidFinishFetch:(APYahooDataPuller *)dp
636641
NSDecimalNumber *volumeLowDisplayLocation = overallVolumeLow;
637642
NSDecimalNumber *volumeLengthDisplayLocation = [volumeLength decimalNumberByAdding:volumeLengthDisplacementValue];
638643

639-
volumePlotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0f) length:CPTDecimalFromUnsignedInteger(datapuller.financialData.count + 1)];
644+
volumePlotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0.0) length:CPTDecimalFromUnsignedInteger(thePuller.financialData.count + 1)];
640645
// volumePlotSpace.yRange = [CPTPlotRange plotRangeWithLocation:[volumeLowDisplayLocation decimalValue] length:[volumeLengthDisplayLocation decimalValue]];
641646

642647
if ( animationOperation ) {
@@ -659,19 +664,7 @@ -(void)dataPullerDidFinishFetch:(APYahooDataPuller *)dp
659664

660665
axisSet.yAxis.labelExclusionRanges = exclusionRanges;
661666

662-
[graph reloadData];
663-
}
664-
665-
-(APYahooDataPuller *)datapuller
666-
{
667-
return datapuller;
668-
}
669-
670-
-(void)setDatapuller:(APYahooDataPuller *)aDatapuller
671-
{
672-
if ( datapuller != aDatapuller ) {
673-
datapuller = aDatapuller;
674-
}
667+
[self.graph reloadData];
675668
}
676669

677670
@end

‎examples/AAPLot/Classes/RootViewController.h‎

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,7 @@
1111
@class MainViewController;
1212
@class FlipsideViewController;
1313

14-
@interface RootViewController : UIViewController {
15-
UIButton *infoButton;
16-
MainViewController *mainViewController;
17-
FlipsideViewController *flipsideViewController;
18-
UINavigationBar *flipsideNavigationBar;
19-
}
14+
@interface RootViewController : UIViewController
2015

2116
@property (nonatomic, strong) IBOutlet UIButton *infoButton;
2217
@property (nonatomic, strong) MainViewController *mainViewController;

0 commit comments

Comments
 (0)