recurProcess all srcContours epsi right_slice count         
        |le_eps == True && new_right_slice == [-1, -1] = recurProcess (All (getFinalContours all) (tail crrntStck)) srcContours epsi right_slice count
        |le_eps == True                                = recurProcess (All (writePt (getFinalContours all) new_start_pt) crrntStck) srcContours epsi new_right_slice count
        |otherwise                                     = recurProcess (All (getFinalContours all) (pushSlice last_slice (pushSlice last_right_slice crrntStck))) srcContours epsi last_right_slice count
        where
                slice             = head (getStack all)
                crrntStck         = tail (getStack all) 
                end_pt            = srcContours !! (last slice)
                pos               = head slice
                start_pt          = srcContours !! pos
                recuFunc          = recursiveFunc all srcContours epsi slice right_slice start_pt end_pt (addSafePos pos count) count
                new_start_pt      = myfst recuFunc
                le_eps            = mysnd recuFunc
                new_right_slice   = trd recuFunc      
                last_right_slice  = changeSecondValue new_right_slice (last slice)
                last_slice        = changeSecondValue slice (head new_right_slice)                         
recurProcess all srcContours epsi right_slice count         
        |le_eps == True && new_right_slice == [-1, -1] = recurProcess (All (getFinalContours all) (tail crrntStck)) srcContours epsi right_slice count
        |le_eps == True                                = recurProcess (All (writePt (getFinalContours all) new_start_pt) crrntStck) srcContours epsi new_right_slice count
        |otherwise                                     = recurProcess (All (getFinalContours all) (pushSlice last_slice (pushSlice last_right_slice crrntStck))) srcContours epsi last_right_slice count
        where
                slice             = head (getStack all)
                crrntStck         = tail (getStack all) 
                end_pt            = srcContours !! (last slice)
                pos               = head slice
                start_pt          = srcContours !! pos
                recuFunc          = recursiveFunc all srcContours epsi slice right_slice start_pt end_pt (addSafePos pos count) count
                new_start_pt      = myfst recuFunc
                le_eps            = mysnd recuFunc
                new_right_slice   = trd recuFunc      
                last_right_slice  = changeSecondValue new_right_slice (last slice)
                last_slice        = changeSecondValue slice (head new_right_slice)                         
recurProcess all srcContours epsi right_slice count         
        |le_eps == True && new_right_slice == [-1, -1] = recurProcess (All (getFinalContours all) (tail crrntStck)) srcContours epsi right_slice count
        |le_eps == True                                = recurProcess (All (writePt (getFinalContours all) new_start_pt) crrntStck) srcContours epsi new_right_slice count
        |otherwise                                     = recurProcess (All (getFinalContours all) (pushSlice last_slice (pushSlice last_right_slice crrntStck))) srcContours epsi last_right_slice count
        where
                slice             = head (getStack all)
                crrntStck         = tail (getStack all) 
                end_pt            = srcContours !! (last slice)
                pos               = head slice
                start_pt          = srcContours !! pos
                recuFunc          = recursiveFunc all srcContours epsi slice right_slice start_pt end_pt (addSafePos pos count) count
                new_start_pt      = myfst recuFunc
                le_eps            = mysnd recuFunc
                new_right_slice   = trd recuFunc      
                last_right_slice  = changeSecondValue new_right_slice (last slice)
                last_slice        = changeSecondValue slice (head new_right_slice)                         