#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const long long N = 1e5 + 5;
const long long INF = 0x3f3f3f3f;
const double PI = acos(-1);
long long n, a[N], m;
inline long long ls(long long pos) { return pos << 1; }
inline long long rs(long long pos) { return pos << 1 | 1; }
struct segment_tree {
  long long sum[N << 2], lazy[N << 2];
  inline void push_up(long long pos) { sum[pos] = sum[ls(pos)] + sum[rs(pos)]; }
  inline void push_down(long long pos, long long l, long long r) {
    if (!lazy[pos]) return;
    long long mid = (l + r) >> 1;
    sum[ls(pos)] = (mid - l + 1) - sum[ls(pos)];
    sum[rs(pos)] = (r - mid) - sum[rs(pos)];
    lazy[ls(pos)] ^= lazy[pos];
    lazy[rs(pos)] ^= lazy[pos];
    lazy[pos] = 0;
    return;
  }
  inline void update(long long pos, long long l, long long r, long long L,
                     long long R, long long val) {
    if (val == 0) return;
    if (L <= l && r <= R) {
      sum[pos] = (r - l + 1) - sum[pos];
      lazy[pos] ^= 1;
      return;
    }
    long long mid = (l + r) >> 1;
    push_down(pos, l, r);
    if (L <= mid) update(ls(pos), l, mid, L, R, val);
    if (R > mid) update(rs(pos), mid + 1, r, L, R, val);
    push_up(pos);
    return;
  }
  inline long long query(long long pos, long long l, long long r, long long L,
                         long long R) {
    if (L <= l && r <= R) return sum[pos];
    long long mid = (l + r) >> 1, ans = 0;
    push_down(pos, l, r);
    if (L <= mid) ans += query(ls(pos), l, mid, L, R);
    if (R > mid) ans += query(rs(pos), mid + 1, r, L, R);
    return ans;
  }
} tr[25];
inline void add(long long x, long long l, long long r) {
  for (long long now = 24; now >= 0; now--)
    tr[now].update(1, 1, n, l, r, (x >> now) & 1);
  return;
}
inline long long ask(long long l, long long r) {
  long long ans = 0;
  for (long long now = 24; now >= 0; now--)
    ans += tr[now].query(1, 1, n, l, r) * (1 << now);
  return ans;
}
signed main() {
  cin >> n;
  long long xx;
  for (long long i = 1; i <= n; i++) cin >> xx, add(xx, i, i);
  cin >> m;
  while (m--) {
    long long opt, l, r;
    cin >> opt;
    if (opt == 1) {
      cin >> l >> r;
      cout << ask(l, r) << endl;
    } else {
      long long l, r, x;
      cin >> l >> r >> x;
      add(x, l, r);
    }
  }
}
