Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from ) id 1jI7JE-0007NG-7d for pgsql-hackers@arkaria.postgresql.org; Sat, 28 Mar 2020 08:59:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1jI7JD-0008Hj-00 for pgsql-hackers@arkaria.postgresql.org; Sat, 28 Mar 2020 08:59:15 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1jI7JC-0008Hb-DC for pgsql-hackers@lists.postgresql.org; Sat, 28 Mar 2020 08:59:14 +0000 Received: from sender4-op-o13.zoho.com ([136.143.188.13]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from ) id 1jI7J8-0007O8-TN for pgsql-hackers@lists.postgresql.org; Sat, 28 Mar 2020 08:59:13 +0000 ARC-Seal: i=1; a=rsa-sha256; t=1585385948; cv=none; d=zohomail.com; s=zohoarc; b=AKUyYxiiuAPuGNrLeTtEJ1t1AaPF+y8nBLN+BR8/dKmPL4E/rBfxHlpy5xbfL+5leB4fNYRhpzdm87/+QKVp8sY017X/ge+dMd2aQ4W5g4lPdgtp6pirG1+Bw5DU7GzMso+RUsla6FezceChL/7PjPcDXeWjBUZ4lPYnG4sldFc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1585385948; h=Content-Type:Cc:Date:From:MIME-Version:Message-ID:References:Subject:To; bh=8L9aGfhFx4vg2oLPmOFejp63PLNrn5bNohMXLm5vAe0=; b=ZXBh2M0VDjgyX8uDEF6p18RaWkRsr9LTxKEhfi999ZnVpXRYVwwYnrbubqoJMjLj6pV+PsAIqymPhYnjjn4YjI3oxVYUc9/2a2SvlvrmT319GSZdZGjngTluLHbF060x8tLEyiUYzRoXOmeLdWspXShHp3AjuAs0ZXBvv3UoyFc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=highgo.ca; spf=pass smtp.mailfrom=movead.li@highgo.ca; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1585385948; s=zoho; d=highgo.ca; i=movead.li@highgo.ca; h=Date:From:To:Cc:Subject:References:Mime-Version:Message-ID:Content-Type; bh=8L9aGfhFx4vg2oLPmOFejp63PLNrn5bNohMXLm5vAe0=; b=IIcoM5x2yP7MdIW47Q2XqJmbbY9bSKxAgqBtZ8+vy5aCW1dM6XmFn6AKcEzFsytJ r88qXN22pfOGcxwoyMUwMYOrO+WObUOoYcoQTpNrwLpW27PLJP25FTzrawDK86PK3ba xCDib1boh6wd21ndxtp0o5BLllcv2TBNCH8rXP0g= Received: from USER-20191109OA (112.229.109.42 [112.229.109.42]) by mx.zohomail.com with SMTPS id 1585385947268286.52470663173983; Sat, 28 Mar 2020 01:59:07 -0700 (PDT) Date: Sat, 28 Mar 2020 16:59:01 +0800 From: "movead.li@highgo.ca" To: ashutosh.bapat Cc: pgsql-hackers Subject: Re: A bug when use get_bit() function for a long bytea string References: <20200312115135445367128@highgo.ca>, , <20200313111842791351178@highgo.ca>, , <2020031810480643107833@highgo.ca>, X-Priority: 3 X-GUID: 003DF23B-470E-429A-997B-A5F724506F7B X-Has-Attach: yes X-Mailer: Foxmail 7.2.15.80[cn] Mime-Version: 1.0 Message-ID: <2020032816585865712320@highgo.ca> Content-Type: multipart/mixed; boundary="----=_001_NextPart828111743244_=----" X-Zoho-Virus-Status: 2 X-ZohoMailClient: External List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. ------=_001_NextPart828111743244_=---- Content-Type: multipart/alternative; boundary="----=_002_NextPart277268212558_=----" ------=_002_NextPart277268212558_=---- Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 PkkgdGhpbmsgdGhlIHNlY29uZCBhcmd1bWVudCBpbmRpY2F0ZXMgdGhlIGJpdCBwb3NpdGlvbiwg d2hpY2ggd291bGQgYmUgbWF4IGJ5dGVhIGxlbmd0aCAqIDguIElmIG1heCBieXRlYSBsZW5ndGgg Y292ZXJzIHdob2xlIGludDMyLCB0aGUgc2Vjb25kIGFyZ3VtZW50ID5uZWVkcyB0byBiZSB3aWRl ciBpLmUuIGludDY0Lg0KWWVzLCBpdCBtYWtlcyBzZW5jZSBhbmQgZm9sbG93ZWQuDQoNCj5JIHRo aW5rIHdlIG5lZWQgYSBzaW1pbGFyIGNoYW5nZSBpbiBieXRlYUdldEJpdCgpIGFuZCBieXRlYVNl dEJpdCgpIGFzIHdlbGwuDQpTb3JyeSwgSSB0aGluayBpdCdzIG15IG1pc3Rha2UsIGl0IGlzIHRo ZSB0d28gZnVuY3Rpb25zIGFib3ZlIHNob3VsZCBiZSBjaGFuZ2VkLg0KDQoNCj4gU29tZSBtb3Jl IGNvbW1lbnRzIG9uIHRoZSBwYXRjaA0KPiBzdHJ1Y3QgcGdfZW5jb2RpbmcNCj4gew0KPi0gdW5z aWduZWQgKCplbmNvZGVfbGVuKSAoY29uc3QgY2hhciAqZGF0YSwgdW5zaWduZWQgZGxlbik7DQo+ KyBpbnQ2NCAoKmVuY29kZV9sZW4pIChjb25zdCBjaGFyICpkYXRhLCB1bnNpZ25lZCBkbGVuKTsN Cj4gIHVuc2lnbmVkICgqZGVjb2RlX2xlbikgKGNvbnN0IGNoYXIgKmRhdGEsIHVuc2lnbmVkIGRs ZW4pOw0KPiAgdW5zaWduZWQgKCplbmNvZGUpIChjb25zdCBjaGFyICpkYXRhLCB1bnNpZ25lZCBk bGVuLCBjaGFyICpyZXMpOw0KPiAgdW5zaWduZWQgKCpkZWNvZGUpIChjb25zdCBjaGFyICpkYXRh LCB1bnNpZ25lZCBkbGVuLCBjaGFyICpyZXMpOw0KPiBXaHkgbm90IHVzZSByZXR1cm4gdHlwZSBv ZiBpbnQ2NCBmb3IgcmVzdCBvZiB0aGUgZnVuY3Rpb25zIGhlcmUgYXMgd2VsbD8NCj4gIHJlcyA9 IGVuYy0+ZW5jb2RlKFZBUkRBVEFfQU5ZKGRhdGEpLCBkYXRhbGVuLCBWQVJEQVRBKHJlc3VsdCkp Ow0KPiAgLyogTWFrZSB0aGlzIEZBVEFMICdjYXVzZSB3ZSd2ZSB0cm9kZGVuIG9uIG1lbW9yeSAu Li4gKi8NCj4tIGlmIChyZXMgPiByZXN1bHRsZW4pDQo+KyBpZiAoKGludDY0KXJlcyA+IHJlc3Vs dGxlbikNCj4NCj5pZiB3ZSBjaGFuZ2UgcmV0dXJuIHR5cGUgb2YgYWxsIHRob3NlIGZ1bmN0aW9u cyB0byBpbnQ2NCwgd2Ugd29uJ3QgbmVlZCB0aGlzIGNhc3QuDQpJIGNoYW5nZSB0aGUgJ2VuY29k ZScgZnVuY3Rpb24sIGl0IG5lZWRzIGFuIGludDY0IHJldHVybiB0eXBlLCBidXQga2VlcCBvdGhl ciANCmZ1bmN0aW9ucyBpbiAncGdfZW5jb2RpbmcnLCBiZWNhdXNlIEkgdGhpbmsgaXQgb2Ygbm8g bmVjZXNzYXJ5IHJlYXNvbi4NCg0KPk9rLCBsZXQncyBsZWF2ZSBpdCBmb3IgYSBjb21taXR0ZXIg dG8gZGVjaWRlLiANCldlbGwsIEkgY2hhbmdlIGFsbCBvZiB0aGVtIHRoaXMgdGltZSwgYmVjYXVz ZSBUb20gTGFuZSBzdXBwb3J0cyBvbiBuZXh0IG1haWwuDQoNCiANCj5Tb21lIG1vcmUgcmV2aWV3 IGNvbW1lbnRzLg0KPisgICBpbnQ2NCAgICAgICByZXMscmVzdWx0bGVuOw0KRG9uZQ0KDQo+V2Ug bmVlZCB0aG9zZSBvbiBzZXBhcmF0ZSBsaW5lcywgcG9zc2libHkuDQo+KyAgIGJ5dGVObyA9IChp bnQzMikobiAvIEJJVFNfUEVSX0JZVEUpOw0KPkRvZXMgaXQgaHVydCB0byBoYXZlIGJ5dGVObyBh cyBpbnQ2NCBzbyBhcyB0byBhdm9pZCBhIGNhc3QuIE90aGVyd2lzZSwgcGxlYXNlDQo+YWRkIGEg Y29tbWVudCBleHBsYWluaW5nIHRoZSByZWFzb24gZm9yIHRoZSBjYXN0LiBUaGUgY29tbWVudCBh cHBsaWVzIGF0IG90aGVyDQo+cGxhY2VzIHdoZXJlIHRoaXMgY2hhbmdlIGFwcGVhcnMuDQo+LSAg ICAgICBpbnQgICAgICAgICBsZW47DQo+KyAgICAgICBpbnQ2NCAgICAgICBsZW47DQo+V2h5IGRv IHdlIG5lZWQgdGhpcyBjaGFuZ2U/DQo+ICAgICAgICBpbnQgICAgICAgICBpOw0KSXQgaXMgbXkg bWlzdGFrZSBhcyBkZXNjcmliZSBhYm92ZSwgaXQgc2hvdWxkIG5vdCBiZSAnYml0Z2V0Yml0KCkv Yml0c2V0Yml0KCknICB0byBiZSBjaGFuZ2VkLg0KDQoNCg0KPkl0IG1pZ2h0IGhlbHAgdG8gYWRk IGEgdGVzdCB3aGVyZSB3ZSBjb3VsZCBwYXNzIHRoZSBzZWNvbmQgYXJndW1lbnQgc29tZXRoaW5n DQo+Z3JlYXRlciB0aGFuIDFHLiBCdXQgaXQgbWF5IGJlIGRpZmZpY3VsdCB0byB3cml0ZSBzdWNo IGEgdGVzdCBjYXNlLg0KQWRkIHR3byB0ZXN0IGNhc2VzLg0KIA0KPisNCj4rc2VsZWN0IGdldF9i aXQoDQo+KyAgICAgICAgc2V0X2JpdCgocmVwZWF0KCdQb3N0Z3JlcycsIDUxMiAqIDEwMjQgKiAx MDI0IC8gOCkpOjpieXRlYSwgMTAyNCAqIDEwMjQgKiAxMDI0ICsgMSwgMCkNCj4rICAgICAgICwx MDI0ICogMTAyNCAqIDEwMjQgKyAxKTsNCg0KPlRoaXMgYml0IHBvc2l0aW9uIGlzIHN0aWxsIHdp dGhpbiBpbnQ0Lg0KPnBvc3RncmVzPSMgc2VsZWN0IHBnX2NvbHVtbl9zaXplKDEwMjQgKiAxMDI0 ICogMTAyNCArIDEpOyANCj4gcGdfY29sdW1uX3NpemUNCj4tLS0tLS0tLS0tLS0tLS0tDQo+ICAg ICAgICAgICAgICA0ICAgDQo+KDEgcm93KQ0KDQo+WW91IHdhbnQgc29tZXRoaW5nIGxpa2UNCj5w b3N0Z3Jlcz0jIHNlbGVjdCBwZ19jb2x1bW5fc2l6ZSg1MTI6OmJpZ2ludCAqIDEwMjQgKiAxMDI0 ICogOCk7IA0KPiBwZ19jb2x1bW5fc2l6ZQ0KPi0tLS0tLS0tLS0tLS0tLS0NCj4gICAgICAgICAg ICAgIDggICANCj4oMSByb3cpDQpJIGludGVuZCB0byB0ZXN0IHNpemUgbGFyZ2UgdGhlbiAxRywg YW5kIG5vdyBJIHRoaW5rIHlvdSBnaXZlIGEgYmV0dGVyIGlkZWEgYW5kIGZvbGxvd2VkLg0KDQoN Cg0KDQpIaWdoZ28gU29mdHdhcmUgKENhbmFkYS9DaGluYS9QYWtpc3RhbikgDQpVUkwgOiB3d3cu aGlnaGdvLmNhIA0KRU1BSUw6IG1haWx0bzptb3ZlYWQoZG90KWxpKGF0KWhpZ2hnbyhkb3QpY2EN Cg0K ------=_002_NextPart277268212558_=---- Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable =0A
=
>I t= hink the second argument indicates the bit position, which would be max by= tea length * 8. If max bytea length covers whole int32, the second argumen= t >needs to be wider i.e. int64.
Yes, it makes sence a= nd followed.

>I think we need a similar change in byteaGetBit() and byt= eaSetBit() as well.
Sorry, I think it's my mistake, it is the tw= o functions above should be changed.


> Some more comments on the patch
> struct pg_encoding
> {
>- unsigned (*en= code_len) (const char *data, unsigned dlen);
>+ int64 (*encode_len)= (const char *data, unsigned dlen);
>  unsigned (*deco= de_len) (const char *data, unsigned dlen);
> =  unsigned (*encode) (const char *data, unsigned dlen, char *res);
>  unsigned (*decode) (const char *data, unsigned dl= en, char *res);
> Why not use return type of int64 for rest of the f= unctions here as well?
>  res =3D enc->encode(VARDATA_ANY(da= ta), datalen, VARDATA(result));
>  /* Make this FATAL 'cause we= 've trodden on memory ... */
>- if (res > resultlen)
>+ if = ((int64)res > resultlen)
>
>if we change return type of all= those functions to int64, we won't need this cast.
I change the '= encode' function, it needs an int64 return type, but keep other 
functions in 'pg_encodin= g', because I think it of no necessary reason.

>Ok, let's leave it for a committer to decide. 
Well,= I change all of them this time, because Tom Lane supports on next mail.

 
>Some more review comment= s.
>+   int64       res,resultlen;
Don= e

>We need those on separate lines, possibly.
>+   by= teNo =3D (int32)(n / BITS_PER_BYTE);
>Does it hurt to have byteNo as= int64 so as to avoid a cast. Otherwise, please
>add a comment expla= ining the reason for the cast. The comment applies at other
>places = where this change appears.
>-       int    =     len;
>+       int64     &nbs= p; len;
>Why do we need this change?
>       &n= bsp;int         i;
It is my mistake as= describe above, it should not be 'bitgetbit()/bitsetbit()'  to be changed.



>It might help to add a test where we c= ould pass the second argument something
>greater than 1G. But it may= be difficult to write such a test case.
Add two test = cases.
 
>= ;+
>+select get_bit(
>+        set_bit((re= peat('Postgres', 512 * 1024 * 1024 / 8))::bytea, 1024 * 1024 * 1024 + 1, 0= )
>+       ,1024 * 1024 * 1024 + 1);

>This = bit position is still within int4.
>postgres=3D# select pg_column_si= ze(1024 * 1024 * 1024 + 1);
> pg_column_size
>----------= ------
>              4   >(1 row)

>You want something like
>postgres=3D# selec= t pg_column_size(512::bigint * 1024 * 1024 * 8);
> pg_column_s= ize
>----------------
>          &nbs= p;   8  
>(1 row)
I intend to test size large t= hen 1G, and now I think you give a better idea and followed.


Highgo Software (Canada/China/Pakistan)
URL : www.highgo.ca
= EMAIL: mailto:movead(dot)li(at)highgo(dot)ca

=0A=0A ------=_002_NextPart277268212558_=------ ------=_001_NextPart828111743244_=---- Content-Type: application/octet-stream; name="long_bytea_string_bug_fix_ver4.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="long_bytea_string_bug_fix_ver4.patch" ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9lbmNvZGUuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9lbmNvZGUuYwppbmRleCA3MjkzZDY2ZGU1Li5jYTkwOTkyZDM5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZW5jb2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2VuY29kZS5jCkBAIC0yMCwxMCArMjAsMTAgQEAKIAogc3RydWN0IHBnX2VuY29kaW5n CiB7Ci0JdW5zaWduZWQJKCplbmNvZGVfbGVuKSAoY29uc3QgY2hhciAqZGF0YSwgdW5zaWduZWQg ZGxlbik7Ci0JdW5zaWduZWQJKCpkZWNvZGVfbGVuKSAoY29uc3QgY2hhciAqZGF0YSwgdW5zaWdu ZWQgZGxlbik7Ci0JdW5zaWduZWQJKCplbmNvZGUpIChjb25zdCBjaGFyICpkYXRhLCB1bnNpZ25l ZCBkbGVuLCBjaGFyICpyZXMpOwotCXVuc2lnbmVkCSgqZGVjb2RlKSAoY29uc3QgY2hhciAqZGF0 YSwgdW5zaWduZWQgZGxlbiwgY2hhciAqcmVzKTsKKwlpbnQ2NAkJKCplbmNvZGVfbGVuKSAoY29u c3QgY2hhciAqZGF0YSwgdW5zaWduZWQgZGxlbik7CisJaW50NjQJCSgqZGVjb2RlX2xlbikgKGNv bnN0IGNoYXIgKmRhdGEsIHVuc2lnbmVkIGRsZW4pOworCWludDY0CQkoKmVuY29kZSkgKGNvbnN0 IGNoYXIgKmRhdGEsIHVuc2lnbmVkIGRsZW4sIGNoYXIgKnJlcyk7CisJaW50NjQJCSgqZGVjb2Rl KSAoY29uc3QgY2hhciAqZGF0YSwgdW5zaWduZWQgZGxlbiwgY2hhciAqcmVzKTsKIH07CiAKIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgcGdfZW5jb2RpbmcgKnBnX2ZpbmRfZW5jb2RpbmcoY29uc3QgY2hh ciAqbmFtZSk7CkBAIC0zOSw5ICszOSw4IEBAIGJpbmFyeV9lbmNvZGUoUEdfRlVOQ1RJT05fQVJH UykKIAlEYXR1bQkJbmFtZSA9IFBHX0dFVEFSR19EQVRVTSgxKTsKIAl0ZXh0CSAgICpyZXN1bHQ7 CiAJY2hhcgkgICAqbmFtZWJ1ZjsKLQlpbnQJCQlkYXRhbGVuLAotCQkJCXJlc3VsdGxlbiwKLQkJ CQlyZXM7CisJaW50CQkJZGF0YWxlbjsKKwlpbnQ2NAkJcmVzLHJlc3VsdGxlbjsKIAljb25zdCBz dHJ1Y3QgcGdfZW5jb2RpbmcgKmVuYzsKIAogCWRhdGFsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUihk YXRhKTsKQEAgLTc1LDkgKzc0LDggQEAgYmluYXJ5X2RlY29kZShQR19GVU5DVElPTl9BUkdTKQog CURhdHVtCQluYW1lID0gUEdfR0VUQVJHX0RBVFVNKDEpOwogCWJ5dGVhCSAgICpyZXN1bHQ7CiAJ Y2hhcgkgICAqbmFtZWJ1ZjsKLQlpbnQJCQlkYXRhbGVuLAotCQkJCXJlc3VsdGxlbiwKLQkJCQly ZXM7CisJaW50CQkJZGF0YWxlbjsKKwlpbnQ2NAkJcmVzdWx0bGVuLCByZXM7CiAJY29uc3Qgc3Ry dWN0IHBnX2VuY29kaW5nICplbmM7CiAKIAlkYXRhbGVuID0gVkFSU0laRV9BTllfRVhIRFIoZGF0 YSk7CkBAIC0xMjIsNyArMTIwLDcgQEAgc3RhdGljIGNvbnN0IGludDggaGV4bG9va3VwWzEyOF0g PSB7CiAJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsCiB9OwogCi11bnNpZ25lZAoraW50NjQKIGhleF9lbmNvZGUoY29uc3QgY2hh ciAqc3JjLCB1bnNpZ25lZCBsZW4sIGNoYXIgKmRzdCkKIHsKIAljb25zdCBjaGFyICplbmQgPSBz cmMgKyBsZW47CkBAIC0xMzMsNyArMTMxLDcgQEAgaGV4X2VuY29kZShjb25zdCBjaGFyICpzcmMs IHVuc2lnbmVkIGxlbiwgY2hhciAqZHN0KQogCQkqZHN0KysgPSBoZXh0YmxbKnNyYyAmIDB4Rl07 CiAJCXNyYysrOwogCX0KLQlyZXR1cm4gbGVuICogMjsKKwlyZXR1cm4gKGludDY0KWxlbiAqIDI7 CiB9CiAKIHN0YXRpYyBpbmxpbmUgY2hhcgpAQCAtMTUyLDcgKzE1MCw3IEBAIGdldF9oZXgoY2hh ciBjKQogCXJldHVybiAoY2hhcikgcmVzOwogfQogCi11bnNpZ25lZAoraW50NjQKIGhleF9kZWNv ZGUoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBsZW4sIGNoYXIgKmRzdCkKIHsKIAljb25zdCBj aGFyICpzLApAQCAtMTg0LDE2ICsxODIsMTYgQEAgaGV4X2RlY29kZShjb25zdCBjaGFyICpzcmMs IHVuc2lnbmVkIGxlbiwgY2hhciAqZHN0KQogCXJldHVybiBwIC0gZHN0OwogfQogCi1zdGF0aWMg dW5zaWduZWQKK3N0YXRpYyBpbnQ2NAogaGV4X2VuY19sZW4oY29uc3QgY2hhciAqc3JjLCB1bnNp Z25lZCBzcmNsZW4pCiB7Ci0JcmV0dXJuIHNyY2xlbiA8PCAxOworCXJldHVybiAoaW50NjQpc3Jj bGVuIDw8IDE7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZAorc3RhdGljIGludDY0CiBoZXhfZGVjX2xl bihjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIHNyY2xlbikKIHsKLQlyZXR1cm4gc3JjbGVuID4+ IDE7CisJcmV0dXJuIChpbnQ2NClzcmNsZW4gPj4gMTsKIH0KIAogLyoKQEAgLTIxNCw3ICsyMTIs NyBAQCBzdGF0aWMgY29uc3QgaW50OCBiNjRsb29rdXBbMTI4XSA9IHsKIAk0MSwgNDIsIDQzLCA0 NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKIH07CiAK LXN0YXRpYyB1bnNpZ25lZAorc3RhdGljIGludDY0CiBwZ19iYXNlNjRfZW5jb2RlKGNvbnN0IGNo YXIgKnNyYywgdW5zaWduZWQgbGVuLCBjaGFyICpkc3QpCiB7CiAJY2hhcgkgICAqcCwKQEAgLTI2 MSw3ICsyNTksNyBAQCBwZ19iYXNlNjRfZW5jb2RlKGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQg bGVuLCBjaGFyICpkc3QpCiAJcmV0dXJuIHAgLSBkc3Q7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZAor c3RhdGljIGludDY0CiBwZ19iYXNlNjRfZGVjb2RlKGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQg bGVuLCBjaGFyICpkc3QpCiB7CiAJY29uc3QgY2hhciAqc3JjZW5kID0gc3JjICsgbGVuLApAQCAt MzMxLDE3ICszMjksMTcgQEAgcGdfYmFzZTY0X2RlY29kZShjb25zdCBjaGFyICpzcmMsIHVuc2ln bmVkIGxlbiwgY2hhciAqZHN0KQogfQogCiAKLXN0YXRpYyB1bnNpZ25lZAorc3RhdGljIGludDY0 CiBwZ19iYXNlNjRfZW5jX2xlbihjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIHNyY2xlbikKIHsK IAkvKiAzIGJ5dGVzIHdpbGwgYmUgY29udmVydGVkIHRvIDQsIGxpbmVmZWVkIGFmdGVyIDc2IGNo YXJzICovCi0JcmV0dXJuIChzcmNsZW4gKyAyKSAqIDQgLyAzICsgc3JjbGVuIC8gKDc2ICogMyAv IDQpOworCXJldHVybiAoKGludDY0KXNyY2xlbiArIDIpICogNCAvIDMgKyAoaW50NjQpc3JjbGVu IC8gKDc2ICogMyAvIDQpOwogfQogCi1zdGF0aWMgdW5zaWduZWQKK3N0YXRpYyBpbnQ2NAogcGdf YmFzZTY0X2RlY19sZW4oY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBzcmNsZW4pCiB7Ci0JcmV0 dXJuIChzcmNsZW4gKiAzKSA+PiAyOworCXJldHVybiAoKGludDY0KXNyY2xlbiAqIDMpID4+IDI7 CiB9CiAKIC8qCkBAIC0zNjEsMTIgKzM1OSwxMiBAQCBwZ19iYXNlNjRfZGVjX2xlbihjb25zdCBj aGFyICpzcmMsIHVuc2lnbmVkIHNyY2xlbikKICNkZWZpbmUgVkFMKENIKQkJCSgoQ0gpIC0gJzAn KQogI2RlZmluZSBESUcoVkFMKQkJKChWQUwpICsgJzAnKQogCi1zdGF0aWMgdW5zaWduZWQKK3N0 YXRpYyBpbnQ2NAogZXNjX2VuY29kZShjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIHNyY2xlbiwg Y2hhciAqZHN0KQogewogCWNvbnN0IGNoYXIgKmVuZCA9IHNyYyArIHNyY2xlbjsKIAljaGFyCSAg ICpycCA9IGRzdDsKLQlpbnQJCQlsZW4gPSAwOworCWludDY0CQlsZW4gPSAwOwogCiAJd2hpbGUg KHNyYyA8IGVuZCkKIAl7CkBAIC00MDAsMTIgKzM5OCwxMiBAQCBlc2NfZW5jb2RlKGNvbnN0IGNo YXIgKnNyYywgdW5zaWduZWQgc3JjbGVuLCBjaGFyICpkc3QpCiAJcmV0dXJuIGxlbjsKIH0KIAot c3RhdGljIHVuc2lnbmVkCitzdGF0aWMgaW50NjQKIGVzY19kZWNvZGUoY29uc3QgY2hhciAqc3Jj LCB1bnNpZ25lZCBzcmNsZW4sIGNoYXIgKmRzdCkKIHsKIAljb25zdCBjaGFyICplbmQgPSBzcmMg KyBzcmNsZW47CiAJY2hhcgkgICAqcnAgPSBkc3Q7Ci0JaW50CQkJbGVuID0gMDsKKwlpbnQ2NAkJ bGVuID0gMDsKIAogCXdoaWxlIChzcmMgPCBlbmQpCiAJewpAQCAtNDQ4LDExICs0NDYsMTEgQEAg ZXNjX2RlY29kZShjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIHNyY2xlbiwgY2hhciAqZHN0KQog CXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyB1bnNpZ25lZAorc3RhdGljIGludDY0CiBlc2NfZW5j X2xlbihjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIHNyY2xlbikKIHsKIAljb25zdCBjaGFyICpl bmQgPSBzcmMgKyBzcmNsZW47Ci0JaW50CQkJbGVuID0gMDsKKwlpbnQ2NAkJbGVuID0gMDsKIAog CXdoaWxlIChzcmMgPCBlbmQpCiAJewpAQCAtNDY5LDExICs0NjcsMTEgQEAgZXNjX2VuY19sZW4o Y29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBzcmNsZW4pCiAJcmV0dXJuIGxlbjsKIH0KIAotc3Rh dGljIHVuc2lnbmVkCitzdGF0aWMgaW50NjQKIGVzY19kZWNfbGVuKGNvbnN0IGNoYXIgKnNyYywg dW5zaWduZWQgc3JjbGVuKQogewogCWNvbnN0IGNoYXIgKmVuZCA9IHNyYyArIHNyY2xlbjsKLQlp bnQJCQlsZW4gPSAwOworCWludDY0CQlsZW4gPSAwOwogCiAJd2hpbGUgKHNyYyA8IGVuZCkKIAl7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3ZhcmxlbmEuYwppbmRleCAxNTg3YjRlZDAyLi5hYjZlZTI4YTQ0IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC92YXJsZW5hLmMKQEAgLTM4OCw3ICszODgsNyBAQCBieXRlYW91dChQR19GVU5D VElPTl9BUkdTKQogCXsKIAkJLyogUHJpbnQgdHJhZGl0aW9uYWwgZXNjYXBlZCBmb3JtYXQgKi8K IAkJY2hhcgkgICAqdnA7Ci0JCWludAkJCWxlbjsKKwkJaW50NjQJCWxlbjsKIAkJaW50CQkJaTsK IAogCQlsZW4gPSAxOwkJCQkvKiBlbXB0eSBzdHJpbmcgaGFzIDEgY2hhciAqLwpAQCAtMzQzNSw3 ICszNDM1LDcgQEAgRGF0dW0KIGJ5dGVhR2V0Qml0KFBHX0ZVTkNUSU9OX0FSR1MpCiB7CiAJYnl0 ZWEJICAgKnYgPSBQR19HRVRBUkdfQllURUFfUFAoMCk7Ci0JaW50MzIJCW4gPSBQR19HRVRBUkdf SU5UMzIoMSk7CisJaW50NjQJCW4gPSBQR19HRVRBUkdfSU5UNjQoMSk7CiAJaW50CQkJYnl0ZU5v LAogCQkJCWJpdE5vOwogCWludAkJCWxlbjsKQEAgLTM0NDMsMTQgKzM0NDMsMTQgQEAgYnl0ZWFH ZXRCaXQoUEdfRlVOQ1RJT05fQVJHUykKIAogCWxlbiA9IFZBUlNJWkVfQU5ZX0VYSERSKHYpOwog Ci0JaWYgKG4gPCAwIHx8IG4gPj0gbGVuICogOCkKKwlpZiAobiA8IDAgfHwgbiA+PSAoaW50NjQp bGVuICogOCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0FSUkFZX1NV QlNDUklQVF9FUlJPUiksCi0JCQkJIGVycm1zZygiaW5kZXggJWQgb3V0IG9mIHZhbGlkIHJhbmdl LCAwLi4lZCIsCi0JCQkJCQluLCBsZW4gKiA4IC0gMSkpKTsKKwkJCQkgZXJybXNnKCJpbmRleCAi SU5UNjRfRk9STUFUIiBvdXQgb2YgdmFsaWQgcmFuZ2UsIDAuLiJJTlQ2NF9GT1JNQVQsCisJCQkJ CQluLCAoaW50NjQpbGVuICogOCAtIDEpKSk7CiAKLQlieXRlTm8gPSBuIC8gODsKLQliaXRObyA9 IG4gJSA4OworCWJ5dGVObyA9IChpbnQpKG4gLyA4KTsKKwliaXRObyA9IChpbnQpKG4gJSA4KTsK IAogCWJ5dGUgPSAoKHVuc2lnbmVkIGNoYXIgKikgVkFSREFUQV9BTlkodikpW2J5dGVOb107CiAK QEAgLTM1MDQsNyArMzUwNCw3IEBAIERhdHVtCiBieXRlYVNldEJpdChQR19GVU5DVElPTl9BUkdT KQogewogCWJ5dGVhCSAgICpyZXMgPSBQR19HRVRBUkdfQllURUFfUF9DT1BZKDApOwotCWludDMy CQluID0gUEdfR0VUQVJHX0lOVDMyKDEpOworCWludDY0CQluID0gUEdfR0VUQVJHX0lOVDY0KDEp OwogCWludDMyCQluZXdCaXQgPSBQR19HRVRBUkdfSU5UMzIoMik7CiAJaW50CQkJbGVuOwogCWlu dAkJCW9sZEJ5dGUsCkBAIC0zNTE0LDE0ICszNTE0LDE0IEBAIGJ5dGVhU2V0Qml0KFBHX0ZVTkNU SU9OX0FSR1MpCiAKIAlsZW4gPSBWQVJTSVpFKHJlcykgLSBWQVJIRFJTWjsKIAotCWlmIChuIDwg MCB8fCBuID49IGxlbiAqIDgpCisJaWYgKG4gPCAwIHx8IG4gPj0gKGludDY0KWxlbiAqIDgpCiAJ CWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9BUlJBWV9TVUJTQ1JJUFRfRVJS T1IpLAotCQkJCSBlcnJtc2coImluZGV4ICVkIG91dCBvZiB2YWxpZCByYW5nZSwgMC4uJWQiLAot CQkJCQkJbiwgbGVuICogOCAtIDEpKSk7CisJCQkJIGVycm1zZygiaW5kZXggIklOVDY0X0ZPUk1B VCIgb3V0IG9mIHZhbGlkIHJhbmdlLCAwLi4iSU5UNjRfRk9STUFULAorCQkJCQkJbiwgKGludDY0 KWxlbiAqIDggLSAxKSkpOwogCi0JYnl0ZU5vID0gbiAvIDg7Ci0JYml0Tm8gPSBuICUgODsKKwli eXRlTm8gPSAoaW50NjQpKG4gLyA4KTsKKwliaXRObyA9IChpbnQ2NCkobiAlIDgpOwogCiAJLyoK IAkgKiBzYW5pdHkgY2hlY2shCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBkMzUyZjlhMTBh Li5iOTYyMWRlODhkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTEzODgsMTAgKzEzODgs MTAgQEAKICAgcHJvbmFtZSA9PiAnc2V0X2J5dGUnLCBwcm9yZXR0eXBlID0+ICdieXRlYScsCiAg IHByb2FyZ3R5cGVzID0+ICdieXRlYSBpbnQ0IGludDQnLCBwcm9zcmMgPT4gJ2J5dGVhU2V0Qnl0 ZScgfSwKIHsgb2lkID0+ICc3MjMnLCBkZXNjciA9PiAnZ2V0IGJpdCcsCi0gIHByb25hbWUgPT4g J2dldF9iaXQnLCBwcm9yZXR0eXBlID0+ICdpbnQ0JywgcHJvYXJndHlwZXMgPT4gJ2J5dGVhIGlu dDQnLAorICBwcm9uYW1lID0+ICdnZXRfYml0JywgcHJvcmV0dHlwZSA9PiAnaW50NCcsIHByb2Fy Z3R5cGVzID0+ICdieXRlYSBpbnQ4JywKICAgcHJvc3JjID0+ICdieXRlYUdldEJpdCcgfSwKIHsg b2lkID0+ICc3MjQnLCBkZXNjciA9PiAnc2V0IGJpdCcsCi0gIHByb25hbWUgPT4gJ3NldF9iaXQn LCBwcm9yZXR0eXBlID0+ICdieXRlYScsIHByb2FyZ3R5cGVzID0+ICdieXRlYSBpbnQ0IGludDQn LAorICBwcm9uYW1lID0+ICdzZXRfYml0JywgcHJvcmV0dHlwZSA9PiAnYnl0ZWEnLCBwcm9hcmd0 eXBlcyA9PiAnYnl0ZWEgaW50OCBpbnQ0JywKICAgcHJvc3JjID0+ICdieXRlYVNldEJpdCcgfSwK IHsgb2lkID0+ICc3NDknLCBkZXNjciA9PiAnc3Vic3RpdHV0ZSBwb3J0aW9uIG9mIHN0cmluZycs CiAgIHByb25hbWUgPT4gJ292ZXJsYXknLCBwcm9yZXR0eXBlID0+ICdieXRlYScsCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVp bHRpbnMuaAppbmRleCBhM2NkN2QyNmZhLi43MTM1Y2Q4OTk0IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS91dGlscy9idWlsdGlucy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgK QEAgLTMwLDggKzMwLDggQEAgZXh0ZXJuIGludAllcnJkYXRhdHlwZShPaWQgZGF0YXR5cGVPaWQp OwogZXh0ZXJuIGludAllcnJkb21haW5jb25zdHJhaW50KE9pZCBkYXRhdHlwZU9pZCwgY29uc3Qg Y2hhciAqY29ubmFtZSk7CiAKIC8qIGVuY29kZS5jICovCi1leHRlcm4gdW5zaWduZWQgaGV4X2Vu Y29kZShjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGxlbiwgY2hhciAqZHN0KTsKLWV4dGVybiB1 bnNpZ25lZCBoZXhfZGVjb2RlKGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgbGVuLCBjaGFyICpk c3QpOworZXh0ZXJuIGludDY0IGhleF9lbmNvZGUoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBs ZW4sIGNoYXIgKmRzdCk7CitleHRlcm4gaW50NjQgaGV4X2RlY29kZShjb25zdCBjaGFyICpzcmMs IHVuc2lnbmVkIGxlbiwgY2hhciAqZHN0KTsKIAogLyogaW50LmMgKi8KIGV4dGVybiBpbnQydmVj dG9yICpidWlsZGludDJ2ZWN0b3IoY29uc3QgaW50MTYgKmludDJzLCBpbnQgbik7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2JpdC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2JpdC5vdXQKaW5kZXggYTFmYWI3ZWJjYi4uOGU1NjI4OTk2OCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9iaXQub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvYml0Lm91dApAQCAtNjU2LDYgKzY1Niw0MCBAQCBTRUxFQ1Qgc2V0X2JpdChC JzAxMDEwMTEwMDAxMDAxMDAnLCAxNSwgMSk7CiAKIFNFTEVDVCBzZXRfYml0KEInMDEwMTAxMTAw MDEwMDEwMCcsIDE2LCAxKTsJLS0gZmFpbAogRVJST1I6ICBiaXQgaW5kZXggMTYgb3V0IG9mIHZh bGlkIHJhbmdlICgwLi4xNSkKK1NFTEVDVCBnZXRfYml0KAorICAgICAgIHNldF9iaXQoKHJlcGVh dCgnUG9zdGdyZXMnLCA1MTIgKiAxMDI0ICogMTAyNCAvIDgpKTo6Ynl0ZWEsIDAsIDApCisgICAg ICAgLDApOworIGdldF9iaXQgCistLS0tLS0tLS0KKyAgICAgICAwCisoMSByb3cpCisKK1NFTEVD VCBnZXRfYml0KAorICAgICAgIHNldF9iaXQoKHJlcGVhdCgnUG9zdGdyZXMnLCA1MTIgKiAxMDI0 ICogMTAyNCAvIDgpKTo6Ynl0ZWEsIDAsIDEpCisgICAgICAgLDApOworIGdldF9iaXQgCistLS0t LS0tLS0KKyAgICAgICAxCisoMSByb3cpCisKK3NlbGVjdCBnZXRfYml0KAorICAgICAgICBzZXRf Yml0KChyZXBlYXQoJ1Bvc3RncmVzJywgNTEyICogMTAyNCAqIDEwMjQgLyA4KSk6OmJ5dGVhLCAK KyAgICAgICAgICAgICAgICA1MTI6OmJpZ2ludCAqIDEwMjQgKiAxMDI0ICogOCAtIDEsIDApCisg ICAgICAgICw1MTI6OmJpZ2ludCAqIDEwMjQgKiAxMDI0ICogOCAtIDEpOworIGdldF9iaXQgCist LS0tLS0tLS0KKyAgICAgICAwCisoMSByb3cpCisKK3NlbGVjdCBnZXRfYml0KAorICAgICAgICBz ZXRfYml0KChyZXBlYXQoJ1Bvc3RncmVzJywgNTEyICogMTAyNCAqIDEwMjQgLyA4KSk6OmJ5dGVh LAorICAgICAgICAgICAgICAgIDUxMjo6YmlnaW50ICogMTAyNCAqIDEwMjQgKiA4IC0gMSwgMSkK KyAgICAgICAsNTEyOjpiaWdpbnQgKiAxMDI0ICogMTAyNCAqIDggLSAxKTsKKyBnZXRfYml0IAor LS0tLS0tLS0tCisgICAgICAgMQorKDEgcm93KQorCiAtLSBPdmVybGF5CiBTRUxFQ1Qgb3Zlcmxh eShCJzAxMDEwMTExMDAnIHBsYWNpbmcgJzAwMScgZnJvbSAyIGZvciAzKTsKICAgb3ZlcmxheSAg IApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYml0LnNxbCBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2JpdC5zcWwKaW5kZXggNzY4MWQ0YWI0ZC4uNTkxNDA5NTk0MSAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYml0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9iaXQuc3FsCkBAIC0yMDAsNiArMjAwLDIxIEBAIERST1AgVEFCTEUgVkFSQklUX1NISUZUX1RB QkxFOwogU0VMRUNUIGdldF9iaXQoQicwMTAxMDExMDAwMTAwJywgMTApOwogU0VMRUNUIHNldF9i aXQoQicwMTAxMDExMDAwMTAwMTAwJywgMTUsIDEpOwogU0VMRUNUIHNldF9iaXQoQicwMTAxMDEx MDAwMTAwMTAwJywgMTYsIDEpOwktLSBmYWlsCitTRUxFQ1QgZ2V0X2JpdCgKKyAgICAgICBzZXRf Yml0KChyZXBlYXQoJ1Bvc3RncmVzJywgNTEyICogMTAyNCAqIDEwMjQgLyA4KSk6OmJ5dGVhLCAw LCAwKQorICAgICAgICwwKTsKK1NFTEVDVCBnZXRfYml0KAorICAgICAgIHNldF9iaXQoKHJlcGVh dCgnUG9zdGdyZXMnLCA1MTIgKiAxMDI0ICogMTAyNCAvIDgpKTo6Ynl0ZWEsIDAsIDEpCisgICAg ICAgLDApOworc2VsZWN0IGdldF9iaXQoCisgICAgICAgIHNldF9iaXQoKHJlcGVhdCgnUG9zdGdy ZXMnLCA1MTIgKiAxMDI0ICogMTAyNCAvIDgpKTo6Ynl0ZWEsIAorICAgICAgICAgICAgICAgIDUx Mjo6YmlnaW50ICogMTAyNCAqIDEwMjQgKiA4IC0gMSwgMCkKKyAgICAgICAgLDUxMjo6YmlnaW50 ICogMTAyNCAqIDEwMjQgKiA4IC0gMSk7CitzZWxlY3QgZ2V0X2JpdCgKKyAgICAgICAgc2V0X2Jp dCgocmVwZWF0KCdQb3N0Z3JlcycsIDUxMiAqIDEwMjQgKiAxMDI0IC8gOCkpOjpieXRlYSwKKyAg ICAgICAgICAgICAgICA1MTI6OmJpZ2ludCAqIDEwMjQgKiAxMDI0ICogOCAtIDEsIDEpCisgICAg ICAgLDUxMjo6YmlnaW50ICogMTAyNCAqIDEwMjQgKiA4IC0gMSk7CisKIAogLS0gT3ZlcmxheQog U0VMRUNUIG92ZXJsYXkoQicwMTAxMDExMTAwJyBwbGFjaW5nICcwMDEnIGZyb20gMiBmb3IgMyk7 Cg== ------=_001_NextPart828111743244_=------