pub fn b32_validation(ptr_input:*const u8,len_input:usize,size_input:usize,ptr_alphabet:*const u8,max_pads:usize,bitmask_pads:u8,rem_len:usize,min_len:usize,max_len:usize)->B32DecodeError{
if len_input<min_len {return B32DecodeError::InvalidLength;}
if max_len>min_len && len_input>max_len{return B32DecodeError::InvalidLength;}
if len_input==0 {return B32DecodeError::Null;}
if len_input%rem_len!=0 {return B32DecodeError::InvalidLength;}
let mut index=len_input as isize;
#[allow(unused_parens)]
unsafe{while({index-=1;index>0&&(*ptr_input.offset(index)==61)}){}}
let len_pads=len_input-1-index as usize;
if len_pads>max_pads {return B32DecodeError::InvalidPadding;}
if ((len_input-len_pads)*5/8)%size_input!=0{return B32DecodeError::InvalidPadding;}
if ((bitmask_pads>>len_pads)&0b1)==0 {return B32DecodeError::InvalidPadding;}
unsafe{while index!=0{
if *ptr_alphabet.offset(*ptr_input.offset(index) as isize)==255{
return B32DecodeError::InvalidByte;
}
index-=1;
}}
return B32DecodeError::Null;
}