Advertisement
apalchikovskiy

Untitled

Jan 28th, 2020
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.31 KB | None | 0 0
  1. package com.emfxe.test
  2.  
  3. import com.bmfn.extensions.scaleUp
  4. import com.emfxe.model.position.ProfitAndInvested
  5. import com.emfxe.utils.*
  6. import org.junit.Test
  7. import org.junit.Assert
  8. import java.math.BigDecimal
  9.  
  10.  
  11. class FormulasTests {
  12.  
  13. //check maxQTY with cross = 1
  14. @Test
  15. fun checkMaxQTYWithIntegerPriceAndIntegerBalanceCrossEqualsOne(){
  16. Assert.assertEquals(26.toBigDecimal(), (maxQTY(1000.toBigDecimal(), BigDecimal.ONE, 38.toBigDecimal())))
  17. }
  18.  
  19. @Test
  20. fun checkMaxQTYWithFloatPriceAndIntegerBalanceCrossEqualsOne(){
  21. Assert.assertEquals(4.toBigDecimal(), (maxQTY(1127.toBigDecimal(), BigDecimal.ONE, 257.365.toBigDecimal())))
  22. }
  23.  
  24. @Test
  25. fun checkMaxQTYWithFloatBalanceAndFloatPriceCrossEqualsOne(){
  26. Assert.assertEquals(3.toBigDecimal(), (maxQTY(5803.48.toBigDecimal(), BigDecimal.ONE, 1568.965.toBigDecimal())))
  27. }
  28. @Test
  29. fun checkMaxQTYWithFloatBalanceAndFIntPriceCrossEqualsOne(){
  30. Assert.assertEquals(796.toBigDecimal(), (maxQTY(51803.48.toBigDecimal(), BigDecimal.ONE, 65.toBigDecimal())))
  31. }
  32.  
  33. //check maxQTY with float cross
  34.  
  35. @Test
  36. fun checkMaxQTYWithIntegerPriceAndIntegerBalanceFloatCross(){
  37. Assert.assertEquals(45.toBigDecimal(), (maxQTY(1722.toBigDecimal(), 0.9874.toBigDecimal(), 38.toBigDecimal())))
  38. }
  39.  
  40. @Test
  41. fun checkMaxQTYWithFloatPriceAndIntegerBalanceFloatCross(){
  42. Assert.assertEquals(6590.toBigDecimal(), (maxQTY(99999.toBigDecimal(), 0.05896.toBigDecimal(), 257.365.toBigDecimal())))
  43. }
  44. @Test
  45. fun checkMaxQTYWithIntegerPriceAndFloatBalanceFloatCross(){
  46. Assert.assertEquals(399.toBigDecimal(), (maxQTY(7895.36.toBigDecimal(), 1.97525.toBigDecimal(), 10.toBigDecimal())))
  47. }
  48. @Test
  49. fun checkMaxQTYWithFloatPriceAndFloatBalanceFloatCross(){
  50. Assert.assertEquals(76.toBigDecimal(), (maxQTY(81965.32.toBigDecimal(), 18.6515.toBigDecimal(), 57.36518.toBigDecimal())))
  51. }
  52.  
  53. //check max qty when balance < price
  54. @Test
  55. fun checkMaxQTYBalanceLessPriceCrossEqualsOne(){
  56. Assert.assertEquals(0.toBigDecimal(), (maxQTY(785.toBigDecimal(), BigDecimal.ONE, 1256.toBigDecimal())))
  57. }
  58. @Test
  59. fun checkMaxQtyBalanceLessPriceCrossLessOne(){
  60. Assert.assertEquals(46.toBigDecimal(), (maxQTY(946.toBigDecimal(), 0.00256.toBigDecimal(), 7895.63.toBigDecimal())))
  61. }
  62. @Test
  63. fun checkMaxQTYBalanceLessPriceCrossMOreThanOne(){
  64. Assert.assertEquals(0.toBigDecimal(), (maxQTY(1256.toBigDecimal(), 45.23.toBigDecimal(), 11756.toBigDecimal())))
  65. }
  66.  
  67. //check min qty
  68. @Test
  69. fun checkMinQTYWithMinAmountEqualsZero(){
  70. Assert.assertEquals(BigDecimal.ONE, (minQTY(BigDecimal.ZERO, 45.23.toBigDecimal())))
  71. }
  72. @Test
  73. fun checkMinQTYWithMinAmountEqualsOne(){
  74. Assert.assertEquals(BigDecimal.ONE, (minQTY(BigDecimal.ONE, 1.2356.toBigDecimal())))
  75. }
  76. @Test
  77. fun checkMinQTYWitnMinAmountIntAndIntPrice(){
  78. Assert.assertEquals(31.toBigDecimal(), (minQTY(17896.toBigDecimal(), 596.toBigDecimal())))
  79. }
  80. @Test
  81. fun checkMinQTYWithIntMinAmountAndFloatPrice(){
  82. Assert.assertEquals(34.toBigDecimal(), (minQTY(1896.toBigDecimal(), 56.25698.toBigDecimal())))
  83. }
  84. @Test
  85. fun checkMinQTYWithFloatMinAmountAndIntPrice(){
  86. Assert.assertEquals(723.toBigDecimal(), (minQTY(56321.89.toBigDecimal(), 78.toBigDecimal())))
  87. }
  88. @Test
  89. fun checkMinQTYWithFloatMinAmountAndFloatPrice(){
  90. Assert.assertEquals(2691.toBigDecimal(), (minQTY(9845.36.toBigDecimal(), 3.6589.toBigDecimal())))
  91. }
  92. @Test
  93. fun checkMinQTYWhenMinAmountDivideByPriceLessOne(){
  94. Assert.assertEquals(BigDecimal.ONE, (minQTY(7896.toBigDecimal(), 12896.354.toBigDecimal())))
  95. }
  96.  
  97. //check minQTYAccountCurrency
  98. @Test
  99. fun checkMinQTYAccountCurrencyWithIntMinAmountAndIntCross(){
  100. Assert.assertEquals(425.toBigDecimal(), (minQTYAccountCurrency(5.toBigDecimal(), 85.toBigDecimal())))
  101. }
  102. @Test
  103. fun checkMinQTYAccountCurrencyWithIntMinAmountAndFloatCross(){
  104. Assert.assertEquals(1222.toBigDecimal(), (minQTYAccountCurrency(14.3659.toBigDecimal(), 85.toBigDecimal())))
  105. }
  106. @Test
  107. fun checkMinQTYAccountCurrencyWithFloatMinAmountAndIntCross(){
  108. Assert.assertEquals(1198.toBigDecimal(), (minQTYAccountCurrency(14.toBigDecimal(), 85.569.toBigDecimal())))
  109. }
  110. @Test
  111. fun checkMinQTYAccountCurrencyWithFloatMinAmountAndFloatCross(){
  112. Assert.assertEquals(1483.toBigDecimal(), (minQTYAccountCurrency(14.3659.toBigDecimal(), 103.23.toBigDecimal())))
  113. }
  114. @Test
  115. fun checkMinQTYAccountCurrencyWithCrossEqualsOne(){
  116. Assert.assertEquals(73.toBigDecimal(), (minQTYAccountCurrency(BigDecimal.ONE, 73.toBigDecimal())))
  117. }
  118.  
  119. @Test
  120. fun checkMinQTYAccountCurrencyWithCrossEqualsNull(){
  121. Assert.assertEquals(73.toBigDecimal(), (minQTYAccountCurrency(null, 73.toBigDecimal())))
  122. }
  123.  
  124. //check neededAmount
  125. @Test
  126. fun checkNeededAmountWithIntBalance(){
  127. Assert.assertEquals(159307.toBigDecimal(),neededAmount(101256.toBigDecimal(),1589.toBigDecimal(),1.589.toBigDecimal()))
  128. }
  129. @Test
  130. fun checkNeededAmountWithFloatBalance(){
  131. Assert.assertEquals(15840.toBigDecimal(),neededAmount(10968.toBigDecimal(),1589.45.toBigDecimal(),1.589.toBigDecimal()))
  132. }
  133. @Test
  134. fun checkNeededAmountWhenDifferenceMinQTYAndBalanceLessZero(){
  135. Assert.assertEquals(BigDecimal.ONE,neededAmount(1000.toBigDecimal(),1588.22.toBigDecimal(),1.589.toBigDecimal()))
  136. }
  137. @Test
  138. fun checkNeededAmountWhenBalanceMoreThenMinQTY(){
  139. Assert.assertEquals((-7236).toBigDecimal(),neededAmount(10.toBigDecimal(),7252.15.toBigDecimal(),1.589.toBigDecimal()))
  140. }
  141. @Test
  142. fun checkNeededAmountWhenBalanceEqualsMinQTY(){
  143. Assert.assertEquals(BigDecimal.ZERO,neededAmount(18.toBigDecimal(),67.toBigDecimal(),3.685.toBigDecimal()))
  144. }
  145.  
  146. @Test
  147. fun checkInvestmentValueWithIntQTYIntNavIntCross(){
  148. Assert.assertEquals(520200.toBigDecimal(),investmentValue(17.toBigDecimal(), 850.toBigDecimal(), 36.toBigDecimal()))
  149. }
  150. @Test
  151. fun checkInvestmentValueWithIntQTYIntNavFloatCross(){
  152. Assert.assertEquals(772.0669.toBigDecimal(),investmentValue(17.toBigDecimal(), 53.toBigDecimal(), 0.8569.toBigDecimal()))
  153. }
  154. @Test
  155. fun checkInvestmentValueWithIntQTYFloatNavIntCross(){
  156. Assert.assertEquals(5830.0956.toBigDecimal(),investmentValue(17.toBigDecimal(), 9.5263.toBigDecimal(), 36.toBigDecimal()))
  157. }
  158. @Test
  159. fun checkInvestmentValueWithIntQTYFloatNavFloatCross(){
  160. Assert.assertEquals(74.261717488.toBigDecimal(),investmentValue(8.toBigDecimal(), 25.36954.toBigDecimal(), 0.3659.toBigDecimal()))
  161. }
  162. @Test
  163. fun checkInvestmentValueWithFloatQTYIntNavIntCross(){
  164. Assert.assertEquals(4343.06.toBigDecimal(),investmentValue(58.69.toBigDecimal(), 1.toBigDecimal(), 74.toBigDecimal()))
  165. }
  166. @Test
  167. fun checkInvestmentValueWithFloatQTYIntNavFloatCross(){
  168. Assert.assertEquals(167.9478608.toBigDecimal(),investmentValue(5.69.toBigDecimal(), 8.toBigDecimal(), 3.68954.toBigDecimal()))
  169. }
  170. @Test
  171. fun checkInvestmentValueWithFloatQTYFloatNavIntCross(){
  172. Assert.assertEquals(250.64325.toBigDecimal(),investmentValue(3.25.toBigDecimal(), 8.569.toBigDecimal(), 9.toBigDecimal()))
  173. }
  174. @Test
  175. fun checkInvestmentValueWithFloatQTYFloatNavFloatCross(){
  176. Assert.assertEquals(4.5894486232.toBigDecimal(),investmentValue(2.36.toBigDecimal(), 7.5698.toBigDecimal(), 0.2569.toBigDecimal()))
  177. }
  178. @Test
  179. fun checkInvestmentValueWithCrossEqualsNull(){
  180. Assert.assertEquals(14450.toBigDecimal(),investmentValue(17.toBigDecimal(), 850.toBigDecimal(), null))
  181. }
  182.  
  183. //check qty
  184. @Test
  185. fun checkQTYWithIntInvestIntNavIntCross(){
  186. Assert.assertEquals(18.toBigDecimal(),qty(1500.toBigDecimal(), 17.toBigDecimal(), 5.toBigDecimal()))
  187. }
  188. @Test
  189. fun checkQTYWithIntInvestIntNavFloatCross(){
  190. Assert.assertEquals(25.toBigDecimal(),qty(1548.toBigDecimal(), 17.toBigDecimal(), 3.68974.toBigDecimal()))
  191. }
  192. @Test
  193. fun checkQTYWithIntInvestFloatNavIntCross(){
  194. Assert.assertEquals(261.toBigDecimal(),qty(754.toBigDecimal(), 0.96587.toBigDecimal(), 3.toBigDecimal()))
  195. }
  196. @Test
  197. fun checkQTYWithIntInvestFloatNavFloatCross(){
  198. Assert.assertEquals(6.toBigDecimal(),qty(65.toBigDecimal(), 1.2569.toBigDecimal(), 9.987456.toBigDecimal()))
  199. }
  200. @Test
  201. fun checkQTYWithFloatInvestIntNavIntCross(){
  202. Assert.assertEquals(106.toBigDecimal(),qty(8956.65.toBigDecimal(), 17.toBigDecimal(), 5.toBigDecimal()))
  203. }
  204. @Test
  205. fun checkQTYWithFloatInvestIntNavFloatCross(){
  206. Assert.assertEquals(2.toBigDecimal(),qty(85.36.toBigDecimal(), 8.toBigDecimal(), 9.5682.toBigDecimal()))
  207. }
  208. @Test
  209. fun checkQTYWithFloatInvestFloatNavIntCross(){
  210. Assert.assertEquals(24.toBigDecimal(),qty(853.26.toBigDecimal(), 7.2156.toBigDecimal(), 5.toBigDecimal()))
  211. }
  212. @Test
  213. fun checkQTYWithFloatInvestFloatNavFloatCross(){
  214. Assert.assertEquals(2.toBigDecimal(),qty(8753.21.toBigDecimal(), 654.25.toBigDecimal(), 11.6589.toBigDecimal()))
  215. }
  216. @Test
  217. fun checkQTYWithCrossEqualsNull(){
  218. Assert.assertEquals(59.toBigDecimal(),qty(546.toBigDecimal(), 9.256.toBigDecimal(), null))
  219. }
  220. @Test
  221. fun checkQTYWithResultLessOne(){
  222. Assert.assertEquals(1.toBigDecimal(),qty(1500.toBigDecimal(), 1726.25.toBigDecimal(), 13.2658.toBigDecimal()))
  223. }
  224.  
  225. //check positionValue
  226. @Test
  227. fun checkPositionValueWithIntQtyAndIntNav(){
  228. Assert.assertEquals(7.toBigDecimal(),positionValue(BigDecimal.ONE, 7.toBigDecimal()))
  229. }
  230. @Test
  231. fun checkPositionValueWithIntQtyAndNavLessOne(){
  232. Assert.assertEquals(0.02365.toBigDecimal(),positionValue(BigDecimal.ONE, 0.02365.toBigDecimal()))
  233. }
  234. @Test
  235. fun checkPositionValueWithIntQtyAndLargeNav() {
  236. Assert.assertEquals(BigDecimal("25917741340589.464"),
  237. positionValue(10111256.toBigDecimal(), 2563256.369.toBigDecimal())
  238. )
  239.  
  240. }
  241.  
  242. //check position profit
  243. @Test
  244. fun checkPositionProfitWhenCurrentValueEqualsGetInvested(){
  245. Assert.assertEquals(BigDecimal.ZERO.scaleUp(2), positionProfit(1.7563.toBigDecimal(), 1.7563.toBigDecimal(),17.toBigDecimal(),BigDecimal.ONE, BigDecimal.ONE))
  246. }
  247. @Test
  248. fun checkPositionProfitWhenCurrentValueMoreThenGetInvested(){
  249. Assert.assertEquals(2238.78.toBigDecimal(), positionProfit(1.7563.toBigDecimal(), 1.1123.toBigDecimal(),99.toBigDecimal(),36.852.toBigDecimal(), 36.215.toBigDecimal()))
  250. }
  251. @Test
  252. fun checkPositionProfitWhenCurrentValueLessGetInvested(){
  253. Assert.assertEquals((-37.06).toBigDecimal(), positionProfit(11.23659.toBigDecimal(), 11.9863.toBigDecimal(),17.toBigDecimal(),3.852.toBigDecimal(), 3.915.toBigDecimal()))
  254. }
  255.  
  256. //check getInvested
  257. @Test
  258. fun checkGetInvestedWithIntOpPriceIntVolumeFloatCross(){
  259. Assert.assertEquals(691.99.toBigDecimal(),getInvested(10.toBigDecimal(),56.toBigDecimal(),1.23569.toBigDecimal()))
  260. }
  261. @Test
  262. fun checkGetInvestedWithIntOpPriceIntVolumeIntCross(){
  263. Assert.assertEquals("162.00".toBigDecimal(),getInvested(9.toBigDecimal(),6.toBigDecimal(),3.toBigDecimal()))
  264. }
  265. @Test
  266. fun checkGetInvestedWithIntOpPriceFloatVolumeIntCross(){
  267. Assert.assertEquals("2721.60".toBigDecimal(),getInvested(10.toBigDecimal(),45.36.toBigDecimal(),6.toBigDecimal()))
  268. }
  269. @Test
  270. fun checkGetInvestedWithIntOpPriceFloatVolumeFloatCross(){
  271. Assert.assertEquals(69.57.toBigDecimal(),getInvested(10.toBigDecimal(),5.63.toBigDecimal(),1.23569.toBigDecimal()))
  272. }
  273. @Test
  274. fun checkGetInvestedWithFloatOpPriceIntVolumeIntCross(){
  275. Assert.assertEquals(3934.16.toBigDecimal(),getInvested(17.5632.toBigDecimal(),56.toBigDecimal(),4.toBigDecimal()))
  276. }
  277. @Test
  278. fun checkGetInvestedWithFloatOpPriceIntVolumeFloatCross(){
  279. Assert.assertEquals(4710.96.toBigDecimal(),getInvested(17.5632.toBigDecimal(),56.toBigDecimal(),4.7898.toBigDecimal()))
  280. }
  281. @Test
  282. fun checkGetInvestedWithFloatOpPriceFloatVolumeIntCross(){
  283. Assert.assertEquals(349.92.toBigDecimal(),getInvested(1.00125.toBigDecimal(),87.3695.toBigDecimal(),4.toBigDecimal()))
  284. }
  285. @Test
  286. fun checkGetInvestedWithFloatOpPriceFloatVolumeFloatCross(){
  287. Assert.assertEquals(4.57.toBigDecimal(),getInvested(1.632.toBigDecimal(),7.5632.toBigDecimal(),0.3695.toBigDecimal()))
  288. }
  289. @Test
  290. fun checkGetInvestedWhenResultLessOne(){
  291. Assert.assertEquals(0.01.toBigDecimal(),getInvested(0.12563.toBigDecimal(),1.toBigDecimal(),0.002563.toBigDecimal()))
  292. }
  293.  
  294. //check currentValue
  295. @Test
  296. fun checkCurrentValueWithIntNavIntCross(){
  297. Assert.assertEquals("5400.00".toBigDecimal(), currentValue(12.toBigDecimal(),6.toBigDecimal(),75.toBigDecimal()))
  298. }
  299. @Test
  300. fun checkCurrentValueWithIntNavFloatCross(){
  301. Assert.assertEquals(607.35.toBigDecimal(), currentValue(12.toBigDecimal(),6.3265.toBigDecimal(),8.toBigDecimal()))
  302. }
  303. @Test
  304. fun checkCurrentValueWithFloatNavIntCross(){
  305. Assert.assertEquals(72773.19.toBigDecimal(), currentValue(1732.695.toBigDecimal(),6.toBigDecimal(),7.toBigDecimal()))
  306. }
  307. @Test
  308. fun checkCurrentValueWithFloatNavFloatCross(){
  309. Assert.assertEquals(341.57.toBigDecimal(), currentValue(32.1695.toBigDecimal(),0.96523.toBigDecimal(),11.toBigDecimal()))
  310. }
  311. @Test
  312. fun checkCurrentValueWithCrossEqualsNull(){
  313. Assert.assertEquals(12128.87.toBigDecimal(), currentValue(1732.695.toBigDecimal(),null,7.toBigDecimal()))
  314. }
  315. @Test
  316. fun checkCurrentValueWhenResultLessOne(){
  317. Assert.assertEquals(0.01.toBigDecimal(), currentValue(0.2563.toBigDecimal(),0.02563.toBigDecimal(),1.toBigDecimal()))
  318. }
  319.  
  320. //check redeemCurrentValue
  321.  
  322. @Test
  323. fun checkRedeemCurrentValueWithIntCurrentValueIntQtyIntMaxQty(){
  324. Assert.assertEquals(2.1875.toBigDecimal(),redeemCurrentValue(15.toBigDecimal(), 14.toBigDecimal(), 96.toBigDecimal()))
  325. }
  326. @Test
  327. fun checkRedeemCurrentValueWithFloatCurrentValueIntQtyIntMaxQty(){
  328. Assert.assertEquals(5.074520547945205.toBigDecimal(),redeemCurrentValue(7.56.toBigDecimal(), 49.toBigDecimal(), 73.toBigDecimal()))
  329. }
  330. @Test
  331. fun checkRedeemCurrentValueWihenQtyEqualsMaxQty(){
  332. Assert.assertEquals(3.56.toBigDecimal(),redeemCurrentValue(3.56.toBigDecimal(), 73.toBigDecimal(), 73.toBigDecimal()))
  333. }
  334. @Test
  335. fun checkRedeemCurrentValueWithQtyAndCurrentValueEqualsOne(){
  336. Assert.assertEquals("0.01369863013698630".toBigDecimal(),redeemCurrentValue(1.toBigDecimal(), 1.toBigDecimal(), 73.toBigDecimal()))
  337. }
  338.  
  339. //check totalCurrentValue
  340. @Test
  341. fun checkTotalCurrentValueWithIntInvestedIntProfit(){
  342. Assert.assertEquals(185.toBigDecimal(),totalCurrentValue(100.toBigDecimal(), 85.toBigDecimal()))
  343. }
  344. @Test
  345. fun checkTotalCurrentValueWithIntInvestedFloatProfit(){
  346. Assert.assertEquals(113.26.toBigDecimal(),totalCurrentValue(100.toBigDecimal(), 13.26.toBigDecimal()))
  347. }
  348. @Test
  349. fun checkTotalCurrentValueWithFloatInvestedIntProfit(){
  350. Assert.assertEquals(117.56.toBigDecimal(),totalCurrentValue(100.56.toBigDecimal(), 17.toBigDecimal()))
  351. }
  352. @Test
  353. fun checkTotalCurrentValueWithFloatInvestedFloatProfit(){
  354. Assert.assertEquals(3385.29.toBigDecimal(),totalCurrentValue(1020.06.toBigDecimal(), 2365.23.toBigDecimal()))
  355. }
  356. @Test
  357. fun checkTotalCurrentValueWithNegativeProfit(){
  358. Assert.assertEquals(491.71.toBigDecimal(),totalCurrentValue(745.36.toBigDecimal(), (-253.65).toBigDecimal()))
  359. }
  360. @Test
  361. fun checkTotalCurrentValueWithNegativeProfitMoreThenInvested(){
  362. Assert.assertEquals((-2365.17).toBigDecimal(),totalCurrentValue(7500.06.toBigDecimal(), (-9865.23).toBigDecimal()))
  363. }
  364. @Test
  365. fun checkTotalCurrentValueWithProfitEqualsZero(){
  366. Assert.assertEquals(500.06.toBigDecimal(),totalCurrentValue(500.06.toBigDecimal(), BigDecimal.ZERO))
  367. }
  368. @Test
  369. fun checkTotalCurrentValueWithInvestedEqualsNullAndProfitEqualsZero(){
  370. Assert.assertEquals(BigDecimal.ZERO,totalCurrentValue(null, BigDecimal.ZERO))
  371. }
  372. @Test
  373. fun checkTotalCurrentValueWithInvestedEqualsNull(){
  374. Assert.assertEquals(745.56.toBigDecimal(),totalCurrentValue(null, 745.56.toBigDecimal()))
  375. }
  376.  
  377. //check val
  378. @Test
  379. fun checkVal(){
  380. val firstPair = ProfitAndInvested((-1256).toBigDecimal(), (-98.3).toBigDecimal())
  381. val secondPair = ProfitAndInvested((-1256).toBigDecimal(), 852.3.toBigDecimal())
  382. val thirdPair = ProfitAndInvested((-56).toBigDecimal(), BigDecimal.ZERO)
  383. val forthPair = ProfitAndInvested(1256.toBigDecimal(), 698.39.toBigDecimal())
  384. val fifthPair = ProfitAndInvested(BigDecimal.ZERO, BigDecimal.ZERO)
  385. val sixthPair = ProfitAndInvested((156).toBigDecimal(), BigDecimal.ZERO)
  386.  
  387. val dataForTest = listOf(firstPair, secondPair, thirdPair, forthPair, fifthPair, sixthPair)
  388. dataForTest.toTotalProfitWithCurrentValue
  389.  
  390. Assert.assertEquals((-859.61).toBigDecimal(), dataForTest.toTotalProfitWithCurrentValue.first + dataForTest.toTotalProfitWithCurrentValue.second)
  391. }
  392. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement