models.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713
  1. // Copyright 2021 Tencent Inc. All rights reserved.
  2. //
  3. // 微信支付服务商基础支付
  4. //
  5. // 微信支付 API v3 服务商基础支付
  6. //
  7. // API version: 1.2.3
  8. // Code generated by WechatPay APIv3 Generator based on [OpenAPI Generator](https://openapi-generator.tech); DO NOT EDIT.
  9. package partnerpayments
  10. import (
  11. "encoding/json"
  12. "fmt"
  13. )
  14. // PromotionDetail
  15. type PromotionDetail struct {
  16. // 券ID
  17. CouponId *string `json:"coupon_id,omitempty"`
  18. // 优惠名称
  19. Name *string `json:"name,omitempty"`
  20. // GLOBAL:全场代金券;SINGLE:单品优惠
  21. Scope *string `json:"scope,omitempty"`
  22. // CASH:充值;NOCASH:预充值。
  23. Type *string `json:"type,omitempty"`
  24. // 优惠券面额
  25. Amount *int64 `json:"amount,omitempty"`
  26. // 活动ID,批次ID
  27. StockId *string `json:"stock_id,omitempty"`
  28. // 单位为分
  29. WechatpayContribute *int64 `json:"wechatpay_contribute,omitempty"`
  30. // 单位为分
  31. MerchantContribute *int64 `json:"merchant_contribute,omitempty"`
  32. // 单位为分
  33. OtherContribute *int64 `json:"other_contribute,omitempty"`
  34. // CNY:人民币,境内商户号仅支持人民币。
  35. Currency *string `json:"currency,omitempty"`
  36. GoodsDetail []PromotionGoodsDetail `json:"goods_detail,omitempty"`
  37. }
  38. func (o PromotionDetail) MarshalJSON() ([]byte, error) {
  39. toSerialize := map[string]interface{}{}
  40. if o.CouponId != nil {
  41. toSerialize["coupon_id"] = o.CouponId
  42. }
  43. if o.Name != nil {
  44. toSerialize["name"] = o.Name
  45. }
  46. if o.Scope != nil {
  47. toSerialize["scope"] = o.Scope
  48. }
  49. if o.Type != nil {
  50. toSerialize["type"] = o.Type
  51. }
  52. if o.Amount != nil {
  53. toSerialize["amount"] = o.Amount
  54. }
  55. if o.StockId != nil {
  56. toSerialize["stock_id"] = o.StockId
  57. }
  58. if o.WechatpayContribute != nil {
  59. toSerialize["wechatpay_contribute"] = o.WechatpayContribute
  60. }
  61. if o.MerchantContribute != nil {
  62. toSerialize["merchant_contribute"] = o.MerchantContribute
  63. }
  64. if o.OtherContribute != nil {
  65. toSerialize["other_contribute"] = o.OtherContribute
  66. }
  67. if o.Currency != nil {
  68. toSerialize["currency"] = o.Currency
  69. }
  70. if o.GoodsDetail != nil {
  71. toSerialize["goods_detail"] = o.GoodsDetail
  72. }
  73. return json.Marshal(toSerialize)
  74. }
  75. func (o PromotionDetail) String() string {
  76. var ret string
  77. if o.CouponId == nil {
  78. ret += "CouponId:<nil>, "
  79. } else {
  80. ret += fmt.Sprintf("CouponId:%v, ", *o.CouponId)
  81. }
  82. if o.Name == nil {
  83. ret += "Name:<nil>, "
  84. } else {
  85. ret += fmt.Sprintf("Name:%v, ", *o.Name)
  86. }
  87. if o.Scope == nil {
  88. ret += "Scope:<nil>, "
  89. } else {
  90. ret += fmt.Sprintf("Scope:%v, ", *o.Scope)
  91. }
  92. if o.Type == nil {
  93. ret += "Type:<nil>, "
  94. } else {
  95. ret += fmt.Sprintf("Type:%v, ", *o.Type)
  96. }
  97. if o.Amount == nil {
  98. ret += "Amount:<nil>, "
  99. } else {
  100. ret += fmt.Sprintf("Amount:%v, ", *o.Amount)
  101. }
  102. if o.StockId == nil {
  103. ret += "StockId:<nil>, "
  104. } else {
  105. ret += fmt.Sprintf("StockId:%v, ", *o.StockId)
  106. }
  107. if o.WechatpayContribute == nil {
  108. ret += "WechatpayContribute:<nil>, "
  109. } else {
  110. ret += fmt.Sprintf("WechatpayContribute:%v, ", *o.WechatpayContribute)
  111. }
  112. if o.MerchantContribute == nil {
  113. ret += "MerchantContribute:<nil>, "
  114. } else {
  115. ret += fmt.Sprintf("MerchantContribute:%v, ", *o.MerchantContribute)
  116. }
  117. if o.OtherContribute == nil {
  118. ret += "OtherContribute:<nil>, "
  119. } else {
  120. ret += fmt.Sprintf("OtherContribute:%v, ", *o.OtherContribute)
  121. }
  122. if o.Currency == nil {
  123. ret += "Currency:<nil>, "
  124. } else {
  125. ret += fmt.Sprintf("Currency:%v, ", *o.Currency)
  126. }
  127. ret += fmt.Sprintf("GoodsDetail:%v", o.GoodsDetail)
  128. return fmt.Sprintf("PromotionDetail{%s}", ret)
  129. }
  130. func (o PromotionDetail) Clone() *PromotionDetail {
  131. ret := PromotionDetail{}
  132. if o.CouponId != nil {
  133. ret.CouponId = new(string)
  134. *ret.CouponId = *o.CouponId
  135. }
  136. if o.Name != nil {
  137. ret.Name = new(string)
  138. *ret.Name = *o.Name
  139. }
  140. if o.Scope != nil {
  141. ret.Scope = new(string)
  142. *ret.Scope = *o.Scope
  143. }
  144. if o.Type != nil {
  145. ret.Type = new(string)
  146. *ret.Type = *o.Type
  147. }
  148. if o.Amount != nil {
  149. ret.Amount = new(int64)
  150. *ret.Amount = *o.Amount
  151. }
  152. if o.StockId != nil {
  153. ret.StockId = new(string)
  154. *ret.StockId = *o.StockId
  155. }
  156. if o.WechatpayContribute != nil {
  157. ret.WechatpayContribute = new(int64)
  158. *ret.WechatpayContribute = *o.WechatpayContribute
  159. }
  160. if o.MerchantContribute != nil {
  161. ret.MerchantContribute = new(int64)
  162. *ret.MerchantContribute = *o.MerchantContribute
  163. }
  164. if o.OtherContribute != nil {
  165. ret.OtherContribute = new(int64)
  166. *ret.OtherContribute = *o.OtherContribute
  167. }
  168. if o.Currency != nil {
  169. ret.Currency = new(string)
  170. *ret.Currency = *o.Currency
  171. }
  172. if o.GoodsDetail != nil {
  173. ret.GoodsDetail = make([]PromotionGoodsDetail, len(o.GoodsDetail))
  174. for i, item := range o.GoodsDetail {
  175. ret.GoodsDetail[i] = *item.Clone()
  176. }
  177. }
  178. return &ret
  179. }
  180. // PromotionGoodsDetail
  181. type PromotionGoodsDetail struct {
  182. // 商品编码
  183. GoodsId *string `json:"goods_id"`
  184. // 商品数量
  185. Quantity *int64 `json:"quantity"`
  186. // 商品价格
  187. UnitPrice *int64 `json:"unit_price"`
  188. // 商品优惠金额
  189. DiscountAmount *int64 `json:"discount_amount"`
  190. // 商品备注
  191. GoodsRemark *string `json:"goods_remark,omitempty"`
  192. }
  193. func (o PromotionGoodsDetail) MarshalJSON() ([]byte, error) {
  194. toSerialize := map[string]interface{}{}
  195. if o.GoodsId == nil {
  196. return nil, fmt.Errorf("field `GoodsId` is required and must be specified in PromotionGoodsDetail")
  197. }
  198. toSerialize["goods_id"] = o.GoodsId
  199. if o.Quantity == nil {
  200. return nil, fmt.Errorf("field `Quantity` is required and must be specified in PromotionGoodsDetail")
  201. }
  202. toSerialize["quantity"] = o.Quantity
  203. if o.UnitPrice == nil {
  204. return nil, fmt.Errorf("field `UnitPrice` is required and must be specified in PromotionGoodsDetail")
  205. }
  206. toSerialize["unit_price"] = o.UnitPrice
  207. if o.DiscountAmount == nil {
  208. return nil, fmt.Errorf("field `DiscountAmount` is required and must be specified in PromotionGoodsDetail")
  209. }
  210. toSerialize["discount_amount"] = o.DiscountAmount
  211. if o.GoodsRemark != nil {
  212. toSerialize["goods_remark"] = o.GoodsRemark
  213. }
  214. return json.Marshal(toSerialize)
  215. }
  216. func (o PromotionGoodsDetail) String() string {
  217. var ret string
  218. if o.GoodsId == nil {
  219. ret += "GoodsId:<nil>, "
  220. } else {
  221. ret += fmt.Sprintf("GoodsId:%v, ", *o.GoodsId)
  222. }
  223. if o.Quantity == nil {
  224. ret += "Quantity:<nil>, "
  225. } else {
  226. ret += fmt.Sprintf("Quantity:%v, ", *o.Quantity)
  227. }
  228. if o.UnitPrice == nil {
  229. ret += "UnitPrice:<nil>, "
  230. } else {
  231. ret += fmt.Sprintf("UnitPrice:%v, ", *o.UnitPrice)
  232. }
  233. if o.DiscountAmount == nil {
  234. ret += "DiscountAmount:<nil>, "
  235. } else {
  236. ret += fmt.Sprintf("DiscountAmount:%v, ", *o.DiscountAmount)
  237. }
  238. if o.GoodsRemark == nil {
  239. ret += "GoodsRemark:<nil>"
  240. } else {
  241. ret += fmt.Sprintf("GoodsRemark:%v", *o.GoodsRemark)
  242. }
  243. return fmt.Sprintf("PromotionGoodsDetail{%s}", ret)
  244. }
  245. func (o PromotionGoodsDetail) Clone() *PromotionGoodsDetail {
  246. ret := PromotionGoodsDetail{}
  247. if o.GoodsId != nil {
  248. ret.GoodsId = new(string)
  249. *ret.GoodsId = *o.GoodsId
  250. }
  251. if o.Quantity != nil {
  252. ret.Quantity = new(int64)
  253. *ret.Quantity = *o.Quantity
  254. }
  255. if o.UnitPrice != nil {
  256. ret.UnitPrice = new(int64)
  257. *ret.UnitPrice = *o.UnitPrice
  258. }
  259. if o.DiscountAmount != nil {
  260. ret.DiscountAmount = new(int64)
  261. *ret.DiscountAmount = *o.DiscountAmount
  262. }
  263. if o.GoodsRemark != nil {
  264. ret.GoodsRemark = new(string)
  265. *ret.GoodsRemark = *o.GoodsRemark
  266. }
  267. return &ret
  268. }
  269. // Transaction
  270. type Transaction struct {
  271. Amount *TransactionAmount `json:"amount,omitempty"`
  272. SpAppid *string `json:"sp_appid,omitempty"`
  273. SubAppid *string `json:"sub_appid,omitempty"`
  274. SpMchid *string `json:"sp_mchid,omitempty"`
  275. SubMchid *string `json:"sub_mchid,omitempty"`
  276. Attach *string `json:"attach,omitempty"`
  277. BankType *string `json:"bank_type,omitempty"`
  278. OutTradeNo *string `json:"out_trade_no,omitempty"`
  279. Payer *TransactionPayer `json:"payer,omitempty"`
  280. PromotionDetail []PromotionDetail `json:"promotion_detail,omitempty"`
  281. SuccessTime *string `json:"success_time,omitempty"`
  282. TradeState *string `json:"trade_state,omitempty"`
  283. TradeStateDesc *string `json:"trade_state_desc,omitempty"`
  284. TradeType *string `json:"trade_type,omitempty"`
  285. TransactionId *string `json:"transaction_id,omitempty"`
  286. }
  287. func (o Transaction) MarshalJSON() ([]byte, error) {
  288. toSerialize := map[string]interface{}{}
  289. if o.Amount != nil {
  290. toSerialize["amount"] = o.Amount
  291. }
  292. if o.SpAppid != nil {
  293. toSerialize["sp_appid"] = o.SpAppid
  294. }
  295. if o.SubAppid != nil {
  296. toSerialize["sub_appid"] = o.SubAppid
  297. }
  298. if o.SpMchid != nil {
  299. toSerialize["sp_mchid"] = o.SpMchid
  300. }
  301. if o.SubMchid != nil {
  302. toSerialize["sub_mchid"] = o.SubMchid
  303. }
  304. if o.Attach != nil {
  305. toSerialize["attach"] = o.Attach
  306. }
  307. if o.BankType != nil {
  308. toSerialize["bank_type"] = o.BankType
  309. }
  310. if o.OutTradeNo != nil {
  311. toSerialize["out_trade_no"] = o.OutTradeNo
  312. }
  313. if o.Payer != nil {
  314. toSerialize["payer"] = o.Payer
  315. }
  316. if o.PromotionDetail != nil {
  317. toSerialize["promotion_detail"] = o.PromotionDetail
  318. }
  319. if o.SuccessTime != nil {
  320. toSerialize["success_time"] = o.SuccessTime
  321. }
  322. if o.TradeState != nil {
  323. toSerialize["trade_state"] = o.TradeState
  324. }
  325. if o.TradeStateDesc != nil {
  326. toSerialize["trade_state_desc"] = o.TradeStateDesc
  327. }
  328. if o.TradeType != nil {
  329. toSerialize["trade_type"] = o.TradeType
  330. }
  331. if o.TransactionId != nil {
  332. toSerialize["transaction_id"] = o.TransactionId
  333. }
  334. return json.Marshal(toSerialize)
  335. }
  336. func (o Transaction) String() string {
  337. var ret string
  338. ret += fmt.Sprintf("Amount:%v, ", o.Amount)
  339. if o.SpAppid == nil {
  340. ret += "SpAppid:<nil>, "
  341. } else {
  342. ret += fmt.Sprintf("SpAppid:%v, ", *o.SpAppid)
  343. }
  344. if o.SubAppid == nil {
  345. ret += "SubAppid:<nil>, "
  346. } else {
  347. ret += fmt.Sprintf("SubAppid:%v, ", *o.SubAppid)
  348. }
  349. if o.SpMchid == nil {
  350. ret += "SpMchid:<nil>, "
  351. } else {
  352. ret += fmt.Sprintf("SpMchid:%v, ", *o.SpMchid)
  353. }
  354. if o.SubMchid == nil {
  355. ret += "SubMchid:<nil>, "
  356. } else {
  357. ret += fmt.Sprintf("SubMchid:%v, ", *o.SubMchid)
  358. }
  359. if o.Attach == nil {
  360. ret += "Attach:<nil>, "
  361. } else {
  362. ret += fmt.Sprintf("Attach:%v, ", *o.Attach)
  363. }
  364. if o.BankType == nil {
  365. ret += "BankType:<nil>, "
  366. } else {
  367. ret += fmt.Sprintf("BankType:%v, ", *o.BankType)
  368. }
  369. if o.OutTradeNo == nil {
  370. ret += "OutTradeNo:<nil>, "
  371. } else {
  372. ret += fmt.Sprintf("OutTradeNo:%v, ", *o.OutTradeNo)
  373. }
  374. ret += fmt.Sprintf("Payer:%v, ", o.Payer)
  375. ret += fmt.Sprintf("PromotionDetail:%v, ", o.PromotionDetail)
  376. if o.SuccessTime == nil {
  377. ret += "SuccessTime:<nil>, "
  378. } else {
  379. ret += fmt.Sprintf("SuccessTime:%v, ", *o.SuccessTime)
  380. }
  381. if o.TradeState == nil {
  382. ret += "TradeState:<nil>, "
  383. } else {
  384. ret += fmt.Sprintf("TradeState:%v, ", *o.TradeState)
  385. }
  386. if o.TradeStateDesc == nil {
  387. ret += "TradeStateDesc:<nil>, "
  388. } else {
  389. ret += fmt.Sprintf("TradeStateDesc:%v, ", *o.TradeStateDesc)
  390. }
  391. if o.TradeType == nil {
  392. ret += "TradeType:<nil>, "
  393. } else {
  394. ret += fmt.Sprintf("TradeType:%v, ", *o.TradeType)
  395. }
  396. if o.TransactionId == nil {
  397. ret += "TransactionId:<nil>"
  398. } else {
  399. ret += fmt.Sprintf("TransactionId:%v", *o.TransactionId)
  400. }
  401. return fmt.Sprintf("Transaction{%s}", ret)
  402. }
  403. func (o Transaction) Clone() *Transaction {
  404. ret := Transaction{}
  405. if o.Amount != nil {
  406. ret.Amount = o.Amount.Clone()
  407. }
  408. if o.SpAppid != nil {
  409. ret.SpAppid = new(string)
  410. *ret.SpAppid = *o.SpAppid
  411. }
  412. if o.SubAppid != nil {
  413. ret.SubAppid = new(string)
  414. *ret.SubAppid = *o.SubAppid
  415. }
  416. if o.SpMchid != nil {
  417. ret.SpMchid = new(string)
  418. *ret.SpMchid = *o.SpMchid
  419. }
  420. if o.SubMchid != nil {
  421. ret.SubMchid = new(string)
  422. *ret.SubMchid = *o.SubMchid
  423. }
  424. if o.Attach != nil {
  425. ret.Attach = new(string)
  426. *ret.Attach = *o.Attach
  427. }
  428. if o.BankType != nil {
  429. ret.BankType = new(string)
  430. *ret.BankType = *o.BankType
  431. }
  432. if o.OutTradeNo != nil {
  433. ret.OutTradeNo = new(string)
  434. *ret.OutTradeNo = *o.OutTradeNo
  435. }
  436. if o.Payer != nil {
  437. ret.Payer = o.Payer.Clone()
  438. }
  439. if o.PromotionDetail != nil {
  440. ret.PromotionDetail = make([]PromotionDetail, len(o.PromotionDetail))
  441. for i, item := range o.PromotionDetail {
  442. ret.PromotionDetail[i] = *item.Clone()
  443. }
  444. }
  445. if o.SuccessTime != nil {
  446. ret.SuccessTime = new(string)
  447. *ret.SuccessTime = *o.SuccessTime
  448. }
  449. if o.TradeState != nil {
  450. ret.TradeState = new(string)
  451. *ret.TradeState = *o.TradeState
  452. }
  453. if o.TradeStateDesc != nil {
  454. ret.TradeStateDesc = new(string)
  455. *ret.TradeStateDesc = *o.TradeStateDesc
  456. }
  457. if o.TradeType != nil {
  458. ret.TradeType = new(string)
  459. *ret.TradeType = *o.TradeType
  460. }
  461. if o.TransactionId != nil {
  462. ret.TransactionId = new(string)
  463. *ret.TransactionId = *o.TransactionId
  464. }
  465. return &ret
  466. }
  467. // TransactionAmount
  468. type TransactionAmount struct {
  469. Currency *string `json:"currency,omitempty"`
  470. PayerCurrency *string `json:"payer_currency,omitempty"`
  471. PayerTotal *int64 `json:"payer_total,omitempty"`
  472. Total *int64 `json:"total,omitempty"`
  473. }
  474. func (o TransactionAmount) MarshalJSON() ([]byte, error) {
  475. toSerialize := map[string]interface{}{}
  476. if o.Currency != nil {
  477. toSerialize["currency"] = o.Currency
  478. }
  479. if o.PayerCurrency != nil {
  480. toSerialize["payer_currency"] = o.PayerCurrency
  481. }
  482. if o.PayerTotal != nil {
  483. toSerialize["payer_total"] = o.PayerTotal
  484. }
  485. if o.Total != nil {
  486. toSerialize["total"] = o.Total
  487. }
  488. return json.Marshal(toSerialize)
  489. }
  490. func (o TransactionAmount) String() string {
  491. var ret string
  492. if o.Currency == nil {
  493. ret += "Currency:<nil>, "
  494. } else {
  495. ret += fmt.Sprintf("Currency:%v, ", *o.Currency)
  496. }
  497. if o.PayerCurrency == nil {
  498. ret += "PayerCurrency:<nil>, "
  499. } else {
  500. ret += fmt.Sprintf("PayerCurrency:%v, ", *o.PayerCurrency)
  501. }
  502. if o.PayerTotal == nil {
  503. ret += "PayerTotal:<nil>, "
  504. } else {
  505. ret += fmt.Sprintf("PayerTotal:%v, ", *o.PayerTotal)
  506. }
  507. if o.Total == nil {
  508. ret += "Total:<nil>"
  509. } else {
  510. ret += fmt.Sprintf("Total:%v", *o.Total)
  511. }
  512. return fmt.Sprintf("TransactionAmount{%s}", ret)
  513. }
  514. func (o TransactionAmount) Clone() *TransactionAmount {
  515. ret := TransactionAmount{}
  516. if o.Currency != nil {
  517. ret.Currency = new(string)
  518. *ret.Currency = *o.Currency
  519. }
  520. if o.PayerCurrency != nil {
  521. ret.PayerCurrency = new(string)
  522. *ret.PayerCurrency = *o.PayerCurrency
  523. }
  524. if o.PayerTotal != nil {
  525. ret.PayerTotal = new(int64)
  526. *ret.PayerTotal = *o.PayerTotal
  527. }
  528. if o.Total != nil {
  529. ret.Total = new(int64)
  530. *ret.Total = *o.Total
  531. }
  532. return &ret
  533. }
  534. // TransactionPayer
  535. type TransactionPayer struct {
  536. SpOpenid *string `json:"sp_openid,omitempty"`
  537. SubOpenid *string `json:"sub_openid,omitempty"`
  538. }
  539. func (o TransactionPayer) MarshalJSON() ([]byte, error) {
  540. toSerialize := map[string]interface{}{}
  541. if o.SpOpenid != nil {
  542. toSerialize["sp_openid"] = o.SpOpenid
  543. }
  544. if o.SubOpenid != nil {
  545. toSerialize["sub_openid"] = o.SubOpenid
  546. }
  547. return json.Marshal(toSerialize)
  548. }
  549. func (o TransactionPayer) String() string {
  550. var ret string
  551. if o.SpOpenid == nil {
  552. ret += "SpOpenid:<nil>, "
  553. } else {
  554. ret += fmt.Sprintf("SpOpenid:%v, ", *o.SpOpenid)
  555. }
  556. if o.SubOpenid == nil {
  557. ret += "SubOpenid:<nil>"
  558. } else {
  559. ret += fmt.Sprintf("SubOpenid:%v", *o.SubOpenid)
  560. }
  561. return fmt.Sprintf("TransactionPayer{%s}", ret)
  562. }
  563. func (o TransactionPayer) Clone() *TransactionPayer {
  564. ret := TransactionPayer{}
  565. if o.SpOpenid != nil {
  566. ret.SpOpenid = new(string)
  567. *ret.SpOpenid = *o.SpOpenid
  568. }
  569. if o.SubOpenid != nil {
  570. ret.SubOpenid = new(string)
  571. *ret.SubOpenid = *o.SubOpenid
  572. }
  573. return &ret
  574. }