diff --git a/CISTOOLS/Functions/SPLIT_STRING.sql b/CISTOOLS/Functions/SPLIT_STRING.sql
index a492be3..8fb61f8 100644
--- a/CISTOOLS/Functions/SPLIT_STRING.sql
+++ b/CISTOOLS/Functions/SPLIT_STRING.sql
@@ -1 +1,109 @@
-âÅã@×ÁãÈ@\ÓÉÂÓ@^@
%
%ÃÙÅÁãÅ@ÖÙ@ÙÅ×ÓÁÃÅ@ÆäÕÃãÉÖÕ@ÃÉâãÖÖÓâKâ×ÓÉãmâãÙÉÕÇ@M@
%ÉÕmâãÙÉÕÇ@åÁÙÃÈÁÙMóòö÷ö]@k@
%ÉÕmÄÅÓÉÔÉãÖÙ@åÁÙÃÈÁÙMóò]@]@
%ÙÅãäÙÕâ@ãÁÂÓÅ@M@
%ÙÖæmÕäÔ@ÉÕãÅÇÅÙ@k@
%ÆÙÁÇÔÅÕã@åÁÙÃÈÁÙMóòö÷ö]@]@@@
%ÓÁÕÇäÁÇÅ@âØÓ@
%â×ÅÃÉÆÉÃ@ÃÉâãÖÖÓâKâ×ÓÉãmÃÈÁÙ@
%ÕÖã@ÄÅãÅÙÔÉÕÉâãÉÃ@
%ÙÅÁÄâ@âØÓ@ÄÁãÁ@
%ÃÁÓÓÅÄ@ÖÕ@ÕäÓÓ@ÉÕ×äã@
%×ÙÖÇÙÁÔ@ÕÁÔÅ@â×ÓÉãmÃÈÁÙ@
%ÃÖÕÃäÙÙÅÕã@ÁÃÃÅââ@ÙÅâÖÓäãÉÖÕ@ÄÅÆÁäÓã@
%âÅã@Ö×ãÉÖÕ@@ÁÓæÂÓÒ@~@\ÁÓÓÙÅÁÄ@k@
%ÁÓæÃ×èÄãÁ@~@\Ö×ãÉÔÉéÅ@k@
%ÃÖÔÔÉã@~@\ÕÖÕÅ@k@
%ÄÅÃÙÅâäÓã@~@Móñk@óñk@ðð]@k@
%ÄèÕÄÆãÃÖÓ@~@\ÕÖ@k@
%ÄèÕäâÙ×ÙÆ@~@\äâÅÙ@k@
%âØÓÃäÙÙäÓÅ@~@\âãÄ@k@
%âÙãâÅØ@~@\ÈÅç@@@
%ÂÅÇÉÕ@
%ÙÅãäÙÕ@
%æÉãÈ@ÙÅÃäÙâÉåÅ@ÃÈäÕÒâ@M@ÉÄç@k@âãÁÙãm×Öâ@k@ÕÅçãm×Öâ@]@Áâ@M@
%``@‚�¢…@ƒ�¢…@
%âÅÓÅÃã@\@
%ÆÙÖÔ@ãÁÂÓÅ@M@
%åÁÓäÅâ@M@ñ@k@ñ@k@ÓÖÃÁãÅmÉÕmâãÙÉÕÇ@M@
%ÉÕmâãÙÉÕÇ@k@ÉÕmÄÅÓÉÔÉãÖÙ@k@ñ@]@]@
%]@ç@M@ÉÄç@k@âãÁÙãm×Öâ@k@ÕÅçãm×Öâ@]@
%äÕÉÖÕ@ÁÓÓ@
%``@™…ƒ¤™¢‰¥…@ƒ�¢…@
%âÅÓÅÃã@ÉÄç@N@ñ@k@ÕÅçãm×Öâ@N@ÓÅÕÇãÈ@M@ÉÕmÄÅÓÉÔÉãÖÙ@]@k@
%ÃÁâÅ@
%æÈÅÕ@
%ÕÅçãm×Öâ@N@ÓÅÕÇãÈ@M@ÉÕmÄÅÓÉÔÉãÖÙ@]@L~@ÓÅÕÇãÈ@M@
%ÉÕmâãÙÉÕÇ@]@
%ãÈÅÕ@
%ÓÖÃÁãÅmÉÕmâãÙÉÕÇ@M@
%ÉÕmâãÙÉÕÇ@k@ÉÕmÄÅÓÉÔÉãÖÙ@k@ÕÅçãm×Öâ@N@
%ÓÅÕÇãÈ@M@ÉÕmÄÅÓÉÔÉãÖÙ@]@]@
%ÅÓâÅ@ð@
%ÅÕÄ@
%ÆÙÖÔ@ÃÈäÕÒâ@
%æÈÅÙÅ@ÕÅçãm×Öâ@n@ð@
%ÁÕÄ@ÕÅçãm×Öâ@N@ÓÅÕÇãÈ@M@ÉÕmÄÅÓÉÔÉãÖÙ@]@L~@ÓÅÕÇãÈ@M@
%ÉÕmâãÙÉÕÇ@]@
%]@âÅÓÅÃã@ÉÄç@k@
%âäÂâãÙ@M@
%ÉÕmâãÙÉÕÇ@k@âãÁÙãm×Öâ@k@
%ÃÁâÅ@
%æÈÅÕ@
%ÕÅçãm×Öâ@~@ð@
%ãÈÅÕ@ÓÅÕÇãÈ@M@ÉÕmâãÙÉÕÇ@]@`@âãÁÙãm×Öâ@N@ñ@
%ÅÓâÅ@ÕÅçãm×Öâ@`@âãÁÙãm×Öâ@
%ÅÕÄ@]@Áâ@ÆÙÁÇÔÅÕã@
%ÆÙÖÔ@ÃÈäÕÒâ@^@
%ÅÕÄ@@^@
%
%ÇÙÁÕã@ÁÓãÅÙ@k@ÅçÅÃäãÅ@@@
%ÖÕ@â×ÅÃÉÆÉÃ@ÆäÕÃãÉÖÕ@ÃÉâãÖÖÓâKâ×ÓÉãmÃÈÁÙ@
%ãÖ@ÁÔÁ×ÉÃâ@æÉãÈ@ÇÙÁÕã@Ö×ãÉÖÕ@^@
%
%ÇÙÁÕã@ÅçÅÃäãÅ@@@
%ÖÕ@â×ÅÃÉÆÉÃ@ÆäÕÃãÉÖÕ@ÃÉâãÖÖÓâKâ×ÓÉãmÃÈÁÙ@
%ãÖ@×äÂÓÉÃ@^@
%
%
%âÅã@×ÁãÈ@\ÓÉÂÓ@^@
%
%ÃÙÅÁãÅ@ÖÙ@ÙÅ×ÓÁÃÅ@ÆäÕÃãÉÖÕ@ÃÉâãÖÖÓâKâ×ÓÉãmâãÙÉÕÇ@M@
%ÉÕmâãÙÉÕÇ@åÁÙÃÈÁÙMóòö÷ö]@k@
%ÉÕmÓÅÕ@ÉÕãÅÇÅÙ@]@
%ÙÅãäÙÕâ@ãÁÂÓÅ@M@
%ÙÖæmÕäÔ@ÉÕãÅÇÅÙ@k@
%ÆÙÁÇÔÅÕã@åÁÙÃÈÁÙMóòö÷ö]@]@@@
%ÓÁÕÇäÁÇÅ@âØÓ@
%â×ÅÃÉÆÉÃ@ÃÉâãÖÖÓâKâ×ÓÉãmÓÅÕ@
%ÕÖã@ÄÅãÅÙÔÉÕÉâãÉÃ@
%ÙÅÁÄâ@âØÓ@ÄÁãÁ@
%ÃÁÓÓÅÄ@ÖÕ@ÕäÓÓ@ÉÕ×äã@
%×ÙÖÇÙÁÔ@ÕÁÔÅ@â×ÓÉãmÓÅÕ@
%ÃÖÕÃäÙÙÅÕã@ÁÃÃÅââ@ÙÅâÖÓäãÉÖÕ@ÄÅÆÁäÓã@
%âÅã@Ö×ãÉÖÕ@@ÁÓæÂÓÒ@~@\ÁÓÓÙÅÁÄ@k@
%ÁÓæÃ×èÄãÁ@~@\Ö×ãÉÔÉéÅ@k@
%ÃÖÔÔÉã@~@\ÕÖÕÅ@k@
%ÄÅÃÙÅâäÓã@~@Móñk@óñk@ðð]@k@
%ÄèÕÄÆãÃÖÓ@~@\ÕÖ@k@
%ÄèÕäâÙ×ÙÆ@~@\äâÅÙ@k@
%âØÓÃäÙÙäÓÅ@~@\âãÄ@k@
%âÙãâÅØ@~@\ÈÅç@@@
%ÂÅÇÉÕ@
%ÙÅãäÙÕ@âÅÓÅÃã@ÙÕ@k@âäÂâãÙ@M@ÉÕmâãÙÉÕÇ@k@ÙÕ@k@ÉÕmÓÅÕ@]@
%ÆÙÖÔ@ãÁÂÓÅ@M@
%ÃÉâãÖÖÓâ@K@ÙÖæâmÃÖäÕãÅÙ@M@ÓÅÕÇãÈ@M@ÉÕmâãÙÉÕÇ@]@]@
%]@Áâ@ç@
%æÈÅÙÅ@ÔÖÄ@M@M@ÙÕ@`@ñ@]@k@ÉÕmÓÅÕ@]@~@ð@^@
%ÅÕÄ@@^@
%
%ÇÙÁÕã@ÁÓãÅÙ@k@ÅçÅÃäãÅ@@@
%ÖÕ@â×ÅÃÉÆÉÃ@ÆäÕÃãÉÖÕ@ÃÉâãÖÖÓâKâ×ÓÉãmÓÅÕ@
%ãÖ@ÁÔÁ×ÉÃâ@æÉãÈ@ÇÙÁÕã@Ö×ãÉÖÕ@^@
%
%ÇÙÁÕã@ÅçÅÃäãÅ@@@
%ÖÕ@â×ÅÃÉÆÉÃ@ÆäÕÃãÉÖÕ@ÃÉâãÖÖÓâKâ×ÓÉãmÓÅÕ@
%ãÖ@×äÂÓÉÃ@^@
%
%
\ No newline at end of file
+SET PATH *LIBL ; 
+
+CREATE OR REPLACE FUNCTION CISTOOLS.SPLIT_STRING ( 
+	IN_STRING VARCHAR(32676) , 
+	IN_DELIMITOR VARCHAR(32) ) 
+	RETURNS TABLE ( 
+	ROW_NUM INTEGER , 
+	FRAGMENT VARCHAR(32676) )   
+	LANGUAGE SQL 
+	SPECIFIC CISTOOLS.SPLIT_CHAR 
+	NOT DETERMINISTIC 
+	READS SQL DATA 
+	CALLED ON NULL INPUT 
+	PROGRAM NAME SPLIT_CHAR 
+	CONCURRENT ACCESS RESOLUTION DEFAULT 
+	SET OPTION  ALWBLK = *ALLREAD , 
+	ALWCPYDTA = *OPTIMIZE , 
+	COMMIT = *NONE , 
+	DECRESULT = (31, 31, 00) , 
+	DYNDFTCOL = *NO , 
+	DYNUSRPRF = *USER , 
+	SQLCURRULE = *STD , 
+	SRTSEQ = *HEX   
+	BEGIN 
+RETURN 
+WITH RECURSIVE CHUNKS ( IDX , START_POS , NEXT_POS ) AS ( 
+-- base case 
+SELECT * 
+FROM TABLE ( 
+VALUES ( 1 , 1 , LOCATE_IN_STRING ( 
+IN_STRING , IN_DELIMITOR , 1 ) ) 
+) X ( IDX , START_POS , NEXT_POS ) 
+UNION ALL 
+-- recursive case 
+SELECT IDX + 1 , NEXT_POS + LENGTH ( IN_DELIMITOR ) , 
+CASE 
+WHEN 
+NEXT_POS + LENGTH ( IN_DELIMITOR ) <= LENGTH ( 
+IN_STRING ) 
+THEN 
+LOCATE_IN_STRING ( 
+IN_STRING , IN_DELIMITOR , NEXT_POS + 
+LENGTH ( IN_DELIMITOR ) ) 
+ELSE 0 
+END 
+FROM CHUNKS 
+WHERE NEXT_POS > 0 
+AND NEXT_POS + LENGTH ( IN_DELIMITOR ) <= LENGTH ( 
+IN_STRING ) 
+) SELECT IDX , 
+SUBSTR ( 
+IN_STRING , START_POS , 
+CASE 
+WHEN 
+NEXT_POS = 0 
+THEN LENGTH ( IN_STRING ) - START_POS + 1 
+ELSE NEXT_POS - START_POS 
+END ) AS FRAGMENT 
+FROM CHUNKS ; 
+END  ; 
+
+GRANT ALTER , EXECUTE   
+ON SPECIFIC FUNCTION CISTOOLS.SPLIT_CHAR 
+TO AMAPICS WITH GRANT OPTION ; 
+
+GRANT EXECUTE   
+ON SPECIFIC FUNCTION CISTOOLS.SPLIT_CHAR 
+TO PUBLIC ; 
+
+
+SET PATH *LIBL ; 
+
+CREATE OR REPLACE FUNCTION CISTOOLS.SPLIT_STRING ( 
+	IN_STRING VARCHAR(32676) , 
+	IN_LEN INTEGER ) 
+	RETURNS TABLE ( 
+	ROW_NUM INTEGER , 
+	FRAGMENT VARCHAR(32676) )   
+	LANGUAGE SQL 
+	SPECIFIC CISTOOLS.SPLIT_LEN 
+	NOT DETERMINISTIC 
+	READS SQL DATA 
+	CALLED ON NULL INPUT 
+	PROGRAM NAME SPLIT_LEN 
+	CONCURRENT ACCESS RESOLUTION DEFAULT 
+	SET OPTION  ALWBLK = *ALLREAD , 
+	ALWCPYDTA = *OPTIMIZE , 
+	COMMIT = *NONE , 
+	DECRESULT = (31, 31, 00) , 
+	DYNDFTCOL = *NO , 
+	DYNUSRPRF = *USER , 
+	SQLCURRULE = *STD , 
+	SRTSEQ = *HEX   
+	BEGIN 
+RETURN SELECT RN , SUBSTR ( IN_STRING , RN , IN_LEN ) 
+FROM TABLE ( 
+CISTOOLS . ROWS_COUNTER ( LENGTH ( IN_STRING ) ) 
+) AS X 
+WHERE MOD ( ( RN - 1 ) , IN_LEN ) = 0 ; 
+END  ; 
+
+GRANT ALTER , EXECUTE   
+ON SPECIFIC FUNCTION CISTOOLS.SPLIT_LEN 
+TO AMAPICS WITH GRANT OPTION ; 
+
+GRANT EXECUTE   
+ON SPECIFIC FUNCTION CISTOOLS.SPLIT_LEN 
+TO PUBLIC ; 
+
