#version 310 es
precision mediump float;

struct strided_arr {
  vec2 el;
};

struct SSBO {
  strided_arr m[2];
};

layout(binding = 0, std430) buffer SSBO_1 {
  strided_arr m[2];
} ssbo;
mat2 arr_to_mat2x2_stride_16(strided_arr arr[2]) {
  return mat2(arr[0u].el, arr[1u].el);
}

strided_arr[2] mat2x2_stride_16_to_arr(mat2 mat) {
  strided_arr tint_symbol = strided_arr(mat[0u]);
  strided_arr tint_symbol_1 = strided_arr(mat[1u]);
  strided_arr tint_symbol_2[2] = strided_arr[2](tint_symbol, tint_symbol_1);
  return tint_symbol_2;
}

void f_1() {
  mat2 x_15 = arr_to_mat2x2_stride_16(ssbo.m);
  ssbo.m = mat2x2_stride_16_to_arr(x_15);
  return;
}

void f() {
  f_1();
}

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
  f();
  return;
}
