1 PACKAGE XTR_MM_COVERS AS
2 /* $Header: xtrmmcvs.pls 120.8 2005/06/29 11:03:02 csutaria ship $ */
3
4
5 /*----------------------------------------------------------------------------
6 Calculates the future value given either the yield or discount rate as
7 the input.
8
9 IMPORTANT: There are two ways to use this API, the first one is passing in
10 the p_DAY_COUNT and p_ANNUAL_BASIS, the second one is passing in the
11 Present Value date (p_PV_DATE), Future Value date (p_FV_DATE),
12 p_DAY_COUNT_BASIS, p_RATE_TYPE, and p_COMPOUND_FREQ.
13 The second method is the one that should be used due to some
14 complications in determining whether a period is less or greater
15 than a year (refer to Bug 2295869) and whether a rate should be a
16 simple rate (period is less than a year) or annually compounding rate
17 (period is greater than or equal to a year).
18
19 RECORD Data Type:
20 IN: P_INDICATOR varchar2
21 P_PRESENT_VALUE num
22 P_RATE num
23 P_DAY_COUNT num
24 P_ANNUAL_BASIS num
25 P_PV_DATE date
26 P_FV_DATE date
27 P_DAY_COUNT_BASIS varchar2
28 P_RATE_TYPE varchar2
29 P_COMPOUND_FREQ number
30 OUT: P_FUTURE_VAL num
31
32 * P_INDICATOR is to differentiate whether the rate is a discount rate or a
33 yield rate.(Y=Yield Rate, DR=Discount Rate).
34 * P_FUTURE_VAL = the amount at maturity .
35 * P_PRESENT_VAL = the fair value of the discounted security.
36 * P_RATE = Yield Rate or Discount Rate (annualized)
37 * P_DAY_COUNT = number of days between the PRESENT_VALUE date and
38 FUTURE_VALUE date. This parameter must be NULL if want
39 (For example: DAY_COUNT = Maturity Date -
40 Settlement Date in Discounted Securities Calculator HLD).
41 * P_ANNUAL_BASIS = number of days in a year where the RATE and the
42 DAY_COUNT are based on.
43 * P_PV_DATE = the PRESENT_VALUE date (For example: p_PV_DATE = Settlement
44 Date in Discounted Securities Calculator HLD).
45 * P_FV_DATE = the FUTURE_VALUE date (For example: p_FV_DATE = Maturity
46 Date in Discounted Securities Calculator HLD).
47 * P_DAY_COUNT_BASIS = the day count basis of p_RATE.
48 * P_RATE_TYPE = the rate type of p_RATE. Possible values are: (S)imple,
49 com(P)ounded, and (C)ontinuous.
50 * P_COMPOUND_FREQ = the compounding frequency of P_RATE, only necessary if
51 p_RATE_TYPE='P'.
52 ----------------------------------------------------------------------------*/
53 TYPE futureValue_out_rec_type is record (p_future_val NUMBER);
54 TYPE futureValue_in_rec_type is record (p_indicator VARCHAR2(2),
55 p_present_val NUMBER,
56 p_rate NUMBER,
57 p_day_count NUMBER,
58 p_annual_basis NUMBER,
59 p_pv_date DATE,
60 p_fv_date DATE,
61 p_day_count_basis VARCHAR2(20),
62 p_rate_type VARCHAR2(1),
63 p_compound_freq NUMBER);
64
65 /*----------------------------------------------------------------------------
66 Calculates the present value given either the yield rate, discount rate,
67 or discount factor as the input.
68
69 IMPORTANT: There are two ways to use this API, the first one is passing in
70 the p_DAY_COUNT and p_ANNUAL_BASIS, the second one is passing in the
71 Present Value date (p_PV_DATE), Future Value date (p_FV_DATE),
72 p_DAY_COUNT_BASIS, p_RATE_TYPE, and p_COMPOUND_FREQ.
73 The second method is the one that should be used due to some
74 complications in determining whether a period is less or greater
75 than a year (refer to Bug 2295869) and whether a rate should be a
76 simple rate (period is less than a year) or annually compounding rate
77 (period is greater than or equal to a year).
78
79 RECORD Data Type:
80 IN: P_INDICATOR char
81 P_FUTURE_VALUE num
82 P_RATE nu
83 P_DAY_COUNT date default
84 P_ANNUAL_BASIS num default
85 OUT: P_PRESENT_VALUE num
86
87 * P_INDICATOR is to differentiate whether the rate is a discount rate,
88 a yield rate, or a disocunt factor.(Y=Yield Rate, DR=Discount Rate,
89 D=Disount Factor).
90 * P_FUTURE_VAL = the amount at maturity .
91 * P_PRESENT_VAL = the fair value of the discounted security.
92 * P_RATE = Yield Rate, Discount Rate, or Discount Factor (annualized)
93 * P_DAY_COUNT = number of days between the PRESENT_VALUE date and
94 FUTURE_VALUE date. (For example: DAY_COUNT = Maturity Date -
95 Settlement Date in Discounted Securities Calculator HLD).
96 * P_ANNUAL_BASIS = number of days in a year where the RATE and the
97 DAY_COUNT are based on.
98 * P_PV_DATE = the PRESENT_VALUE date (For example: p_PV_DATE = Settlement
99 Date in Discounted Securities Calculator HLD).
100 * P_FV_DATE = the FUTURE_VALUE date (For example: p_FV_DATE = Maturity
101 Date in Discounted Securities Calculator HLD).
102 * P_DAY_COUNT_BASIS = the day count basis of p_RATE.
103 * P_RATE_TYPE = the rate type of p_RATE. Possible values are: (S)imple,
104 com(P)ounded, and (C)ontinuous.
105 * P_COMPOUND_FREQ = the compounding frequency of P_RATE, only necessary if
106 p_RATE_TYPE='P'.
107 ----------------------------------------------------------------------------*/
108 TYPE PresentValue_out_rec_type is record (p_present_val NUMBER);
109 TYPE PresentValue_in_rec_type is record (p_indicator VARCHAR2(2),
110 p_future_val NUMBER,
111 p_rate NUMBER,
112 p_day_count NUMBER,
113 p_annual_basis NUMBER,
114 p_pv_date DATE,
115 p_fv_date DATE,
116 p_day_count_basis VARCHAR2(20),
117 p_rate_type VARCHAR2(1),
118 p_compound_freq NUMBER);
119
120
121
122 --
123 -- Calculates the FRA Settlement Amount in FRA Calculator when the input
124 -- parameter is set to 'Yield'.
125 --
126 -- RECORD Data Type:
127 -- IN: P_INDICATOR char
128 -- P_FRA_PRICE num
129 -- P_SETTLEMENT_RATE num
130 -- P_FACE_VALUE num
131 -- P_DAY_COUNT num
132 -- P_ANNUAL_BASIS num
133 -- OUT: P_SETTLEMENT_AMOUNT num
134 --
135 -- * P_INDICATOR is to differentiate whether the settlement rate parameter
136 -- is a discount rate or a yield rate.(Y=Yield Rate, DR=Discount Rate).
137 -- * P_A_PRICE = fra_rate = fair contract rate of FRA (forward interest
138 -- rate covering from the Start Date to the Maturity Date of the contract).
139 -- * P_SETTLEMENT_RATE = current market annual interest rate.
140 -- * P_FACE_VALUE = notional principal amount of FRA.
141 -- * P_DAY_COUNT = number of days between the Settlement Date to Maturity Date.
142 -- * P_ANNUAL_BASIS = number of days in a year the SETTLEMENT_RATE and
143 -- DAY_COUNT are based on.
144 -- * P_SETTLEMENT_AMOUNT = absolute profit or loss amount
145 -- * p_DEAL_TYPE = an indicator whether the deal subtype is fund ('FUND') or
146 -- invest ('INVEST'). This affects whether one pay/loss (-) or receive/gain (+)
147 -- in the settlement.
148 --
149 TYPE fra_settlement_out_rec_type is record (p_settlement_amount NUMBER);
150 TYPE fra_settlement_in_rec_type is record (p_indicator VARCHAR2(2),
151 p_fra_price NUMBER,
152 p_settlement_rate NUMBER,
153 p_face_value NUMBER,
154 p_day_count NUMBER,
155 p_annual_basis NUMBER,
156 p_deal_subtype VARCHAR2(7));
157
158 /*----------------------------------------------------------------------------
159 INTEREST_FORWARD_RATE
160
161 Calculates the FRA Price (Interest Forward Rate) given either yield rates or
162 discount factors as input.
163
164 INT_FORW_RATE_IN_REC_TYPE
165 IN: p_indicator
166 p_t num
167 p_T1 num
168 p_Rt num
169 p_RT1 num
170 p_year_basis num
171 INT_FORW_RATE_OUT_REC_TYPE
172 OUT: p_fra_rate num
173
174 Assumption: all interest rates (p_Rt and p_Rt1) have the same day count
175 basis.
176 p_t = number of days from today to start date
177 p_T1 = number of days from today to maturity date
178 p_Rt = if p_indicator = 'Y' : annualized interest rate for maturity in
179 p_t days, if p_indicator = 'D': discount factor for maturity in p_t days.
180 p_RT1 = if p_indicator = 'Y' : annualized interest rate for maturity in p_T1
181 days, if p_indicator = 'D': discount factor for maturity in p_T1 days.
182 p_year_basis = number of days in a year the interest rate is based on.
183 p_fra_rate = fair contract rate of FRA (forward interest rate covering from
184 the Start Date to the Maturity Date).
185 p_indicator = an indicator whether the input rates are yield rates ('Y') or
186 discount factors ('D').
187 ----------------------------------------------------------------------------*/
188 TYPE int_forw_rate_out_rec_type is record (p_fra_rate NUMBER);
189 TYPE int_forw_rate_in_rec_type is record (p_indicator VARCHAR2(1),
190 p_t NUMBER,
191 p_T1 NUMBER,
192 p_Rt NUMBER,
193 p_RT1 NUMBER,
194 p_year_basis NUMBER);
195
196 /*----------------------------------------------------------------------------
197 BLACK_OPTION_PRICE_CV
198
199 Calculates the price of the interest rate option price using Black's Formula.
200 Record Data Type
201 BLACK_OPT_CV_IN_REC_TYPE
202 IN:
203 p_PRINCIPAL num
204 p_STRIKE_RATE num
205 p_IR_SHORT num
206 p_RATE_TYPE_SHORT varchar2 DEFAULT 'S'
207 p_COMPOUND_FREQ_SHORT num
208 p_DAY_COUNT_BASIS_SHORT varchar2
209 p_IR_LONG num
210 p_RATE_TYPE_LONG varchar2 DEFAULT 'S'
211 p_COMPOUND_FREQ_LONG num
212 p_DAY_COUNT_BASIS_LONG varchar2
213 p_SPOT_DATE date
214 p_START_DATE date
215 p_MATURITY_DATE date
216 p_VOLATILITY num
217
218 BLACK_OPT_CV_OUT_REC_TYPE
219 OUT:
220 p_CAPLET_PRICE num
221 p_FLOORLET_PRICE num
222 p_Nd1 num
223 p_Nd2 num
224 p_Nd1_A num
225 p_Nd2_A num
226
227 p_PRINCIPAL = the principal amount from which the interest rate is calculated
228 p_STRIKE_RATE = Rx = simple interest rate for the deal
229 p_IR_SHORT = market simple interest rate for the period between the spot date
230 and the start date
231 p_RATE_TYPE_SHORT = the p_IR_SHORT rate's type. 'S' for Simple Rate.
232 'C' for Continuous Rate, and 'P' for Compounding Rate.
233 Default value = 'S' (Simple IR).
234 p_DAY_COUNT_BASIS_SHORT = day count basis for p_IR_SHORT
235 p_IR_LONG = market simple interest rate for the period between the spot date and
236 the maturity date
237 p_RATE_TYPE_LONG = the p_IR_LONG rate's type. 'S' for Simple Rate. 'C' for
238 Continuous Rate, and 'P' for Compounding Rate. Default value = 'S' (Simple IR)
239 p_DAY_COUNT_BASIS_LONG = day count basis for p_IR_LONG
240 p_SPOT_DATE = the date when the evaluation/calculation is done
241 p_START_DATE = the date when the deal becomes effective.
242 p_END_DATE = the date when the deal matures.
243 p_VOLATILITY = volatility of interest rate per annum
244 p_CAPLET_PRICE = interest rate collars
245 p_FLOORLET_PRICE = interest rate floors (CAPLET_PRICE = FLOORLET_PRICE + SWAP_VALUE)
246 p_Nd1/2 = cumulative distribution value given limit probability values in
247 Black's formula = N(x) (refer to Hull's Fourth Edition p.252)
248 p_Nd1/2_A = N'(x) in Black's formula (refer to Hull's Fourth Edition p.252)
249 p_COMPOUND_FREQ_SHORT/LONG = frequencies of discretely compounded input/output rate.
250 This is only necessary if either p_RATE_TYPE_SHORT or p_RATE_TYPE_LONG is 'P'.
251 p_FORWARD_RATE = forward rate from start date to maturity date with compound frequency equivalent to the time span between start date and maturity date (=simple rate).
252 ----------------------------------------------------------------------------*/
253 TYPE black_opt_cv_in_rec_type IS RECORD (p_PRINCIPAL NUMBER,
254 p_STRIKE_RATE NUMBER,
255 p_RATE_TYPE_STRIKE varchar2(1) DEFAULT 'S',
256 p_COMPOUND_FREQ_STRIKE NUMBER,
257 p_DAY_COUNT_BASIS_STRIKE varchar2(15),
258 p_IR_SHORT NUMBER,
259 p_RATE_TYPE_SHORT varchar2(1) DEFAULT 'S',
260 p_COMPOUND_FREQ_SHORT NUMBER,
261 p_DAY_COUNT_BASIS_SHORT varchar2(15),
262 p_IR_LONG NUMBER,
263 p_RATE_TYPE_LONG varchar2(1) DEFAULT 'S',
264 p_COMPOUND_FREQ_LONG NUMBER,
265 p_DAY_COUNT_BASIS_LONG varchar2(15),
266 p_SPOT_DATE date,
267 p_START_DATE date,
268 p_MATURITY_DATE date,
269 p_VOLATILITY NUMBER);
270
271 TYPE black_opt_cv_out_rec_type IS RECORD (p_CAPLET_PRICE NUMBER,
272 p_FLOORLET_PRICE NUMBER,
273 p_FORWARD_FORWARD_RATE NUMBER,
274 p_Nd1 NUMBER,
275 p_Nd2 NUMBER,
276 p_Nd1_A NUMBER,
277 p_Nd2_A NUMBER);
278
279 ----------------------------------------------------------------------------------------------------------------
280 -- This is just a cover function that determines whether CALC_DAYS_RUN or
281 -- CALC_DAYS_RUN_B should be called
282 -- use this procedure instead of CALC_DAYS_RUN if ACT/ACT-BOND day count basis
283 -- is used
284 -- When this procedure is called, and if the method is ACT/ACT-BOND,be aware of
285 -- the fact that year_basis will be
286 -- calculated incorrectly if start_date and end_date combined do not form a
287 -- coupon period. So, if year_basis are needed, make sure that, coupon periods
288 -- are sent in as parameters. num_days are calculated correctly all the time
289 PROCEDURE CALC_DAYS_RUN_C(start_date IN DATE,
290 end_date IN DATE,
291 method IN VARCHAR2,
292 frequency IN NUMBER,
293 num_days IN OUT NOCOPY NUMBER,
294 year_basis IN OUT NOCOPY NUMBER,
295 fwd_adjust IN NUMBER DEFAULT NULL,
296 day_count_type IN VARCHAR2 DEFAULT NULL,
297 first_trans_flag IN VARCHAR2 DEFAULT NULL);
298
299 -- This calculates the number of days and year basis for bond only day count
300 -- basis(ACT/ACT-BOND)
301 -- For ACT/ACT-BOND day count basis, this procedure must be used or preferably
302 -- through CALC_DAYS_RUN_C. CALC_DAYS_RUN must not be used for the day count
303 -- basis
304 -- When this procedure is called, be aware of the fact that year_basis will be
305 -- calculated incorrectly if start_date and end_date combined do not form a
306 -- coupon period. So, if year_basis are needed, make sure that, coupon periods
307 -- are sent in as parameters. num_days are calculated correctly all the time
308 PROCEDURE CALC_DAYS_RUN_B(start_date IN DATE,
309 end_date IN DATE,
310 method IN VARCHAR2,
311 frequency IN NUMBER,
312 num_days IN OUT NOCOPY NUMBER,
313 year_basis IN OUT NOCOPY NUMBER);
314
315 -- Calculate over a Year Basis and Number of Days ased on different calc
316 -- methods. Note that this procedure now supports ACTUAL/365L day count basis,
317 -- but it does not support ACT/ACT-BOND day count basis. In order to use the day
318 -- count basis, CALC_DAYS_RUN_C must be used
319 PROCEDURE CALC_DAYS_RUN(start_date IN DATE,
320 end_date IN DATE,
321 method IN VARCHAR2,
322 num_days IN OUT NOCOPY NUMBER,
323 year_basis IN OUT NOCOPY NUMBER,
324 fwd_adjust IN NUMBER DEFAULT NULL,
325 day_count_type IN VARCHAR2 DEFAULT NULL,
326 first_trans_flag IN VARCHAR2 DEFAULT NULL);
327
328
329 PROCEDURE future_value(p_in_rec IN futureValue_in_rec_type,
330 p_out_rec IN OUT NOCOPY futureValue_out_rec_type);
331
332 PROCEDURE present_value(p_in_rec IN presentValue_in_rec_type,
333 p_out_rec IN OUT NOCOPY presentValue_out_rec_type);
334
335 PROCEDURE fra_settlement_amount(p_in_rec IN fra_settlement_in_rec_type,
336 p_out_rec IN OUT NOCOPY fra_settlement_out_rec_type);
337
338 PROCEDURE interest_forward_rate (p_in_rec IN int_forw_rate_in_rec_type,
339 p_out_rec OUT NOCOPY int_forw_rate_out_rec_type);
340
341 PROCEDURE black_option_price_cv (p_in_rec IN black_opt_cv_in_rec_type,
342 p_out_rec OUT NOCOPY black_opt_cv_out_rec_type);
343
344
345 -- added fhu 5/3/02
346 -- bug 2358592 needed new fields when merged from xtr_calc_p
347 -- bug 2804548: p_yield can be used for discount margin for FLOATING BOND
348 TYPE bond_price_yield_in_rec_type is RECORD (
349 p_bond_issue_code VARCHAR2(7),
353 p_yield NUMBER,
350 p_settlement_date DATE,
351 p_ex_cum_next_coupon VARCHAR2(3),-- EX,CUM
352 p_calculate_yield_or_price VARCHAR2(1),-- Y,P
354 p_accrued_interest NUMBER,
355 p_clean_price NUMBER,
356 p_dirty_price NUMBER,
357 p_input_or_calculator VARCHAR2(1), -- C,I
358 p_commence_date DATE,
359 p_maturity_date DATE,
360 p_prev_coupon_date DATE,
361 p_next_coupon_date DATE,
362 p_calc_type VARCHAR2(15),
363 p_year_calc_type VARCHAR2(15),
364 p_accrued_int_calc_basis VARCHAR2(15),
365 p_coupon_freq NUMBER,
366 p_calc_rounding NUMBER,
367 p_price_rounding NUMBER,
368 p_price_round_type VARCHAR2(2),
369 p_yield_rounding NUMBER,
370 p_yield_round_type VARCHAR2(2),
371 p_coupon_rate NUMBER,
372 p_num_coupons_remain NUMBER,
373 p_day_count_type VARCHAR2(1),
374 p_first_trans_flag VARCHAR2(1),
375 p_currency VARCHAR2(15), -- COMPOUND COUPON
376 p_face_value NUMBER, -- COMPOUND COUPON
377 p_consideration NUMBER, -- COMPOUND COUPON
378 p_rounding_type VARCHAR2(1), -- COMPOUND COUPON
379 p_deal_subtype VARCHAR2(7));
380
381 TYPE bond_price_yield_out_rec_type is RECORD (
382 p_yield NUMBER,
383 p_accrued_interest NUMBER,
384 p_clean_price NUMBER,
385 p_dirty_price NUMBER,
386 p_actual_ytm NUMBER); --bug 2804548
387
388 -----------------------------------------------------------------------------
389 -- COMPOUND COUPON: to return start date or maturity date of the first coupon
390 -----------------------------------------------------------------------------
391 FUNCTION ODD_COUPON_DATE (p_commence_date IN DATE,
392 p_maturity_date IN DATE,
393 p_frequency IN NUMBER,
394 p_odd_date_ind IN VARCHAR2) return DATE;
395
396 -----------------------------------------------------------------------------
397 -- COMPOUND COUPON: to return total full coupons
398 -----------------------------------------------------------------------------
399 FUNCTION FULL_COUPONS (p_commence_date IN DATE,
400 p_maturity_date IN DATE,
401 p_frequency IN NUMBER) return NUMBER;
402
403 -----------------------------------------------------------------------------
404 -- COMPOUND COUPON: to return total full coupons
405 -----------------------------------------------------------------------------
406 FUNCTION PREVIOUS_FULL_COUPONS (p_commence_date IN DATE,
407 p_maturity_date IN DATE,
408 p_settlement_date IN DATE,
409 p_frequency IN NUMBER) return NUMBER;
410
411 ----------------------------------------------------------------
412 -- COMPOUND COUPON: to return coupon amount or redemption value
413 ----------------------------------------------------------------
414 TYPE COMPOUND_CPN_REC_TYPE is RECORD (
415 p_bond_start_date DATE,
416 p_odd_coupon_start DATE,
417 p_odd_coupon_maturity DATE,
418 p_full_coupon NUMBER,
419 p_coupon_rate NUMBER,
420 p_maturity_amount NUMBER,
421 p_precision NUMBER,
422 p_rounding_type VARCHAR2(1),
423 p_year_calc_type VARCHAR2(15),
424 p_frequency NUMBER,
425 p_day_count_type VARCHAR2(10),
426 p_amount_redemption_ind VARCHAR2(1));
427
428 FUNCTION CALC_COMPOUND_COUPON_AMT(p_compound_rec IN COMPOUND_CPN_REC_TYPE) return NUMBER;
429
430 ----------------------------------------------------------------
431 -- COMPOUND COUPON: to return total previous quasi coupon
432 ----------------------------------------------------------------
433 TYPE BOND_INFO_REC_TYPE is RECORD (
434 p_bond_commence DATE,
435 p_odd_coupon_start DATE,
436 p_odd_coupon_maturity DATE,
437 p_calc_date DATE, -- either Settlement Date or Accrual Date
438 p_yr_calc_type VARCHAR2(15),
439 p_frequency NUMBER,
440 p_curr_coupon NUMBER, -- ratio of <Prv_Cpn to p_calc_date> to <Prv_Cpn to Nxt_Cpn>
441 p_prv_full_coupon NUMBER, -- number of FULL Coupons before p_calc_date
442 p_day_count_type VARCHAR2(10));
443 FUNCTION CALC_TOTAL_PREVIOUS_COUPON(p_bond_rec IN BOND_INFO_REC_TYPE) return number;
444
445
446 PROCEDURE CALCULATE_BOND_PRICE_YIELD ( p_py_in IN BOND_PRICE_YIELD_IN_REC_TYPE,
447 p_py_out IN OUT NOCOPY BOND_PRICE_YIELD_OUT_REC_TYPE);
448
449 --Start Bug 2804548
450 TYPE BndRateFixDate_out_rec is record (rate_fixing_date DATE);
451 TYPE BndRateFixDate_in_rec is record (date_in DATE,
452 rate_fixing_day NUMBER,
453 ccy xtr_bond_issues.currency%TYPE);
454 PROCEDURE bond_rate_fixing_date_calc(p_in_rec IN BndRateFixDate_in_rec,
455 p_out_rec IN OUT NOCOPY BndRateFixDate_out_rec);
456
460 transaction_no NUMBER);
457 TYPE CalcBondCpnAmt_out_rec is record (coupon_amt NUMBER,
458 coupon_tax_amt NUMBER);
459 TYPE CalcBondCpnAmt_in_rec is record (deal_no NUMBER,
461 PROCEDURE calc_bond_coupon_amt(p_in_rec IN CalcBondCpnAmt_in_rec,
462 p_out_rec IN OUT NOCOPY CalcBondCpnAmt_out_rec);
463
464 TYPE ChkCpnRateReset_out_rec is record (yes BOOLEAN,
465 deal_no NUMBER);
466 TYPE ChkCpnRateReset_in_rec is record (deal_type xtr_deal_types.deal_type%TYPE,
467 deal_no NUMBER,
468 transaction_no NUMBER);
469 PROCEDURE check_coupon_rate_reset(p_in_rec IN ChkCpnRateReset_in_rec,
470 p_out_rec IN OUT NOCOPY ChkCpnRateReset_out_rec);
471 --End Bug 2804548
472
473 END;
474