#include<bits/stdc++.h>
using namespace std;
vector <long long int> tree,a,lazy;
void build_tree(long long int node,long long int s,long long int e)
{
if(s==e)
{
tree[node]=a[s];
}
else
{
long long int m=(s+e)/2;
build_tree(node*2,s,m);
build_tree(node*2+1,m+1,e);
tree[node]=tree[node*2]+tree[node*2+1];
}
}
void update_tree(long long int node,long long int s,long long int e,long long int l,long long int r,long long int v)
{
if(s==e)
{
tree[node]+=v;
return;
}
else if(s>r||e<l||s>e)
return;
else
{
long long int m=(s+e)/2;
update_tree(node*2,s,m,l,r,v);
update_tree(node*2+1,m+1,e,l,r,v);
//tree[node]=tree[node*2]+tree[node*2+1];
tree[node]+=v*(min(e,r)-max(s,l)+1);
//node*2 and node*2+1 are yet to be fully computed
}
}
long long int query_tree(long long int node,long long int s,long long int e,long long int l,long long int r)
{
if(r<s||e<l||s>e)
return 0;
if(l<=s&&e<=r)
return tree[node];
else
{
long long int m,p1,p2;
m=(s+e)/2;
p1=query_tree(node*2,s,m,l,r);
p2=query_tree(node*2+1,m+1,e,l,r);
return p1+p2;
}
}
int main()
{
ios_base :: sync_with_stdio(false);
cin.tie(NULL);
long long int t;
cin>>t;
while(t--)
{
long long int n,q;
cin>>n>>q;
a.resize(n,0);
tree.resize(4*n+1,0);
//lazy.resize(4*n,0);
build_tree(1,0,n-1);
while(q--)
{
long long int x;
cin>>x;
if(x==0)
{
long long int l,r,v;
cin>>l>>r>>v;
update_tree(1,0,n-1,l-1,r-1,v);
}
else
{
long long int l,r;
cin>>l>>r;
long long int res;
res=query_tree(1,0,n-1,l-1,r-1);
cout<<res<<"\n";
}
}
a.clear();
tree.clear();
//lazy.clear();
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdmVjdG9yIDxsb25nIGxvbmcgaW50PiB0cmVlLGEsbGF6eTsKCnZvaWQgYnVpbGRfdHJlZShsb25nIGxvbmcgaW50IG5vZGUsbG9uZyBsb25nIGludCBzLGxvbmcgbG9uZyBpbnQgZSkKewogICAgaWYocz09ZSkKICAgIHsKICAgICAgICB0cmVlW25vZGVdPWFbc107CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgbG9uZyBsb25nIGludCBtPShzK2UpLzI7CiAgICAgICAgYnVpbGRfdHJlZShub2RlKjIscyxtKTsKICAgICAgICBidWlsZF90cmVlKG5vZGUqMisxLG0rMSxlKTsKICAgICAgICB0cmVlW25vZGVdPXRyZWVbbm9kZSoyXSt0cmVlW25vZGUqMisxXTsKICAgIH0KfQoKdm9pZCB1cGRhdGVfdHJlZShsb25nIGxvbmcgaW50IG5vZGUsbG9uZyBsb25nIGludCBzLGxvbmcgbG9uZyBpbnQgZSxsb25nIGxvbmcgaW50IGwsbG9uZyBsb25nIGludCByLGxvbmcgbG9uZyBpbnQgdikKewogICAgaWYocz09ZSkKICAgIHsKICAgICAgICB0cmVlW25vZGVdKz12OwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGVsc2UgaWYocz5yfHxlPGx8fHM+ZSkKICAgICAgICByZXR1cm47CiAgICBlbHNlCiAgICB7CiAgICAgICAgbG9uZyBsb25nIGludCBtPShzK2UpLzI7CiAgICAgICAgdXBkYXRlX3RyZWUobm9kZSoyLHMsbSxsLHIsdik7CiAgICAgICAgdXBkYXRlX3RyZWUobm9kZSoyKzEsbSsxLGUsbCxyLHYpOwogICAgICAgIC8vdHJlZVtub2RlXT10cmVlW25vZGUqMl0rdHJlZVtub2RlKjIrMV07IAogICAgICAgIHRyZWVbbm9kZV0rPXYqKG1pbihlLHIpLW1heChzLGwpKzEpOwogICAgICAgIC8vbm9kZSoyIGFuZCBub2RlKjIrMSBhcmUgeWV0IHRvIGJlIGZ1bGx5IGNvbXB1dGVkCiAgICB9Cn0KCmxvbmcgbG9uZyBpbnQgcXVlcnlfdHJlZShsb25nIGxvbmcgaW50IG5vZGUsbG9uZyBsb25nIGludCBzLGxvbmcgbG9uZyBpbnQgZSxsb25nIGxvbmcgaW50IGwsbG9uZyBsb25nIGludCByKQp7CiAgICBpZihyPHN8fGU8bHx8cz5lKQogICAgICAgIHJldHVybiAwOwogICAgaWYobDw9cyYmZTw9cikKICAgICAgICByZXR1cm4gdHJlZVtub2RlXTsKICAgIGVsc2UKICAgIHsKICAgICAgICBsb25nIGxvbmcgaW50IG0scDEscDI7CiAgICAgICAgbT0ocytlKS8yOwogICAgICAgIHAxPXF1ZXJ5X3RyZWUobm9kZSoyLHMsbSxsLHIpOwogICAgICAgIHAyPXF1ZXJ5X3RyZWUobm9kZSoyKzEsbSsxLGUsbCxyKTsKICAgICAgICByZXR1cm4gcDErcDI7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgaW9zX2Jhc2UgOjogc3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICBsb25nIGxvbmcgaW50IHQ7CiAgICBjaW4+PnQ7CiAgICB3aGlsZSh0LS0pCiAgICB7CiAgICAgICAgbG9uZyBsb25nIGludCBuLHE7CiAgICAgICAgY2luPj5uPj5xOwogICAgICAgIGEucmVzaXplKG4sMCk7CiAgICAgICAgdHJlZS5yZXNpemUoNCpuKzEsMCk7CiAgICAgICAgLy9sYXp5LnJlc2l6ZSg0Km4sMCk7CiAgICAgICAgYnVpbGRfdHJlZSgxLDAsbi0xKTsKICAgICAgICB3aGlsZShxLS0pCiAgICAgICAgewogICAgICAgICAgICBsb25nIGxvbmcgaW50IHg7CiAgICAgICAgICAgIGNpbj4+eDsKICAgICAgICAgICAgaWYoeD09MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCBsLHIsdjsKICAgICAgICAgICAgICAgIGNpbj4+bD4+cj4+djsKICAgICAgICAgICAgICAgIHVwZGF0ZV90cmVlKDEsMCxuLTEsbC0xLHItMSx2KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBpbnQgbCxyOwogICAgICAgICAgICAgICAgY2luPj5sPj5yOwogICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCByZXM7CiAgICAgICAgICAgICAgICByZXM9cXVlcnlfdHJlZSgxLDAsbi0xLGwtMSxyLTEpOwogICAgICAgICAgICAgICAgY291dDw8cmVzPDwiXG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGEuY2xlYXIoKTsKICAgICAgICB0cmVlLmNsZWFyKCk7CiAgICAgICAgLy9sYXp5LmNsZWFyKCk7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=