mundipagg_sdk 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +13 -5
  2. data/LICENSE +190 -190
  3. data/README.md +61 -61
  4. data/lib/gateway/Address/billing_address.rb +33 -33
  5. data/lib/gateway/Address/buyer_address.rb +38 -38
  6. data/lib/gateway/Address/delivery_address.rb +34 -34
  7. data/lib/gateway/BoletoTransaction/boleto_transaction.rb +40 -40
  8. data/lib/gateway/BoletoTransaction/boleto_transaction_options.rb +16 -16
  9. data/lib/gateway/BoletoTransaction/boleto_transaction_report_file.rb +22 -22
  10. data/lib/gateway/CreditCardTransaction/credit_card.rb +30 -30
  11. data/lib/gateway/CreditCardTransaction/credit_card_transaction.rb +33 -33
  12. data/lib/gateway/CreditCardTransaction/credit_card_transaction_options.rb +28 -28
  13. data/lib/gateway/CreditCardTransaction/credit_card_transaction_report_file.rb +31 -31
  14. data/lib/gateway/CreditCardTransaction/manage_credit_card_transaction.rb +14 -14
  15. data/lib/gateway/CreditCardTransaction/retry_sale_credit_card_transaction.rb +14 -14
  16. data/lib/gateway/Gateway.rb +525 -627
  17. data/lib/gateway/InstantBuyData/create_instant_buy_data_request.rb +30 -30
  18. data/lib/gateway/InstantBuyData/update_instant_buy_data_request.rb +10 -10
  19. data/lib/gateway/Merchant/merchant.rb +12 -12
  20. data/lib/gateway/OnlineDebit/online_debit_transaction_report_file.rb +21 -21
  21. data/lib/gateway/Order/order.rb +13 -13
  22. data/lib/gateway/Order/order_transaction_report_file.rb +8 -8
  23. data/lib/gateway/Parsers/boleto_transaction_parser.rb +33 -33
  24. data/lib/gateway/Parsers/credit_card_transaction_parser.rb +42 -42
  25. data/lib/gateway/Parsers/header_parser.rb +16 -16
  26. data/lib/gateway/Parsers/online_debit_transaction_parser.rb +32 -32
  27. data/lib/gateway/Parsers/trailer_parser.rb +16 -16
  28. data/lib/gateway/Person/buyer.rb +32 -32
  29. data/lib/gateway/Person/create_buyer_request.rb +22 -22
  30. data/lib/gateway/Person/person.rb +48 -48
  31. data/lib/gateway/Recurrency/recurrency.rb +24 -24
  32. data/lib/gateway/Sale/create_sale_request.rb +37 -37
  33. data/lib/gateway/Sale/manage_sale_request.rb +18 -18
  34. data/lib/gateway/Sale/query_sale_request.rb +37 -37
  35. data/lib/gateway/Sale/request_data.rb +21 -21
  36. data/lib/gateway/Sale/retry_sale_options.rb +15 -15
  37. data/lib/gateway/Sale/retry_sale_request.rb +23 -23
  38. data/lib/gateway/Sale/sale_data.rb +30 -30
  39. data/lib/gateway/Sale/sale_order_data.rb +18 -18
  40. data/lib/gateway/SalesOption.rb +18 -18
  41. data/lib/gateway/ShoppingCart/shopping_cart.rb +27 -27
  42. data/lib/gateway/ShoppingCart/shopping_cart_item.rb +24 -24
  43. data/lib/gateway/Trailer.rb +8 -8
  44. data/lib/gateway/header.rb +7 -7
  45. data/lib/gateway/post_notification.rb +31 -31
  46. data/lib/gateway/transaction_report_file.rb +47 -47
  47. data/lib/mundipagg_sdk.rb +61 -61
  48. data/mundipagg_sdk.gemspec +20 -20
  49. data/spec/integration/gateway_spec.rb +1023 -1022
  50. data/spec/integration/test_helper.rb +68 -68
  51. data/spec/spec_helper.rb +96 -96
  52. metadata +33 -33
@@ -1,31 +1,31 @@
1
- module Gateway
2
- class CreateInstantBuyDataRequest
3
- attr_accessor :IsOneDollarAuthEnabled
4
-
5
- attr_accessor :CreditCardNumber
6
-
7
- attr_accessor :HolderName
8
-
9
- attr_accessor :SecurityCode
10
-
11
- attr_accessor :ExpMonth
12
-
13
- attr_accessor :ExpYear
14
-
15
- attr_accessor :CreditCardBrand
16
-
17
- attr_accessor :BillingAddress
18
-
19
- attr_accessor :BuyerKey
20
-
21
- def initialize
22
- @BillingAddress = BillingAddress.new
23
- end
24
-
25
- def to_json
26
- hash = {}
27
- instance_variables.each { |var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
28
- hash
29
- end
30
- end
1
+ module Gateway
2
+ class CreateInstantBuyDataRequest
3
+ attr_accessor :IsOneDollarAuthEnabled
4
+
5
+ attr_accessor :CreditCardNumber
6
+
7
+ attr_accessor :HolderName
8
+
9
+ attr_accessor :SecurityCode
10
+
11
+ attr_accessor :ExpMonth
12
+
13
+ attr_accessor :ExpYear
14
+
15
+ attr_accessor :CreditCardBrand
16
+
17
+ attr_accessor :BillingAddress
18
+
19
+ attr_accessor :BuyerKey
20
+
21
+ def initialize
22
+ @BillingAddress = BillingAddress.new
23
+ end
24
+
25
+ def to_json
26
+ hash = {}
27
+ instance_variables.each { |var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
28
+ hash
29
+ end
30
+ end
31
31
  end
@@ -1,11 +1,11 @@
1
- module Gateway
2
- class UpdateInstantBuyDataRequest
3
- attr_accessor :BuyerKey
4
-
5
- def to_json
6
- hash = {}
7
- instance_variables.each { |var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
8
- hash
9
- end
10
- end
1
+ module Gateway
2
+ class UpdateInstantBuyDataRequest
3
+ attr_accessor :BuyerKey
4
+
5
+ def to_json
6
+ hash = {}
7
+ instance_variables.each { |var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
8
+ hash
9
+ end
10
+ end
11
11
  end
@@ -1,13 +1,13 @@
1
- module Gateway
2
-
3
- class Merchant
4
- # Identificador da loja na plataforma
5
- attr_accessor :MerchantReference
6
-
7
- def to_json
8
- hash = {}
9
- instance_variables.each { |var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
10
- hash
11
- end
12
- end
1
+ module Gateway
2
+
3
+ class Merchant
4
+ # Identificador da loja na plataforma
5
+ attr_accessor :MerchantReference
6
+
7
+ def to_json
8
+ hash = {}
9
+ instance_variables.each { |var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
10
+ hash
11
+ end
12
+ end
13
13
  end
@@ -1,21 +1,21 @@
1
- module Gateway
2
-
3
- class OnlineDebitTransactionReportFile
4
- attr_accessor :Order
5
- attr_accessor :TransactionKey
6
- attr_accessor :TransactionReference
7
- attr_accessor :Bank
8
- attr_accessor :Status
9
- attr_accessor :AmountInCents
10
- attr_accessor :AmountPaidInCents
11
- attr_accessor :PaymentDate
12
- attr_accessor :BankReturnCode
13
- attr_accessor :BankPaymentDate
14
- attr_accessor :Signature
15
- attr_accessor :TransactionKeyToBank
16
-
17
- def initialize
18
- @Order = OrderTransactionReportFile.new
19
- end
20
- end
21
- end
1
+ module Gateway
2
+
3
+ class OnlineDebitTransactionReportFile
4
+ attr_accessor :Order
5
+ attr_accessor :TransactionKey
6
+ attr_accessor :TransactionReference
7
+ attr_accessor :Bank
8
+ attr_accessor :Status
9
+ attr_accessor :AmountInCents
10
+ attr_accessor :AmountPaidInCents
11
+ attr_accessor :PaymentDate
12
+ attr_accessor :BankReturnCode
13
+ attr_accessor :BankPaymentDate
14
+ attr_accessor :Signature
15
+ attr_accessor :TransactionKeyToBank
16
+
17
+ def initialize
18
+ @Order = OrderTransactionReportFile.new
19
+ end
20
+ end
21
+ end
@@ -1,14 +1,14 @@
1
- module Gateway
2
-
3
- class Order
4
- # Identificador do pedido no sistema da loja
5
- attr_accessor :OrderReference
6
-
7
- def to_json
8
- hash = {}
9
- instance_variables.each { |var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
10
- hash
11
- end
12
-
13
- end
1
+ module Gateway
2
+
3
+ class Order
4
+ # Identificador do pedido no sistema da loja
5
+ attr_accessor :OrderReference
6
+
7
+ def to_json
8
+ hash = {}
9
+ instance_variables.each { |var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
10
+ hash
11
+ end
12
+
13
+ end
14
14
  end
@@ -1,9 +1,9 @@
1
- module Gateway
2
-
3
- class OrderTransactionReportFile
4
- attr_accessor :OrderKey
5
- attr_accessor :OrderReference
6
- attr_accessor :MerchantKey
7
- attr_accessor :MerchantName
8
- end
1
+ module Gateway
2
+
3
+ class OrderTransactionReportFile
4
+ attr_accessor :OrderKey
5
+ attr_accessor :OrderReference
6
+ attr_accessor :MerchantKey
7
+ attr_accessor :MerchantName
8
+ end
9
9
  end
@@ -1,34 +1,34 @@
1
- module Gateway
2
-
3
- class BoletoTransactionParser
4
- def Parse(elements)
5
- @@DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
6
-
7
- if elements.length < 18
8
- throw('The expected parameter count is 18')
9
- end
10
-
11
- boleto_transaction = BoletoTransactionReportFile.new
12
- boleto_transaction.Order.OrderKey = elements[1]
13
- boleto_transaction.Order.OrderReference = elements[2]
14
- boleto_transaction.Order.MerchantKey = elements[3]
15
- boleto_transaction.Order.MerchantName = elements[4]
16
-
17
- boleto_transaction.TransactionKey = elements[5]
18
- boleto_transaction.TransactionReference = elements[6]
19
- boleto_transaction.Status = elements[7]
20
- boleto_transaction.NossoNumero = elements[8]
21
- boleto_transaction.BankNumber = elements[9]
22
- boleto_transaction.Agency = elements[10]
23
- boleto_transaction.Account = elements[11]
24
- boleto_transaction.BarCode = elements[12]
25
- boleto_transaction.ExpirationDate = DateTime.strptime(elements[13], '%m/%d/%Y %H:%M:%S').strftime(@@DATETIME_FORMAT)
26
- boleto_transaction.AmountInCents = elements[14].to_i
27
- boleto_transaction.AmountPaidInCents = (elements[15].to_s == '') == false ? elements[15].to_i : 0
28
- boleto_transaction.PaymentDate = (elements[16].to_s == '') == false ? DateTime.strptime(elements[16], '%m/%d/%Y %H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
29
- boleto_transaction.CreditDate = (elements[17].chomp.to_s == '') == false ? DateTime.strptime(elements[17], '%m/%d/%Y %H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
30
-
31
- return boleto_transaction
32
- end
33
- end
1
+ module Gateway
2
+
3
+ class BoletoTransactionParser
4
+ def Parse(elements)
5
+ @@DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
6
+
7
+ if elements.length < 18
8
+ throw('The expected parameter count is 18')
9
+ end
10
+
11
+ boleto_transaction = BoletoTransactionReportFile.new
12
+ boleto_transaction.Order.OrderKey = elements[1]
13
+ boleto_transaction.Order.OrderReference = elements[2]
14
+ boleto_transaction.Order.MerchantKey = elements[3]
15
+ boleto_transaction.Order.MerchantName = elements[4]
16
+
17
+ boleto_transaction.TransactionKey = elements[5]
18
+ boleto_transaction.TransactionReference = elements[6]
19
+ boleto_transaction.Status = elements[7]
20
+ boleto_transaction.NossoNumero = elements[8]
21
+ boleto_transaction.BankNumber = elements[9]
22
+ boleto_transaction.Agency = elements[10]
23
+ boleto_transaction.Account = elements[11]
24
+ boleto_transaction.BarCode = elements[12]
25
+ boleto_transaction.ExpirationDate = DateTime.strptime(elements[13], '%m/%d/%Y %H:%M:%S').strftime(@@DATETIME_FORMAT)
26
+ boleto_transaction.AmountInCents = elements[14].to_i
27
+ boleto_transaction.AmountPaidInCents = (elements[15].to_s == '') == false ? elements[15].to_i : 0
28
+ boleto_transaction.PaymentDate = (elements[16].to_s == '') == false ? DateTime.strptime(elements[16], '%m/%d/%Y %H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
29
+ boleto_transaction.CreditDate = (elements[17].chomp.to_s == '') == false ? DateTime.strptime(elements[17], '%m/%d/%Y %H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
30
+
31
+ return boleto_transaction
32
+ end
33
+ end
34
34
  end
@@ -1,43 +1,43 @@
1
- module Gateway
2
-
3
- class CreditCardTransactionParser
4
- def Parse(elements)
5
- @@DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
6
-
7
- if elements.length < 27
8
- throw('The expected parameter count is 27')
9
- end
10
-
11
- credit_card_transaction = CreditCardTransactionReportFile.new
12
- credit_card_transaction.Order.OrderKey = elements[1]
13
- credit_card_transaction.Order.OrderReference = elements[2]
14
- credit_card_transaction.Order.MerchantKey = elements[3]
15
- credit_card_transaction.Order.MerchantName = elements[4]
16
-
17
- credit_card_transaction.TransactionKey = elements[5]
18
- credit_card_transaction.TransactionKeyToAcquirer = elements[6]
19
- credit_card_transaction.CreditCardTransactionReference = elements[7]
20
- credit_card_transaction.CreditCardBrand = elements[8]
21
- credit_card_transaction.CreditCardNumber = elements[9]
22
- credit_card_transaction.InstallmentCount = (elements[10].to_s == '') == false ? elements[10].to_i : 0
23
- credit_card_transaction.AcquirerName = elements[11]
24
- credit_card_transaction.Status = elements[12]
25
- credit_card_transaction.AmountInCents = (elements[13].to_s == '') == false ? elements[13].to_i : 0
26
- credit_card_transaction.IataAmountInCents = (elements[14].to_s == '') == false ? elements[14].to_i : 0
27
- credit_card_transaction.AuthorizationCode = elements[15]
28
- credit_card_transaction.TransactionIdentifier = elements[16]
29
- credit_card_transaction.UniqueSequentialNumber = elements[17]
30
- credit_card_transaction.AuthorizedAmountInCents = (elements[18].to_s == '') == false ? elements[18].to_i : 0
31
- credit_card_transaction.CapturedAmountInCents = (elements[19].to_s == '') == false ? elements[19].to_i : 0
32
- credit_card_transaction.VoidedAmountInCents = (elements[20].to_s == '') == false ? elements[20].to_i : 0
33
- credit_card_transaction.RefundedAmountInCents = (elements[21].to_s == '') == false ? elements[21].to_i : 0
34
- credit_card_transaction.AcquirerAuthorizationReturnCode = elements[22]
35
- credit_card_transaction.AuthorizedDate = (elements[23].to_s == '') == false ? DateTime.strptime(elements[23], '%Y-%m-%dT%H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
36
- credit_card_transaction.CapturedDate = (elements[24].to_s == '') == false ? DateTime.strptime(elements[24], '%Y-%m-%dT%H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
37
- credit_card_transaction.VoidedDate = (elements[25].to_s == '') == false ? DateTime.strptime(elements[25], '%Y-%m-%dT%H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
38
- credit_card_transaction.LastProbeDate = (elements[26].chomp.to_s == '') == false ? DateTime.strptime(elements[26], '%Y-%m-%dT%H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
39
-
40
- return credit_card_transaction
41
- end
42
- end
1
+ module Gateway
2
+
3
+ class CreditCardTransactionParser
4
+ def Parse(elements)
5
+ @@DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
6
+
7
+ if elements.length < 27
8
+ throw('The expected parameter count is 27')
9
+ end
10
+
11
+ credit_card_transaction = CreditCardTransactionReportFile.new
12
+ credit_card_transaction.Order.OrderKey = elements[1]
13
+ credit_card_transaction.Order.OrderReference = elements[2]
14
+ credit_card_transaction.Order.MerchantKey = elements[3]
15
+ credit_card_transaction.Order.MerchantName = elements[4]
16
+
17
+ credit_card_transaction.TransactionKey = elements[5]
18
+ credit_card_transaction.TransactionKeyToAcquirer = elements[6]
19
+ credit_card_transaction.CreditCardTransactionReference = elements[7]
20
+ credit_card_transaction.CreditCardBrand = elements[8]
21
+ credit_card_transaction.CreditCardNumber = elements[9]
22
+ credit_card_transaction.InstallmentCount = (elements[10].to_s == '') == false ? elements[10].to_i : 0
23
+ credit_card_transaction.AcquirerName = elements[11]
24
+ credit_card_transaction.Status = elements[12]
25
+ credit_card_transaction.AmountInCents = (elements[13].to_s == '') == false ? elements[13].to_i : 0
26
+ credit_card_transaction.IataAmountInCents = (elements[14].to_s == '') == false ? elements[14].to_i : 0
27
+ credit_card_transaction.AuthorizationCode = elements[15]
28
+ credit_card_transaction.TransactionIdentifier = elements[16]
29
+ credit_card_transaction.UniqueSequentialNumber = elements[17]
30
+ credit_card_transaction.AuthorizedAmountInCents = (elements[18].to_s == '') == false ? elements[18].to_i : 0
31
+ credit_card_transaction.CapturedAmountInCents = (elements[19].to_s == '') == false ? elements[19].to_i : 0
32
+ credit_card_transaction.VoidedAmountInCents = (elements[20].to_s == '') == false ? elements[20].to_i : 0
33
+ credit_card_transaction.RefundedAmountInCents = (elements[21].to_s == '') == false ? elements[21].to_i : 0
34
+ credit_card_transaction.AcquirerAuthorizationReturnCode = elements[22]
35
+ credit_card_transaction.AuthorizedDate = (elements[23].to_s == '') == false ? DateTime.strptime(elements[23], '%Y-%m-%dT%H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
36
+ credit_card_transaction.CapturedDate = (elements[24].to_s == '') == false ? DateTime.strptime(elements[24], '%Y-%m-%dT%H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
37
+ credit_card_transaction.VoidedDate = (elements[25].to_s == '') == false ? DateTime.strptime(elements[25], '%Y-%m-%dT%H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
38
+ credit_card_transaction.LastProbeDate = (elements[26].chomp.to_s == '') == false ? DateTime.strptime(elements[26], '%Y-%m-%dT%H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
39
+
40
+ return credit_card_transaction
41
+ end
42
+ end
43
43
  end
@@ -1,17 +1,17 @@
1
- module Gateway
2
-
3
- class HeaderParser
4
- def Parse(elements)
5
- if elements.length < 4
6
- throw('The expected parameter count is 4')
7
- end
8
-
9
- header = Header.new
10
- header.TransactionProcessedDate = Date.parse(elements[1]).strftime('%Y%m%d')
11
- header.ReportFileCreateDate = Date.parse(elements[2]).strftime('%Y%m%d %H:%M:%S')
12
- header.Version = elements[3].chomp
13
-
14
- return header
15
- end
16
- end
1
+ module Gateway
2
+
3
+ class HeaderParser
4
+ def Parse(elements)
5
+ if elements.length < 4
6
+ throw('The expected parameter count is 4')
7
+ end
8
+
9
+ header = Header.new
10
+ header.TransactionProcessedDate = Date.parse(elements[1]).strftime('%Y%m%d')
11
+ header.ReportFileCreateDate = Date.parse(elements[2]).strftime('%Y%m%d %H:%M:%S')
12
+ header.Version = elements[3].chomp
13
+
14
+ return header
15
+ end
16
+ end
17
17
  end
@@ -1,33 +1,33 @@
1
- module Gateway
2
-
3
- class OnlineDebitTransactionParser
4
- def Parse(elements)
5
- @@DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
6
-
7
- if elements.length < 16
8
- throw('The expected parameter count is 16')
9
- end
10
-
11
- online_debit_transaction = OnlineDebitTransactionReportFile.new
12
-
13
- online_debit_transaction.Order.OrderKey = elements[1]
14
- online_debit_transaction.Order.OrderReference = elements[2]
15
- online_debit_transaction.Order.MerchantKey = elements[3]
16
- online_debit_transaction.Order.MerchantName = elements[4]
17
-
18
- online_debit_transaction.TransactionKey = elements[5]
19
- online_debit_transaction.TransactionReference = elements[6]
20
- online_debit_transaction.Bank = elements[7]
21
- online_debit_transaction.Status = elements[8]
22
- online_debit_transaction.AmountInCents = elements[9].to_i
23
- online_debit_transaction.AmountPaidInCents = (elements[10].to_s == '') == false ? elements[10].to_i : 0
24
- online_debit_transaction.PaymentDate = (elements[11].to_s == '') == false ? DateTime.strptime(elements[11], '%m/%d/%Y %H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
25
- online_debit_transaction.BankReturnCode = elements[12]
26
- online_debit_transaction.BankPaymentDate = elements[13]
27
- online_debit_transaction.Signature = elements[14]
28
- online_debit_transaction.TransactionKeyToBank = elements[15].chomp
29
-
30
- return online_debit_transaction
31
- end
32
- end
1
+ module Gateway
2
+
3
+ class OnlineDebitTransactionParser
4
+ def Parse(elements)
5
+ @@DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
6
+
7
+ if elements.length < 16
8
+ throw('The expected parameter count is 16')
9
+ end
10
+
11
+ online_debit_transaction = OnlineDebitTransactionReportFile.new
12
+
13
+ online_debit_transaction.Order.OrderKey = elements[1]
14
+ online_debit_transaction.Order.OrderReference = elements[2]
15
+ online_debit_transaction.Order.MerchantKey = elements[3]
16
+ online_debit_transaction.Order.MerchantName = elements[4]
17
+
18
+ online_debit_transaction.TransactionKey = elements[5]
19
+ online_debit_transaction.TransactionReference = elements[6]
20
+ online_debit_transaction.Bank = elements[7]
21
+ online_debit_transaction.Status = elements[8]
22
+ online_debit_transaction.AmountInCents = elements[9].to_i
23
+ online_debit_transaction.AmountPaidInCents = (elements[10].to_s == '') == false ? elements[10].to_i : 0
24
+ online_debit_transaction.PaymentDate = (elements[11].to_s == '') == false ? DateTime.strptime(elements[11], '%m/%d/%Y %H:%M:%S').strftime(@@DATETIME_FORMAT) : nil
25
+ online_debit_transaction.BankReturnCode = elements[12]
26
+ online_debit_transaction.BankPaymentDate = elements[13]
27
+ online_debit_transaction.Signature = elements[14]
28
+ online_debit_transaction.TransactionKeyToBank = elements[15].chomp
29
+
30
+ return online_debit_transaction
31
+ end
32
+ end
33
33
  end