0% found this document useful (0 votes)
24 views6 pages

Log-20241201 1656 1

The document contains a detailed log of the XGPushService operations, including connection attempts to a server at IP 203.205.151.233 on various ports. Multiple warnings and errors indicate issues such as null strategy items and connection resets by the peer. Despite several connection attempts, the service encounters repeated failures due to network issues.

Uploaded by

manusiatirbang0
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
24 views6 pages

Log-20241201 1656 1

The document contains a detailed log of the XGPushService operations, including connection attempts to a server at IP 203.205.151.233 on various ports. Multiple warnings and errors indicate issues such as null strategy items and connection resets by the peer. Despite several connection attempts, the service encounters repeated failures due to network issues.

Uploaded by

manusiatirbang0
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

12.01_16:55:57_081 TRACE [XGPushService] onCreate() : com.efun.

twqmcs
12.01_16:55:57_110 INFO [PushServiceManager] Service's first running at
com.efun.twqmcs version : 1.0
12.01_16:55:57_123 TRACE [TpnsChannel] Action ->
checkAndSetupClient( tpnsClient = null, isClientCreating = false)
12.01_16:55:57_124 DEBUG [XGHorse] Action ->
createOptimalSocketChannel run
12.01_16:55:57_139 WARN [XGHorse] opt strategy list is null
12.01_16:55:57_141 DEBUG [OptimalLinkSelector] Action -> startHorseTask with key
= 02:00:00:00:00:00
12.01_16:55:57_147 DEBUG [OptimalLinkSelector] Tools.getChannelType = 0
12.01_16:55:57_149 WARN [XGService] getStrategyItems
12.01_16:55:57_149
WARNcom.tencent.android.tpush.service.channel.exception.NullReturnException:
getOptStrategyItem return null,because the optstragegylist is empty
at com.tencent.android.tpush.horse.data.OptStrategyList.e(ProGuard:75)
at com.tencent.android.tpush.horse.p.a(ProGuard:51)
at com.tencent.android.tpush.horse.p.a(ProGuard:75)
at com.tencent.android.tpush.horse.g.a(ProGuard:297)
at com.tencent.android.tpush.horse.g.a(ProGuard:31)
at com.tencent.android.tpush.horse.h.run(ProGuard:152)
at android.os.Handler.handleCallback(Handler.java:1013)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:328)
at android.os.HandlerThread.run(HandlerThread.java:67)

12.01_16:55:57_151 WARN [XGService] getStrategyItems


12.01_16:55:57_151
WARNcom.tencent.android.tpush.service.channel.exception.NullReturnException:
getOptStrategyItem return null,because the optstragegylist is empty
at com.tencent.android.tpush.horse.data.OptStrategyList.e(ProGuard:75)
at com.tencent.android.tpush.horse.p.a(ProGuard:51)
at com.tencent.android.tpush.horse.p.b(ProGuard:84)
at com.tencent.android.tpush.horse.g.a(ProGuard:299)
at com.tencent.android.tpush.horse.g.a(ProGuard:31)
at com.tencent.android.tpush.horse.h.run(ProGuard:152)
at android.os.Handler.handleCallback(Handler.java:1013)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:328)
at android.os.HandlerThread.run(HandlerThread.java:67)

12.01_16:55:57_153 DEBUG [BaseTask] startTask() with strategyItems


size = 4
12.01_16:55:57_154 DEBUG [BaseTask] startTask() with strategyItems
size = 4
12.01_16:55:57_172 DEBUG [HorseThread] HorseThread:cThread[Thread-
5,5,main]current
NetworkType:1,strategyItem:serverIp=203.205.151.233,serverPort=8080,
proxyIp=,proxyPort=80, protocolType=http, redirect=0
12.01_16:55:57_173 INFO [SocketClient] connect to 203.205.151.233:8080
12.01_16:55:57_178 DEBUG [HorseThread] HorseThread:cThread[Thread-
4,5,main]current NetworkType:1,strategyItem:serverIp=203.205.151.233,serverPort=80,
proxyIp=,proxyPort=80, protocolType=tcp, redirect=0
12.01_16:55:57_178 DEBUG [HorseThread] HorseThread:cThread[Thread-
3,5,main]current
NetworkType:1,strategyItem:serverIp=203.205.151.233,serverPort=8080,
proxyIp=,proxyPort=80, protocolType=tcp, redirect=0
12.01_16:55:57_178 INFO [SocketClient] connect to 203.205.151.233:80
12.01_16:55:57_179 INFO [SocketClient] connect to 203.205.151.233:8080
12.01_16:55:57_179 DEBUG [HorseThread] HorseThread:cThread[Thread-
6,5,main]current NetworkType:1,strategyItem:serverIp=203.205.151.233,serverPort=80,
proxyIp=,proxyPort=80, protocolType=http, redirect=0
12.01_16:55:57_179 INFO [SocketClient] connect to 203.205.151.233:80
12.01_16:55:57_253 INFO [SocketClient] connect success
12.01_16:55:57_258 INFO [SocketClient] connect success
12.01_16:55:58_292 INFO [SocketClient] connect success
12.01_16:55:58_292 INFO [SocketClient] connect success
12.01_16:56:02_139 INFO [xguardian] Application is install in SD
Card: false
12.01_16:56:02_165 DEBUG [xguardian] exec [Ljava.lang.String;@bc90e4
12.01_16:56:02_236 DEBUG [xguardian] proc.exitValue = 0
12.01_16:56:09_321 WARN [SocketClient] SocketClient -> recv
12.01_16:56:09_321 WARNjava.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:421)
at sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.java:223)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:102)
at com.tencent.android.tpush.horse.n.b(ProGuard:205)
at com.tencent.android.tpush.horse.c.run(ProGuard:176)

12.01_16:56:09_321 WARN [SocketClient] SocketClient -> recv


12.01_16:56:09_321 ERROR [BaseTask] Horse
onFail(serverIp=203.205.151.233,serverPort=80, proxyIp=,proxyPort=80,
protocolType=tcp, redirect=0)
12.01_16:56:09_321 WARNjava.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:421)
at sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.java:223)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:102)
at com.tencent.android.tpush.horse.n.b(ProGuard:205)
at com.tencent.android.tpush.horse.c.run(ProGuard:176)

12.01_16:56:09_322 ERROR [BaseTask] Horse


onFail(serverIp=203.205.151.233,serverPort=8080, proxyIp=,proxyPort=80,
protocolType=tcp, redirect=0)
12.01_16:56:09_322 WARN [HorseThread] HorseThread
error:java.io.IOException: Connection reset by peer
12.01_16:56:09_322 WARN [HorseThread] HorseThread
error:java.io.IOException: Connection reset by peer
12.01_16:56:09_323 DEBUG [HorseThread] HorseThread:cThread[Thread-
4,5,main]current
NetworkType:1,strategyItem:serverIp=203.205.151.233,serverPort=443,
proxyIp=,proxyPort=80, protocolType=tcp, redirect=0
12.01_16:56:09_324 DEBUG [HorseThread] HorseThread:cThread[Thread-
3,5,main]current
NetworkType:1,strategyItem:serverIp=203.205.151.233,serverPort=14000,
proxyIp=,proxyPort=80, protocolType=tcp, redirect=0
12.01_16:56:09_324 INFO [SocketClient] connect to 203.205.151.233:443
12.01_16:56:09_324 INFO [SocketClient] connect to 203.205.151.233:14000
12.01_16:56:09_456 INFO [SocketClient] connect success
12.01_16:56:09_457 INFO [SocketClient] connect success
12.01_16:56:10_377 WARNjava.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:421)
at sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.java:223)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:102)
at com.tencent.android.tpush.horse.n.b(ProGuard:239)
at com.tencent.android.tpush.horse.c.run(ProGuard:176)

12.01_16:56:10_378 ERROR [BaseTask] Horse


onFail(serverIp=203.205.151.233,serverPort=8080, proxyIp=,proxyPort=80,
protocolType=http, redirect=0)
12.01_16:56:10_378 WARNjava.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:421)
at sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.java:223)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:102)
at com.tencent.android.tpush.horse.n.b(ProGuard:239)
at com.tencent.android.tpush.horse.c.run(ProGuard:176)

12.01_16:56:10_378 WARN [HorseThread] HorseThread


error:java.io.IOException: Connection reset by peer
12.01_16:56:10_378 ERROR [BaseTask] Horse
onFail(serverIp=203.205.151.233,serverPort=80, proxyIp=,proxyPort=80,
protocolType=http, redirect=0)
12.01_16:56:10_379 WARN [HorseThread] HorseThread
error:java.io.IOException: Connection reset by peer
12.01_16:56:10_380 DEBUG [HorseThread] HorseThread:cThread[Thread-
6,5,main]current
NetworkType:1,strategyItem:serverIp=203.205.151.233,serverPort=14000,
proxyIp=,proxyPort=80, protocolType=http, redirect=0
12.01_16:56:10_380 DEBUG [HorseThread] HorseThread:cThread[Thread-
5,5,main]current
NetworkType:1,strategyItem:serverIp=203.205.151.233,serverPort=443,
proxyIp=,proxyPort=80, protocolType=http, redirect=0
12.01_16:56:10_380 INFO [SocketClient] connect to 203.205.151.233:443
12.01_16:56:10_380 INFO [SocketClient] connect to 203.205.151.233:14000
12.01_16:56:10_462 INFO [SocketClient] connect success
12.01_16:56:10_463 INFO [SocketClient] connect success
12.01_16:56:25_887 WARN [SocketClient] SocketClient -> recv
12.01_16:56:25_887 WARNjava.io.IOException: Software caused connection abort
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:421)
at sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.java:223)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:102)
at com.tencent.android.tpush.horse.n.b(ProGuard:205)
at com.tencent.android.tpush.horse.c.run(ProGuard:176)

12.01_16:56:25_888 ERROR [BaseTask] Horse


onFail(serverIp=203.205.151.233,serverPort=14000, proxyIp=,proxyPort=80,
protocolType=tcp, redirect=0)
12.01_16:56:25_888 WARN [HorseThread] HorseThread
error:java.io.IOException: Software caused connection abort
12.01_16:56:25_889 WARNjava.io.IOException: Software caused connection abort
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:421)
at sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.java:223)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:102)
at com.tencent.android.tpush.horse.n.b(ProGuard:239)
at com.tencent.android.tpush.horse.c.run(ProGuard:176)

12.01_16:56:25_889 ERROR [BaseTask] Horse


onFail(serverIp=203.205.151.233,serverPort=443, proxyIp=,proxyPort=80,
protocolType=http, redirect=0)
12.01_16:56:25_889 WARN [HorseThread] HorseThread
error:java.io.IOException: Software caused connection abort
12.01_16:56:25_889 WARNjava.io.IOException: Software caused connection abort
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:421)
at sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.java:223)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:102)
at com.tencent.android.tpush.horse.n.b(ProGuard:239)
at com.tencent.android.tpush.horse.c.run(ProGuard:176)

12.01_16:56:25_890 ERROR [BaseTask] Horse


onFail(serverIp=203.205.151.233,serverPort=14000, proxyIp=,proxyPort=80,
protocolType=http, redirect=0)
12.01_16:56:25_890 WARN [SocketClient] SocketClient -> recv
12.01_16:56:25_890 WARN [HorseThread] HorseThread
error:java.io.IOException: Software caused connection abort
12.01_16:56:25_890 WARNjava.io.IOException: Software caused connection abort
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:421)
at sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.java:223)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:102)
at com.tencent.android.tpush.horse.n.b(ProGuard:205)
at com.tencent.android.tpush.horse.c.run(ProGuard:176)

12.01_16:56:25_890 ERROR [BaseTask] Horse


onFail(serverIp=203.205.151.233,serverPort=443, proxyIp=,proxyPort=80,
protocolType=tcp, redirect=0)
12.01_16:56:25_890 ERROR [TpnsChannel] ICreateSocketChannelCallback
onFailure(10101,create channel fail!)
12.01_16:56:25_916 DEBUG [TpnsChannel] onDisconnected and retry
HANDLER_CHECKANDSETUP 2000 retry times = 1
12.01_16:56:25_917 WARN [HorseThread] HorseThread
error:java.io.IOException: Software caused connection abort
12.01_16:56:26_365 TRACE [XGService] @@ clearLocalMsg(current
pkg:com.efun.twqmcs,remote pkg:com.efun.twqmcs)
12.01_16:56:27_918 TRACE [TpnsChannel] Action ->
checkAndSetupClient( tpnsClient = null, isClientCreating = false)
12.01_16:56:27_919 DEBUG [XGHorse] Action ->
createOptimalSocketChannel run
12.01_16:56:27_922 WARN [XGHorse] opt strategy list is null
12.01_16:56:27_924 DEBUG [OptimalLinkSelector] Action -> startHorseTask with key
= 02:00:00:00:00:00
12.01_16:56:27_928 DEBUG [OptimalLinkSelector] Tools.getChannelType = 0
12.01_16:56:27_930 WARN [XGService] getStrategyItems
12.01_16:56:27_930
WARNcom.tencent.android.tpush.service.channel.exception.NullReturnException:
getOptStrategyItem return null,because the optstragegylist is empty
at com.tencent.android.tpush.horse.data.OptStrategyList.e(ProGuard:75)
at com.tencent.android.tpush.horse.p.a(ProGuard:51)
at com.tencent.android.tpush.horse.p.a(ProGuard:75)
at com.tencent.android.tpush.horse.g.a(ProGuard:297)
at com.tencent.android.tpush.horse.g.a(ProGuard:31)
at com.tencent.android.tpush.horse.h.run(ProGuard:152)
at android.os.Handler.handleCallback(Handler.java:1013)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:328)
at android.os.HandlerThread.run(HandlerThread.java:67)

12.01_16:56:27_932 WARN [XGService] getStrategyItems


12.01_16:56:27_932
WARNcom.tencent.android.tpush.service.channel.exception.NullReturnException:
getOptStrategyItem return null,because the optstragegylist is empty
at com.tencent.android.tpush.horse.data.OptStrategyList.e(ProGuard:75)
at com.tencent.android.tpush.horse.p.a(ProGuard:51)
at com.tencent.android.tpush.horse.p.b(ProGuard:84)
at com.tencent.android.tpush.horse.g.a(ProGuard:299)
at com.tencent.android.tpush.horse.g.a(ProGuard:31)
at com.tencent.android.tpush.horse.h.run(ProGuard:152)
at android.os.Handler.handleCallback(Handler.java:1013)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:328)
at android.os.HandlerThread.run(HandlerThread.java:67)

12.01_16:56:27_933 DEBUG [BaseTask] startTask() with strategyItems


size = 4
12.01_16:56:27_935 DEBUG [BaseTask] startTask() with strategyItems
size = 4
12.01_16:56:27_939 DEBUG [HorseThread] HorseThread:cThread[Thread-
12,5,main]current
NetworkType:1,strategyItem:serverIp=203.205.151.233,serverPort=8080,
proxyIp=,proxyPort=80, protocolType=http, redirect=0
12.01_16:56:27_939 INFO [SocketClient] connect to 203.205.151.233:8080
12.01_16:56:27_940 DEBUG [HorseThread] HorseThread:cThread[Thread-
11,5,main]current
NetworkType:1,strategyItem:serverIp=203.205.151.233,serverPort=80,
proxyIp=,proxyPort=80, protocolType=http, redirect=0
12.01_16:56:27_940 INFO [SocketClient] connect to 203.205.151.233:80
12.01_16:56:27_941 DEBUG [HorseThread] HorseThread:cThread[Thread-
10,5,main]current
NetworkType:1,strategyItem:serverIp=203.205.151.233,serverPort=80,
proxyIp=,proxyPort=80, protocolType=tcp, redirect=0
12.01_16:56:27_942 INFO [SocketClient] connect to 203.205.151.233:80
12.01_16:56:27_942 DEBUG [HorseThread] HorseThread:cThread[Thread-
9,5,main]current
NetworkType:1,strategyItem:serverIp=203.205.151.233,serverPort=8080,
proxyIp=,proxyPort=80, protocolType=tcp, redirect=0
12.01_16:56:27_943 INFO [SocketClient] connect to 203.205.151.233:8080
12.01_16:56:28_039 INFO [SocketClient] connect success
12.01_16:56:28_040 INFO [SocketClient] connect success
12.01_16:56:28_040 INFO [SocketClient] connect success
12.01_16:56:28_040 INFO [SocketClient] connect success
12.01_16:56:40_111 WARNjava.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:421)
at sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.java:223)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:102)
at com.tencent.android.tpush.horse.n.b(ProGuard:239)
at com.tencent.android.tpush.horse.c.run(ProGuard:176)

12.01_16:56:40_112 WARN [SocketClient] SocketClient -> recv


12.01_16:56:40_112 WARNjava.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:421)
at sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.java:223)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:102)
at com.tencent.android.tpush.horse.n.b(ProGuard:205)
at com.tencent.android.tpush.horse.c.run(ProGuard:176)

12.01_16:56:40_112 WARNjava.io.IOException: Connection reset by peer


at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:421)
at sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.java:223)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:102)
at com.tencent.android.tpush.horse.n.b(ProGuard:239)
at com.tencent.android.tpush.horse.c.run(ProGuard:176)

12.01_16:56:40_112 ERROR [BaseTask] Horse


onFail(serverIp=203.205.151.233,serverPort=80, proxyIp=,proxyPort=80,
protocolType=http, redirect=0)
12.01_16:56:40_112 ERROR [BaseTask] Horse
onFail(serverIp=203.205.151.233,serverPort=80, proxyIp=,proxyPort=80,
protocolType=tcp, redirect=0)

You might also like