P9

Download as pdf or txt
Download as pdf or txt
You are on page 1of 16

In [2]:

import pandas as pan


import numpy as num
df=pan.read_csv(r"C:\Users\Lexie\Downloads\Stock_01_06.csv", skiprows=1, names=['Symbo
l','Open','High','Low','Last Traded Price','Change','%Change','Traded Volume(lacs)','Tr
aded Value(crs)','52 Week High','52 Week Low','365 Days % Change','30 Days % Change'])
print("The Stock_data from NSE web site for October 13, 2019 is - \n \n", df)

#To check data types of all columns


print(df.dtypes)

#To change object dtype into float (for plotting)


df['Open']=pan.to_numeric(df.Open.str.replace("[.%]", "").str.replace(",", "."))
df['High']=pan.to_numeric(df.High.str.replace("[.%]", "").str.replace(",", "."))
df['Low']=pan.to_numeric(df.Low.str.replace("[.%]", "").str.replace(",", "."))
df['Last Traded Price']=pan.to_numeric(df['Last Traded Price'].str.replace("[.%]", "").
str.replace(",", "."))
df['Traded Volume(lacs)']=pan.to_numeric(df['Traded Volume(lacs)'].str.replace("[.%]",
"").str.replace(",", "."))
df['Traded Value(crs)']=pan.to_numeric(df['Traded Value(crs)'].str.replace("[.%]", "").
str.replace(",", "."))
df['52 Week High']=pan.to_numeric(df['52 Week High'].str.replace("[.%]", "").str.replac
e(",", "."))
df['52 Week Low']=pan.to_numeric(df['52 Week Low'].str.replace("[.%]", "").str.replace(
",", "."))

#For aggregate
agg=df.pivot_table(df, index=['Symbol'], aggfunc='sum')

#To check datatype (to make sure all columns are now float)
print(df.dtypes)

#For highest and lowest


highest=df.max()
lowest=df.min()
print("\n \n The aggregated data of the stock market of the entire dataset is - \n ", a
gg)
print(" \n The highest stock for the day is = \n ", highest)
print(" \n The lowest stock for the day is = \n ", lowest)

#For plotting company name against column name


import matplotlib.pyplot as py

x=(df.Symbol)
y=(df.Open)

py.figure(figsize=(30,20))
py.bar(x,y)
py.show()

x1=(df.Symbol)
y1=(df.High)

py.figure(figsize=(30,20))
py.bar(x1,y1)
py.show()
x2=(df.Symbol)
y2=(df.Low)

py.figure(figsize=(30,20))
py.bar(x2,y2)
py.show()

x3=(df.Symbol)
y3=(df['Last Traded Price'])

py.figure(figsize=(30,20))
py.bar(x3,y3)
py.show()

x4=(df.Symbol)
y4=(df.Change)

py.figure(figsize=(30,20))
py.bar(x4,y4)
py.show()

x5=(df.Symbol)
y5=(df['%Change'])

py.figure(figsize=(30,20))
py.bar(x5,y5)
py.show()

x6=(df.Symbol)
y6=(df['Traded Volume(lacs)'])

py.figure(figsize=(30,20))
py.bar(x6,y6)
py.show()

x7=(df.Symbol)
y7=(df['Traded Value(crs)'])

py.figure(figsize=(30,20))
py.bar(x7,y7)
py.show()

x8=(df.Symbol)
y8=(df['52 Week High'])

py.figure(figsize=(30,20))
py.bar(x8,y8)
py.show()

x9=(df.Symbol)
y9=(df['52 Week Low'])

py.figure(figsize=(30,20))
py.bar(x9,y9)
py.show()

x10=(df.Symbol)
y10=(df['365 Days % Change'])

py.figure(figsize=(30,20))
py.bar(x10,y10)
py.show()

x11=(df.Symbol)
y11=(df['30 Days % Change'])

py.figure(figsize=(30,20))
py.bar(x11,y11)
py.show()
The Stock_data from NSE web site for October 13, 2019 is -

Symbol Open High Low Last Traded Price Change


\
0 NIFTY 50 11,890.00 11,939.55 11,845.65 11,889.75 -47.90
1 ADANIPORTS 350.55 364.05 350.15 362.90 7.55
2 ASIANPAINT 2,114.20 2,116.85 2,082.00 2,088.80 -25.50
3 AXISBANK 496.00 510.00 495.65 506.30 4.85
4 BAJAJ-AUTO 3,009.80 3,039.45 2,977.00 3,016.50 -1.50
5 BAJAJFINSV 5,848.00 6,080.00 5,845.95 5,964.00 59.85
6 BAJFINANCE 3,160.00 3,345.00 3,150.00 3,334.00 101.15
7 BHARTIARTL 419.00 431.10 418.00 428.45 9.45
8 BPCL 348.70 350.80 344.00 349.70 0.15
9 BRITANNIA 3,410.00 3,493.35 3,410.00 3,462.15 64.90
10 CIPLA 765.00 769.85 744.00 754.55 -12.55
11 COALINDIA 115.00 115.50 114.10 114.80 -0.30
12 DIVISLAB 3,078.95 3,092.00 3,031.00 3,060.20 -18.75
13 DRREDDY 5,036.70 5,036.70 4,831.00 4,985.55 -61.20
14 EICHERMOT 2,178.90 2,178.90 2,140.00 2,152.30 -29.05
15 GAIL 86.15 88.40 86.15 88.05 0.40
16 GRASIM 791.75 794.45 781.00 790.65 -1.10
17 HCLTECH 858.90 878.00 851.55 864.90 -2.15
18 HDFC 2,038.30 2,063.00 2,023.15 2,040.65 -8.10
19 HDFCBANK 1,239.95 1,250.00 1,229.65 1,236.10 -10.60
20 HDFCLIFE 563.00 566.80 558.15 561.70 -1.00
21 HEROMOTOCO 3,176.90 3,176.90 3,074.00 3,080.05 -98.30
22 HINDALCO 184.90 187.70 182.10 184.00 -1.95
23 HINDUNILVR 2,160.00 2,187.25 2,153.20 2,170.05 6.90
24 ICICIBANK 416.40 419.65 409.65 413.65 -6.65
25 INDUSINDBK 621.00 630.85 610.00 612.40 -15.70
26 INFY 1,142.00 1,158.00 1,130.45 1,132.15 -16.20
27 IOC 75.85 77.40 75.50 77.10 1.10
28 ITC 167.55 169.10 167.00 168.05 0.40
29 JSWSTEEL 322.00 326.35 319.50 324.10 1.15
30 KOTAKBANK 1,388.00 1,405.00 1,377.55 1,395.75 2.45
31 LT 922.00 939.00 920.15 935.50 11.05
32 M&M 599.80 604.50 594.10 601.70 0.85
33 MARUTI 6,828.00 6,860.00 6,785.05 6,795.55 -66.30
34 NESTLEIND 15,990.05 16,081.10 15,768.05 15,911.65 -119.20
35 NTPC 82.30 83.15 81.40 82.80 0.50
36 ONGC 67.40 69.10 67.30 68.65 0.85
37 POWERGRID 162.15 164.75 161.20 164.60 0.85
38 RELIANCE 2,127.40 2,132.50 2,091.00 2,110.50 -14.10
39 SBILIFE 788.30 788.30 771.30 777.75 -7.60
40 SBIN 201.90 204.60 201.10 203.45 -0.30
41 SHREECEM 21,200.00 21,290.00 20,940.00 21,100.00 -47.50
42 SUNPHARMA 491.20 491.40 481.70 484.40 -5.80
43 TATAMOTORS 129.70 132.90 128.45 132.00 1.75
44 TATASTEEL 401.90 413.55 400.10 408.30 4.25
45 TCS 2,661.00 2,686.65 2,638.10 2,660.00 -15.40
46 TECHM 844.85 853.90 828.80 832.95 -12.95
47 TITAN 1,240.15 1,253.00 1,229.00 1,233.00 -11.70
48 ULTRACEMCO 4,675.00 4,735.55 4,555.00 4,612.05 -17.05
49 UPL 452.80 458.20 450.20 454.65 0.45
50 WIPRO 341.00 348.20 340.85 343.50 0.05

%Change Traded Volume(lacs) Traded Value(crs) 52 Week High 52 Week Low


\
0 -0.40 3,745.40 24,595.93 12,430.50 7,511.10
1 2.12 32.74 117.85 428.85 203.00
2 -1.21 13.82 289.21 2,143.85 1,431.20
3 0.97 215.37 1,086.44 765.85 286.00
4 -0.05 12.63 379.97 3,315.15 1,788.65
5 1.01 9.58 572.08 9,950.00 3,985.30
6 3.13 54.68 1,792.71 4,923.40 1,783.00
7 2.26 200.69 852.55 612.00 325.50
8 0.04 45.81 158.92 549.00 252.00
9 1.91 18.82 651.04 4,010.00 2,100.00
10 -1.64 70.81 534.84 829.05 355.30
11 -0.26 70.65 81.10 217.55 109.55
12 -0.61 6.36 194.62 3,389.00 1,626.00
13 -1.21 42.31 2,090.90 5,512.65 2,495.05
14 -1.33 7.16 154.09 2,387.25 1,245.01
15 0.46 107.08 93.67 139.75 65.00
16 -0.14 13.47 106.15 836.90 385.05
17 -0.25 74.56 646.48 910.70 375.25
18 -0.40 37.54 767.38 2,499.90 1,473.45
19 -0.85 81.79 1,014.00 1,305.50 738.75
20 -0.18 14.88 83.64 647.60 340.00
21 -3.09 11.30 351.73 3,394.90 1,475.00
22 -1.05 130.93 242.03 221.20 84.90
23 0.32 20.24 438.70 2,614.30 1,757.30
24 -1.58 245.65 1,019.50 552.20 268.30
25 -2.50 111.66 691.09 1,596.55 235.55
26 -1.41 79.57 909.37 1,186.00 509.25
27 1.45 116.52 89.08 148.95 71.15
28 0.24 131.25 220.51 266.30 134.60
29 0.36 61.05 197.24 326.35 132.50
30 0.18 27.32 380.35 1,740.00 1,001.00
31 1.20 45.11 420.97 1,491.95 661.00
32 0.14 29.08 174.56 666.60 245.40
33 -0.97 4.24 288.55 7,758.70 4,001.10
34 -0.74 0.83 132.40 18,369.95 12,200.00
35 0.61 196.04 161.38 125.00 73.20
36 1.25 138.39 94.89 149.65 50.00
37 0.52 113.21 184.45 211.00 122.15
38 -0.66 107.28 2,260.20 2,369.35 866.98
39 -0.97 14.12 109.59 1,030.00 519.40
40 -0.15 259.86 527.85 351.00 149.45
41 -0.22 0.34 72.61 25,355.00 15,410.00
42 -1.18 49.47 239.87 564.75 312.00
43 1.34 352.66 462.59 201.70 63.50
44 1.05 163.04 664.15 506.00 250.85
45 -0.58 42.37 1,128.93 2,885.00 1,506.05
46 -1.53 29.13 244.66 887.55 471.40
47 -0.94 14.17 176.01 1,389.95 720.90
48 -0.37 13.87 642.49 4,754.10 2,910.00
49 0.10 34.16 155.11 617.75 240.15
50 0.01 71.79 247.43 381.70 159.40

365 Days % Change 30 Days % Change


0 2.60 5.68
1 -13.75 4.33
2 17.34 5.89
3 -28.97 19.59
4 -3.39 1.00
5 -25.53 4.41
6 -17.36 0.12
7 14.53 -8.40
8 -34.53 -12.89
9 6.59 -4.61
10 66.24 -1.76
11 -45.02 -5.63
12 75.76 -3.12
13 77.37 -3.04
14 -89.23 2.35
15 -32.01 -0.17
16 4.58 10.30
17 -18.75 7.76
18 -3.51 19.47
19 -0.26 17.80
20 -8.11 -3.05
21 15.16 0.81
22 -0.94 10.08
23 2.01 6.49
24 -8.31 17.95
25 -54.33 9.24
26 75.92 12.11
27 -47.35 -0.77
28 -32.48 -4.38
29 47.52 19.46
30 -14.31 8.38
31 -35.15 6.08
32 0.99 -3.33
33 -6.35 2.54
34 5.94 3.12
35 -31.51 -6.23
36 -52.41 -3.51
37 -19.73 -3.46
38 49.24 -6.44
39 -21.37 -7.42
40 -24.79 9.50
41 8.12 11.62
42 19.47 -3.82
43 0.19 -3.97
44 15.18 9.35
45 29.67 7.90
46 16.07 5.81
47 -7.25 10.10
48 8.54 18.90
49 -23.84 -14.57
50 35.48 10.13
Symbol object
Open object
High object
Low object
Last Traded Price object
Change float64
%Change float64
Traded Volume(lacs) object
Traded Value(crs) object
52 Week High object
52 Week Low object
365 Days % Change float64
30 Days % Change float64
dtype: object
Symbol object
Open float64
High float64
Low float64
Last Traded Price float64
Change float64
%Change float64
Traded Volume(lacs) float64
Traded Value(crs) float64
52 Week High float64
52 Week Low float64
365 Days % Change float64
30 Days % Change float64
dtype: object

The aggregated data of the stock market of the entire dataset is -


%Change 30 Days % Change 365 Days % Change 52 Week High
\
Symbol
ADANIPORTS 2.12 4.33 -13.75 42885.00000
ASIANPAINT -1.21 5.89 17.34 2.14385
AXISBANK 0.97 19.59 -28.97 76585.00000
BAJAJ-AUTO -0.05 1.00 -3.39 3.31515
BAJAJFINSV 1.01 4.41 -25.53 9.95000
BAJFINANCE 3.13 0.12 -17.36 4.92340
BHARTIARTL 2.26 -8.40 14.53 61200.00000
BPCL 0.04 -12.89 -34.53 54900.00000
BRITANNIA 1.91 -4.61 6.59 4.01000
CIPLA -1.64 -1.76 66.24 82905.00000
COALINDIA -0.26 -5.63 -45.02 21755.00000
DIVISLAB -0.61 -3.12 75.76 3.38900
DRREDDY -1.21 -3.04 77.37 5.51265
EICHERMOT -1.33 2.35 -89.23 2.38725
GAIL 0.46 -0.17 -32.01 13975.00000
GRASIM -0.14 10.30 4.58 83690.00000
HCLTECH -0.25 7.76 -18.75 91070.00000
HDFC -0.40 19.47 -3.51 2.49990
HDFCBANK -0.85 17.80 -0.26 1.30550
HDFCLIFE -0.18 -3.05 -8.11 64760.00000
HEROMOTOCO -3.09 0.81 15.16 3.39490
HINDALCO -1.05 10.08 -0.94 22120.00000
HINDUNILVR 0.32 6.49 2.01 2.61430
ICICIBANK -1.58 17.95 -8.31 55220.00000
INDUSINDBK -2.50 9.24 -54.33 1.59655
INFY -1.41 12.11 75.92 1.18600
IOC 1.45 -0.77 -47.35 14895.00000
ITC 0.24 -4.38 -32.48 26630.00000
JSWSTEEL 0.36 19.46 47.52 32635.00000
KOTAKBANK 0.18 8.38 -14.31 1.74000
LT 1.20 6.08 -35.15 1.49195
M&M 0.14 -3.33 0.99 66660.00000
MARUTI -0.97 2.54 -6.35 7.75870
NESTLEIND -0.74 3.12 5.94 18.36995
NIFTY 50 -0.40 5.68 2.60 12.43050
NTPC 0.61 -6.23 -31.51 12500.00000
ONGC 1.25 -3.51 -52.41 14965.00000
POWERGRID 0.52 -3.46 -19.73 21100.00000
RELIANCE -0.66 -6.44 49.24 2.36935
SBILIFE -0.97 -7.42 -21.37 1.03000
SBIN -0.15 9.50 -24.79 35100.00000
SHREECEM -0.22 11.62 8.12 25.35500
SUNPHARMA -1.18 -3.82 19.47 56475.00000
TATAMOTORS 1.34 -3.97 0.19 20170.00000
TATASTEEL 1.05 9.35 15.18 50600.00000
TCS -0.58 7.90 29.67 2.88500
TECHM -1.53 5.81 16.07 88755.00000
TITAN -0.94 10.10 -7.25 1.38995
ULTRACEMCO -0.37 18.90 8.54 4.75410
UPL 0.10 -14.57 -23.84 61775.00000
WIPRO 0.01 10.13 35.48 38170.00000

52 Week Low Change High Last Traded Price L


ow \
Symbol
ADANIPORTS 20300.00000 7.55 36405.00000 36290.00000 35015.000
00
ASIANPAINT 1.43120 -25.50 2.11685 2.08880 2.082
00
AXISBANK 28600.00000 4.85 51000.00000 50630.00000 49565.000
00
BAJAJ-AUTO 1.78865 -1.50 3.03945 3.01650 2.977
00
BAJAJFINSV 3.98530 59.85 6.08000 5.96400 5.845
95
BAJFINANCE 1.78300 101.15 3.34500 3.33400 3.150
00
BHARTIARTL 32550.00000 9.45 43110.00000 42845.00000 41800.000
00
BPCL 25200.00000 0.15 35080.00000 34970.00000 34400.000
00
BRITANNIA 2.10000 64.90 3.49335 3.46215 3.410
00
CIPLA 35530.00000 -12.55 76985.00000 75455.00000 74400.000
00
COALINDIA 10955.00000 -0.30 11550.00000 11480.00000 11410.000
00
DIVISLAB 1.62600 -18.75 3.09200 3.06020 3.031
00
DRREDDY 2.49505 -61.20 5.03670 4.98555 4.831
00
EICHERMOT 1.24501 -29.05 2.17890 2.15230 2.140
00
GAIL 6500.00000 0.40 8840.00000 8805.00000 8615.000
00
GRASIM 38505.00000 -1.10 79445.00000 79065.00000 78100.000
00
HCLTECH 37525.00000 -2.15 87800.00000 86490.00000 85155.000
00
HDFC 1.47345 -8.10 2.06300 2.04065 2.023
15
HDFCBANK 73875.00000 -10.60 1.25000 1.23610 1.229
65
HDFCLIFE 34000.00000 -1.00 56680.00000 56170.00000 55815.000
00
HEROMOTOCO 1.47500 -98.30 3.17690 3.08005 3.074
00
HINDALCO 8490.00000 -1.95 18770.00000 18400.00000 18210.000
00
HINDUNILVR 1.75730 6.90 2.18725 2.17005 2.153
20
ICICIBANK 26830.00000 -6.65 41965.00000 41365.00000 40965.000
00
INDUSINDBK 23555.00000 -15.70 63085.00000 61240.00000 61000.000
00
INFY 50925.00000 -16.20 1.15800 1.13215 1.130
45
IOC 7115.00000 1.10 7740.00000 7710.00000 7550.000
00
ITC 13460.00000 0.40 16910.00000 16805.00000 16700.000
00
JSWSTEEL 13250.00000 1.15 32635.00000 32410.00000 31950.000
00
KOTAKBANK 1.00100 2.45 1.40500 1.39575 1.377
55
LT 66100.00000 11.05 93900.00000 93550.00000 92015.000
00
M&M 24540.00000 0.85 60450.00000 60170.00000 59410.000
00
MARUTI 4.00110 -66.30 6.86000 6.79555 6.785
05
NESTLEIND 12.20000 -119.20 16.08110 15.91165 15.768
05
NIFTY 50 7.51110 -47.90 11.93955 11.88975 11.845
65
NTPC 7320.00000 0.50 8315.00000 8280.00000 8140.000
00
ONGC 5000.00000 0.85 6910.00000 6865.00000 6730.000
00
POWERGRID 12215.00000 0.85 16475.00000 16460.00000 16120.000
00
RELIANCE 86698.00000 -14.10 2.13250 2.11050 2.091
00
SBILIFE 51940.00000 -7.60 78830.00000 77775.00000 77130.000
00
SBIN 14945.00000 -0.30 20460.00000 20345.00000 20110.000
00
SHREECEM 15.41000 -47.50 21.29000 21.10000 20.940
00
SUNPHARMA 31200.00000 -5.80 49140.00000 48440.00000 48170.000
00
TATAMOTORS 6350.00000 1.75 13290.00000 13200.00000 12845.000
00
TATASTEEL 25085.00000 4.25 41355.00000 40830.00000 40010.000
00
TCS 1.50605 -15.40 2.68665 2.66000 2.638
10
TECHM 47140.00000 -12.95 85390.00000 83295.00000 82880.000
00
TITAN 72090.00000 -11.70 1.25300 1.23300 1.229
00
ULTRACEMCO 2.91000 -17.05 4.73555 4.61205 4.555
00
UPL 24015.00000 0.45 45820.00000 45465.00000 45020.000
00
WIPRO 15940.00000 0.05 34820.00000 34350.00000 34085.000
00

Open Traded Value(crs) Traded Volume(lacs)


Symbol
ADANIPORTS 35055.00000 11785.00000 3274.0000
ASIANPAINT 2.11420 28921.00000 1382.0000
AXISBANK 49600.00000 1.08644 21537.0000
BAJAJ-AUTO 3.00980 37997.00000 1263.0000
BAJAJFINSV 5.84800 57208.00000 958.0000
BAJFINANCE 3.16000 1.79271 5468.0000
BHARTIARTL 41900.00000 85255.00000 20069.0000
BPCL 34870.00000 15892.00000 4581.0000
BRITANNIA 3.41000 65104.00000 1882.0000
CIPLA 76500.00000 53484.00000 7081.0000
COALINDIA 11500.00000 8110.00000 7065.0000
DIVISLAB 3.07895 19462.00000 636.0000
DRREDDY 5.03670 2.09090 4231.0000
EICHERMOT 2.17890 15409.00000 716.0000
GAIL 8615.00000 9367.00000 10708.0000
GRASIM 79175.00000 10615.00000 1347.0000
HCLTECH 85890.00000 64648.00000 7456.0000
HDFC 2.03830 76738.00000 3754.0000
HDFCBANK 1.23995 1.01400 8179.0000
HDFCLIFE 56300.00000 8364.00000 1488.0000
HEROMOTOCO 3.17690 35173.00000 1130.0000
HINDALCO 18490.00000 24203.00000 13093.0000
HINDUNILVR 2.16000 43870.00000 2024.0000
ICICIBANK 41640.00000 1.01950 24565.0000
INDUSINDBK 62100.00000 69109.00000 11166.0000
INFY 1.14200 90937.00000 7957.0000
IOC 7585.00000 8908.00000 11652.0000
ITC 16755.00000 22051.00000 13125.0000
JSWSTEEL 32200.00000 19724.00000 6105.0000
KOTAKBANK 1.38800 38035.00000 2732.0000
LT 92200.00000 42097.00000 4511.0000
M&M 59980.00000 17456.00000 2908.0000
MARUTI 6.82800 28855.00000 424.0000
NESTLEIND 15.99005 13240.00000 83.0000
NIFTY 50 11.89000 24.59593 3.7454
NTPC 8230.00000 16138.00000 19604.0000
ONGC 6740.00000 9489.00000 13839.0000
POWERGRID 16215.00000 18445.00000 11321.0000
RELIANCE 2.12740 2.26020 10728.0000
SBILIFE 78830.00000 10959.00000 1412.0000
SBIN 20190.00000 52785.00000 25986.0000
SHREECEM 21.20000 7261.00000 34.0000
SUNPHARMA 49120.00000 23987.00000 4947.0000
TATAMOTORS 12970.00000 46259.00000 35266.0000
TATASTEEL 40190.00000 66415.00000 16304.0000
TCS 2.66100 1.12893 4237.0000
TECHM 84485.00000 24466.00000 2913.0000
TITAN 1.24015 17601.00000 1417.0000
ULTRACEMCO 4.67500 64249.00000 1387.0000
UPL 45280.00000 15511.00000 3416.0000
WIPRO 34100.00000 24743.00000 7179.0000

The highest stock for the day is =


Symbol WIPRO
Open 92200
High 93900
Low 92015
Last Traded Price 93550
Change 101.15
%Change 3.13
Traded Volume(lacs) 35266
Traded Value(crs) 90937
52 Week High 91070
52 Week Low 86698
365 Days % Change 77.37
30 Days % Change 19.59
dtype: object

The lowest stock for the day is =


Symbol ADANIPORTS
Open 1.142
High 1.158
Low 1.13045
Last Traded Price 1.13215
Change -119.2
%Change -3.09
Traded Volume(lacs) 3.7454
Traded Value(crs) 1.014
52 Week High 1.03
52 Week Low 1.001
365 Days % Change -89.23
30 Days % Change -14.57
dtype: object

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy