#include <bits/stdc++.h>
#include <chrono>
using namespace std;
using namespace chrono;
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;
// template<class T> using oset =tree<T, null_type, less_equal<T>, rb_tree_tag,tree_order_statistics_node_update>;
// Aliases to op
using ll = long long;
using ull = unsigned long long;
using ld = double;
// Constants
constexpr ll INF = 4e18;
constexpr ld EPS = 1e-9;
constexpr ll MOD = 998244353;
// Macros
#define F first
#define S second
#define all(x) begin(x), end(x)
#define allr(x) rbegin(x), rend(x)
typedef vector<int> vi;
typedef pair<int,int> pi;
// #define insert push_back
#define pb push_back
#define MP make_pair
#define endl '\n'
#define rep(i,a,b) for (int i = a; i < b; i++)
const ll mod = 998244353;
ll inv(ll i) {if (i == 1) return 1; return (mod - ((mod / i) * inv(mod % i)) % mod) % mod;}
ll mod_mul(ll a, ll b) {a = a % mod; b = b % mod; return (((a * b) % mod) + mod) % mod;}
ll mod_add(ll a, ll b) {a = a % mod; b = b % mod; return (((a + b) % mod) + mod) % mod;}
ll mod_sub(ll a, ll b) {a = a % mod; b = b % mod; return (((a - b + mod) % mod) + mod) % mod;}
ll ceil_div(ll a, ll b) {return a % b == 0 ? a / b : a / b + 1;}
ll pwr(ll a, ll b) {a %= mod; ll res = 1; while (b > 0) {if (b & 1) res = res * a % mod; a = a * a % mod; b >>= 1;} return res;}
vector<ll> sieve(int n) {int*arr = new int[n + 1](); vector<ll> vect; for (int i = 2; i <= n; i++)if (arr[i] == 0) {vect.push_back(i); for (int j = 2 * i; j <= n; j += i)arr[j] = 1;} return vect;}
template <typename T> // cin >> vector<T>
istream &operator>>(istream &istream, vector<T> &v)
{
for (auto &it : v)
cin >> it;
return istream;
}
template <typename T> // cout << vector<T>
ostream &operator<<(ostream &ostream, const vector<T> &c)
{
for (auto &it : c)
cout << it << " ";
return ostream;
}
// Mathematical functions
int GCD(int a, int b)
{
while (b)
{
a %= b;
swap(a, b);
}
return a;
}
int GCD_extended(int a, int b, int &x, int &y)
{
x = 1, y = 0;
int x1 = 0, y1 = 1, a1 = a, b1 = b;
while (b1)
{
int q = a1 / b1;
tie(x, x1) = make_tuple(x1, x - q * x1);
tie(y, y1) = make_tuple(y1, y - q * y1);
tie(a1, b1) = make_tuple(b1, a1 - q * b1);
}
return a1;
}
int LCM(int a, int b)
{
return ((ll)a * b) / GCD(a, b);
}
ll modpow(ll x, ll n, int m = MOD)
{
if (x == 0 && n == 0)
return 0; // undefined case
ll res = 1;
while (n > 0)
{
if (n % 2)
res = (res * x) % m;
x = (x * x) % m;
n /= 2;
}
return res;
}
int modinv(int x, int m = MOD)
{
return modpow(x, m - 2, m);
}
mt19937 rng;
int getRandomNumber(int l, int r)
{
uniform_int_distribution<int> dist(l, r);
return dist(rng);
}
ll binToDec(string s) { return bitset<64>(s).to_ullong(); }
string decToBin(ll a) { return bitset<64>(a).to_string(); }
ll andOperator(ll a, ll b)
{
ll shiftcount = 0;
while (a != b and a > 0)
{
shiftcount++;
a = a >> 1;
b = b >> 1;
}
return int64_t(a << shiftcount);
}
ll factorial(ll n){
if (n==0){
return 1;
}
ll ans=1;
for (ll i=1;i<=n;i++){
ans=mod_mul(ans,i);
}
return ans;
}
ll lcm(ll a,ll b){
ll g=__gcd(a,b);
return (a*b/g);
}
long long int power(int base, int exp)
{
if (exp == 0)
return 1;
else if (exp == 1)
return base;
else
{
long long int calc;
if (exp % 2 == 0)
{
calc = power(base, exp/2);
calc *= calc;
}
else
{
calc = base*power(base, exp-1);
}
return calc;
}
}
class Compare {
public:
bool operator()(pair<int,int> a, pair<int,int> b)
{
int diff=a.second-a.first;
int diff2=b.second-b.first;
if (diff == diff2) {
return a.first>b.first;
}
return diff<diff2;
}
};
bool get(ll a,ll b, ll x){
if (a<b){
swap(a,b);
}
if (x==a || x==b){
return true;
}
if (a==0 || b==0){
return false;
}
return get(a%b,b,x);
}
long long binpow(long long a, long long b, long long m) {
a %= m;
long long res = 1;
while (b > 0) {
if (b & 1)
res = res * a % m;
a = a * a % m;
b >>= 1;
}
return res;
}
ll nCr(ll n, ll r,vector<ll>&f) {
if (n<r){
return 0;
}
ll ans=f[n];
// ans=mod_mul(ans,inv(f[r]));
ans=mod_mul(ans,inv(f[n-r]));
return ans;
}
ll mysqrt(ll n){
ll ans=0;
ll low=1;
ll high=1e9;
while(low<=high){
ll md=(low+high)/2;
if (md*md<=n){
ans=md;
low=md+1;
}
else{
high=md-1;
}
}
return ans;
}
bool cmp(pair<ll, ll>& a,
pair<ll, ll>& b)
{
return a.second < b.second;
}
bool check(ll i,ll n,ll k){
ll x=i;
ll par=x/2+1;
ll st=1+(par-1)*(n/i);
ll en=st+n/i-1;
if (((en+st)/2)==k){
return true;
}
return false;
}
void solve(){
ll a,b;
ll xk ,yk ,xq, yq;
cin>>a>>b;
cin>>xk>>yk;
cin>>xq>>yq;
int count = 0;
int c = a+b;
int l =abs(abs(xq)-abs(xk));
int m =abs(abs(yq)-abs(yk));
if(l < c || m < c && l+m<c){
count=0;
}else if( l== c && m == c){
if(l/2 == a && l/2 ==b){
count =1;
}
else count=2;
}else if(l==0 && m/2 == c){
if(m%2 == 1){
count =0;
}
else count =2;
}else if(m==0 && l/2 == c){
if(l%2 == 1){
count=0;
}
else count=2;
}
else count = 2;
cout << count <<endl;
// a+b in horizontail then a+b vertical
// b+a in horizontal then b+a in vertical
//if there is queen ans++;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int T;
cin>>T;
auto start1 = high_resolution_clock::now();
while(T--){
solve();
}
// auto stop1 = high_resolution_clock::now();
// auto duration = duration_cast<microseconds>(stop1 - start1);
// cerr << "Time: " << duration . count() / 1000 << " ms" << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxjaHJvbm8+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIG5hbWVzcGFjZSBjaHJvbm87CgovLyAjaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+Ci8vICNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgovLyB1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKLy8gdGVtcGxhdGU8Y2xhc3MgVD4gdXNpbmcgb3NldCA9dHJlZTxULCBudWxsX3R5cGUsIGxlc3NfZXF1YWw8VD4sIHJiX3RyZWVfdGFnLHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47CiAKLy8gQWxpYXNlcyB0byBvcAp1c2luZyBsbCA9IGxvbmcgbG9uZzsKdXNpbmcgdWxsID0gdW5zaWduZWQgbG9uZyBsb25nOwp1c2luZyBsZCA9IGRvdWJsZTsKIAogCi8vIENvbnN0YW50cwpjb25zdGV4cHIgbGwgSU5GID0gNGUxODsKY29uc3RleHByIGxkIEVQUyA9IDFlLTk7CmNvbnN0ZXhwciBsbCBNT0QgPSA5OTgyNDQzNTM7CiAKLy8gTWFjcm9zCiNkZWZpbmUgRiBmaXJzdAojZGVmaW5lIFMgc2Vjb25kCiNkZWZpbmUgYWxsKHgpIGJlZ2luKHgpLCBlbmQoeCkKI2RlZmluZSBhbGxyKHgpIHJiZWdpbih4KSwgcmVuZCh4KQp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHBhaXI8aW50LGludD4gcGk7Ci8vICNkZWZpbmUgaW5zZXJ0IHB1c2hfYmFjawojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIE1QIG1ha2VfcGFpcgojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIHJlcChpLGEsYikgZm9yIChpbnQgaSA9IGE7IGkgPCBiOyBpKyspCiAKY29uc3QgbGwgbW9kID0gOTk4MjQ0MzUzOwogCmxsIGludihsbCBpKSB7aWYgKGkgPT0gMSkgcmV0dXJuIDE7IHJldHVybiAobW9kIC0gKChtb2QgLyBpKSAqIGludihtb2QgJSBpKSkgJSBtb2QpICUgbW9kO30KIApsbCBtb2RfbXVsKGxsIGEsIGxsIGIpIHthID0gYSAlIG1vZDsgYiA9IGIgJSBtb2Q7IHJldHVybiAoKChhICogYikgJSBtb2QpICsgbW9kKSAlIG1vZDt9CiAKbGwgbW9kX2FkZChsbCBhLCBsbCBiKSB7YSA9IGEgJSBtb2Q7IGIgPSBiICUgbW9kOyByZXR1cm4gKCgoYSArIGIpICUgbW9kKSArIG1vZCkgJSBtb2Q7fQogCmxsIG1vZF9zdWIobGwgYSwgbGwgYikge2EgPSBhICUgbW9kOyBiID0gYiAlIG1vZDsgcmV0dXJuICgoKGEgLSBiICsgbW9kKSAlIG1vZCkgKyBtb2QpICUgbW9kO30KICAKbGwgY2VpbF9kaXYobGwgYSwgbGwgYikge3JldHVybiBhICUgYiA9PSAwID8gYSAvIGIgOiBhIC8gYiArIDE7fQogCmxsIHB3cihsbCBhLCBsbCBiKSB7YSAlPSBtb2Q7IGxsIHJlcyA9IDE7IHdoaWxlIChiID4gMCkge2lmIChiICYgMSkgcmVzID0gcmVzICogYSAlIG1vZDsgYSA9IGEgKiBhICUgbW9kOyBiID4+PSAxO30gcmV0dXJuIHJlczt9CiAKdmVjdG9yPGxsPiBzaWV2ZShpbnQgbikge2ludCphcnIgPSBuZXcgaW50W24gKyAxXSgpOyB2ZWN0b3I8bGw+IHZlY3Q7IGZvciAoaW50IGkgPSAyOyBpIDw9IG47IGkrKylpZiAoYXJyW2ldID09IDApIHt2ZWN0LnB1c2hfYmFjayhpKTsgZm9yIChpbnQgaiA9IDIgKiBpOyBqIDw9IG47IGogKz0gaSlhcnJbal0gPSAxO30gcmV0dXJuIHZlY3Q7fQp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gLy8gY2luID4+IHZlY3RvcjxUPgppc3RyZWFtICZvcGVyYXRvcj4+KGlzdHJlYW0gJmlzdHJlYW0sIHZlY3RvcjxUPiAmdikKewogICAgZm9yIChhdXRvICZpdCA6IHYpCiAgICAgICAgY2luID4+IGl0OwogICAgcmV0dXJuIGlzdHJlYW07Cn0KdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IC8vIGNvdXQgPDwgdmVjdG9yPFQ+Cm9zdHJlYW0gJm9wZXJhdG9yPDwob3N0cmVhbSAmb3N0cmVhbSwgY29uc3QgdmVjdG9yPFQ+ICZjKQp7CiAgICBmb3IgKGF1dG8gJml0IDogYykKICAgICAgICBjb3V0IDw8IGl0IDw8ICIgIjsKICAgIHJldHVybiBvc3RyZWFtOwp9CiAKLy8gTWF0aGVtYXRpY2FsIGZ1bmN0aW9ucwppbnQgR0NEKGludCBhLCBpbnQgYikKewogICAgd2hpbGUgKGIpCiAgICB7CiAgICAgICAgYSAlPSBiOwogICAgICAgIHN3YXAoYSwgYik7CiAgICB9CiAgICByZXR1cm4gYTsKfQogCmludCBHQ0RfZXh0ZW5kZWQoaW50IGEsIGludCBiLCBpbnQgJngsIGludCAmeSkKewogICAgeCA9IDEsIHkgPSAwOwogICAgaW50IHgxID0gMCwgeTEgPSAxLCBhMSA9IGEsIGIxID0gYjsKICAgIHdoaWxlIChiMSkKICAgIHsKICAgICAgICBpbnQgcSA9IGExIC8gYjE7CiAgICAgICAgdGllKHgsIHgxKSA9IG1ha2VfdHVwbGUoeDEsIHggLSBxICogeDEpOwogICAgICAgIHRpZSh5LCB5MSkgPSBtYWtlX3R1cGxlKHkxLCB5IC0gcSAqIHkxKTsKICAgICAgICB0aWUoYTEsIGIxKSA9IG1ha2VfdHVwbGUoYjEsIGExIC0gcSAqIGIxKTsKICAgIH0KICAgIHJldHVybiBhMTsKfQppbnQgTENNKGludCBhLCBpbnQgYikKewogICAgcmV0dXJuICgobGwpYSAqIGIpIC8gR0NEKGEsIGIpOwp9CiAKbGwgbW9kcG93KGxsIHgsIGxsIG4sIGludCBtID0gTU9EKQp7CiAgICBpZiAoeCA9PSAwICYmIG4gPT0gMCkKICAgICAgICByZXR1cm4gMDsgLy8gdW5kZWZpbmVkIGNhc2UKICAgIGxsIHJlcyA9IDE7CiAgICB3aGlsZSAobiA+IDApCiAgICB7CiAgICAgICAgaWYgKG4gJSAyKQogICAgICAgICAgICByZXMgPSAocmVzICogeCkgJSBtOwogICAgICAgIHggPSAoeCAqIHgpICUgbTsKICAgICAgICBuIC89IDI7CiAgICB9CiAgICByZXR1cm4gcmVzOwp9CiAKaW50IG1vZGludihpbnQgeCwgaW50IG0gPSBNT0QpCnsKICAgIHJldHVybiBtb2Rwb3coeCwgbSAtIDIsIG0pOwp9CiAKbXQxOTkzNyBybmc7CmludCBnZXRSYW5kb21OdW1iZXIoaW50IGwsIGludCByKQp7CiAgICB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248aW50PiBkaXN0KGwsIHIpOwogICAgcmV0dXJuIGRpc3Qocm5nKTsKfQoKIAogCiAKbGwgYmluVG9EZWMoc3RyaW5nIHMpIHsgcmV0dXJuIGJpdHNldDw2ND4ocykudG9fdWxsb25nKCk7IH0Kc3RyaW5nIGRlY1RvQmluKGxsIGEpIHsgcmV0dXJuIGJpdHNldDw2ND4oYSkudG9fc3RyaW5nKCk7IH0KIApsbCBhbmRPcGVyYXRvcihsbCBhLCBsbCBiKQp7CiAgICBsbCBzaGlmdGNvdW50ID0gMDsKIAogICAgd2hpbGUgKGEgIT0gYiBhbmQgYSA+IDApCiAgICB7CiAgICAgICAgc2hpZnRjb3VudCsrOwogICAgICAgIGEgPSBhID4+IDE7CiAgICAgICAgYiA9IGIgPj4gMTsKICAgIH0KICAgIHJldHVybiBpbnQ2NF90KGEgPDwgc2hpZnRjb3VudCk7Cn0KbGwgZmFjdG9yaWFsKGxsIG4pewogICAgaWYgKG49PTApewogICAgICAgIHJldHVybiAxOwogICAgfQogICAgbGwgYW5zPTE7CiAgICBmb3IgKGxsIGk9MTtpPD1uO2krKyl7CiAgICAgICAgIGFucz1tb2RfbXVsKGFucyxpKTsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0KIAogCiAKbGwgbGNtKGxsIGEsbGwgYil7CiAgICBsbCBnPV9fZ2NkKGEsYik7CiAgICByZXR1cm4gKGEqYi9nKTsKfQogCiAKbG9uZyBsb25nIGludCBwb3dlcihpbnQgYmFzZSwgaW50IGV4cCkKewogICAgaWYgKGV4cCA9PSAwKQogICAgICAgcmV0dXJuIDE7CiAgICBlbHNlIGlmIChleHAgPT0gMSkKICAgICAgIHJldHVybiBiYXNlOwogICAgZWxzZQogICAgewogICAgICAgbG9uZyBsb25nIGludCBjYWxjOwogICAgICAgaWYgKGV4cCAlIDIgPT0gMCkKICAgICAgIHsKICAgICAgICAgY2FsYyA9IHBvd2VyKGJhc2UsIGV4cC8yKTsKICAgICAgICAgY2FsYyAqPSBjYWxjOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewogICAgICAgICBjYWxjID0gYmFzZSpwb3dlcihiYXNlLCBleHAtMSk7CiAgICAgICB9CiAgICAgICByZXR1cm4gY2FsYzsKICAgIH0KfQpjbGFzcyBDb21wYXJlIHsKcHVibGljOgogICAgYm9vbCBvcGVyYXRvcigpKHBhaXI8aW50LGludD4gYSwgcGFpcjxpbnQsaW50PiBiKQogICAgewogICAgICAgIGludCBkaWZmPWEuc2Vjb25kLWEuZmlyc3Q7CiAgICAgICAgaW50IGRpZmYyPWIuc2Vjb25kLWIuZmlyc3Q7CiAKICAgICAgICBpZiAoZGlmZiA9PSBkaWZmMikgewogICAgICAgICAgICByZXR1cm4gYS5maXJzdD5iLmZpcnN0OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAKIAogICAgICAgIHJldHVybiBkaWZmPGRpZmYyOwogICAgICAgIH0KfTsKIApib29sIGdldChsbCBhLGxsIGIsIGxsIHgpewogICAgaWYgKGE8Yil7CiAgICAgICAgc3dhcChhLGIpOwogICAgfQogICAgaWYgKHg9PWEgfHwgeD09Yil7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoYT09MCB8fCBiPT0wKXsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gZ2V0KGElYixiLHgpOwp9CiAKIApsb25nIGxvbmcgYmlucG93KGxvbmcgbG9uZyBhLCBsb25nIGxvbmcgYiwgbG9uZyBsb25nIG0pIHsKICAgIGEgJT0gbTsKICAgIGxvbmcgbG9uZyByZXMgPSAxOwogICAgd2hpbGUgKGIgPiAwKSB7CiAgICAgICAgaWYgKGIgJiAxKQogICAgICAgICAgICByZXMgPSByZXMgKiBhICUgbTsKICAgICAgICBhID0gYSAqIGEgJSBtOwogICAgICAgIGIgPj49IDE7CiAgICB9CiAgICByZXR1cm4gcmVzOwp9CiAKCiAKbGwgbkNyKGxsIG4sIGxsIHIsdmVjdG9yPGxsPiZmKSB7CiAgICBpZiAobjxyKXsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIGxsIGFucz1mW25dOwogICAgLy8gYW5zPW1vZF9tdWwoYW5zLGludihmW3JdKSk7CiAgICBhbnM9bW9kX211bChhbnMsaW52KGZbbi1yXSkpOwogICAgcmV0dXJuIGFuczsKfQogCiAKbGwgbXlzcXJ0KGxsIG4pewogICAgbGwgYW5zPTA7CiAgICBsbCBsb3c9MTsKICAgIGxsIGhpZ2g9MWU5OwogICAgd2hpbGUobG93PD1oaWdoKXsKICAgICAgICBsbCBtZD0obG93K2hpZ2gpLzI7CiAgICAgICAgaWYgKG1kKm1kPD1uKXsKICAgICAgICAgICAgYW5zPW1kOwogICAgICAgICAgICBsb3c9bWQrMTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgaGlnaD1tZC0xOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBhbnM7Cn0KIAoKCmJvb2wgY21wKHBhaXI8bGwsIGxsPiYgYSwKICAgICAgICAgcGFpcjxsbCwgbGw+JiBiKQp7CiAgICByZXR1cm4gYS5zZWNvbmQgPCBiLnNlY29uZDsKfSAKCgoKYm9vbCBjaGVjayhsbCBpLGxsIG4sbGwgayl7CiAgICBsbCB4PWk7CiAgIGxsIHBhcj14LzIrMTsKICAgbGwgc3Q9MSsocGFyLTEpKihuL2kpOwogICBsbCBlbj1zdCtuL2ktMTsKICAgaWYgKCgoZW4rc3QpLzIpPT1rKXsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgfQogICByZXR1cm4gZmFsc2U7Cgp9Cgp2b2lkIHNvbHZlKCl7CiAgICBsbCBhLGI7CiAgICBsbCB4ayAseWsgLHhxLCB5cTsKICAgIGNpbj4+YT4+YjsKICAgIGNpbj4+eGs+PnlrOwogICAgY2luPj54cT4+eXE7CgogICAgaW50IGNvdW50ID0gMDsKICAgIGludCBjID0gYStiOwogICAgaW50IGwgPWFicyhhYnMoeHEpLWFicyh4aykpOwogICAgaW50IG0gPWFicyhhYnMoeXEpLWFicyh5aykpOwoKCiAgICBpZihsIDwgYyB8fCBtIDwgYyAmJiBsK208Yyl7CiAgICAgICAgY291bnQ9MDsKICAgIH1lbHNlIGlmKCBsPT0gYyAmJiBtID09IGMpewogICAgICAgIGlmKGwvMiA9PSBhICYmIGwvMiA9PWIpewogICAgICAgICAgICBjb3VudCA9MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBjb3VudD0yOwogICAgfWVsc2UgaWYobD09MCAmJiBtLzIgPT0gYyl7CiAgICAgICAgaWYobSUyID09IDEpewogICAgICAgICAgICBjb3VudCA9MDsKICAgICAgICB9CiAgICAgICAgZWxzZSBjb3VudCA9MjsKICAgIH1lbHNlIGlmKG09PTAgJiYgbC8yID09IGMpewogICAgICAgIGlmKGwlMiA9PSAxKXsKICAgICAgICAgICAgY291bnQ9MDsKICAgICAgICB9CiAgICAgICAgZWxzZSBjb3VudD0yOwogICAgfQogICAgZWxzZSBjb3VudCA9IDI7CiAgICBjb3V0IDw8IGNvdW50IDw8ZW5kbDsKCiAgICAvLyBhK2IgaW4gaG9yaXpvbnRhaWwgdGhlbiBhK2IgdmVydGljYWwKICAgIC8vIGIrYSBpbiBob3Jpem9udGFsIHRoZW4gYithIGluIHZlcnRpY2FsIAoKICAgIC8vaWYgdGhlcmUgaXMgcXVlZW4gYW5zKys7CgoKfSAKIAogICAgCiAKaW50IG1haW4oKXsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogICAgaW50IFQ7CiAgICBjaW4+PlQ7CiAgICBhdXRvIHN0YXJ0MSA9IGhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6bm93KCk7CiAgICB3aGlsZShULS0pewogICAgICAgIHNvbHZlKCk7CiAgICB9CiAgICAvLyBhdXRvIHN0b3AxID0gaGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKTsKICAgIC8vIGF1dG8gZHVyYXRpb24gPSBkdXJhdGlvbl9jYXN0PG1pY3Jvc2Vjb25kcz4oc3RvcDEgLSBzdGFydDEpOwogICAgLy8gY2VyciA8PCAiVGltZTogIiA8PCBkdXJhdGlvbiAuIGNvdW50KCkgLyAxMDAwIDw8ICIgbXMiIDw8IGVuZGw7CiAKICAgIHJldHVybiAwOwp9