るるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるる
