Committing in PDCP code
[o-du/l2.git] / src / 5gnrpdcp / pj_lib.x
1 /*******************************************************************************
2 ################################################################################
3 #   Copyright (c) [2017-2019] [Radisys]                                        #
4 #                                                                              #
5 #   Licensed under the Apache License, Version 2.0 (the "License");            #
6 #   you may not use this file except in compliance with the License.           #
7 #   You may obtain a copy of the License at                                    #
8 #                                                                              #
9 #       http://www.apache.org/licenses/LICENSE-2.0                             #
10 #                                                                              #
11 #   Unless required by applicable law or agreed to in writing, software        #
12 #   distributed under the License is distributed on an "AS IS" BASIS,          #
13 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
14 #   See the License for the specific language governing permissions and        #
15 #   limitations under the License.                                             #
16 ################################################################################
17 *******************************************************************************/
18
19 /********************************************************************20**
20   
21         Name:     LTE PDCP file 
22     
23         Type:     C include file
24   
25         Desc:     This file contain the hash definations for PDCP 
26  
27         File:     pj_lib.x
28
29 *********************************************************************21*/
30
31 #ifndef __PJ_LIB_X__
32 #define __PJ_LIB_X__
33
34 #ifdef __cplusplus
35 extern "C" {
36 #endif /* __cplusplus */
37
38 #ifdef PJ_CMP_ASYNC
39
40 typedef S16 (*ObdCmpInitCfm) ARGS((
41    Pst *                pst,
42    PjCmpCxt             cmpCxt,
43    PTR                  ctxId));
44
45 typedef S16 (*ObdCmpCfm) ARGS((
46    Pst *                pst,
47    PTR                  cmpCxtId,
48    PjLibTrans           libTrans,
49    Buffer *             opSdu));
50
51 typedef S16 (*ObdDecmpCfm) ARGS((
52    Pst *                pst,
53    PTR                  cmpCxtId,
54    PjLibTrans           libTrans,
55    Buffer *             opSdu,
56    Buffer *             fbPkt
57 ));
58
59 /* Library function externs */
60 EXTERN S16 PjLibObdCmpInitCfm ARGS((
61 Pst      *pst,                    /* post structure */
62 PjCmpCxt cmpCxt,                  /* Context for ROHC */
63 PTR      ctxId                    /* Compression Context ID */
64 ));
65 EXTERN S16 PjLibObdCmpCfm ARGS((
66 Pst        *pst,        /* post structure             */
67 PTR         cmpCxtId,   /* Context Id for compression */
68 PjLibTrans  libTrans,   /* Transaction Id             */
69 Buffer     *opSdu       /* compressed SDU             */
70 ));
71 EXTERN S16 PjLibObdDecmpCfm ARGS((
72 Pst         *pst,                 /* post structure */
73 PTR         cmpCxtId,             /* Context Id for decompression */
74 PjLibTrans  libTrans,             /* Transaction Id */
75 Buffer      *opSdu,               /* decompressed SDU */
76 Buffer      *fbPkt                /* Feedback pkt */
77 ));
78 EXTERN S16 PjLibObdCmpInitReq ARGS((
79 Pst * pst,
80 PjCmpCxt cmpCxt,
81 PjRohc rohc
82 ));
83 EXTERN S16 PjLibObdCmpReq ARGS((
84 Pst * pst,
85 PTR cmpCxtId,
86 PjLibTrans libTrans,
87 Buffer * mBuf
88 ));
89 EXTERN S16 PjLibObdDecmpReq ARGS((
90 Pst * pst,
91 PTR cmpCxtId,
92 PjLibTrans libTrans,
93 Buffer * mBuf
94 ));
95 EXTERN S16 PjLibObdCmpCloseReq ARGS((
96 Pst * pst,
97 PTR cmpCxtId
98 ));
99 EXTERN S16 PjLibObdCmpResetReq ARGS((
100 Pst * pst,
101 PTR cmpCxtId
102 ));
103 EXTERN S16 PjLibObdCmpFbReq  ARGS((
104 Pst      *pst,                    /* post structure */
105 PTR      cmpCxtId,                /* Context Id for compression */
106 PjLibTrans libTrans,             /* Transaction Id */
107 Buffer   *feedback                /* SDU to be decompressed */
108 ));
109
110 EXTERN S16 cmPkLibObdCmpInitCfm ARGS((
111 Pst * pst,
112 PjCmpCxt cmpCxt,
113 PTR ctxId
114 ));
115
116 EXTERN S16 cmUnpkLibObdCmpInitCfm ARGS((
117 ObdCmpInitCfm func,
118 Pst *pst,
119 Buffer *mBuf
120 ));
121
122 EXTERN S16 cmPkLibObdCmpCfm ARGS((
123    Pst *                pst,
124    PTR                  cmpCxtId,
125    PjLibTrans           libTrans,
126    Buffer *             opSdu
127 ));
128
129 EXTERN S16 cmUnpkLibObdCmpCfm ARGS((
130    ObdCmpCfm            func,
131    Pst *                pst,
132    Buffer               *mBuf
133 ));
134
135 EXTERN S16 cmPkLibObdDecmpCfm ARGS((
136    Pst *                pst,
137    PTR                  cmpCxtId,
138    PjLibTrans           libTrans,
139    Buffer *             opSdu,
140    Buffer *             fbPkt
141 ));
142
143 EXTERN S16 cmUnpkLibObdDecmpCfm ARGS((
144    ObdDecmpCfm          func,
145    Pst *                pst,
146    Buffer               *mBuf
147 ));
148
149 EXTERN S16 cmPkPjRohc ARGS((
150    PjRohc               *param,
151    Buffer               *mBuf
152 ));
153 EXTERN S16 cmUnpkPjRohc ARGS((
154    PjRohc               *param,
155    Buffer               *mBuf
156 ));
157 EXTERN S16 cmPkPjCmpCxt ARGS((
158    PjCmpCxt             *param,
159    Buffer               *mBuf
160 ));
161 EXTERN S16 cmUnpkPjCmpCxt ARGS((
162    PjCmpCxt             *param,
163    Buffer               *mBuf
164 ));
165
166 #else
167
168 EXTERN S16 pjLibCmpInitReq  ARGS((
169 PjCmpCxt cmpCxt,                  
170 PjRohc   rohc,                    
171 PTR      *cmpCxtId                
172 ));
173 EXTERN S16 pjLibCmpReq  ARGS((
174 PTR      cmpCxtId,                
175 Buffer   *mBuf,                   
176 Buffer   **opSdu                  
177 ));
178 EXTERN S16 pjLibDecmpReq  ARGS((
179 PTR      cmpCxtId,                
180 Buffer   *mBuf,                   
181 Buffer   **opSdu,                 
182 Buffer   **feedback               
183 ));
184 EXTERN S16 pjLibCmpCloseReq ARGS((
185 PTR      cmpCxtId                 
186 ));
187 EXTERN S16 pjLibCmpResetReq ARGS((
188 PTR      cmpCxtId                 
189 ));
190 EXTERN S16 pjLibCmpFbReq ARGS((
191 PTR      cmpCxtId,
192 Buffer   *feedback
193 ));
194
195 #endif /* PJ_CMP_ASYNC */
196
197 #ifdef PJ_SEC_ASYNC
198
199 typedef S16 (*ObdIntInitCfm) ARGS((
200    Pst *                pst,
201    PjSecCxt             secCtx,
202    PTR                  ctxId));
203
204 typedef S16 (*ObdCpInitCfm) ARGS((
205    Pst *                pst,
206    PjSecCxt             secCxt,
207    PTR                  ctxId));
208
209 typedef S16 (*ObdUpInitCfm) ARGS((
210    Pst *                pst,
211    PjSecCxt             secCxt,
212    PTR                  ctxId));
213
214 typedef S16 (*ObdIntProtCfm) ARGS((
215    Pst *                pst,
216    PTR                  cxtId,
217    PjLibTrans           libTrans,
218    U32                  macI));
219
220 typedef S16 (*ObdCipherCfm) ARGS((
221    Pst *                pst,
222    PTR                  cxtId,
223    PjLibTrans           libTrans,
224    Buffer *             opSdu));
225
226 typedef S16 (*ObdDecipherCfm) ARGS((
227    Pst *                pst,
228    PTR                  cxtId,
229    PjLibTrans           libTrans,
230    Buffer *             opSdu));
231
232 typedef S16 (*ObdIntVerCfm) ARGS((
233    Pst *                pst,
234    PTR                  cxtId,
235    PjLibTrans           libTrans,
236    Status               status));
237
238 EXTERN S16 PjLibObdIntInitCfm ARGS((
239 Pst      *pst,                    /* post structure */
240 PjSecCxt secCxt,                  /* Secutiry Context */
241 PTR      ctxId                    /* Integrity Context ID */
242 ));
243 EXTERN S16 PjLibObdCpInitCfm ARGS((
244 Pst      *pst,                    /* post structure */
245 PjSecCxt secCxt,                  /* Secutiry Context */
246 PTR      ctxId                    /* Ciphering Context ID */
247 ));
248 EXTERN S16 PjLibObdUpInitCfm ARGS((
249 Pst      *pst,                    /* post structure */
250 PjSecCxt secCxt,                  /* Secutiry Context */
251 PTR      ctxId                    /* Ciphering Context ID */
252 ));
253 EXTERN S16 PjLibObdIntProtCfm ARGS((
254 Pst      *pst,                    /* post structure */
255 PTR      cxtId,                   /* Context Id for Integrity protection*/
256 PjLibTrans libTrans,              /* Transaction Id */
257 U32      macI                     /* Message authentication code */
258 ));
259 EXTERN S16 PjLibObdCipherCfm ARGS((
260 Pst      *pst,                    /* post structure */
261 PTR      cxtId,                   /* Context Id for Ciphering */
262 PjLibTrans libTrans,              /* Transaction Id */
263 Buffer   *opSdu                   /* ciphered SDU */
264 ));
265 EXTERN S16 PjLibObdDecipherCfm ARGS((
266 Pst         *pst,                 /* post structure */
267 PTR         cxtId,                /* Context Id for Integrity protection*/
268 PjLibTrans  libTrans,             /* Transaction Id */
269 Buffer      *opPdu                /* deciphered SDU */
270 ));
271 EXTERN S16 PjLibObdIntVerCfm ARGS((
272 Pst      *pst,                    /* post structure */
273 PTR      cxtId,                   /* Context Id for Integrity protection*/
274 PjLibTrans libTrans,              /* Transaction Id */
275 Status   status                   /* Integrity verification status */
276 ));
277 EXTERN S16 PjLibObdIntInitReq ARGS((
278 Pst * pst,
279 PjSecCxt secCtx,
280 PjIntInfo intInfo
281 ));
282 EXTERN S16 PjLibObdCpInitReq ARGS((
283 Pst * pst,
284 PjSecCxt secCxt,
285 U8 algoType,
286 U8 *cpKey
287 ));
288 EXTERN S16 PjLibObdUpInitReq ARGS((
289 Pst * pst,
290 PjSecCxt secCxt,
291 U8 algoType,
292 U8 *upKey
293 ));
294 EXTERN S16 PjLibObdIntProtReq ARGS((
295 Pst * pst,
296 PTR intCxtId,
297 PjSecInp secInp,
298 PjLibTrans libTrans,
299 Buffer ** mBuf
300 ));
301 EXTERN S16 PjLibObdCipherReq ARGS((
302 Pst * pst,
303 PTR cxtId,
304 PjSecInp secInp,
305 PjLibTrans libTrans,
306 Buffer * mBuf
307 ));
308 EXTERN S16 PjLibObdIntVerReq ARGS((
309 Pst * pst,
310 PTR intCxtId,
311 PjSecInp secInp,
312 PjLibTrans libTrans,
313 Buffer * mBuf,
314 U32 macI
315 ));
316 EXTERN S16 PjLibObdDecipherReq ARGS((
317 Pst * pst,
318 PTR cxtId,
319 PjSecInp secInp,
320 PjLibTrans libTrans,
321 Buffer * mBuf
322 ));
323 EXTERN S16 PjLibObdIntCloseReq ARGS((
324 Pst * pst,
325 PTR intCxtId
326 ));
327 EXTERN S16 PjLibObdCipherCloseReq ARGS((
328 Pst * pst,
329 PTR cpCxtId
330 ));
331
332 EXTERN S16 cmPkLibObdIntInitCfm ARGS((
333    Pst *                pst,
334    PjSecCxt             secCtx,
335    PTR                  ctxId
336 ));
337
338 EXTERN S16 cmUnpkLibObdIntInitCfm ARGS((
339    ObdIntInitCfm        func,
340    Pst *                pst,
341    Buffer               *mBuf
342 ));
343
344 EXTERN S16 cmPkLibObdCpInitCfm ARGS((
345    Pst *                pst,
346    PjSecCxt             secCxt,
347    PTR                  ctxId
348 ));
349
350 EXTERN S16 cmUnpkLibObdCpInitCfm ARGS((
351    ObdCpInitCfm         func,
352    Pst *                pst,
353    Buffer               *mBuf
354 ));
355
356 EXTERN S16 cmPkLibObdUpInitCfm ARGS((
357    Pst *                pst,
358    PjSecCxt             secCxt,
359    PTR                  ctxId
360 ));
361
362 EXTERN S16 cmUnpkLibObdUpInitCfm ARGS((
363    ObdUpInitCfm         func,
364    Pst *                pst,
365    Buffer               *mBuf
366 ));
367
368 EXTERN S16 cmPkLibObdIntProtCfm ARGS((
369    Pst *                pst,
370    PTR                  cxtId,
371    PjLibTrans           libTrans,
372    U32                  macI
373 ));
374
375 EXTERN S16 cmUnpkLibObdIntProtCfm ARGS((
376    ObdIntProtCfm        func,
377    Pst *                pst,
378    Buffer               *mBuf
379 ));
380
381 EXTERN S16 cmPkLibObdCipherCfm ARGS((
382    Pst *                pst,
383    PTR                  cxtId,
384    PjLibTrans           libTrans,
385    Buffer *             opSdu
386 ));
387
388 EXTERN S16 cmUnpkLibObdCipherCfm ARGS((
389    ObdCipherCfm         func,
390    Pst *                pst,
391    Buffer               *mBuf
392 ));
393
394 EXTERN S16 cmPkLibObdDecipherCfm ARGS((
395    Pst *                pst,
396    PTR                  cxtId,
397    PjLibTrans           libTrans,
398    Buffer *             opSdu
399 ));
400
401 EXTERN S16 cmUnpkLibObdDecipherCfm ARGS((
402    ObdDecipherCfm       func,
403    Pst *                pst,
404    Buffer               *mBuf
405 ));
406
407 EXTERN S16 cmPkLibObdIntVerCfm ARGS((
408    Pst *                pst,
409    PTR                  cxtId,
410    PjLibTrans           libTrans,
411    Status               status
412 ));
413
414 EXTERN S16 cmUnpkLibObdIntVerCfm ARGS((
415    ObdIntVerCfm         func,
416    Pst *                pst,
417    Buffer               *mBuf
418 ));
419
420 EXTERN S16 cmPkPjSecCxt ARGS((
421    PjSecCxt             *param,
422    Buffer               *mBuf
423 ));
424 EXTERN S16 cmUnpkPjSecCxt ARGS((
425    PjSecCxt             *param,
426    Buffer               *mBuf
427 ));
428 EXTERN S16 cmPkPjIntInfo ARGS((
429    PjIntInfo            *param,
430    Buffer               *mBuf
431 ));
432 EXTERN S16 cmUnpkPjIntInfo ARGS((
433    PjIntInfo            *param,
434    Buffer               *mBuf
435 ));
436 EXTERN S16 cmPkPjSecInp ARGS((
437    PjSecInp             *param,
438    Buffer               *mBuf
439 ));
440 EXTERN S16 cmUnpkPjSecInp ARGS((
441    PjSecInp             *param,
442    Buffer               *mBuf
443 ));
444
445 #else
446
447 EXTERN S16 PjLibObdUlInitReq ARGS ((
448 PjCb    *gCb
449 ));
450
451 EXTERN S16 PjLibObdDlInitReq ARGS ((
452 PjCb    *gCb
453 ));
454
455 EXTERN S16 pjLibObdPrcKenbCfg ARGS ((
456 PjCb                   *gCb,
457 CpjAsKeyInfo*       kenbInf,
458 CpjAskeyCfmInfo     *kdfCfm
459 ));
460
461 EXTERN S16 pjLibObdPrcKenbStarCfg ARGS ((
462 PjCb                   *gCb,
463 CpjKenbStarInfo*       kenbInf,
464 CpjKenbStarCfmInfo     *kdfCfm
465 ));
466
467 #ifdef INTEL_QAT_DP
468 EXTERN S16 PjLibObdDlCloseReq ARGS ((Void *));
469 #else
470 EXTERN S16 PjLibObdDlCloseReq ARGS ((Void));
471 #endif
472
473 #ifdef INTEL_QAT_DP
474 EXTERN S16 PjLibObdUlCloseReq ARGS ((Void *));
475 #else
476 EXTERN S16 PjLibObdUlCloseReq ARGS ((Void));
477 #endif
478
479 EXTERN S16 PjLibObdIntInitReq ARGS ((
480 PjSec *secInp
481 ));
482
483 EXTERN Void PjUlSpaccTrigger ARGS ((Void));
484
485 EXTERN Void PjDlSpaccTrigger ARGS ((Void));
486
487 #ifdef INTEL_SW_INTEG
488 EXTERN S16 PjLibObdIntProtReq ARGS ((
489 PjCb *gCb,
490 PjLibTrans  *libTrans, 
491 Buffer **mBuf
492 ));
493 #else
494 EXTERN S16 PjLibObdIntProtReq ARGS ((
495 PjLibTrans  *libTrans, 
496 Buffer **mBuf
497 ));
498 #endif
499
500
501
502 #ifdef TENB_AS_SECURITY
503 EXTERN S16 PjLibObdDlInitReq ARGS ((
504 PjCb    *gCb
505 ));
506
507 EXTERN S16 PjLibObdUlInitReq ARGS ((
508 PjCb    *gCb
509 ));
510 #ifdef INTEL_QAT_DP
511 EXTERN S16 PjLibObdDlCloseReq ARGS ((Void *));
512 #else
513 EXTERN S16 PjLibObdDlCloseReq ARGS ((Void));
514 #endif
515
516 #ifdef INTEL_QAT_DP
517 EXTERN S16 PjLibObdUlCloseReq ARGS ((Void *));
518 #else
519 EXTERN S16 PjLibObdUlCloseReq ARGS ((Void));
520 #endif
521 #endif
522
523 #ifdef TENB_AS_SECURITY
524 #ifdef INTEL_SW_INTEG
525 EXTERN S16 PjLibObdIntVerReq ARGS ((
526 PjCb *gCb,
527 PjLibTrans  *libTrans,
528 Buffer * mBuf,
529 U32   macI
530 ));
531 #else
532 EXTERN S16 PjLibObdIntVerReq ARGS ((
533 PjLibTrans  *libTrans,
534 Buffer * mBuf,
535 U32   macI
536 ));
537 #endif
538 #else
539 EXTERN S16 PjLibObdIntVerReq ARGS((
540 Pst * pst,
541 PTR intCxtId,
542 PjSecInp secInp,
543 PjLibTrans libTrans,
544 Buffer * mBuf,
545 U32 macI
546 ));
547
548 #endif
549
550 #ifdef INTEL_QAT_DP
551 EXTERN S16 PjLibObdIntCloseReq ARGS ((
552 Void *instHndl,                                  /* Instance Handler */
553 Void *intCxtId
554 ));
555 #else
556 EXTERN S16 PjLibObdIntCloseReq ARGS ((
557 Void *intCxtId
558 ));
559 #endif
560
561 EXTERN S16 PjLibObdCpInitReq ARGS ((
562 PjSec *secInp
563 ));
564
565 EXTERN S16 PjLibObdUpInitReq ARGS ((
566 PjSec *secInp
567 ));
568
569
570 EXTERN S16 PjLibObdCipherReq ARGS ((
571 PjLibTrans  *libTrans,
572 Buffer      *mBuf,
573 Buffer      **opSdu
574 ));
575
576 #ifdef FLAT_BUFFER_OPT
577 EXTERN S16 PjLibObdCipherReqFB ARGS ((
578 PjLibTrans  *libTrans,
579 FlatBuffer  *mBuf,
580 Buffer      **opSdu
581 ));
582 #endif
583
584 EXTERN S16 PjLibObdDecipherReq ARGS ((
585 PjLibTrans  *libTrans,
586 Buffer      *mBuf,
587 Buffer      **opSdu
588 ));
589
590 #ifdef INTEL_QAT_DP
591 EXTERN S16 PjLibObdCipherCloseReq ARGS ((
592 Void *instHndl,                                  /* Instance Handler */
593 Void *cpCxtId
594 ));
595 #else
596 EXTERN S16 PjLibObdCipherCloseReq ARGS ((
597 Void *cpCxtId
598 ));
599 #endif
600
601 #ifdef INTEL_QAT_DP
602 EXTERN S16 pjLibIntInitReq ARGS (( 
603 PjCb  *gCb,
604 PjIntInfo intInfo,                /* Integrity Cfg Info */
605 Void      **cxtId                  /* FD */
606 ));
607 #else
608 EXTERN S16 pjLibIntInitReq ARGS (( 
609 PjSecCxt secCxt,                  /* Context for Intg protection/verification */
610 PjIntInfo intInfo,                /* Integrity Cfg Info */
611 Void      **cxtId                  /* FD */
612 ));
613 #endif
614
615 #ifdef INTEL_QAT_DP
616 EXTERN S16 pjLibCpInitReq ARGS ((
617 PjCb     *gCb,
618 PjSecCxt secCxt,                  /* Context for Intg protection/verificatino */
619 U8       algoType,                /* Type of the algorithm */
620 U8       *cpKey,                  /* Control plane ciphering key */
621 Void     **cxtId                   /* FD */
622 ));
623 #else
624 EXTERN S16 pjLibCpInitReq ARGS ((
625 PjSecCxt secCxt,                  /* Context for Intg protection/verificatino */
626 U8       algoType,                /* Type of the algorithm */
627 U8       *cpKey,                  /* Control plane ciphering key */
628 Void     **cxtId                   /* FD */
629 ));
630 #endif
631
632 #ifdef INTEL_QAT_DP
633 EXTERN S16 pjLibUpInitReq ARGS ((
634 PjCb     *gCb,
635 PjSecCxt secCxt,                  /* Context for Intg protection/verificatino */
636 U8       algoType,                /* Type of the algorithm */
637 U8       *upKey,                  /* User plane ciphering key */
638 Void     **cxtId                   /* FD */
639 ));
640 #else
641 EXTERN S16 pjLibUpInitReq ARGS ((
642 PjSecCxt secCxt,                  /* Context for Intg protection/verificatino */
643 U8       algoType,                /* Type of the algorithm */
644 U8       *upKey,                  /* User plane ciphering key */
645 Void     **cxtId                   /* FD */
646 ));
647 #endif
648 EXTERN S16 pjLibDecipherReq ARGS((
649 PTR         intCxtId,           /* Context Id for compression */
650 PjSecInp    secInp,             /* Input for Deciphering */
651 Buffer      *mBuf,              /* SDU to be deciphered */
652 Buffer      **opSdu             /* deciphered SDU */
653 ));
654 EXTERN S16 pjLibIntVerReq  ARGS((
655 PTR        intCxtId,                /* Context Id for compression */
656 PjSecInp   secInp,                  /* Input for Integrity protection */                  
657 Buffer     *mBuf,                   /* SDU to be compressed */
658 U32        macI,                    /* Message authentication code for the SDU */
659 Status     *status                  /* Status of the Integrity verification */
660 ));
661 #endif
662
663 #if defined(PJ_CMP_ASYNC) || defined(PJ_SEC_ASYNC)
664 EXTERN S16 cmPkPjLibTrans ARGS((
665    PjLibTrans           *param,
666    Buffer               *mBuf
667 ));
668 EXTERN S16 cmUnpkPjLibTrans ARGS((
669    PjLibTrans           *param,
670    Buffer               *mBuf
671 ));
672
673 #endif /* PJ_CMP_ASYNC || PJ_SEC_ASYNC */
674 /* kw003.201 */
675
676 /* kw004.201 Guarded under PTPJLIB */
677 #ifdef PTPJLIB 
678 EXTERN S16 pjLibPktAdmCtrl ARGS((
679    PjDlRbCb             *pjRbCb,  
680    Buffer               *pkt
681 ));
682 #endif
683 #if defined(L2_L3_SPLIT) && defined(ICC_RECV_TSK_RBUF)
684 EXTERN S16 pjUlBatchProcSplit ARGS ((Void));
685 #endif
686 #ifdef __cplusplus
687 }
688 #endif /* __cplusplus */
689
690 #endif /* __PJ_LIB_X__ */
691 \f  
692 /********************************************************************30**
693   
694          End of file
695 **********************************************************************/