Hierarchy

⤷

⤷

Properties
Class | CL_PAK_WB_UTIL | |
Short Description | Package API utilities | |
Super Class | ||
Instantiability of a Class | 2 | Public |
Final |
General Data
Message Class | ||
Program status | ||
Category | 0 | |
Package | SPAK_WB_FOUNDATION | Framework for integrating the APIs with the ABAP Workbench |
Created | 20050705 | SAP |
Last change | 20110908 | SAP |
Shared Memory-enabled | ||
Fixed point arithmetic | ||
Unicode checks active |
Forward declarations
# | Type group / Object type | Type | Type Description |
---|---|---|---|
1 | ![]() |
Type group use (TYPE-POOLS tp) | Type group use (TYPE-POOLS tp) |
2 | ![]() |
Forward declaration class (CLASS c DEFINITION DEFERRED) | Forward declaration class (CLASS c DEFINITION DEFERRED) |
Interfaces
Class CL_PAK_WB_UTIL has no interface implemented.
Friends
Class CL_PAK_WB_UTIL has no friend class.
Attributes
# | Attribute | Level | Visibility | Read only | Typing | Associated Type | Initial Value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
Static Attribute | Public | Type reference (TYPE) | TY_LANGUAGE_VECTOR | For finding translations of texts: ordered list of languages | 20060814 |
Methods
# | Method | Level | Visibility | Method type | Description | Created on |
---|---|---|---|---|---|---|
1 | ![]() |
Static method | Public | Method | Checks if a value matches an appropriate constant | 20060809 |
2 | ![]() |
Static method | Public | Method | Checks user name | 20050705 |
3 | ![]() |
Static method | Public | Method | Chooses the appropriate text for a given language | 20050908 |
4 | ![]() |
Static method | Public | Constructor | CLASS_CONSTRUCTOR | 20060814 |
5 | ![]() |
Static method | Public | Method | Converts exception to SPROT_U structure (for CTS logs) | 20060612 |
6 | ![]() |
Static method | Public | Method | OBSOLETE | 20050705 |
7 | ![]() |
Static method | Public | Method | Extracts message ID and values from IF_T100_MESSAGE | 20060612 |
8 | ![]() |
Static method | Public | Method | Fills T100 structure with sy-variables (sy-msgid, sy-...) | 20050705 |
9 | ![]() |
Static method | Public | Method | Gets error text from exception object | 20061115 |
10 | ![]() |
Static method | Public | Method | Returns the responsible person of a development object | 20050705 |
11 | ![]() |
Static method | Public | Method | Returns the development class of a development object | 20050705 |
12 | ![]() |
Static method | Public | Method | Returns the maintenance language of a development object | 20050705 |
13 | ![]() |
Static method | Public | Method | Returns the origin system of a development object | 20050705 |
14 | ![]() |
Static method | Public | Method | Returns the package to which the API caller is assigned | 20061010 |
15 | ![]() |
Static method | Private | Method | Get TADIR information | 20050705 |
16 | ![]() |
Static method | Public | Method | Returns the current date in UTC | 20050705 |
17 | ![]() |
Static method | Public | Method | Invokes function module RS_ACCESS_PERMISSION | 20050705 |
18 | ![]() |
Static method | Public | Method | Invokes function module RS_CHARACTER_CHECK | 20060606 |
19 | ![]() |
Static method | Public | Method | Breaks a string into lines of equal number of characters | 20060612 |
20 | ![]() |
Static method | Public | Method | Enhance passed object list with worklist information | 20050705 |
21 | ![]() |
Static method | Private | Method | Replaces an placeholder with the attribute value of an excp. | 20061115 |
Events
Class CL_PAK_WB_UTIL has no event.
Types
# | Type | Visibility | Typing | Associated Type | Description | Created on | Type Source |
---|---|---|---|---|---|---|---|
1 | TY_DESCRIPTION | Public | See coding | 20050908 | begin of TY_DESCRIPTION,
langu type spras,
text type string,
end of TY_DESCRIPTION
|
||
2 | TY_DESCRIPTION_LIST | Public | See coding | List of descriptions in different languages | 20050908 | TY_DESCRIPTION_LIST type standard table of TY_DESCRIPTION with default key
|
|
3 | TY_LANGUAGE_VECTOR | Public | See coding | Order of languages when searching for a text | 20070327 | TY_LANGUAGE_VECTOR type standard table of sylangu with default key
|
|
4 | TY_TADIR_LIST | Private | See coding | 20050705 | ty_tadir_list TYPE HASHED TABLE OF tadir WITH UNIQUE KEY pgmid object obj_name
|
||
5 | TY_TADIR_OBJ_DESCR | Private | See coding | 20050705 | ty_tadir_obj_descr TYPE HASHED TABLE OF ko100 WITH UNIQUE KEY object
|
Method Signatures
Method CHECK_IF_VALUE_IN_RANGE Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
IM_RANGE | Call by reference | Type reference (TYPE) | ANY | The constants range to use for verification | 20060809 | ||
2 | ![]() |
IM_VALUE | Call by reference | Type reference (TYPE) | CLIKE | The value to be verified | 20060809 |
Method CHECK_IF_VALUE_IN_RANGE on class CL_PAK_WB_UTIL has no exception.
Method CHECK_USER_NAME Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
CH_ERROR_OCCURRED | Call by reference | Type reference (TYPE) | ABAP_BOOL | Set to ABAP_TRUE if error occurred | 20060522 | ||
2 | ![]() |
IM_MESSAGE_TYPE | Call by reference | Type reference (TYPE) | PAK_MESSAGE_TYPE | CL_PAK_WB_DOMAINS=>CO_MESSAGE_TYPE-ERROR | Severity level with which to raise the message | 20060922 | |
3 | ![]() |
IM_RAISE_MESSAGES_OF_TYPE | Call by reference | Type reference (TYPE) | PAK_MESSAGE_TYPE | CL_PAK_WB_DOMAINS=>CO_MESSAGE_TYPE-ERROR | Whether also warnings or even info messages should be raised | 20060922 | |
4 | ![]() |
IM_USER_NAME | Call by reference | Type reference (TYPE) | XUBNAME | User Name in User Master Record | 20050705 |
# | Exception | Resumable | Description | Created on |
---|---|---|---|---|
1 | ![]() |
Invalid data | 20060522 |
Method CHOOSE_DESCRIPTION Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
IM_DESCRIPTION_LIST | Call by reference | Type reference (TYPE) | TY_DESCRIPTION_LIST | List of all texts | 20050908 | ||
2 | ![]() |
IM_IS_CHANGE_MODE | Call by reference | Type reference (TYPE) | ABAP_BOOL | ABAP_TRUE to get the text for change mode | 20060811 | ||
3 | ![]() |
IM_LANGU | Call by reference | Type reference (TYPE) | SPRAS | SPACE | Requested language | 20050908 | |
4 | ![]() |
IM_MASTER_LANGUAGE | Call by reference | Type reference (TYPE) | SPRAS | Master language of the object | 20050908 | ||
5 | ![]() |
RE_DESCRIPTION | Value transfer | Type reference (TYPE) | STRING | The chosen description | 20050908 |
Method CHOOSE_DESCRIPTION on class CL_PAK_WB_UTIL has no exception.
Method CLASS_CONSTRUCTOR Signature
Method CLASS_CONSTRUCTOR on class CL_PAK_WB_UTIL has no parameter.
Method CLASS_CONSTRUCTOR on class CL_PAK_WB_UTIL has no exception.
Method CONVERT_EXCEPTION_TO_SPROT_U Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
EX_SPROT_U | Call by reference | Type reference (TYPE) | SPROT_U | Structure for CTS log entries | 20060612 | ||
2 | ![]() |
IM_EXCEPTION | Call by reference | Object reference (TYPE REF TO) | CX_ROOT | Exception instance to convert | 20060612 |
Method CONVERT_EXCEPTION_TO_SPROT_U on class CL_PAK_WB_UTIL has no exception.
Method CONV_WORKBENCH_OBJ2TADIR_OBJ Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
EX_OBJECT_TYPE | Call by reference | Type reference (TYPE) | PAK_OBJECT_TYPE | 20060424 | |||
2 | ![]() |
EX_SUB_KEY | Call by reference | Type reference (TYPE) | PAK_OBJECT_SUB_KEY | 20060424 | |||
3 | ![]() |
EX_TADIR_OBJ_NAME | Call by reference | Type reference (TYPE) | SOBJ_NAME | 20050705 | |||
4 | ![]() |
EX_TADIR_OBJ_TYPE | Call by reference | Type reference (TYPE) | TROBJTYPE | 20050705 | |||
5 | ![]() |
IM_WORKBENCH_OBJ_NAME | Call by reference | Type reference (TYPE) | CSEQUENCE | 20050705 | |||
6 | ![]() |
IM_WORKBENCH_OBJ_TYPE | Call by reference | Type reference (TYPE) | CSEQUENCE | 20050705 |
Method CONV_WORKBENCH_OBJ2TADIR_OBJ on class CL_PAK_WB_UTIL has no exception.
Method EXTRACT_FROM_T100_MESSAGE Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
EX_MESSAGE_ID | Call by reference | Type reference (TYPE) | SYMSGID | Message class of the message | 20060612 | ||
2 | ![]() |
EX_MESSAGE_NUMBER | Call by reference | Type reference (TYPE) | SYMSGNO | Message number | 20060612 | ||
3 | ![]() |
EX_VAR_1 | Call by reference | Type reference (TYPE) | SYMSGV | Parameter 1 | 20060612 | ||
4 | ![]() |
EX_VAR_1_STR | Call by reference | Type reference (TYPE) | STRING | Parameter 1 as string (full length!) | 20070327 | ||
5 | ![]() |
EX_VAR_2 | Call by reference | Type reference (TYPE) | SYMSGV | Parameter 2 | 20060612 | ||
6 | ![]() |
EX_VAR_2_STR | Call by reference | Type reference (TYPE) | STRING | Parameter 2 as string (full length!) | 20070327 | ||
7 | ![]() |
EX_VAR_3 | Call by reference | Type reference (TYPE) | SYMSGV | Parameter 3 | 20060612 | ||
8 | ![]() |
EX_VAR_3_STR | Call by reference | Type reference (TYPE) | STRING | Parameter 3 as string (full length!) | 20070327 | ||
9 | ![]() |
EX_VAR_4 | Call by reference | Type reference (TYPE) | SYMSGV | Parameter 4 | 20060612 | ||
10 | ![]() |
EX_VAR_4_STR | Call by reference | Type reference (TYPE) | STRING | Parameter 4 as string (full length!) | 20070327 | ||
11 | ![]() |
IM_T100_MESSAGE | Call by reference | Object reference (TYPE REF TO) | IF_T100_MESSAGE | IF_T100_MESSAGE exception whose message data to extract | 20060612 |
Method EXTRACT_FROM_T100_MESSAGE on class CL_PAK_WB_UTIL has no exception.
Method FILL_T100_STRUCTURE Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
RE_T100_CONTAINER | Value transfer | Type reference (TYPE) | PAK_T100_CONTAINER | Stores data to re-use "old" exceptions with class-based ones | 20060105 |
Method FILL_T100_STRUCTURE on class CL_PAK_WB_UTIL has no exception.
Method GET_EXCEPTION_TEXT Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
IM_EXCEPTION | Call by reference | Object reference (TYPE REF TO) | IF_T100_MESSAGE | Exception object whose text to return | 20061115 | ||
2 | ![]() |
RE_EXCEPTION_TEXT | Value transfer | Type reference (TYPE) | STRING | Error description of the exception | 20061115 |
Method GET_EXCEPTION_TEXT on class CL_PAK_WB_UTIL has no exception.
Method GET_OBJECT_AUTHOR Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
IM_NAME | Call by reference | Type reference (TYPE) | CSEQUENCE | Object name | 20050705 | ||
2 | ![]() |
IM_OBJ_TYPE | Call by reference | Type reference (TYPE) | TROBJTYPE | Object Type | 20050705 | ||
3 | ![]() |
RE_AUTHOR | Value transfer | Type reference (TYPE) | RESPONSIBL | Person responsible for a Repository object | 20050705 |
Method GET_OBJECT_AUTHOR on class CL_PAK_WB_UTIL has no exception.
Method GET_OBJECT_DEVELOPMENT_CLASS Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
IM_NAME | Call by reference | Type reference (TYPE) | CSEQUENCE | Object name | 20050705 | ||
2 | ![]() |
IM_OBJ_TYPE | Call by reference | Type reference (TYPE) | TROBJTYPE | Object Type | 20050705 | ||
3 | ![]() |
RE_DEVELOPMENT_CLASS | Value transfer | Type reference (TYPE) | DEVCLASS | Development class for Transport Organizer | 20050705 |
Method GET_OBJECT_DEVELOPMENT_CLASS on class CL_PAK_WB_UTIL has no exception.
Method GET_OBJECT_MASTER_LANGUAGE Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
IM_NAME | Call by reference | Type reference (TYPE) | CSEQUENCE | Package API object name | 20050705 | ||
2 | ![]() |
IM_OBJ_TYPE | Call by reference | Type reference (TYPE) | TROBJTYPE | Object Type | 20050705 | ||
3 | ![]() |
RE_MASTER_LANGUAGE | Value transfer | Type reference (TYPE) | SYLANGU | R/3 System, current language | 20050705 |
Method GET_OBJECT_MASTER_LANGUAGE on class CL_PAK_WB_UTIL has no exception.
Method GET_OBJECT_ORIGINAL_SYSTEM Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
IM_NAME | Call by reference | Type reference (TYPE) | CSEQUENCE | Object name | 20050705 | ||
2 | ![]() |
IM_OBJ_TYPE | Call by reference | Type reference (TYPE) | TROBJTYPE | Object Type | 20050705 | ||
3 | ![]() |
RE_ORIGINAL_SYSTEM | Value transfer | Type reference (TYPE) | SRCSYSTEM | Original system of object | 20050705 |
Method GET_OBJECT_ORIGINAL_SYSTEM on class CL_PAK_WB_UTIL has no exception.
Method GET_PACKAGE_NAME_OF_API_CALLER Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
IM_NESTING_DEPTH | Call by reference | Type reference (TYPE) | I | Number of calls between API caller and caller of this method | 20061010 | ||
2 | ![]() |
RE_CALLING_PACKAGE | Value transfer | Type reference (TYPE) | DEVCLASS | Package | 20061010 |
Method GET_PACKAGE_NAME_OF_API_CALLER on class CL_PAK_WB_UTIL has no exception.
Method GET_TADIR_RECORD Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
IM_OBJECT | Call by reference | Type reference (TYPE) | CSEQUENCE | Object Type | 20050705 | ||
2 | ![]() |
IM_OBJ_NAME | Call by reference | Type reference (TYPE) | CSEQUENCE | Object name in object directory | 20050705 | ||
3 | ![]() |
RE_TADIR | Value transfer | Type reference (TYPE) | TADIR | Directory of Repository Objects | 20050705 |
Method GET_TADIR_RECORD on class CL_PAK_WB_UTIL has no exception.
Method GET_UTC_DATE Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
RE_UTC_DATE | Value transfer | Type reference (TYPE) | SYDATUM | Current Date of Application Server | 20050705 |
Method GET_UTC_DATE on class CL_PAK_WB_UTIL has no exception.
Method INVOKE_RS_ACCESS_PERMISSION Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
EX_KORRNUM | Call by reference | Type reference (TYPE) | TRKORR | Parameter KORRNUM of RS_ACCESS_PERMISSION | 20050705 | ||
2 | ![]() |
EX_NEW_MASTER_LANGUAGE | Call by reference | Type reference (TYPE) | SYLANGU | Parameter NEW_MASTER_LANGUAGE of RS_ACCESS_PERMISSION | 20060811 | ||
3 | ![]() |
IM_ALLOW_POPUPS | Call by reference | Type reference (TYPE) | ABAP_BOOL | ABAP_TRUE | ABAP_FALSE to suppress any dialogs | 20060810 | |
4 | ![]() |
IM_DEQUEUE_SYNCHRON | Call by reference | Type reference (TYPE) | ABAP_BOOL | SPACE | Parameter DEQUEUE_SYNCHRON of RS_ACCESS_PERMISSION | 20051019 | |
5 | ![]() |
IM_GLOBAL_LOCK | Call by reference | Type reference (TYPE) | ABAP_BOOL | Parameter GLOBAL_LOCK of RS_ACCESS_PERMISSION | 20050705 | ||
6 | ![]() |
IM_LANGUAGE_UPD_EXIT | Call by reference | Type reference (TYPE) | FUNCNAME | SPACE | Parameter LANGUAGE_UPD_EXIT of RS_ACCESS_PERMISSION | 20060811 | |
7 | ![]() |
IM_MODE | Call by reference | Type reference (TYPE) | CHAR6 | Parameter MODE of RS_ACCESS_PERMISSION | 20050705 | ||
8 | ![]() |
IM_OBJECT | Call by reference | Type reference (TYPE) | CLIKE | Parameter OBJECT of RS_ACCESS_PERMISSION | 20050705 | ||
9 | ![]() |
IM_OBJECT_TYPE | Call by reference | Type reference (TYPE) | TROBJTYPE | Parameter OBJECT_CLASS of RS_ACCESS_PERMISSION | 20050705 | ||
10 | ![]() |
IM_SUPPRESS_LANGUAGE_CHECK | Call by reference | Type reference (TYPE) | ABAP_BOOL | SPACE | Parameter SUPPRESS_LANGUAGE_CHECK | 20060824 |
# | Exception | Resumable | Description | Created on |
---|---|---|---|---|
1 | ![]() |
Invalid data | 20050705 | |
2 | ![]() |
Method can not be executed at present object state | 20050705 | |
3 | ![]() |
User does not have the right privileges | 20050705 |
Method INVOKE_RS_CHARACTER_CHECK Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
CH_ERROR_OCCURRED | Call by reference | Type reference (TYPE) | ABAP_BOOL | Set to ABAP_TRUE if an error message was raised | 20060606 | ||
2 | ![]() |
IM_ALLOWED_CHARACTERS | Call by reference | Type reference (TYPE) | CHAR_55 | ALLOWED_SPECIAL_CHARACTERS parameter of RS_CHARACTER_CHECK | 20060606 | ||
3 | ![]() |
IM_FORBIDDEN_CHARACTERS | Call by reference | Type reference (TYPE) | CHAR_55 | FORBIDDEN_SPECIAL_CHARACTERS parameter of RS_CHARACTER_CHECK | 20060606 | ||
4 | ![]() |
IM_MESSAGE_TYPE | Call by reference | Type reference (TYPE) | PAK_MESSAGE_TYPE | Type of the raised exception | 20060606 | ||
5 | ![]() |
IM_NAME | Call by reference | Type reference (TYPE) | CLIKE | OBJECTNAME parameter of RS_CHARACTER_CHECK | 20060606 | ||
6 | ![]() |
IM_NO_LOWER_CASE_LETTERS | Call by reference | Type reference (TYPE) | ABAP_BOOL | ABAP_TRUE | LOWER_CASE_LETTERS_NOT_ALLOWED param. of RS_CHARACTER_CHECK | 20091217 |
# | Exception | Resumable | Description | Created on |
---|---|---|---|---|
1 | ![]() |
Errors related to invalid development object names | 20060606 |
Method LINE_BREAK Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
EX_LINES | Call by reference | Type reference (TYPE) | STRING_TABLE | Table of lines | 20060612 | ||
2 | ![]() |
IM_LINE_LENGTH | Call by reference | Type reference (TYPE) | I | Line length | 20060612 | ||
3 | ![]() |
IM_MAX_LINES | Call by reference | Type reference (TYPE) | I | 0 | Maximum number of lines to return | 20060612 | |
4 | ![]() |
IM_TEXT | Call by reference | Type reference (TYPE) | STRING | Text to break into lines | 20060612 |
Method LINE_BREAK on class CL_PAK_WB_UTIL has no exception.
Method PREPARE_API_OBJECT_LIST Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
CH_API_OBJECT_LIST | Call by reference | Type reference (TYPE) | PAK_API_OBJECT_LIST | List of package API objects (packages / interfaces) | 20050705 | ||
2 | ![]() |
IM_OBJ_TYPE | Call by reference | Type reference (TYPE) | CSEQUENCE | 20050705 |
Method PREPARE_API_OBJECT_LIST on class CL_PAK_WB_UTIL has no exception.
Method REPLACE_EXCEPTION_ATTRIBUTE Signature
# | Type | Parameter | Pass Value | Optional | Typing Method | Associated Type | Default value | Description | Created on |
---|---|---|---|---|---|---|---|---|---|
1 | ![]() |
CH_MESSAGE | Call by reference | Type reference (TYPE) | STRING | Message in which to do the replacement | 20061115 | ||
2 | ![]() |
IM_ATTRIBUTE | Call by reference | Type reference (TYPE) | SCX_ATTRNAME | Name of exception attribute whose value to use | 20061115 | ||
3 | ![]() |
IM_EXCEPTION | Call by reference | Object reference (TYPE REF TO) | OBJECT | Exception object whose attributes to read | 20061115 | ||
4 | ![]() |
IM_PLACEHOLDER | Call by reference | Type reference (TYPE) | STRING | Placeholder to replace | 20061115 |
Method REPLACE_EXCEPTION_ATTRIBUTE on class CL_PAK_WB_UTIL has no exception.
History
Last changed by/on | SAP | 20110908 |
SAP Release Created in | 710 |