From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12462 invoked by alias); 16 Dec 2009 04:25:46 -0000 Received: (qmail 12269 invoked by uid 22791); 16 Dec 2009 04:25:31 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-bw0-f219.google.com (HELO mail-bw0-f219.google.com) (209.85.218.219) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 16 Dec 2009 04:25:19 +0000 Received: by bwz19 with SMTP id 19so511481bwz.8 for ; Tue, 15 Dec 2009 20:25:15 -0800 (PST) MIME-Version: 1.0 Received: by 10.204.34.209 with SMTP id m17mr248920bkd.34.1260937515370; Tue, 15 Dec 2009 20:25:15 -0800 (PST) In-Reply-To: <4a00655d0912150931q4b34fd24p94594ed08857254f@mail.gmail.com> References: <4a00655d0908201247g7d7bd9a1t466f4a66f08df4@mail.gmail.com> <4a00655d0911291536t5a11752fp27ab9c274148f822@mail.gmail.com> <4a00655d0911291538y9f29830v984d1a796fdd5d1@mail.gmail.com> <4a00655d0912131549w19638273nb51d723e9ddd9273@mail.gmail.com> <87d42ggnsv.wl%bjg@network-theory.co.uk> <4a00655d0912150931q4b34fd24p94594ed08857254f@mail.gmail.com> From: Rhys Ulerich Date: Wed, 16 Dec 2009 04:25:00 -0000 Message-ID: <4a00655d0912152024j627e936bm70bca745dcacfca@mail.gmail.com> Subject: Re: Where a generalized Richardson extrapolation routine would fit in GSL? To: Brian Gough Cc: gsl-discuss@sourceware.org Content-Type: multipart/mixed; boundary=00032555992eb00b21047ad0e467 Mailing-List: contact gsl-discuss-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gsl-discuss-owner@sourceware.org X-SW-Source: 2009-q4/txt/msg00064.txt.bz2 --00032555992eb00b21047ad0e467 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 629 > ... I can submit an additional patch that 1) Renames > gsl_extrap_richardson to something like gsl_extrap_richardson_vector, > 2) Provides =A0a scalar-only gsl_extrap_richardson that wraps up scalars > and calls the gsl_extrap_richardson_vector routines under the covers, > and 3) Exercises the scalar-only wrappers fully in the test suite. > That way if someone later does need a faster scalar-only version, he > or she can change over the underlying implementation without fear of > regression. Attached is a second patch that does exactly what I described above. It bu= ilds atop the prior patch from this thread. - Rhys --00032555992eb00b21047ad0e467 Content-Type: text/x-patch; charset=US-ASCII; name="0001-Created-scalar-version-of-Richardson-extrapolation.patch" Content-Disposition: attachment; filename="0001-Created-scalar-version-of-Richardson-extrapolation.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g39lkyku0 Content-length: 92566 RnJvbSAwZTZkMzQ2MGQ1Y2FjNjc3N2E5NDBiMDdhNWYyOTI4OGYyYWRkYWIx IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBSaHlzIFVsZXJpY2gg PHJoeXMudWxlcmljaEBnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMTUgRGVjIDIw MDkgMjI6MjE6MjggLTA2MDAKU3ViamVjdDogW1BBVENIXSBDcmVhdGVkIHNj YWxhci12ZXJzaW9uIG9mIFJpY2hhcmRzb24gZXh0cmFwb2xhdGlvbgoKUmVu YW1lcyBnc2xfZXh0cmFwX3JpY2hhcmRzb24gdG8gZ3NsX2V4dHJhcF9yaWNo YXJkc29uX3ZlY3RvciwKUHJvdmlkZXMgIGEgc2NhbGFyLW9ubHkgZ3NsX2V4 dHJhcF9yaWNoYXJkc29uIHRoYXQgd3JhcHMgc2NhbGFycwogICBhbmQgY2Fs bHMgZ3NsX2V4dHJhcF9yaWNoYXJkc29uX3ZlY3RvciB1bmRlciB0aGUgY292 ZXJzLApFeGVyY2lzZXMgdGhlIHNjYWxhci1vbmx5IHdyYXBwZXJzIGZ1bGx5 IGluIHRoZSB0ZXN0IHN1aXRlLApEb2N1bWVudHMgdGhlIG5ldyBzY2FsYXIt b25seSBtZXRob2RzLCBhbmQKVXBkYXRlcyB0aGUgZXhhbXBsZSBjb2RlLgot LS0KIGRvYy9leGFtcGxlcy9yaWNoYXJkc29uLmMgICB8ICAgNDEgKy0KIGRv Yy9leGFtcGxlcy9yaWNoYXJkc29uLm91dCB8ICAgIDQgKy0KIGRvYy9zdW0u dGV4aSAgICAgICAgICAgICAgICB8ICAgNzIgKystCiBleHRyYXAvQ2hhbmdl TG9nICAgICAgICAgICAgfCAgICA0ICsKIGV4dHJhcC9kZW1vX3JpY2hhcmRz b24uYyAgICB8ICAgNDEgKy0KIGV4dHJhcC9nc2xfZXh0cmFwLmggICAgICAg ICB8ICAgMjggKy0KIGV4dHJhcC9yaWNoYXJkc29uLmMgICAgICAgICB8ICAg NjQgKystCiBleHRyYXAvdGVzdF9yaWNoYXJkc29uLmMgICAgfCAxMzA0ICsr KysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KIDgg ZmlsZXMgY2hhbmdlZCwgMTAyNCBpbnNlcnRpb25zKCspLCA1MzQgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL2V4YW1wbGVzL3JpY2hhcmRzb24u YyBiL2RvYy9leGFtcGxlcy9yaWNoYXJkc29uLmMKaW5kZXggY2FhNzZiYy4u YTk0Mjk5OSAxMDA2NDQKLS0tIGEvZG9jL2V4YW1wbGVzL3JpY2hhcmRzb24u YworKysgYi9kb2MvZXhhbXBsZXMvcmljaGFyZHNvbi5jCkBAIC0xOSw0MiAr MTksMzQgQEAgbWFpbiAodm9pZCkKIHsKICAgcHJpbnRmKCJcblBlcmZvcm1p bmcgYSBzaW5nbGUgUmljaGFyZHNvbiBleHRyYXBvbGF0aW9uIHN0ZXAuLi5c biIpOwogICB7Ci0gICAgZ3NsX3ZlY3RvciAqQWggID0gZ3NsX3ZlY3Rvcl9h bGxvYygxKTsKLSAgICBnc2xfdmVjdG9yICpBaHQgPSBnc2xfdmVjdG9yX2Fs bG9jKDEpOwotCi0gICAgZ3NsX3ZlY3Rvcl9zZXQoQWgsICAwLCBlc3RpbWF0 ZShoKSk7Ci0gICAgZ3NsX3ZlY3Rvcl9zZXQoQWh0LCAwLCBlc3RpbWF0ZSho IC8gdCkpOworICAgIGRvdWJsZSBBaCAgICAgICAgPSBlc3RpbWF0ZShoKTsK KyAgICBjb25zdCBkb3VibGUgQWh0ID0gZXN0aW1hdGUoaCAvIHQpOwogCiAg ICAgcHJpbnRmKCJFeGFjdCB2YWx1ZSBmb3IgKGQvZHgpIHNpbiglNGYpID0g ICUxNC4xMmZcbiIsIHgsIGNvcyh4KSk7CiAgICAgcHJpbnRmKCJBcHByb3hp bWF0ZSB2YWx1ZSBmb3IgaCAgID0gJTRmIGlzICUxNC4xMmYgd2l0aCBlcnJv ciAlMTRlXG4iLAotICAgICAgICAgICBoLCBnc2xfdmVjdG9yX2dldChBaCwg MCksIGZhYnMoY29zKHgpIC0gZ3NsX3ZlY3Rvcl9nZXQoQWgsIDApKSk7Cisg ICAgICAgICAgIGgsIEFoLCBmYWJzKGNvcyh4KSAtIEFoKSk7CiAgICAgcHJp bnRmKCJBcHByb3hpbWF0ZSB2YWx1ZSBmb3IgaC90ID0gJTRmIGlzICUxNC4x MmYgd2l0aCBlcnJvciAlMTRlXG4iLAotICAgICAgICAgICBoIC8gdCwgZ3Ns X3ZlY3Rvcl9nZXQoQWh0LCAwKSwgZmFicyhjb3MoeCkgLSBnc2xfdmVjdG9y X2dldChBaHQsIDApKSk7CisgICAgICAgICAgIGggLyB0LCBBaHQsIGZhYnMo Y29zKHgpIC0gQWh0KSk7CiAKLSAgICBnc2xfZXh0cmFwX3JpY2hhcmRzb25f c3RlcChBaCwgQWh0LCB0LCAyLjApOworICAgIGdzbF9leHRyYXBfcmljaGFy ZHNvbl9zdGVwKCZBaCwgJkFodCwgdCwgMi4wKTsKIAogICAgIHByaW50Zigi QWZ0ZXIgb25lIGV4dHJhcG9sYXRpb24gc3RlcCB2YWx1ZSBpcyAgICUxNC4x MmYgd2l0aCBlcnJvciAlMTRlXG4iLAotICAgICAgICAgICBnc2xfdmVjdG9y X2dldChBaCwgMCksIGZhYnMoY29zKHgpIC0gZ3NsX3ZlY3Rvcl9nZXQoQWgs IDApKSk7Ci0KLSAgICBnc2xfdmVjdG9yX2ZyZWUoQWh0KTsKLSAgICBnc2xf dmVjdG9yX2ZyZWUoQWgpOworICAgICAgICAgICBBaCwgZmFicyhjb3MoeCkg LSBBaCkpOwogICB9CiAKICAgcHJpbnRmKCJcblBlcmZvcm1pbmcgaXRlcmF0 ZWQgUmljaGFyZHNvbiBleHRyYXBvbGF0aW9uLi4uXG4iKTsKICAgewotICAg IGdzbF9tYXRyaXggKkEgICAgICAgICA9IGdzbF9tYXRyaXhfYWxsb2MoMSwg NCk7CisgICAgZ3NsX3ZlY3RvciAqQSAgICAgICAgID0gZ3NsX3ZlY3Rvcl9h bGxvYyg0KTsKICAgICBnc2xfdmVjdG9yICprICAgICAgICAgPSBnc2xfdmVj dG9yX2FsbG9jKDIpOwotICAgIGdzbF9tYXRyaXggKm5vcm10YWJsZSA9IGdz bF9tYXRyaXhfYWxsb2MoQS0+c2l6ZTIsIEEtPnNpemUyKTsKLSAgICBnc2xf dmVjdG9yICpleGFjdCAgICAgPSBnc2xfdmVjdG9yX2FsbG9jKDEpOworICAg IGdzbF9tYXRyaXggKm5vcm10YWJsZSA9IGdzbF9tYXRyaXhfYWxsb2MoQS0+ c2l6ZSwgQS0+c2l6ZSk7CisgICAgY29uc3QgZG91YmxlIGV4YWN0ICAgID0g Y29zKHgpOwogICAgIGludCBpLCBqOwogCi0gICAgZ3NsX3ZlY3Rvcl9zZXQo ZXhhY3QsIDAsIGNvcyh4KSk7Ci0KICAgICBwcmludGYoIkNvbXB1dGluZyAl ZCBpbml0aWFsIGVzdGltYXRlcyBvZiAoZC9keCkgc2luKCVmKVxuIiwKLSAg ICAgICAgICAgKGludCkgQS0+c2l6ZTIsIHgpOwotICAgIGZvciAoaSA9IDA7 IGkgPCBBLT5zaXplMjsgKytpKQorICAgICAgICAgICAoaW50KSBBLT5zaXpl LCB4KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgQS0+c2l6ZTsgKytpKQogICAg ICAgewotICAgICAgICBnc2xfbWF0cml4X3NldChBLCAwLCBpLCBlc3RpbWF0 ZShoIC8gcG93KHQsIGkpKSk7CisgICAgICAgIGdzbF92ZWN0b3Jfc2V0KEEs IGksIGVzdGltYXRlKGggLyBwb3codCwgaSkpKTsKICAgICAgIH0KIAogICAg IHByaW50ZigiVXNpbmcgbGVhZGluZyBlcnJvciB0ZXJtcyBsaWtlIE8oaF4y KSwgTyhoXjQpLCBPKGheNiksIE8oaF44KS4uLlxuIik7CkBAIC02NCwyMCAr NTYsMTkgQEAgbWFpbiAodm9pZCkKICAgICBnc2xfZXh0cmFwX3JpY2hhcmRz b24oQSwgdCwgaywgbm9ybXRhYmxlLCBleGFjdCk7CiAKICAgICBwcmludGYo IlRoZSBsXzIgZXJyb3IgYWZ0ZXIgZWFjaCBpdGVyYXRlZCBleHRyYXBvbGF0 aW9uIHN0ZXAgaXM6XG4iKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgQS0+c2l6 ZTI7ICsraSkKKyAgICBmb3IgKGkgPSAwOyBpIDwgQS0+c2l6ZTsgKytpKQog ICAgICAgewotICAgICAgICBmb3IgKGogPSAwOyBqIDwgQS0+c2l6ZTI7ICsr aikKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IEEtPnNpemU7ICsraikKICAg ICAgICAgICB7CiAgICAgICAgICAgICBwcmludGYoIiAlMTZlIiwgZ3NsX21h dHJpeF9nZXQobm9ybXRhYmxlLCBpLCBqKSk7CiAgICAgICAgICAgfQogICAg ICAgICBwcmludGYoIlxuIik7CiAgICAgICB9Ci0gICAgcHJpbnRmKCJcblRo ZSBmaW5hbCBlc3RpbWF0ZSBpcyAlMTQuMTJmXG4iLCBnc2xfbWF0cml4X2dl dChBLCAwLCAwKSk7CisgICAgcHJpbnRmKCJcblRoZSBmaW5hbCBlc3RpbWF0 ZSBpcyAlMTQuMTJmXG4iLCBnc2xfdmVjdG9yX2dldChBLCAwKSk7CiAKLSAg ICBnc2xfdmVjdG9yX2ZyZWUoZXhhY3QpOwogICAgIGdzbF9tYXRyaXhfZnJl ZShub3JtdGFibGUpOwogICAgIGdzbF92ZWN0b3JfZnJlZShrKTsKLSAgICBn c2xfbWF0cml4X2ZyZWUoQSk7CisgICAgZ3NsX3ZlY3Rvcl9mcmVlKEEpOwog ICB9CiAKICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kb2MvZXhhbXBsZXMv cmljaGFyZHNvbi5vdXQgYi9kb2MvZXhhbXBsZXMvcmljaGFyZHNvbi5vdXQK aW5kZXggYjA1NWZmMi4uYTU0YWU5NCAxMDA2NDQKLS0tIGEvZG9jL2V4YW1w bGVzL3JpY2hhcmRzb24ub3V0CisrKyBiL2RvYy9leGFtcGxlcy9yaWNoYXJk c29uLm91dApAQCAtMTEsNyArMTEsNyBAQCBVc2luZyBsZWFkaW5nIGVycm9y IHRlcm1zIGxpa2UgTyhoXjIpLCBPKGheNCksIE8oaF42KSwgTyhoXjgpLi4u CiBUaGUgbF8yIGVycm9yIGFmdGVyIGVhY2ggaXRlcmF0ZWQgZXh0cmFwb2xh dGlvbiBzdGVwIGlzOgogICAgICAxLjkzNTYyMGUtMDIgICAgICAgICAgICAg IG5hbiAgICAgICAgICAgICAgbmFuICAgICAgICAgICAgICBuYW4KICAgICAg NC44NjgxNzllLTAzICAgICAzLjg4MzgwMWUtMDUgICAgICAgICAgICAgIG5h biAgICAgICAgICAgICAgbmFuCi0gICAgIDEuMjE4ODcyZS0wMyAgICAgMi40 MzYwNjFlLTA2ICAgICA5LjI2NDIyOWUtMDkgICAgICAgICAgICAgIG5hbgot ICAgICAzLjA0ODMyM2UtMDQgICAgIDEuNTIzODk4ZS0wNyAgICAgMS40NTA2 OTdlLTEwICAgICAzLjIxMTg3NWUtMTMKKyAgICAgMS4yMTg4NzJlLTAzICAg ICAyLjQzNjA2MWUtMDYgICAgIDkuMjY0MjMwZS0wOSAgICAgICAgICAgICAg bmFuCisgICAgIDMuMDQ4MzIzZS0wNCAgICAgMS41MjM4OThlLTA3ICAgICAx LjQ1MDY5OGUtMTAgICAgIDMuMjEyOTg1ZS0xMwogCiBUaGUgZmluYWwgZXN0 aW1hdGUgaXMgMC43MzE2ODg4Njg4NzMKZGlmZiAtLWdpdCBhL2RvYy9zdW0u dGV4aSBiL2RvYy9zdW0udGV4aQppbmRleCA0YzkyMGIzLi5jOGFmMzg1IDEw MDY0NAotLS0gYS9kb2Mvc3VtLnRleGkKKysrIGIvZG9jL3N1bS50ZXhpCkBA IC0xODcsMTcgKzE4NywxOSBAQCBJbiBhIFJpY2hhcmRzb24gZXh0cmFwb2xh dGlvbiBzdGVwIHR3byBlc3RpbWF0ZXMgQG1hdGh7QV9pKGgpfSBhbmQKIEBt YXRoe0FfaShoL3QpfSBhcmUgY29tYmluZWQgdG8gZmluZCBhbiBlc3RpbWF0 ZSBvZiBvcmRlciBAbWF0aHtoXntrXyhpKzEpfX0KIGFjY29yZGluZyB0byBA bWF0aHtBXyhpKzEpKGgpID0gQV9pKGgvdCkgKyAodF5uIC0gMSleKC0xKSoo QV9pKGgvdCkgLSBBX2koaCkpfS4KIE5vdGUgdGhhdCB0aGlzIGRpZCBub3Qg cmVxdWlyZSBrbm93aW5nIHRoZSBsZWFkaW5nIGNvZWZmaWNpZW50IEBtYXRo e2FfaX0sIG9ubHkKLXRoZSBsZWFkaW5nIGVycm9yIG9yZGVyIEBtYXRoe2tf aX0uICBPbmUgc3VjaCBzdGVwIG1heSBiZSBjb21wdXRlZCB1c2luZwotQGNv ZGV7Z3NsX2V4dHJhcF9yaWNoYXJkc29uX3N0ZXB9LiAgVGhlIHByb2Nlc3Mg Y2FuIGJlIGl0ZXJhdGVkIHRvIGNvbWJpbmUKLUBtYXRoe0FfKGkrMSkoaCl9 IGFuZCBAbWF0aHtBXyhpKzEpKGgvdCl9IHRvIG9idGFpbiBAbWF0aHtBXyhp KzIpKGgpfS4gIFRoZQotaXRlcmF0ZWQgcHJvY2VzcywgYXMgd2VsbCBhcyBj b252ZW5pZW5jZSBtZWNoYW5pc20gdG8gY29tcHV0ZSBlcnJvciBub3JtcyBn aXZlbgotYSBrbm93biBzb2x1dGlvbiwgY2FuIGJlIHBlcmZvcm1lZCB1c2lu ZyB1c2luZyBAY29kZXtnc2xfZXh0cmFwX3JpY2hhcmRzb259LgotCi1AZGVm dHlwZWZ1biB7aW50fSBnc2xfZXh0cmFwX3JpY2hhcmRzb25fc3RlcCAoIGdz bF92ZWN0b3IgKiBAdmFye0FofSwgY29uc3QgZ3NsX3ZlY3RvciAqIEB2YXJ7 QWh0fSwgY29uc3QgZG91YmxlIEB2YXJ7dH0sIGNvbnN0IGRvdWJsZSBAdmFy e2tpfSkKK3RoZSBsZWFkaW5nIGVycm9yIG9yZGVyIEBtYXRoe2tfaX0uICBP bmUgc3VjaCBzdGVwIG1heSBiZSBjb21wdXRlZCBmb3IgYSBzY2FsYXIKK3Vz aW5nIEBjb2Rle2dzbF9leHRyYXBfcmljaGFyZHNvbl9zdGVwfSBvciBmb3Ig YSB2ZWN0b3IgdXNpbmcKK0Bjb2Rle2dzbF9leHRyYXBfcmljaGFyZHNvbl92 ZWN0b3Jfc3RlcH0uICBUaGUgcHJvY2VzcyBjYW4gYmUgaXRlcmF0ZWQgdG8K K2NvbWJpbmUgQG1hdGh7QV8oaSsxKShoKX0gYW5kIEBtYXRoe0FfKGkrMSko aC90KX0gdG8gb2J0YWluIEBtYXRoe0FfKGkrMikoaCl9LgorVGhlIGl0ZXJh dGVkIHByb2Nlc3MsIGFzIHdlbGwgYXMgY29udmVuaWVuY2UgbWVjaGFuaXNt IHRvIGNvbXB1dGUgZXJyb3Igbm9ybXMKK2dpdmVuIGEga25vd24gc29sdXRp b24sIGNhbiBiZSBwZXJmb3JtZWQgdXNpbmcgdXNpbmcgZWl0aGVyCitAY29k ZXtnc2xfZXh0cmFwX3JpY2hhcmRzb259IG9yIEBjb2Rle2dzbF9leHRyYXBf cmljaGFyZHNvbl92ZWN0b3J9LgorCitAZGVmdHlwZWZ1biB7aW50fSBnc2xf ZXh0cmFwX3JpY2hhcmRzb25fc3RlcCAoIGRvdWJsZSAqIEB2YXJ7QWh9LCBj b25zdCBkb3VibGUgKiBAdmFye0FodH0sIGRvdWJsZSBAdmFye3R9LCBkb3Vi bGUgQHZhcntraX0pCiBHaXZlbiBAbWF0aHtBX2koaCl9LCBhbiBhcHByb3hp bWF0aW9uIG9mIEBtYXRoe0F9IHN1Y2ggdGhhdCBAbWF0aHtBIC0gQShoKSA9 Ci1hX2kqaF5rX2kgKyBhXyhpKzEpKmhea18oaSsxKSArIC4uLn0gdXNlIFJp Y2hhcmRzb24gZXh0cmFwb2xhdGlvbiB0bwotZmluZCBhbiBhcHByb3hpbWF0 aW9uIHRvIGxlYWRpbmcgb3JkZXIgQG1hdGh7a18oaSsxKX0gZnJvbSBldmFs dWF0aW9ucyBhdAotQG1hdGh7QV9pKGgpfSBhbmQgQG1hdGh7QV9pKGgvdCl9 IGZvciBAbWF0aHt0ID4gMH0uCithX2kqaF5rX2kgKyBhXyhpKzEpKmhea18o aSsxKSArIC4uLn0gdXNlIFJpY2hhcmRzb24gZXh0cmFwb2xhdGlvbiB0byBm aW5kIGFuCithcHByb3hpbWF0aW9uIHRvIGxlYWRpbmcgb3JkZXIgQG1hdGh7 a18oaSsxKX0gZnJvbSBldmFsdWF0aW9ucyBhdCBAbWF0aHtBX2koaCl9Cith bmQgQG1hdGh7QV9pKGgvdCl9IGZvciBAbWF0aHt0ID4gMH0uCiAKIE9uIGVu dHJ5LCBAdmFye0FofSBjb250YWlucyB0aGUgY29hcnNlciBhcHByb3hpbWF0 aW9uIEBtYXRoe0FfaShoKX0gYW5kCiBAdmFye0FodH0gY29udGFpbnMgdGhl IGZpbmVyIGFwcHJveGltYXRpb24gQG1hdGh7QV9pKGgvdCl9LiAgQHZhcntr aX0gaXMKQEAgLTIxMCwzNCArMjEyLDUwIEBAIHRoZSBtZXRob2QgY2FsbHMg QGNvZGV7Z3NsX2Vycm9yfSBhbmQgcmV0dXJucyBvbiBvZiBHU0wncyBlcnJv ciBjb25zdGFudHMuICBUaGUKIHBhcmFtZXRlciBAdmFye0FofSB3aWxsIGJl IGluIGFuIHVuZGVmaW5lZCBzdGF0ZSBhZnRlciBhbnkgZXJyb3IuCiBAZW5k IGRlZnR5cGVmdW4KIAotQGRlZnR5cGVmdW4ge2ludH0gZ3NsX2V4dHJhcF9y aWNoYXJkc29uICggZ3NsX21hdHJpeCAqIGNvbnN0IEB2YXJ7QX0sIGNvbnN0 IGRvdWJsZSBAdmFye3R9LCBjb25zdCBnc2xfdmVjdG9yICogQHZhcntrfSwg Z3NsX21hdHJpeCAqIEB2YXJ7bm9ybXRhYmxlfSwgY29uc3QgZ3NsX3ZlY3Rv ciAqIGNvbnN0IEB2YXJ7ZXhhY3R9KQotUGVyZm9ybSBSaWNoYXJkc29uIGV4 dHJhcG9sYXRpb24gb24gYSBzZXF1ZW5jZSBvZiByZWZpbmVkIGFwcHJveGlt YXRpb25zLgotVGhlIHJvdXRpbmUgY2FuIHBlcmZvcm0gbXVsdGlwbGUgc3Rl cCBleHRyYXBvbGF0aW9uLCBlLmcuIHVzaW5nCi1AbWF0aHtBXzAoaCl9LCBA bWF0aHtBXzAoaC8yKX0sIGFuZCBAbWF0aHtBXzAoaC80KX0gdG8gY29tcHV0 ZSBAbWF0aHtBXzIoaCl9LgotU2VlIEBjb2Rle2dzbF9leHRyYXBfcmljaGFy ZHNvbl9zdGVwfSBmb3IgdGhlIHRlcm1pbm9sb2d5IGluIHVzZS4KK0BkZWZ0 eXBlZnVuIHtpbnR9IGdzbF9leHRyYXBfcmljaGFyZHNvbl92ZWN0b3Jfc3Rl cCAoIGdzbF92ZWN0b3IgKiBAdmFye0FofSwgY29uc3QgZ3NsX3ZlY3RvciAq IEB2YXJ7QWh0fSwgZG91YmxlIEB2YXJ7dH0sIGRvdWJsZSBAdmFye2tpfSkK K1RoaXMgbWV0aG9kIHBlcmZvcm1zIGEgZmFzdCwgdmVjdG9yLXZhbHVlZCBS aWNoYXJkc29uIGV4dHJhcG9sYXRpb24gcHJvY2VzcworZXF1aXZhbGVudCB0 byByZXBlYXRlZGx5IGNhbGxpbmcgQGNvZGV7Z3NsX2V4dHJhcF9yaWNoYXJk c29uX3N0ZXB9IG9uIGVhY2gKK2luZGV4IGluIHRoZSB2ZWN0b3JzIEB2YXJ7 QWh9IGFuZCBAdmFye0FodH0uICBBbGwgcGFyYW1ldGVyIHByb2Nlc3Npbmcg YW5kCitlcnJvciBoYW5kbGluZyBmb2xsb3dzIEBjb2Rle2dzbF9leHRyYXBf cmljaGFyZHNvbl9zdGVwfS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlw ZWZ1biB7aW50fSBnc2xfZXh0cmFwX3JpY2hhcmRzb24gKCBnc2xfdmVjdG9y ICogQHZhcntBfSwgZG91YmxlIEB2YXJ7dH0sIGNvbnN0IGdzbF92ZWN0b3Ig KiBAdmFye2t9LCBnc2xfbWF0cml4ICogQHZhcntub3JtdGFibGV9LCBkb3Vi bGUgQHZhcntleGFjdH0pCitQZXJmb3JtIFJpY2hhcmRzb24gZXh0cmFwb2xh dGlvbiBvbiBhIHNlcXVlbmNlIG9mIHJlZmluZWQgYXBwcm94aW1hdGlvbnMu ICBUaGUKK3JvdXRpbmUgY2FuIHBlcmZvcm0gbXVsdGlwbGUgc3RlcCBleHRy YXBvbGF0aW9uLCBlLmcuIHVzaW5nIEBtYXRoe0FfMChoKX0sCitAbWF0aHtB XzAoaC8yKX0sIGFuZCBAbWF0aHtBXzAoaC80KX0gdG8gY29tcHV0ZSBAbWF0 aHtBXzIoaCl9LiAgU2VlCitAY29kZXtnc2xfZXh0cmFwX3JpY2hhcmRzb25f c3RlcH0gZm9yIHRoZSB0ZXJtaW5vbG9neSBpbiB1c2UuCiAKLU9uIGVudHJ5 LCBjb2x1bW4gQG1hdGh7aX0gb2YgQHZhcntBfSBjb250YWlucyBAbWF0aHtB XzAoaC90XmkpfSB3aGlsZSBAdmFye3R9CitPbiBlbnRyeSwgY29tcG9uZW50 IEBtYXRoe2l9IG9mIEB2YXJ7QX0gY29udGFpbnMgQG1hdGh7QV8wKGgvdF5p KX0gd2hpbGUgQHZhcnt0fQogY29udGFpbnMgdGhlIHJlZmluZW1lbnQgZmFj dG9yIGJldHdlZW4gZWFjaCBwYWlyIG9mIGFwcHJveGltYXRpb25zLiAgVGhl CiByZWZpbmVtZW50IGZhY3RvciBtdXN0IGJlIGZpeGVkIGZvciBhbGwgY29s dW1ucy4gIFRoZSBsZWFkaW5nIGVycm9yIHRlcm0gb3JkZXJzCiBhcmUgcHJv dmlkZWQgaW4gQHZhcntrfS4gIFRoZXkgYXJlIGFzc3VtZWQgdG8gc3RhcnQg YXQgMSBpZiBAdmFye2t9IGlzCiBAY29kZXtOVUxMfS4gIFRoZXkgYXJlIGFz c3VtZWQgdG8gaW5jcmVtZW50IGJ5IDEgaWYgbm8gc2Vjb25kIGVsZW1lbnQg aXMKLXByb3ZpZGVkLiAgSWYgdGhlIHZlY3RvciBAdmFye2t9IGlzIHNob3J0 ZXIgdGhhbiBAY29kZXtBLT5zaXplMn0sIGFueQorcHJvdmlkZWQuICBJZiB0 aGUgdmVjdG9yIEB2YXJ7a30gaXMgc2hvcnRlciB0aGFuIEBjb2Rle0EtPnNp emV9LCBhbnkKIHVuc3BlY2lmaWVkIGhpZ2hlciBpbmRleCBlbnRyaWVzIGFy ZSBhc3N1bWVkIHRvIGdyb3cgYnkKIEBjb2Rle2dzbF92ZWN0b3JfZ2V0KGss ay0+c2l6ZS0xKSAtIGdzbF92ZWN0b3JfZ2V0KGssay0+c2l6ZS0yKX0uCiAK IElmIEB2YXJ7bm9ybXRhYmxlfSBpcyBub24tQGNvZGV7TlVMTH0gb24gZW50 cnksIHRoZSByb3V0aW5lIHByb2R1Y2VzIGluCiBAdmFye25vcm10YWJsZX0g YSB0YWJsZSBzaG93aW5nIHRoZSBAbWF0aHtsXzJ9IGVycm9yIGF0IGVhY2gg c3RlcCBpbiB0aGUKIGV4dHJhcG9sYXRpb24gcHJvY2VzcyBjYWxjdWxhdGVk IGFnYWluc3QgdGhlIHByb3ZpZGVkIGV4YWN0IHNvbHV0aW9uIGluCi1AdmFy e2V4YWN0fS4gIElmIEB2YXJ7ZXhhY3R9IGlzIEBjb2Rle05VTEx9IHRoZW4g aXQgaXMgdHJlYXRlZCBhcyBhcyB0aGUgemVybwotdmVjdG9yIGFuZCB0aGUg cmVzdWx0aW5nIEB2YXJ7bm9ybXRhYmxlfSBzaW1wbHkgY29udGFpbnMgdGhl IEBtYXRoe2xfMn0gbm9ybSBvZgotZWFjaCBleHRyYXBvbGF0aW9uIHN0ZXAu Ci0KLU9uIHN1Y2Nlc3MsIHRoZSBtZXRob2QgcmV0dXJucyBAY29kZXtHU0xf U1VDQ0VTU30uICBPbiBzdWNjZXNzZnVsIGV4aXQsIGNvbHVtbgotMCBvZiBA dmFye0F9IGNvbnRhaW5zIEBtYXRoe0FfKEEtPnNpemUyKShoKX0gYW5kIGFs bCBvdGhlciBjb2x1bW5zIHdpbGwgaGF2ZQotYmVlbiBvdmVyd3JpdHRlbiB3 aXRoIHRlbXBvcmFyeSByZXN1bHRzLiAgSWYgcHJvdmlkZWQsIEB2YXJ7bm9y bXRhYmxlfSB3aWxsIGJlCi1tb2RpZmllZCBhcyBkZXNjcmliZWQgYWJvdmUu ICBPbiBlcnJvciB0aGUgbWV0aG9kIGNhbGxzIEBjb2Rle2dzbF9lcnJvcn0g YW5kCi1yZXR1cm5zIG9uZSBvZiBHU0wncyBlcnJvciBjb2Rlcy4gIFRoZSBw YXJhbWV0ZXJzIEB2YXJ7QX0gYW5kIEB2YXJ7bm9ybXRhYmxlfQotd2lsbCBi ZSBpbiBhbiB1bmRlZmluZWQgc3RhdGUgYWZ0ZXIgYW55IGVycm9yLgorQHZh cntleGFjdH0uICBJZiBAdmFye2V4YWN0fSBpcyB6ZXJvIHRoZW4gdGhlIHRo ZSByZXN1bHRpbmcgQHZhcntub3JtdGFibGV9CitzaW1wbHkgY29udGFpbnMg dGhlIEBtYXRoe2xfMn0gbm9ybSBvZiBlYWNoIGV4dHJhcG9sYXRpb24gc3Rl cC4KKworT24gc3VjY2VzcywgdGhlIG1ldGhvZCByZXR1cm5zIEBjb2Rle0dT TF9TVUNDRVNTfS4gIE9uIHN1Y2Nlc3NmdWwgZXhpdCwKK2NvbXBvbmVudCAw IG9mIEB2YXJ7QX0gY29udGFpbnMgQG1hdGh7QV8oQS0+c2l6ZSkoaCl9IGFu ZCBhbGwgb3RoZXIgZW50cmllcword2lsbCBoYXZlIGJlZW4gb3ZlcndyaXR0 ZW4gd2l0aCB0ZW1wb3JhcnkgcmVzdWx0cy4gIElmIHByb3ZpZGVkLAorQHZh cntub3JtdGFibGV9IHdpbGwgYmUgbW9kaWZpZWQgYXMgZGVzY3JpYmVkIGFi b3ZlLiAgT24gZXJyb3IgdGhlIG1ldGhvZCBjYWxscworQGNvZGV7Z3NsX2Vy cm9yfSBhbmQgcmV0dXJucyBvbmUgb2YgR1NMJ3MgZXJyb3IgY29kZXMuICBU aGUgcGFyYW1ldGVycyBAdmFye0F9CithbmQgQHZhcntub3JtdGFibGV9IHdp bGwgYmUgaW4gYW4gdW5kZWZpbmVkIHN0YXRlIGFmdGVyIGFueSBlcnJvci4K K0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB7aW50fSBnc2xfZXh0 cmFwX3JpY2hhcmRzb25fdmVjdG9yICggZ3NsX21hdHJpeCAqIEB2YXJ7QX0s IGRvdWJsZSBAdmFye3R9LCBjb25zdCBnc2xfdmVjdG9yICogQHZhcntrfSwg Z3NsX21hdHJpeCAqIEB2YXJ7bm9ybXRhYmxlfSwgY29uc3QgZ3NsX3ZlY3Rv ciAqIEB2YXJ7ZXhhY3R9KQorVGhpcyBtZXRob2QgcGVyZm9ybXMgYSBmYXN0 LCB2ZWN0b3ItdmFsdWVkIFJpY2hhcmRzb24gZXh0cmFwb2xhdGlvbiBwcm9j ZXNzCitlcXVpdmFsZW50IHRvIHJlcGVhdGVkbHkgY2FsbGluZyBAY29kZXtn c2xfZXh0cmFwX3JpY2hhcmRzb259IG9uIGVhY2ggcm93IGluCitAdmFye0F9 LiAgT24gZW50cnksIGVhY2ggY29sdW1uIEBtYXRoe2l9IG9mIEB2YXJ7QX0g cmVwcmVzZW50cyB0aGUKK3ZlY3Rvci12YWx1ZWQgQG1hdGh7QV8wKGgvdF5p KX0uICBJZiBAdmFye2V4YWN0fSBpcyBAY29kZXtOVUxMfSB0aGVuIGl0IGlz Cit0cmVhdGVkIGFzIGFzIHRoZSB6ZXJvIHZlY3RvciBhbmQgYW55IHJlc3Vs dGluZyBAdmFye25vcm10YWJsZX0gc2ltcGx5IGNvbnRhaW5zCit0aGUgQG1h dGh7bF8yfSBub3JtIG9mIGVhY2ggZXh0cmFwb2xhdGlvbiBzdGVwLiAgQWxs IHBhcmFtZXRlciBwcm9jZXNzaW5nIGFuZAorZXJyb3IgaGFuZGxpbmcgZm9s bG93cyBAY29kZXtnc2xfZXh0cmFwX3JpY2hhcmRzb25fdmVjdG9yfS4KIEBl bmQgZGVmdHlwZWZ1bgogCiBAbm9kZSBFeGFtcGxlIG9mIFJpY2hhcmRzb24g ZXh0cmFwb2xhdGlvbgpkaWZmIC0tZ2l0IGEvZXh0cmFwL0NoYW5nZUxvZyBi L2V4dHJhcC9DaGFuZ2VMb2cKaW5kZXggOTE4M2FiNC4uMmEwN2E1NiAxMDA2 NDQKLS0tIGEvZXh0cmFwL0NoYW5nZUxvZworKysgYi9leHRyYXAvQ2hhbmdl TG9nCkBAIC0xLDMgKzEsNyBAQAorMjAwOS0xMi0xNSAgUmh5cyBVbGVyaWNo ICA8cmh5cy51bGVyaWNoQGdtYWlsLmNvbT4KKworCSogYWRkZWQgc2NhbGFy IGludGVyZmFjZSBhbmQgdGVzdHMgYnkgd3JhcHBpbmcgdmVjdG9yIHJvdXRp bmVzCisKIDIwMDktMTItMTMgIFJoeXMgVWxlcmljaCAgPHJoeXMudWxlcmlj aEBnbWFpbC5jb20+CiAKIAkqIGFkZGVkIGJ1aWxkIHN0cnVjdHVyZSBhbmQg UmljaGFyZHNvbiBleHRyYXBvbGF0aW9uCmRpZmYgLS1naXQgYS9leHRyYXAv ZGVtb19yaWNoYXJkc29uLmMgYi9leHRyYXAvZGVtb19yaWNoYXJkc29uLmMK aW5kZXggY2FhNzZiYy4uYTk0Mjk5OSAxMDA2NDQKLS0tIGEvZXh0cmFwL2Rl bW9fcmljaGFyZHNvbi5jCisrKyBiL2V4dHJhcC9kZW1vX3JpY2hhcmRzb24u YwpAQCAtMTksNDIgKzE5LDM0IEBAIG1haW4gKHZvaWQpCiB7CiAgIHByaW50 ZigiXG5QZXJmb3JtaW5nIGEgc2luZ2xlIFJpY2hhcmRzb24gZXh0cmFwb2xh dGlvbiBzdGVwLi4uXG4iKTsKICAgewotICAgIGdzbF92ZWN0b3IgKkFoICA9 IGdzbF92ZWN0b3JfYWxsb2MoMSk7Ci0gICAgZ3NsX3ZlY3RvciAqQWh0ID0g Z3NsX3ZlY3Rvcl9hbGxvYygxKTsKLQotICAgIGdzbF92ZWN0b3Jfc2V0KEFo LCAgMCwgZXN0aW1hdGUoaCkpOwotICAgIGdzbF92ZWN0b3Jfc2V0KEFodCwg MCwgZXN0aW1hdGUoaCAvIHQpKTsKKyAgICBkb3VibGUgQWggICAgICAgID0g ZXN0aW1hdGUoaCk7CisgICAgY29uc3QgZG91YmxlIEFodCA9IGVzdGltYXRl KGggLyB0KTsKIAogICAgIHByaW50ZigiRXhhY3QgdmFsdWUgZm9yIChkL2R4 KSBzaW4oJTRmKSA9ICAlMTQuMTJmXG4iLCB4LCBjb3MoeCkpOwogICAgIHBy aW50ZigiQXBwcm94aW1hdGUgdmFsdWUgZm9yIGggICA9ICU0ZiBpcyAlMTQu MTJmIHdpdGggZXJyb3IgJTE0ZVxuIiwKLSAgICAgICAgICAgaCwgZ3NsX3Zl Y3Rvcl9nZXQoQWgsIDApLCBmYWJzKGNvcyh4KSAtIGdzbF92ZWN0b3JfZ2V0 KEFoLCAwKSkpOworICAgICAgICAgICBoLCBBaCwgZmFicyhjb3MoeCkgLSBB aCkpOwogICAgIHByaW50ZigiQXBwcm94aW1hdGUgdmFsdWUgZm9yIGgvdCA9 ICU0ZiBpcyAlMTQuMTJmIHdpdGggZXJyb3IgJTE0ZVxuIiwKLSAgICAgICAg ICAgaCAvIHQsIGdzbF92ZWN0b3JfZ2V0KEFodCwgMCksIGZhYnMoY29zKHgp IC0gZ3NsX3ZlY3Rvcl9nZXQoQWh0LCAwKSkpOworICAgICAgICAgICBoIC8g dCwgQWh0LCBmYWJzKGNvcyh4KSAtIEFodCkpOwogCi0gICAgZ3NsX2V4dHJh cF9yaWNoYXJkc29uX3N0ZXAoQWgsIEFodCwgdCwgMi4wKTsKKyAgICBnc2xf ZXh0cmFwX3JpY2hhcmRzb25fc3RlcCgmQWgsICZBaHQsIHQsIDIuMCk7CiAK ICAgICBwcmludGYoIkFmdGVyIG9uZSBleHRyYXBvbGF0aW9uIHN0ZXAgdmFs dWUgaXMgICAlMTQuMTJmIHdpdGggZXJyb3IgJTE0ZVxuIiwKLSAgICAgICAg ICAgZ3NsX3ZlY3Rvcl9nZXQoQWgsIDApLCBmYWJzKGNvcyh4KSAtIGdzbF92 ZWN0b3JfZ2V0KEFoLCAwKSkpOwotCi0gICAgZ3NsX3ZlY3Rvcl9mcmVlKEFo dCk7Ci0gICAgZ3NsX3ZlY3Rvcl9mcmVlKEFoKTsKKyAgICAgICAgICAgQWgs IGZhYnMoY29zKHgpIC0gQWgpKTsKICAgfQogCiAgIHByaW50ZigiXG5QZXJm b3JtaW5nIGl0ZXJhdGVkIFJpY2hhcmRzb24gZXh0cmFwb2xhdGlvbi4uLlxu Iik7CiAgIHsKLSAgICBnc2xfbWF0cml4ICpBICAgICAgICAgPSBnc2xfbWF0 cml4X2FsbG9jKDEsIDQpOworICAgIGdzbF92ZWN0b3IgKkEgICAgICAgICA9 IGdzbF92ZWN0b3JfYWxsb2MoNCk7CiAgICAgZ3NsX3ZlY3RvciAqayAgICAg ICAgID0gZ3NsX3ZlY3Rvcl9hbGxvYygyKTsKLSAgICBnc2xfbWF0cml4ICpu b3JtdGFibGUgPSBnc2xfbWF0cml4X2FsbG9jKEEtPnNpemUyLCBBLT5zaXpl Mik7Ci0gICAgZ3NsX3ZlY3RvciAqZXhhY3QgICAgID0gZ3NsX3ZlY3Rvcl9h bGxvYygxKTsKKyAgICBnc2xfbWF0cml4ICpub3JtdGFibGUgPSBnc2xfbWF0 cml4X2FsbG9jKEEtPnNpemUsIEEtPnNpemUpOworICAgIGNvbnN0IGRvdWJs ZSBleGFjdCAgICA9IGNvcyh4KTsKICAgICBpbnQgaSwgajsKIAotICAgIGdz bF92ZWN0b3Jfc2V0KGV4YWN0LCAwLCBjb3MoeCkpOwotCiAgICAgcHJpbnRm KCJDb21wdXRpbmcgJWQgaW5pdGlhbCBlc3RpbWF0ZXMgb2YgKGQvZHgpIHNp biglZilcbiIsCi0gICAgICAgICAgIChpbnQpIEEtPnNpemUyLCB4KTsKLSAg ICBmb3IgKGkgPSAwOyBpIDwgQS0+c2l6ZTI7ICsraSkKKyAgICAgICAgICAg KGludCkgQS0+c2l6ZSwgeCk7CisgICAgZm9yIChpID0gMDsgaSA8IEEtPnNp emU7ICsraSkKICAgICAgIHsKLSAgICAgICAgZ3NsX21hdHJpeF9zZXQoQSwg MCwgaSwgZXN0aW1hdGUoaCAvIHBvdyh0LCBpKSkpOworICAgICAgICBnc2xf dmVjdG9yX3NldChBLCBpLCBlc3RpbWF0ZShoIC8gcG93KHQsIGkpKSk7CiAg ICAgICB9CiAKICAgICBwcmludGYoIlVzaW5nIGxlYWRpbmcgZXJyb3IgdGVy bXMgbGlrZSBPKGheMiksIE8oaF40KSwgTyhoXjYpLCBPKGheOCkuLi5cbiIp OwpAQCAtNjQsMjAgKzU2LDE5IEBAIG1haW4gKHZvaWQpCiAgICAgZ3NsX2V4 dHJhcF9yaWNoYXJkc29uKEEsIHQsIGssIG5vcm10YWJsZSwgZXhhY3QpOwog CiAgICAgcHJpbnRmKCJUaGUgbF8yIGVycm9yIGFmdGVyIGVhY2ggaXRlcmF0 ZWQgZXh0cmFwb2xhdGlvbiBzdGVwIGlzOlxuIik7Ci0gICAgZm9yIChpID0g MDsgaSA8IEEtPnNpemUyOyArK2kpCisgICAgZm9yIChpID0gMDsgaSA8IEEt PnNpemU7ICsraSkKICAgICAgIHsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8 IEEtPnNpemUyOyArK2opCisgICAgICAgIGZvciAoaiA9IDA7IGogPCBBLT5z aXplOyArK2opCiAgICAgICAgICAgewogICAgICAgICAgICAgcHJpbnRmKCIg JTE2ZSIsIGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwgaSwgaikpOwogICAg ICAgICAgIH0KICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgfQotICAg IHByaW50ZigiXG5UaGUgZmluYWwgZXN0aW1hdGUgaXMgJTE0LjEyZlxuIiwg Z3NsX21hdHJpeF9nZXQoQSwgMCwgMCkpOworICAgIHByaW50ZigiXG5UaGUg ZmluYWwgZXN0aW1hdGUgaXMgJTE0LjEyZlxuIiwgZ3NsX3ZlY3Rvcl9nZXQo QSwgMCkpOwogCi0gICAgZ3NsX3ZlY3Rvcl9mcmVlKGV4YWN0KTsKICAgICBn c2xfbWF0cml4X2ZyZWUobm9ybXRhYmxlKTsKICAgICBnc2xfdmVjdG9yX2Zy ZWUoayk7Ci0gICAgZ3NsX21hdHJpeF9mcmVlKEEpOworICAgIGdzbF92ZWN0 b3JfZnJlZShBKTsKICAgfQogCiAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEv ZXh0cmFwL2dzbF9leHRyYXAuaCBiL2V4dHJhcC9nc2xfZXh0cmFwLmgKaW5k ZXggYjE1ZTk3ZS4uMGJhNWQwMSAxMDA2NDQKLS0tIGEvZXh0cmFwL2dzbF9l eHRyYXAuaAorKysgYi9leHRyYXAvZ3NsX2V4dHJhcC5oCkBAIC0zNiwyMCAr MzYsMzQgQEAKIF9fQkVHSU5fREVDTFMKIAogaW50Ci1nc2xfZXh0cmFwX3Jp Y2hhcmRzb25fc3RlcCgKK2dzbF9leHRyYXBfcmljaGFyZHNvbl92ZWN0b3Jf c3RlcCgKICAgICAgICAgZ3NsX3ZlY3RvciAqIEFoLAogICAgICAgICBjb25z dCBnc2xfdmVjdG9yICogQWh0LAotICAgICAgICBjb25zdCBkb3VibGUgdCwK LSAgICAgICAgY29uc3QgZG91YmxlIGtpKTsKKyAgICAgICAgZG91YmxlIHQs CisgICAgICAgIGRvdWJsZSBraSk7CiAKIGludAotZ3NsX2V4dHJhcF9yaWNo YXJkc29uKAotICAgICAgICBnc2xfbWF0cml4ICogY29uc3QgQSwKLSAgICAg ICAgY29uc3QgZG91YmxlIHQsCitnc2xfZXh0cmFwX3JpY2hhcmRzb25fc3Rl cCgKKyAgICAgICAgZG91YmxlICogQWgsCisgICAgICAgIGNvbnN0IGRvdWJs ZSAqIEFodCwKKyAgICAgICAgZG91YmxlIHQsCisgICAgICAgIGRvdWJsZSBr aSk7CisKK2ludAorZ3NsX2V4dHJhcF9yaWNoYXJkc29uX3ZlY3RvcigKKyAg ICAgICAgZ3NsX21hdHJpeCAqIEEsCisgICAgICAgIGRvdWJsZSB0LAogICAg ICAgICBjb25zdCBnc2xfdmVjdG9yICogaywKICAgICAgICAgZ3NsX21hdHJp eCAqIG5vcm10YWJsZSwKLSAgICAgICAgY29uc3QgZ3NsX3ZlY3RvciAqIGNv bnN0IGV4YWN0KTsKKyAgICAgICAgY29uc3QgZ3NsX3ZlY3RvciAqIGV4YWN0 KTsKIAoraW50Citnc2xfZXh0cmFwX3JpY2hhcmRzb24oCisgICAgICAgIGdz bF92ZWN0b3IgKiBBLAorICAgICAgICBkb3VibGUgdCwKKyAgICAgICAgY29u c3QgZ3NsX3ZlY3RvciAqIGssCisgICAgICAgIGdzbF9tYXRyaXggKiBub3Jt dGFibGUsCisgICAgICAgIGRvdWJsZSBleGFjdCk7CiAKIF9fRU5EX0RFQ0xT CiAKZGlmZiAtLWdpdCBhL2V4dHJhcC9yaWNoYXJkc29uLmMgYi9leHRyYXAv cmljaGFyZHNvbi5jCmluZGV4IDRiMjA3Y2IuLjYwMmYyNzYgMTAwNjQ0Ci0t LSBhL2V4dHJhcC9yaWNoYXJkc29uLmMKKysrIGIvZXh0cmFwL3JpY2hhcmRz b24uYwpAQCAtMjYsOSArMjYsOSBAQAogI2luY2x1ZGUgPGdzbC9nc2xfdmVj dG9yX2RvdWJsZS5oPgogCiBpbnQKLWdzbF9leHRyYXBfcmljaGFyZHNvbl9z dGVwKAotICBnc2xfdmVjdG9yICogQWgsCi0gIGNvbnN0IGdzbF92ZWN0b3Ig KiBBaHQsCitnc2xfZXh0cmFwX3JpY2hhcmRzb25fdmVjdG9yX3N0ZXAoCisg IGdzbF92ZWN0b3IgKiBjb25zdCBBaCwKKyAgY29uc3QgZ3NsX3ZlY3RvciAq IGNvbnN0IEFodCwKICAgY29uc3QgZG91YmxlIHQsCiAgIGNvbnN0IGRvdWJs ZSBraSkKIHsKQEAgLTM3LDYgKzM3LDExIEBAIGdzbF9leHRyYXBfcmljaGFy ZHNvbl9zdGVwKAogICAgICAgR1NMX0VSUk9SKCJraSA9PSAwIGludmFsaWQg YXMgaXQgd2lsbCBjYXVzZSBhIGRpdmlzaW9uLWJ5LXplcm8iLAogICAgICAg ICAgICAgICAgIEdTTF9FRE9NKTsKICAgICB9CisgIGlmICh0IDw9IDApCisg ICAgeworICAgICAgR1NMX0VSUk9SKCJ0IDw9IDAgaW52YWxpZCBhcyByZXBy ZXNlbnRzIGEgbm9uc2Vuc2ljYWwgcmVmaW5lbWVudCIsCisgICAgICAgICAg ICAgICAgR1NMX0VET00pOworICAgIH0KIAogICBjb25zdCBkb3VibGUgdGtp ICAgICAgID0gcG93KHQsIGtpKTsKICAgY29uc3QgZG91YmxlIGludl90a2lt MSA9IDEuMCAvICh0a2kgLSAxLjApOwpAQCAtNTAsMTEgKzU1LDI1IEBAIGdz bF9leHRyYXBfcmljaGFyZHNvbl9zdGVwKAogfQogCiBpbnQKLWdzbF9leHRy YXBfcmljaGFyZHNvbigKK2dzbF9leHRyYXBfcmljaGFyZHNvbl9zdGVwKAor ICBkb3VibGUgKiBjb25zdCBBaCwKKyAgY29uc3QgZG91YmxlICogY29uc3Qg QWh0LAorICBjb25zdCBkb3VibGUgdCwKKyAgY29uc3QgZG91YmxlIGtpKQor eworICBnc2xfdmVjdG9yX3ZpZXcgICAgICAgQWhfdmlldyAgPSBnc2xfdmVj dG9yX3ZpZXdfYXJyYXkoQWgsIDEpOworICBnc2xfdmVjdG9yX2NvbnN0X3Zp ZXcgQWh0X3ZpZXcgPSBnc2xfdmVjdG9yX2NvbnN0X3ZpZXdfYXJyYXkoQWh0 LCAxKTsKKworICByZXR1cm4gZ3NsX2V4dHJhcF9yaWNoYXJkc29uX3ZlY3Rv cl9zdGVwKAorICAgICAgICAgICAmQWhfdmlldy52ZWN0b3IsICZBaHRfdmll dy52ZWN0b3IsIHQsIGtpKTsKK30KKworaW50Citnc2xfZXh0cmFwX3JpY2hh cmRzb25fdmVjdG9yKAogICBnc2xfbWF0cml4ICogY29uc3QgQSwKICAgY29u c3QgZG91YmxlIHQsCi0gIGNvbnN0IGdzbF92ZWN0b3IgKiBrLAotICBnc2xf bWF0cml4ICogbm9ybXRhYmxlLAorICBjb25zdCBnc2xfdmVjdG9yICogY29u c3QgaywKKyAgZ3NsX21hdHJpeCAqIGNvbnN0IG5vcm10YWJsZSwKICAgY29u c3QgZ3NsX3ZlY3RvciAqIGNvbnN0IGV4YWN0KQogewogICBnc2xfdmVjdG9y ICogc2NyYXRjaCA9IE5VTEw7CkBAIC0xNDYsNyArMTY1LDcgQEAgZ3NsX2V4 dHJhcF9yaWNoYXJkc29uKAogICAgICAgICAgIGdzbF92ZWN0b3JfdmlldyBB aWggID0gZ3NsX21hdHJpeF9jb2x1bW4oQSwgaik7CiAgICAgICAgICAgZ3Ns X3ZlY3Rvcl92aWV3IEFpaHQgPSBnc2xfbWF0cml4X2NvbHVtbihBLCBqICsg MSk7CiAKLSAgICAgICAgICBjb25zdCBpbnQgZXJyb3IgPSBnc2xfZXh0cmFw X3JpY2hhcmRzb25fc3RlcCgKKyAgICAgICAgICBjb25zdCBpbnQgZXJyb3Ig PSBnc2xfZXh0cmFwX3JpY2hhcmRzb25fdmVjdG9yX3N0ZXAoCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmQWloLnZlY3RvciwgJkFpaHQudmVj dG9yLCB0LCBraSk7CiAgICAgICAgICAgaWYgKGVycm9yKQogICAgICAgICAg ICAgewpAQCAtMTgyLDMgKzIwMSwzNCBAQCBnc2xfZXh0cmFwX3JpY2hhcmRz b24oCiAKICAgcmV0dXJuIEdTTF9TVUNDRVNTOwogfQorCitpbnQKK2dzbF9l eHRyYXBfcmljaGFyZHNvbigKKyAgZ3NsX3ZlY3RvciAqIGNvbnN0IEEsCisg IGNvbnN0IGRvdWJsZSB0LAorICBjb25zdCBnc2xfdmVjdG9yICogY29uc3Qg aywKKyAgZ3NsX21hdHJpeCAqIGNvbnN0IG5vcm10YWJsZSwKKyAgY29uc3Qg ZG91YmxlIGV4YWN0KQoreworICBnc2xfbWF0cml4X3ZpZXcgICAgICAgQV92 aWV3ICAgICA9IGdzbF9tYXRyaXhfdmlld192ZWN0b3IoQSwgMSwgQS0+c2l6 ZSk7CisgIGdzbF92ZWN0b3JfY29uc3RfdmlldyBleGFjdF92aWV3ID0gZ3Ns X3ZlY3Rvcl9jb25zdF92aWV3X2FycmF5KCZleGFjdCwgMSk7CisKKyAgaWYg KEEtPnN0cmlkZSAhPSAxKQorICAgIHsKKyAgICAgIEdTTF9FUlJPUigiVW5h YmxlIHRvIGNyZWF0ZSByZXF1aXJlZCBtYXRyaXggdmlldyBmb3IgQS0+c3Ry aWRlICE9IDEiLAorICAgICAgICAgICAgICAgIEdTTF9FSU5WQUwpOworICAg IH0KKworICAvKiBQcm92aWRlIGV4YWN0IHZhbHVlIGlmZiBub3JtdGFibGUg aXMgbm9uLU5VTEwsIG90aGVyd2lzZSB3ZQorICAgICBlbmNvdW50ZXIgYSBj b25zaXN0ZW5jeSBjaGVjayBpbiBnc2xfZXh0cmFwX3JpY2hhcmRzb25fdmVj dG9yICovCisgIGlmIChub3JtdGFibGUpCisgICAgeworICAgICAgcmV0dXJu IGdzbF9leHRyYXBfcmljaGFyZHNvbl92ZWN0b3IoCisgICAgICAgICAgICAg ICAmQV92aWV3Lm1hdHJpeCwgdCwgaywgbm9ybXRhYmxlLCAmZXhhY3Rfdmll dy52ZWN0b3IpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJldHVy biBnc2xfZXh0cmFwX3JpY2hhcmRzb25fdmVjdG9yKAorICAgICAgICAgICAg ICAgJkFfdmlldy5tYXRyaXgsIHQsIGssIE5VTEwsIE5VTEwpOworICAgIH0K K30KZGlmZiAtLWdpdCBhL2V4dHJhcC90ZXN0X3JpY2hhcmRzb24uYyBiL2V4 dHJhcC90ZXN0X3JpY2hhcmRzb24uYwppbmRleCA5MDNjY2Q3Li5jZmMxY2Nj IDEwMDY0NAotLS0gYS9leHRyYXAvdGVzdF9yaWNoYXJkc29uLmMKKysrIGIv ZXh0cmFwL3Rlc3RfcmljaGFyZHNvbi5jCkBAIC01LDQ3MCArNSw4OTIgQEAK ICNpbmNsdWRlIDxnc2wvZ3NsX3Rlc3QuaD4KIAogdm9pZAotdGVzdF9yaWNo YXJkc29uX2V4dHJhcG9sYXRpb25fc3RlcCgpCit0ZXN0X3JpY2hhcmRzb25f dmVjdG9yX2V4dHJhcG9sYXRpb25fc3RlcCgpCiB7Ci0gICAgY29uc3QgaW50 ICAgIGtpICAgICAgICAgICA9IDE7Ci0gICAgY29uc3Qgc2l6ZV90IG4gICAg ICAgICAgICA9IDE7Ci0gICAgZ3NsX3ZlY3RvciAqQWggICA9IGdzbF92ZWN0 b3JfYWxsb2Mobik7Ci0gICAgZ3NsX3ZlY3RvciAqQWh0ICA9IGdzbF92ZWN0 b3JfYWxsb2Mobik7Ci0KLSAgICB7Ci0gICAgICAgIGNvbnN0IGRvdWJsZSB0 ID0gMi4wOwotICAgICAgICBnc2xfdmVjdG9yX3NldChBaCwgIDAsIDEuMCk7 Ci0gICAgICAgIGdzbF92ZWN0b3Jfc2V0KEFodCwgMCwgMi4wKTsKLSAgICAg ICAgZ3NsX3Rlc3QoZ3NsX2V4dHJhcF9yaWNoYXJkc29uX3N0ZXAoQWgsIEFo dCwgdCwga2kpLAotICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGVycm9y IHJlcG9ydGVkIGluICVzIGZvciB0PSVmIiwgX19mdW5jX18sIHQpOwotICAg ICAgICBnc2xfdGVzdF9hYnMoZ3NsX3ZlY3Rvcl9nZXQoQWgsIDApLCAzLjAs IEdTTF9EQkxfRVBTSUxPTiwKLSAgICAgICAgICAgICAgICAiRXh0cmFwb2xh dGlvbiBpbiAlcyBmb3Iga2k9JWQsIHQ9JWYiLCBfX2Z1bmNfXywga2ksIHQp OwotICAgIH0KLQotICAgIHsKLSAgICAgICAgY29uc3QgZG91YmxlIHQgPSAz LjA7Ci0gICAgICAgIGdzbF92ZWN0b3Jfc2V0KEFoLCAgMCwgMS4wKTsKLSAg ICAgICAgZ3NsX3ZlY3Rvcl9zZXQoQWh0LCAwLCAyLjApOwotICAgICAgICBn c2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb25fc3RlcChBaCwgQWh0LCB0 LCBraSksCi0gICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3IgcmVw b3J0ZWQgaW4gJXMgZm9yIHQ9JWYiLCBfX2Z1bmNfXywgdCk7Ci0gICAgICAg IGdzbF90ZXN0X2Ficyhnc2xfdmVjdG9yX2dldChBaCwgMCksIDUuMC8yLjAs IEdTTF9EQkxfRVBTSUxPTiwKLSAgICAgICAgICAgICAgICAiRXh0cmFwb2xh dGlvbiBpbiAlcyBmb3Iga2k9JWQsIHQ9JWYiLCBfX2Z1bmNfXywga2ksIHQp OwotICAgIH0KLQotICAgIGdzbF92ZWN0b3JfZnJlZShBaHQpOwotICAgIGdz bF92ZWN0b3JfZnJlZShBaCk7CisgIGNvbnN0IGludCAgICBraSAgICAgICAg ICAgPSAxOworICBjb25zdCBzaXplX3QgbiAgICAgICAgICAgID0gMTsKKyAg Z3NsX3ZlY3RvciAqQWggICA9IGdzbF92ZWN0b3JfYWxsb2Mobik7CisgIGdz bF92ZWN0b3IgKkFodCAgPSBnc2xfdmVjdG9yX2FsbG9jKG4pOworCisgIHsK KyAgICBjb25zdCBkb3VibGUgdCA9IDIuMDsKKyAgICBnc2xfdmVjdG9yX3Nl dChBaCwgIDAsIDEuMCk7CisgICAgZ3NsX3ZlY3Rvcl9zZXQoQWh0LCAwLCAy LjApOworICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbl92ZWN0 b3Jfc3RlcChBaCwgQWh0LCB0LCBraSksCisgICAgICAgICAgICAgIlVuZXhw ZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMgZm9yIHQ9JWYiLCBfX2Z1bmNf XywgdCk7CisgICAgZ3NsX3Rlc3RfYWJzKGdzbF92ZWN0b3JfZ2V0KEFoLCAw KSwgMy4wLCBHU0xfREJMX0VQU0lMT04sCisgICAgICAgICAgICAgICAgICJF eHRyYXBvbGF0aW9uIGluICVzIGZvciBraT0lZCwgdD0lZiIsIF9fZnVuY19f LCBraSwgdCk7CisgIH0KKworICB7CisgICAgY29uc3QgZG91YmxlIHQgPSAz LjA7CisgICAgZ3NsX3ZlY3Rvcl9zZXQoQWgsICAwLCAxLjApOworICAgIGdz bF92ZWN0b3Jfc2V0KEFodCwgMCwgMi4wKTsKKyAgICBnc2xfdGVzdChnc2xf ZXh0cmFwX3JpY2hhcmRzb25fdmVjdG9yX3N0ZXAoQWgsIEFodCwgdCwga2kp LAorICAgICAgICAgICAgICJVbmV4cGVjdGVkIGVycm9yIHJlcG9ydGVkIGlu ICVzIGZvciB0PSVmIiwgX19mdW5jX18sIHQpOworICAgIGdzbF90ZXN0X2Fi cyhnc2xfdmVjdG9yX2dldChBaCwgMCksIDUuMCAvIDIuMCwgR1NMX0RCTF9F UFNJTE9OLAorICAgICAgICAgICAgICAgICAiRXh0cmFwb2xhdGlvbiBpbiAl cyBmb3Iga2k9JWQsIHQ9JWYiLCBfX2Z1bmNfXywga2ksIHQpOworICB9CisK KyAgZ3NsX3ZlY3Rvcl9mcmVlKEFodCk7CisgIGdzbF92ZWN0b3JfZnJlZShB aCk7CiB9CiAKIHZvaWQKLXRlc3RfcmljaGFyZHNvbl9leHRyYXBvbGF0aW9u X2RlZmF1bHRzKCkKK3Rlc3RfcmljaGFyZHNvbl92ZWN0b3JfZXh0cmFwb2xh dGlvbl9kZWZhdWx0cygpCiB7Ci0gICAgZ3NsX21hdHJpeCAqIGRhdGExID0g Z3NsX21hdHJpeF9hbGxvYygxLCAyKTsKLSAgICBnc2xfbWF0cml4ICogZGF0 YTIgPSBnc2xfbWF0cml4X2FsbG9jKGRhdGExLT5zaXplMSwgZGF0YTEtPnNp emUyKTsKLSAgICB7Ci0gICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGExLCAw LCAwLCAxLjApOwotICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhMSwgMCwg MSwgMi4wKTsKLQotICAgICAgICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hh cmRzb24oZGF0YTEsIDIsIE5VTEwsIE5VTEwsIE5VTEwpLAotICAgICAgICAg ICAgICAgICJVbmV4cGVjdGVkIGVycm9yIHJlcG9ydGVkIGluICVzIik7Ci0g ICAgICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4X2dldChkYXRhMSwgMCwg MCksIDMuMCwgR1NMX0RCTF9FUFNJTE9OLAotICAgICAgICAgICAgICAgICIl cyBzY2FsYXIgY29ycmVjdCByZXN1bHQiLCBfX2Z1bmNfXyk7Ci0gICAgfQot Ci0gICAgewotICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhMSwgMCwgMCwg MS4wKTsKLSAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTEsIDAsIDEsIDIu MCk7Ci0KLSAgICAgICAgZ3NsX3Rlc3QoZ3NsX2V4dHJhcF9yaWNoYXJkc29u KGRhdGExLCAzLCBOVUxMLCBOVUxMLCBOVUxMKSwKLSAgICAgICAgICAgICAg ICAiVW5leHBlY3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIpOwotICAgICAg ICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQoZGF0YTEsIDAsIDApLCA1 LjAvMi4wLCBHU0xfREJMX0VQU0lMT04sCi0gICAgICAgICAgICAgICAgIiVz IHNjYWxhciBjb3JyZWN0IHJlc3VsdCIsIF9fZnVuY19fKTsKLSAgICB9Ci0K LSAgICB7Ci0gICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGExLCAwLCAwLCAx LjApOwotICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhMSwgMCwgMSwgMi4w KTsKLSAgICAgICAgZ3NsX21hdHJpeF9tZW1jcHkoZGF0YTIsIGRhdGExKTsK LQotICAgICAgICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24oZGF0 YTEsIDIsIE5VTEwsIE5VTEwsIE5VTEwpLAotICAgICAgICAgICAgICAgICJV bmV4cGVjdGVkIGVycm9yIHJlcG9ydGVkIGluICVzIik7Ci0gICAgICAgIGNv bnN0IGRvdWJsZSByZXN1bHQxID0gZ3NsX21hdHJpeF9nZXQoZGF0YTEsIDAs IDApOwotCi0gICAgICAgIGdzbF90ZXN0X2FicyhyZXN1bHQxLCAzLjAsIEdT TF9EQkxfRVBTSUxPTiwKLSAgICAgICAgICAgICAgICAiJXMgc2NhbGFyIGNv cnJlY3QgcmVzdWx0IiwgX19mdW5jX18pOwotCi0gICAgICAgIGdzbF92ZWN0 b3IgKiBrID0gZ3NsX3ZlY3Rvcl9hbGxvYygxKTsKLSAgICAgICAgZ3NsX3Zl Y3Rvcl9zZXQoaywgMCwgMSk7Ci0gICAgICAgIGdzbF90ZXN0KGdzbF9leHRy YXBfcmljaGFyZHNvbihkYXRhMiwgMiwgaywgTlVMTCwgTlVMTCksCi0gICAg ICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMi KTsKLSAgICAgICAgZ3NsX3ZlY3Rvcl9mcmVlKGspOwotICAgICAgICBjb25z dCBkb3VibGUgcmVzdWx0MiA9IGdzbF9tYXRyaXhfZ2V0KGRhdGEyLCAwLCAw KTsKLQotICAgICAgICBnc2xfdGVzdF9hYnMocmVzdWx0MSwgcmVzdWx0Miwg R1NMX0RCTF9FUFNJTE9OLAotICAgICAgICAgICAgICAgICIlcyB3aXRoIGsg PT0gTlVMTCIsIF9fZnVuY19fKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAg IGludCBpLCBqOwotICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhMSwgMCwg MCwgMS4wKTsKLSAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTEsIDAsIDEs IDIuMCk7Ci0gICAgICAgIGdzbF9tYXRyaXhfbWVtY3B5KGRhdGEyLCBkYXRh MSk7Ci0KLSAgICAgICAgZ3NsX21hdHJpeCAqIG5vcm10YWJsZTEgPSBnc2xf bWF0cml4X2FsbG9jKGRhdGExLT5zaXplMiwgZGF0YTEtPnNpemUyKTsKLSAg ICAgICAgZ3NsX21hdHJpeCAqIG5vcm10YWJsZTIgPSBnc2xfbWF0cml4X2Fs bG9jKGRhdGExLT5zaXplMiwgZGF0YTEtPnNpemUyKTsKLQotICAgICAgICBn c2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24oCi0gICAgICAgICAgICAg ICAgICAgIGRhdGExLCAyLCBOVUxMLCBub3JtdGFibGUxLCBOVUxMKSwKLSAg ICAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJvciByZXBvcnRlZCBpbiAl cyIpOwotICAgICAgICBjb25zdCBkb3VibGUgcmVzdWx0MSA9IGdzbF9tYXRy aXhfZ2V0KGRhdGExLCAwLCAwKTsKLQotICAgICAgICBnc2xfdGVzdF9hYnMo cmVzdWx0MSwgMy4wLCBHU0xfREJMX0VQU0lMT04sCi0gICAgICAgICAgICAg ICAgIiVzIGNvcnJlY3QgZXh0cmFwb2xhdGlvbiBhbnN3ZXIiKTsKLQotICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgbm9ybXRhYmxlMS0+c2l6ZTEgLSAxOyAr K2kpIHsKLSAgICAgICAgICAgIGZvciAoaiA9IGkrMTsgaiA8IG5vcm10YWJs ZTEtPnNpemUyOyArK2opIHsKLSAgICAgICAgICAgICAgICBnc2xfdGVzdCgh Z3NsX2lzbmFuKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZTEsIGksIGopKSwK LSAgICAgICAgICAgICAgICAgICAgICAgICIlcyBleHBlY3RlZCBOQU4gaW4g bm9ybXRhYmxlMSBhdCAoJWQsICVkKSIsCi0gICAgICAgICAgICAgICAgICAg ICAgICBfX2Z1bmNfXywgaSwgaik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLQotICAgICAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQobm9y bXRhYmxlMSwgMCwgMCksIDEuMCwgR1NMX0RCTF9FUFNJTE9OLAotICAgICAg ICAgICAgICAgICIlcyBub3JtdGFibGUxICgwLDApIHZhbHVlIiwgX19mdW5j X18pOwotICAgICAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQobm9y bXRhYmxlMSwgMSwgMCksIDIuMCwgR1NMX0RCTF9FUFNJTE9OLAotICAgICAg ICAgICAgICAgICIlcyBub3JtdGFibGUxICgxLDApIHZhbHVlIiwgX19mdW5j X18pOwotICAgICAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQobm9y bXRhYmxlMSwgMSwgMSksIDMuMCwgR1NMX0RCTF9FUFNJTE9OLAotICAgICAg ICAgICAgICAgICIlcyBub3JtdGFibGUxICgxLDEpIHZhbHVlIiwgX19mdW5j X18pOwotCi0gICAgICAgIGdzbF92ZWN0b3IgKiBleGFjdCA9IGdzbF92ZWN0 b3JfYWxsb2MoMSk7Ci0gICAgICAgIGdzbF92ZWN0b3Jfc2V0X3plcm8oZXhh Y3QpOwotICAgICAgICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24o Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEyLCAyLjAsIE5VTEwsIG5vcm10 YWJsZTIsIGV4YWN0KSwKLSAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBl cnJvciByZXBvcnRlZCBpbiAlcyIpOwotICAgICAgICBnc2xfdmVjdG9yX2Zy ZWUoZXhhY3QpOwotICAgICAgICBjb25zdCBkb3VibGUgcmVzdWx0MiA9IGdz bF9tYXRyaXhfZ2V0KGRhdGEyLCAwLCAwKTsKLQotICAgICAgICBmb3IgKGkg PSAwOyBpIDwgbm9ybXRhYmxlMi0+c2l6ZTEgLSAxOyArK2kpIHsKLSAgICAg ICAgICAgIGZvciAoaiA9IGkrMTsgaiA8IG5vcm10YWJsZTItPnNpemUyOyAr K2opIHsKLSAgICAgICAgICAgICAgICBnc2xfdGVzdCghZ3NsX2lzbmFuKGdz bF9tYXRyaXhfZ2V0KG5vcm10YWJsZTIsIGksIGopKSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICIlcyBleHBlY3RlZCBOQU4gaW4gbm9ybXRhYmxlMiBh dCAoJWQsICVkKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNf XywgaSwgaik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg ICBnc2xfdGVzdF9hYnMocmVzdWx0MSwgcmVzdWx0MiwgR1NMX0RCTF9FUFNJ TE9OLAotICAgICAgICAgICAgICAgICIlcyB3aXRoIGV4YWN0ID09IE5VTEwi LCBfX2Z1bmNfXyk7Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG5vcm10 YWJsZTEtPnNpemUxOyArK2kpIHsKLSAgICAgICAgICAgIGZvciAoaiA9IDA7 IGogPCBpICsgMTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgZ3NsX3Rlc3Rf YWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZTEsIGksIGopLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnc2xfbWF0cml4X2dldChub3JtdGFi bGUyLCBpLCBqKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NM X0RCTF9FUFNJTE9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi JXMgaWRlbnRpY2FsIG5vcm10YWJsZSByZXN1bHRzIGF0ICglZCwgJWQpIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGksIGop OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZ3NsX21h dHJpeF9mcmVlKG5vcm10YWJsZTIpOwotICAgICAgICBnc2xfbWF0cml4X2Zy ZWUobm9ybXRhYmxlMSk7Ci0gICAgfQotCi0gICAgZ3NsX21hdHJpeF9mcmVl KGRhdGEyKTsKLSAgICBnc2xfbWF0cml4X2ZyZWUoZGF0YTEpOworICBnc2xf bWF0cml4ICogZGF0YTEgPSBnc2xfbWF0cml4X2FsbG9jKDEsIDIpOworICBn c2xfbWF0cml4ICogZGF0YTIgPSBnc2xfbWF0cml4X2FsbG9jKGRhdGExLT5z aXplMSwgZGF0YTEtPnNpemUyKTsKKyAgeworICAgIGdzbF9tYXRyaXhfc2V0 KGRhdGExLCAwLCAwLCAxLjApOworICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEx LCAwLCAxLCAyLjApOworCisgICAgZ3NsX3Rlc3QoZ3NsX2V4dHJhcF9yaWNo YXJkc29uX3ZlY3RvcihkYXRhMSwgMiwgTlVMTCwgTlVMTCwgTlVMTCksCisg ICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMi KTsKKyAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQoZGF0YTEsIDAs IDApLCAzLjAsIEdTTF9EQkxfRVBTSUxPTiwKKyAgICAgICAgICAgICAgICAg IiVzIHNjYWxhciBjb3JyZWN0IHJlc3VsdCIsIF9fZnVuY19fKTsKKyAgfQor CisgIHsKKyAgICBnc2xfbWF0cml4X3NldChkYXRhMSwgMCwgMCwgMS4wKTsK KyAgICBnc2xfbWF0cml4X3NldChkYXRhMSwgMCwgMSwgMi4wKTsKKworICAg IGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbl92ZWN0b3IoZGF0YTEs IDMsIE5VTEwsIE5VTEwsIE5VTEwpLAorICAgICAgICAgICAgICJVbmV4cGVj dGVkIGVycm9yIHJlcG9ydGVkIGluICVzIik7CisgICAgZ3NsX3Rlc3RfYWJz KGdzbF9tYXRyaXhfZ2V0KGRhdGExLCAwLCAwKSwgNS4wIC8gMi4wLCBHU0xf REJMX0VQU0lMT04sCisgICAgICAgICAgICAgICAgICIlcyBzY2FsYXIgY29y cmVjdCByZXN1bHQiLCBfX2Z1bmNfXyk7CisgIH0KKworICB7CisgICAgZ3Ns X21hdHJpeF9zZXQoZGF0YTEsIDAsIDAsIDEuMCk7CisgICAgZ3NsX21hdHJp eF9zZXQoZGF0YTEsIDAsIDEsIDIuMCk7CisgICAgZ3NsX21hdHJpeF9tZW1j cHkoZGF0YTIsIGRhdGExKTsKKworICAgIGdzbF90ZXN0KGdzbF9leHRyYXBf cmljaGFyZHNvbl92ZWN0b3IoZGF0YTEsIDIsIE5VTEwsIE5VTEwsIE5VTEwp LAorICAgICAgICAgICAgICJVbmV4cGVjdGVkIGVycm9yIHJlcG9ydGVkIGlu ICVzIik7CisgICAgY29uc3QgZG91YmxlIHJlc3VsdDEgPSBnc2xfbWF0cml4 X2dldChkYXRhMSwgMCwgMCk7CisKKyAgICBnc2xfdGVzdF9hYnMocmVzdWx0 MSwgMy4wLCBHU0xfREJMX0VQU0lMT04sCisgICAgICAgICAgICAgICAgICIl cyBzY2FsYXIgY29ycmVjdCByZXN1bHQiLCBfX2Z1bmNfXyk7CisKKyAgICBn c2xfdmVjdG9yICogayA9IGdzbF92ZWN0b3JfYWxsb2MoMSk7CisgICAgZ3Ns X3ZlY3Rvcl9zZXQoaywgMCwgMSk7CisgICAgZ3NsX3Rlc3QoZ3NsX2V4dHJh cF9yaWNoYXJkc29uX3ZlY3RvcihkYXRhMiwgMiwgaywgTlVMTCwgTlVMTCks CisgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4g JXMiKTsKKyAgICBnc2xfdmVjdG9yX2ZyZWUoayk7CisgICAgY29uc3QgZG91 YmxlIHJlc3VsdDIgPSBnc2xfbWF0cml4X2dldChkYXRhMiwgMCwgMCk7CisK KyAgICBnc2xfdGVzdF9hYnMocmVzdWx0MSwgcmVzdWx0MiwgR1NMX0RCTF9F UFNJTE9OLAorICAgICAgICAgICAgICAgICAiJXMgd2l0aCBrID09IE5VTEwi LCBfX2Z1bmNfXyk7CisgIH0KKworICB7CisgICAgaW50IGksIGo7CisgICAg Z3NsX21hdHJpeF9zZXQoZGF0YTEsIDAsIDAsIDEuMCk7CisgICAgZ3NsX21h dHJpeF9zZXQoZGF0YTEsIDAsIDEsIDIuMCk7CisgICAgZ3NsX21hdHJpeF9t ZW1jcHkoZGF0YTIsIGRhdGExKTsKKworICAgIGdzbF9tYXRyaXggKiBub3Jt dGFibGUxID0gZ3NsX21hdHJpeF9hbGxvYyhkYXRhMS0+c2l6ZTIsIGRhdGEx LT5zaXplMik7CisgICAgZ3NsX21hdHJpeCAqIG5vcm10YWJsZTIgPSBnc2xf bWF0cml4X2FsbG9jKGRhdGExLT5zaXplMiwgZGF0YTEtPnNpemUyKTsKKwor ICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbl92ZWN0b3IoCisg ICAgICAgICAgICAgICBkYXRhMSwgMiwgTlVMTCwgbm9ybXRhYmxlMSwgTlVM TCksCisgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQg aW4gJXMiKTsKKyAgICBjb25zdCBkb3VibGUgcmVzdWx0MSA9IGdzbF9tYXRy aXhfZ2V0KGRhdGExLCAwLCAwKTsKKworICAgIGdzbF90ZXN0X2FicyhyZXN1 bHQxLCAzLjAsIEdTTF9EQkxfRVBTSUxPTiwKKyAgICAgICAgICAgICAgICAg IiVzIGNvcnJlY3QgZXh0cmFwb2xhdGlvbiBhbnN3ZXIiKTsKKworICAgIGZv ciAoaSA9IDA7IGkgPCBub3JtdGFibGUxLT5zaXplMSAtIDE7ICsraSkKKyAg ICAgIHsKKyAgICAgICAgZm9yIChqID0gaSArIDE7IGogPCBub3JtdGFibGUx LT5zaXplMjsgKytqKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGdzbF90 ZXN0KCFnc2xfaXNuYW4oZ3NsX21hdHJpeF9nZXQobm9ybXRhYmxlMSwgaSwg aikpLAorICAgICAgICAgICAgICAgICAgICAgIiVzIGV4cGVjdGVkIE5BTiBp biBub3JtdGFibGUxIGF0ICglZCwgJWQpIiwKKyAgICAgICAgICAgICAgICAg ICAgIF9fZnVuY19fLCBpLCBqKTsKKyAgICAgICAgICB9CisgICAgICB9CisK KyAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQobm9ybXRhYmxlMSwg MCwgMCksIDEuMCwgR1NMX0RCTF9FUFNJTE9OLAorICAgICAgICAgICAgICAg ICAiJXMgbm9ybXRhYmxlMSAoMCwwKSB2YWx1ZSIsIF9fZnVuY19fKTsKKyAg ICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQobm9ybXRhYmxlMSwgMSwg MCksIDIuMCwgR1NMX0RCTF9FUFNJTE9OLAorICAgICAgICAgICAgICAgICAi JXMgbm9ybXRhYmxlMSAoMSwwKSB2YWx1ZSIsIF9fZnVuY19fKTsKKyAgICBn c2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQobm9ybXRhYmxlMSwgMSwgMSks IDMuMCwgR1NMX0RCTF9FUFNJTE9OLAorICAgICAgICAgICAgICAgICAiJXMg bm9ybXRhYmxlMSAoMSwxKSB2YWx1ZSIsIF9fZnVuY19fKTsKKworICAgIGdz bF92ZWN0b3IgKiBleGFjdCA9IGdzbF92ZWN0b3JfYWxsb2MoMSk7CisgICAg Z3NsX3ZlY3Rvcl9zZXRfemVybyhleGFjdCk7CisgICAgZ3NsX3Rlc3QoZ3Ns X2V4dHJhcF9yaWNoYXJkc29uX3ZlY3RvcigKKyAgICAgICAgICAgICAgIGRh dGEyLCAyLjAsIE5VTEwsIG5vcm10YWJsZTIsIGV4YWN0KSwKKyAgICAgICAg ICAgICAiVW5leHBlY3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIpOworICAg IGdzbF92ZWN0b3JfZnJlZShleGFjdCk7CisgICAgY29uc3QgZG91YmxlIHJl c3VsdDIgPSBnc2xfbWF0cml4X2dldChkYXRhMiwgMCwgMCk7CisKKyAgICBm b3IgKGkgPSAwOyBpIDwgbm9ybXRhYmxlMi0+c2l6ZTEgLSAxOyArK2kpCisg ICAgICB7CisgICAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgbm9ybXRhYmxl Mi0+c2l6ZTI7ICsraikKKyAgICAgICAgICB7CisgICAgICAgICAgICBnc2xf dGVzdCghZ3NsX2lzbmFuKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZTIsIGks IGopKSwKKyAgICAgICAgICAgICAgICAgICAgICIlcyBleHBlY3RlZCBOQU4g aW4gbm9ybXRhYmxlMiBhdCAoJWQsICVkKSIsCisgICAgICAgICAgICAgICAg ICAgICBfX2Z1bmNfXywgaSwgaik7CisgICAgICAgICAgfQorICAgICAgfQor CisgICAgZ3NsX3Rlc3RfYWJzKHJlc3VsdDEsIHJlc3VsdDIsIEdTTF9EQkxf RVBTSUxPTiwKKyAgICAgICAgICAgICAgICAgIiVzIHdpdGggZXhhY3QgPT0g TlVMTCIsIF9fZnVuY19fKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBub3Jt dGFibGUxLT5zaXplMTsgKytpKQorICAgICAgeworICAgICAgICBmb3IgKGog PSAwOyBqIDwgaSArIDE7ICsraikKKyAgICAgICAgICB7CisgICAgICAgICAg ICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQobm9ybXRhYmxlMSwgaSwg aiksCisgICAgICAgICAgICAgICAgICAgICAgICAgZ3NsX21hdHJpeF9nZXQo bm9ybXRhYmxlMiwgaSwgaiksCisgICAgICAgICAgICAgICAgICAgICAgICAg R1NMX0RCTF9FUFNJTE9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICIl cyBpZGVudGljYWwgbm9ybXRhYmxlIHJlc3VsdHMgYXQgKCVkLCAlZCkiLAor ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBpLCBqKTsKKyAg ICAgICAgICB9CisgICAgICB9CisKKyAgICBnc2xfbWF0cml4X2ZyZWUobm9y bXRhYmxlMik7CisgICAgZ3NsX21hdHJpeF9mcmVlKG5vcm10YWJsZTEpOwor ICB9CisKKyAgZ3NsX21hdHJpeF9mcmVlKGRhdGEyKTsKKyAgZ3NsX21hdHJp eF9mcmVlKGRhdGExKTsKIH0KIAogdm9pZAotdGVzdF9yaWNoYXJkc29uX2V4 dHJhcG9sYXRpb25fdHdvbGV2ZWxzKCkKK3Rlc3RfcmljaGFyZHNvbl92ZWN0 b3JfZXh0cmFwb2xhdGlvbl90d29sZXZlbHMoKQogewotICAgIGdzbF9tYXRy aXggKiBkYXRhMiA9IGdzbF9tYXRyaXhfYWxsb2MoMSwgMik7Ci0gICAgZ3Ns X21hdHJpeCAqIGRhdGEzID0gZ3NsX21hdHJpeF9hbGxvYygxLCAzKTsKLSAg ICBnc2xfdmVjdG9yICogazEgPSBnc2xfdmVjdG9yX2FsbG9jKDEpOwotICAg IGdzbF92ZWN0b3IgKiBrMiA9IGdzbF92ZWN0b3JfYWxsb2MoMik7Ci0KLSAg ICB7Ci0gICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEyLCAwLCAwLCAxLjAp OwotICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhMiwgMCwgMSwgMi4wKTsK LSAgICAgICAgZ3NsX3ZlY3Rvcl9zZXQoazEsIDAsIDEpOwotCi0gICAgICAg IGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbihkYXRhMiwgMiwgazEs IE5VTEwsIE5VTEwpLAotICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGVy cm9yIHJlcG9ydGVkIGluICVzIik7Ci0gICAgICAgIGdzbF90ZXN0X2Ficyhn c2xfbWF0cml4X2dldChkYXRhMiwgMCwgMCksIDMuMCwgR1NMX0RCTF9FUFNJ TE9OLAotICAgICAgICAgICAgICAgICIlcyBzY2FsYXIgY29ycmVjdCByZXN1 bHQgYXQgJXM6JWQiLAotICAgICAgICAgICAgICAgIF9fZnVuY19fLCBfX0ZJ TEVfXywgX19MSU5FX18pOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgZ3Ns X21hdHJpeF9zZXQoZGF0YTIsIDAsIDAsIDIuMCk7Ci0gICAgICAgIGdzbF9t YXRyaXhfc2V0KGRhdGEyLCAwLCAxLCAzLjApOwotICAgICAgICBnc2xfdmVj dG9yX3NldChrMSwgMCwgMSk7Ci0KLSAgICAgICAgZ3NsX3Rlc3QoZ3NsX2V4 dHJhcF9yaWNoYXJkc29uKGRhdGEyLCAyLCBrMSwgTlVMTCwgTlVMTCksCi0g ICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4g JXMiKTsKLSAgICAgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRyaXhfZ2V0KGRh dGEyLCAwLCAwKSwgNC4wLCBHU0xfREJMX0VQU0lMT04sCi0gICAgICAgICAg ICAgICAgIiVzIHNjYWxhciBjb3JyZWN0IHJlc3VsdCBhdCAlczolZCIsCi0g ICAgICAgICAgICAgICAgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7 Ci0gICAgfQotCi0gICAgewotICAgICAgICBnc2xfbWF0cml4X3NldChkYXRh MiwgMCwgMCwgMy4wKTsKLSAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIs IDAsIDEsIDQuMCk7Ci0gICAgICAgIGdzbF92ZWN0b3Jfc2V0KGsxLCAwLCAy KTsKLQotICAgICAgICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24o ZGF0YTIsIDIsIGsxLCBOVUxMLCBOVUxMKSwKLSAgICAgICAgICAgICAgICAi VW5leHBlY3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIpOwotICAgICAgICBn c2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQoZGF0YTIsIDAsIDApLCAxMy4w LzMuMCwgR1NMX0RCTF9FUFNJTE9OLAotICAgICAgICAgICAgICAgICIlcyBz Y2FsYXIgY29ycmVjdCByZXN1bHQgYXQgJXM6JWQiLAotICAgICAgICAgICAg ICAgIF9fZnVuY19fLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgIH0KLQot ICAgIHsKLSAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTMsIDAsIDAsIDEu MCk7Ci0gICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEzLCAwLCAxLCAyLjAp OwotICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhMywgMCwgMiwgMy4wKTsK LSAgICAgICAgZ3NsX3ZlY3Rvcl9zZXQoazEsIDAsIDEpOwotCi0gICAgICAg IGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbihkYXRhMywgMiwgazEs IE5VTEwsIE5VTEwpLAotICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGVy cm9yIHJlcG9ydGVkIGluICVzIik7Ci0gICAgICAgIGdzbF90ZXN0X2Ficyhn c2xfbWF0cml4X2dldChkYXRhMywgMCwgMCksIDEzLjAvMy4wLCBHU0xfREJM X0VQU0lMT04sCi0gICAgICAgICAgICAgICAgIiVzIHNjYWxhciBjb3JyZWN0 IHJlc3VsdCBhdCAlczolZCIsCi0gICAgICAgICAgICAgICAgX19mdW5jX18s IF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gICAgfQotCi0gICAgewotICAgICAg ICBpbnQgaSwgajsKLSAgICAgICAgZ3NsX21hdHJpeCAqIG5vcm10YWJsZSA9 IGdzbF9tYXRyaXhfYWxsb2MoZGF0YTMtPnNpemUyLCBkYXRhMy0+c2l6ZTIp OwotCi0gICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEzLCAwLCAwLCAxLjAp OwotICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhMywgMCwgMSwgMi4wKTsK LSAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTMsIDAsIDIsIDMuMCk7Ci0g ICAgICAgIGdzbF92ZWN0b3Jfc2V0KGsyLCAwLCAxKTsKLSAgICAgICAgZ3Ns X3ZlY3Rvcl9zZXQoazIsIDEsIDIpOwotCi0gICAgICAgIGdzbF90ZXN0KGdz bF9leHRyYXBfcmljaGFyZHNvbihkYXRhMywgMiwgazIsIG5vcm10YWJsZSwg TlVMTCksCi0gICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3IgcmVw b3J0ZWQgaW4gJXMiKTsKLSAgICAgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRy aXhfZ2V0KGRhdGEzLCAwLCAwKSwgMTMuMC8zLjAsIEdTTF9EQkxfRVBTSUxP TiwKLSAgICAgICAgICAgICAgICAiJXMgc2NhbGFyIGNvcnJlY3QgcmVzdWx0 IGF0ICVzOiVkIiwKLSAgICAgICAgICAgICAgICBfX2Z1bmNfXywgX19GSUxF X18sIF9fTElORV9fKTsKLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbm9y bXRhYmxlLT5zaXplMSAtIDE7ICsraSkgewotICAgICAgICAgICAgZm9yIChq ID0gaSsxOyBqIDwgbm9ybXRhYmxlLT5zaXplMjsgKytqKSB7Ci0gICAgICAg ICAgICAgICAgZ3NsX3Rlc3QoIWdzbF9pc25hbihnc2xfbWF0cml4X2dldChu b3JtdGFibGUsIGksIGopKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICIl cyBleHBlY3RlZCBOQU4gaW4gbm9ybXRhYmxlIGF0ICglZCwgJWQpIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBpLCBqKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGdzbF90ZXN0X2Ficyhn c2xfbWF0cml4X2dldChub3JtdGFibGUsIDAsIDApLCAxLjAsIEdTTF9EQkxf RVBTSUxPTiwKLSAgICAgICAgICAgICAgICAiJXMgbm9ybXRhYmxlICgwLDAp IHZhbHVlIiwgX19mdW5jX18pOwotICAgICAgICBnc2xfdGVzdF9hYnMoZ3Ns X21hdHJpeF9nZXQobm9ybXRhYmxlLCAxLCAwKSwgMi4wLCBHU0xfREJMX0VQ U0lMT04sCi0gICAgICAgICAgICAgICAgIiVzIG5vcm10YWJsZSAoMSwwKSB2 YWx1ZSIsIF9fZnVuY19fKTsKLSAgICAgICAgZ3NsX3Rlc3RfYWJzKGdzbF9t YXRyaXhfZ2V0KG5vcm10YWJsZSwgMiwgMCksIDMuMCwgR1NMX0RCTF9FUFNJ TE9OLAotICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDIsMCkgdmFs dWUiLCBfX2Z1bmNfXyk7Ci0gICAgICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0 cml4X2dldChub3JtdGFibGUsIDEsIDEpLCAzLjAsIEdTTF9EQkxfRVBTSUxP TiwKLSAgICAgICAgICAgICAgICAiJXMgbm9ybXRhYmxlICgxLDEpIHZhbHVl IiwgX19mdW5jX18pOwotICAgICAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJp eF9nZXQobm9ybXRhYmxlLCAyLCAxKSwgNC4wLCBHU0xfREJMX0VQU0lMT04s Ci0gICAgICAgICAgICAgICAgIiVzIG5vcm10YWJsZSAoMiwxKSB2YWx1ZSIs IF9fZnVuY19fKTsKLSAgICAgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRyaXhf Z2V0KG5vcm10YWJsZSwgMiwgMiksIDEzLjAvMy4wLCBHU0xfREJMX0VQU0lM T04sCi0gICAgICAgICAgICAgICAgIiVzIG5vcm10YWJsZSAoMiwyKSB2YWx1 ZSIsIF9fZnVuY19fKTsKLQotICAgICAgICBnc2xfbWF0cml4X2ZyZWUobm9y bXRhYmxlKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIGdzbF9tYXRyaXhf c2V0KGRhdGEzLCAwLCAwLCAxLjApOwotICAgICAgICBnc2xfbWF0cml4X3Nl dChkYXRhMywgMCwgMSwgMi4wKTsKLSAgICAgICAgZ3NsX21hdHJpeF9zZXQo ZGF0YTMsIDAsIDIsIDMuMCk7Ci0gICAgICAgIGdzbF92ZWN0b3Jfc2V0KGsy LCAwLCAyKTsKLSAgICAgICAgZ3NsX3ZlY3Rvcl9zZXQoazIsIDEsIDMpOwot Ci0gICAgICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbihkYXRh MywgMiwgazIsIE5VTEwsIE5VTEwpLAotICAgICAgICAgICAgICAgICJVbmV4 cGVjdGVkIGVycm9yIHJlcG9ydGVkIGluICVzIik7Ci0gICAgICAgIGdzbF90 ZXN0X2Ficyhnc2xfbWF0cml4X2dldChkYXRhMywgMCwgMCksIDczLjAvMjEu MCwgR1NMX0RCTF9FUFNJTE9OLAotICAgICAgICAgICAgICAgICIlcyBzY2Fs YXIgY29ycmVjdCByZXN1bHQgYXQgJXM6JWQiLAotICAgICAgICAgICAgICAg IF9fZnVuY19fLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgIH0KLQotICAg IHsKLSAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTMsIDAsIDAsIDEuMCk7 Ci0gICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEzLCAwLCAxLCAyLjApOwot ICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhMywgMCwgMiwgMy4wKTsKLSAg ICAgICAgZ3NsX3ZlY3Rvcl9zZXQoazEsIDAsIDIpOwotCi0gICAgICAgIGdz bF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbihkYXRhMywgMiwgazEsIE5V TEwsIE5VTEwpLAotICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGVycm9y IHJlcG9ydGVkIGluICVzIik7Ci0gICAgICAgIGdzbF90ZXN0X2Ficyhnc2xf bWF0cml4X2dldChkYXRhMywgMCwgMCksIDczLjAvMjEuMCwgR1NMX0RCTF9F UFNJTE9OLAotICAgICAgICAgICAgICAgICIlcyBzY2FsYXIgY29ycmVjdCBy ZXN1bHQgYXQgJXM6JWQiLAotICAgICAgICAgICAgICAgIF9fZnVuY19fLCBf X0ZJTEVfXywgX19MSU5FX18pOwotICAgIH0KLQotCi0gICAgZ3NsX3ZlY3Rv cl9mcmVlKGsyKTsKLSAgICBnc2xfdmVjdG9yX2ZyZWUoazEpOwotICAgIGdz bF9tYXRyaXhfZnJlZShkYXRhMyk7Ci0gICAgZ3NsX21hdHJpeF9mcmVlKGRh dGEyKTsKKyAgZ3NsX21hdHJpeCAqIGRhdGEyID0gZ3NsX21hdHJpeF9hbGxv YygxLCAyKTsKKyAgZ3NsX21hdHJpeCAqIGRhdGEzID0gZ3NsX21hdHJpeF9h bGxvYygxLCAzKTsKKyAgZ3NsX3ZlY3RvciAqIGsxID0gZ3NsX3ZlY3Rvcl9h bGxvYygxKTsKKyAgZ3NsX3ZlY3RvciAqIGsyID0gZ3NsX3ZlY3Rvcl9hbGxv YygyKTsKKworICB7CisgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIsIDAsIDAs IDEuMCk7CisgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIsIDAsIDEsIDIuMCk7 CisgICAgZ3NsX3ZlY3Rvcl9zZXQoazEsIDAsIDEpOworCisgICAgZ3NsX3Rl c3QoZ3NsX2V4dHJhcF9yaWNoYXJkc29uX3ZlY3RvcihkYXRhMiwgMiwgazEs IE5VTEwsIE5VTEwpLAorICAgICAgICAgICAgICJVbmV4cGVjdGVkIGVycm9y IHJlcG9ydGVkIGluICVzIik7CisgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRy aXhfZ2V0KGRhdGEyLCAwLCAwKSwgMy4wLCBHU0xfREJMX0VQU0lMT04sCisg ICAgICAgICAgICAgICAgICIlcyBzY2FsYXIgY29ycmVjdCByZXN1bHQgYXQg JXM6JWQiLAorICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgX19GSUxFX18s IF9fTElORV9fKTsKKyAgfQorCisgIHsKKyAgICBnc2xfbWF0cml4X3NldChk YXRhMiwgMCwgMCwgMi4wKTsKKyAgICBnc2xfbWF0cml4X3NldChkYXRhMiwg MCwgMSwgMy4wKTsKKyAgICBnc2xfdmVjdG9yX3NldChrMSwgMCwgMSk7CisK KyAgICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb25fdmVjdG9yKGRh dGEyLCAyLCBrMSwgTlVMTCwgTlVMTCksCisgICAgICAgICAgICAgIlVuZXhw ZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMiKTsKKyAgICBnc2xfdGVzdF9h YnMoZ3NsX21hdHJpeF9nZXQoZGF0YTIsIDAsIDApLCA0LjAsIEdTTF9EQkxf RVBTSUxPTiwKKyAgICAgICAgICAgICAgICAgIiVzIHNjYWxhciBjb3JyZWN0 IHJlc3VsdCBhdCAlczolZCIsCisgICAgICAgICAgICAgICAgIF9fZnVuY19f LCBfX0ZJTEVfXywgX19MSU5FX18pOworICB9CisKKyAgeworICAgIGdzbF9t YXRyaXhfc2V0KGRhdGEyLCAwLCAwLCAzLjApOworICAgIGdzbF9tYXRyaXhf c2V0KGRhdGEyLCAwLCAxLCA0LjApOworICAgIGdzbF92ZWN0b3Jfc2V0KGsx LCAwLCAyKTsKKworICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNv bl92ZWN0b3IoZGF0YTIsIDIsIGsxLCBOVUxMLCBOVUxMKSwKKyAgICAgICAg ICAgICAiVW5leHBlY3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIpOworICAg IGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4X2dldChkYXRhMiwgMCwgMCksIDEz LjAgLyAzLjAsIEdTTF9EQkxfRVBTSUxPTiwKKyAgICAgICAgICAgICAgICAg IiVzIHNjYWxhciBjb3JyZWN0IHJlc3VsdCBhdCAlczolZCIsCisgICAgICAg ICAgICAgICAgIF9fZnVuY19fLCBfX0ZJTEVfXywgX19MSU5FX18pOworICB9 CisKKyAgeworICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEzLCAwLCAwLCAxLjAp OworICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEzLCAwLCAxLCAyLjApOworICAg IGdzbF9tYXRyaXhfc2V0KGRhdGEzLCAwLCAyLCAzLjApOworICAgIGdzbF92 ZWN0b3Jfc2V0KGsxLCAwLCAxKTsKKworICAgIGdzbF90ZXN0KGdzbF9leHRy YXBfcmljaGFyZHNvbl92ZWN0b3IoZGF0YTMsIDIsIGsxLCBOVUxMLCBOVUxM KSwKKyAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJvciByZXBvcnRlZCBp biAlcyIpOworICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4X2dldChkYXRh MywgMCwgMCksIDEzLjAgLyAzLjAsIEdTTF9EQkxfRVBTSUxPTiwKKyAgICAg ICAgICAgICAgICAgIiVzIHNjYWxhciBjb3JyZWN0IHJlc3VsdCBhdCAlczol ZCIsCisgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBfX0ZJTEVfXywgX19M SU5FX18pOworICB9CisKKyAgeworICAgIGludCBpLCBqOworICAgIGdzbF9t YXRyaXggKiBub3JtdGFibGUgPSBnc2xfbWF0cml4X2FsbG9jKGRhdGEzLT5z aXplMiwgZGF0YTMtPnNpemUyKTsKKworICAgIGdzbF9tYXRyaXhfc2V0KGRh dGEzLCAwLCAwLCAxLjApOworICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEzLCAw LCAxLCAyLjApOworICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEzLCAwLCAyLCAz LjApOworICAgIGdzbF92ZWN0b3Jfc2V0KGsyLCAwLCAxKTsKKyAgICBnc2xf dmVjdG9yX3NldChrMiwgMSwgMik7CisKKyAgICBnc2xfdGVzdChnc2xfZXh0 cmFwX3JpY2hhcmRzb25fdmVjdG9yKGRhdGEzLCAyLCBrMiwgbm9ybXRhYmxl LCBOVUxMKSwKKyAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJvciByZXBv cnRlZCBpbiAlcyIpOworICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4X2dl dChkYXRhMywgMCwgMCksIDEzLjAgLyAzLjAsIEdTTF9EQkxfRVBTSUxPTiwK KyAgICAgICAgICAgICAgICAgIiVzIHNjYWxhciBjb3JyZWN0IHJlc3VsdCBh dCAlczolZCIsCisgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBfX0ZJTEVf XywgX19MSU5FX18pOworCisgICAgZm9yIChpID0gMDsgaSA8IG5vcm10YWJs ZS0+c2l6ZTEgLSAxOyArK2kpCisgICAgICB7CisgICAgICAgIGZvciAoaiA9 IGkgKyAxOyBqIDwgbm9ybXRhYmxlLT5zaXplMjsgKytqKQorICAgICAgICAg IHsKKyAgICAgICAgICAgIGdzbF90ZXN0KCFnc2xfaXNuYW4oZ3NsX21hdHJp eF9nZXQobm9ybXRhYmxlLCBpLCBqKSksCisgICAgICAgICAgICAgICAgICAg ICAiJXMgZXhwZWN0ZWQgTkFOIGluIG5vcm10YWJsZSBhdCAoJWQsICVkKSIs CisgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgaSwgaik7CisgICAg ICAgICAgfQorICAgICAgfQorCisgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRy aXhfZ2V0KG5vcm10YWJsZSwgMCwgMCksIDEuMCwgR1NMX0RCTF9FUFNJTE9O LAorICAgICAgICAgICAgICAgICAiJXMgbm9ybXRhYmxlICgwLDApIHZhbHVl IiwgX19mdW5jX18pOworICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4X2dl dChub3JtdGFibGUsIDEsIDApLCAyLjAsIEdTTF9EQkxfRVBTSUxPTiwKKyAg ICAgICAgICAgICAgICAgIiVzIG5vcm10YWJsZSAoMSwwKSB2YWx1ZSIsIF9f ZnVuY19fKTsKKyAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQobm9y bXRhYmxlLCAyLCAwKSwgMy4wLCBHU0xfREJMX0VQU0lMT04sCisgICAgICAg ICAgICAgICAgICIlcyBub3JtdGFibGUgKDIsMCkgdmFsdWUiLCBfX2Z1bmNf Xyk7CisgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJs ZSwgMSwgMSksIDMuMCwgR1NMX0RCTF9FUFNJTE9OLAorICAgICAgICAgICAg ICAgICAiJXMgbm9ybXRhYmxlICgxLDEpIHZhbHVlIiwgX19mdW5jX18pOwor ICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4X2dldChub3JtdGFibGUsIDIs IDEpLCA0LjAsIEdTTF9EQkxfRVBTSUxPTiwKKyAgICAgICAgICAgICAgICAg IiVzIG5vcm10YWJsZSAoMiwxKSB2YWx1ZSIsIF9fZnVuY19fKTsKKyAgICBn c2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQobm9ybXRhYmxlLCAyLCAyKSwg MTMuMCAvIDMuMCwgR1NMX0RCTF9FUFNJTE9OLAorICAgICAgICAgICAgICAg ICAiJXMgbm9ybXRhYmxlICgyLDIpIHZhbHVlIiwgX19mdW5jX18pOworCisg ICAgZ3NsX21hdHJpeF9mcmVlKG5vcm10YWJsZSk7CisgIH0KKworICB7Cisg ICAgZ3NsX21hdHJpeF9zZXQoZGF0YTMsIDAsIDAsIDEuMCk7CisgICAgZ3Ns X21hdHJpeF9zZXQoZGF0YTMsIDAsIDEsIDIuMCk7CisgICAgZ3NsX21hdHJp eF9zZXQoZGF0YTMsIDAsIDIsIDMuMCk7CisgICAgZ3NsX3ZlY3Rvcl9zZXQo azIsIDAsIDIpOworICAgIGdzbF92ZWN0b3Jfc2V0KGsyLCAxLCAzKTsKKwor ICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbl92ZWN0b3IoZGF0 YTMsIDIsIGsyLCBOVUxMLCBOVUxMKSwKKyAgICAgICAgICAgICAiVW5leHBl Y3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIpOworICAgIGdzbF90ZXN0X2Fi cyhnc2xfbWF0cml4X2dldChkYXRhMywgMCwgMCksIDczLjAgLyAyMS4wLAor ICAgICAgICAgICAgICAgICBHU0xfREJMX0VQU0lMT04qMTAsCisgICAgICAg ICAgICAgICAgICIlcyBzY2FsYXIgY29ycmVjdCByZXN1bHQgYXQgJXM6JWQi LAorICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElO RV9fKTsKKyAgfQorCisgIHsKKyAgICBnc2xfbWF0cml4X3NldChkYXRhMywg MCwgMCwgMS4wKTsKKyAgICBnc2xfbWF0cml4X3NldChkYXRhMywgMCwgMSwg Mi4wKTsKKyAgICBnc2xfbWF0cml4X3NldChkYXRhMywgMCwgMiwgMy4wKTsK KyAgICBnc2xfdmVjdG9yX3NldChrMSwgMCwgMik7CisKKyAgICBnc2xfdGVz dChnc2xfZXh0cmFwX3JpY2hhcmRzb25fdmVjdG9yKGRhdGEzLCAyLCBrMSwg TlVMTCwgTlVMTCksCisgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3Ig cmVwb3J0ZWQgaW4gJXMiKTsKKyAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJp eF9nZXQoZGF0YTMsIDAsIDApLCA3My4wIC8gMjEuMCwKKyAgICAgICAgICAg ICAgICAgR1NMX0RCTF9FUFNJTE9OKjEwLAorICAgICAgICAgICAgICAgICAi JXMgc2NhbGFyIGNvcnJlY3QgcmVzdWx0IGF0ICVzOiVkIiwKKyAgICAgICAg ICAgICAgICAgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgIH0K KworCisgIGdzbF92ZWN0b3JfZnJlZShrMik7CisgIGdzbF92ZWN0b3JfZnJl ZShrMSk7CisgIGdzbF9tYXRyaXhfZnJlZShkYXRhMyk7CisgIGdzbF9tYXRy aXhfZnJlZShkYXRhMik7CiAKIH0KIAogdm9pZAotdGVzdF9yaWNoYXJkc29u X2V4dHJhcG9sYXRpb25fbXVsdGlwbGVsZXZlbHMoKQordGVzdF9yaWNoYXJk c29uX3ZlY3Rvcl9leHRyYXBvbGF0aW9uX211bHRpcGxlbGV2ZWxzKCkKK3sK KyAgZ3NsX21hdHJpeCAqIGRhdGEyID0gZ3NsX21hdHJpeF9hbGxvYygxLCAy KTsKKyAgZ3NsX21hdHJpeCAqIGRhdGE0ID0gZ3NsX21hdHJpeF9hbGxvYygx LCA0KTsKKyAgZ3NsX3ZlY3RvciAqIGsxID0gZ3NsX3ZlY3Rvcl9hbGxvYygx KTsKKyAgZ3NsX3ZlY3RvciAqIGsyID0gZ3NsX3ZlY3Rvcl9hbGxvYygyKTsK KyAgZ3NsX3ZlY3RvciAqIGszID0gZ3NsX3ZlY3Rvcl9hbGxvYygzKTsKKwor ICB7CisgICAgaW50IGksIGo7CisgICAgZ3NsX3ZlY3Rvcl9zZXQoazEsIDAs IDMpOworCisgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIsIDAsIDAsIDEuMCk7 CisgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIsIDAsIDEsIDIuMCk7CisgICAg Z3NsX3Rlc3QoZ3NsX2V4dHJhcF9yaWNoYXJkc29uX3ZlY3RvcihkYXRhMiwg MiwgazEsIE5VTEwsIE5VTEwpLAorICAgICAgICAgICAgICJVbmV4cGVjdGVk IGVycm9yIHJlcG9ydGVkIGluICVzIik7CisgICAgY29uc3QgZG91YmxlIHh4 ID0gZ3NsX21hdHJpeF9nZXQoZGF0YTIsIDAsIDApOworCisgICAgZ3NsX21h dHJpeF9zZXQoZGF0YTIsIDAsIDAsIDIuMCk7CisgICAgZ3NsX21hdHJpeF9z ZXQoZGF0YTIsIDAsIDEsIDMuMCk7CisgICAgZ3NsX3Rlc3QoZ3NsX2V4dHJh cF9yaWNoYXJkc29uX3ZlY3RvcihkYXRhMiwgMiwgazEsIE5VTEwsIE5VTEwp LAorICAgICAgICAgICAgICJVbmV4cGVjdGVkIGVycm9yIHJlcG9ydGVkIGlu ICVzIik7CisgICAgY29uc3QgZG91YmxlIHh5ID0gZ3NsX21hdHJpeF9nZXQo ZGF0YTIsIDAsIDApOworCisgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIsIDAs IDAsIDMuMCk7CisgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIsIDAsIDEsIDQu MCk7CisgICAgZ3NsX3Rlc3QoZ3NsX2V4dHJhcF9yaWNoYXJkc29uX3ZlY3Rv cihkYXRhMiwgMiwgazEsIE5VTEwsIE5VTEwpLAorICAgICAgICAgICAgICJV bmV4cGVjdGVkIGVycm9yIHJlcG9ydGVkIGluICVzIik7CisgICAgY29uc3Qg ZG91YmxlIHh6ID0gZ3NsX21hdHJpeF9nZXQoZGF0YTIsIDAsIDApOworCisg ICAgZ3NsX3ZlY3Rvcl9zZXQoazEsIDAsIDYpOworCisgICAgZ3NsX21hdHJp eF9zZXQoZGF0YTIsIDAsIDAsIHh4KTsKKyAgICBnc2xfbWF0cml4X3NldChk YXRhMiwgMCwgMSwgeHkpOworICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmlj aGFyZHNvbl92ZWN0b3IoZGF0YTIsIDIsIGsxLCBOVUxMLCBOVUxMKSwKKyAg ICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIp OworICAgIGNvbnN0IGRvdWJsZSB5eCA9IGdzbF9tYXRyaXhfZ2V0KGRhdGEy LCAwLCAwKTsKKworICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEyLCAwLCAwLCB4 eSk7CisgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIsIDAsIDEsIHh6KTsKKyAg ICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb25fdmVjdG9yKGRhdGEy LCAyLCBrMSwgTlVMTCwgTlVMTCksCisgICAgICAgICAgICAgIlVuZXhwZWN0 ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMiKTsKKyAgICBjb25zdCBkb3VibGUg eXkgPSBnc2xfbWF0cml4X2dldChkYXRhMiwgMCwgMCk7CisKKyAgICBnc2xf dmVjdG9yX3NldChrMSwgMCwgOSk7CisKKyAgICBnc2xfbWF0cml4X3NldChk YXRhMiwgMCwgMCwgeXgpOworICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEyLCAw LCAxLCB5eSk7CisgICAgZ3NsX3Rlc3QoZ3NsX2V4dHJhcF9yaWNoYXJkc29u X3ZlY3RvcihkYXRhMiwgMiwgazEsIE5VTEwsIE5VTEwpLAorICAgICAgICAg ICAgICJVbmV4cGVjdGVkIGVycm9yIHJlcG9ydGVkIGluICVzIik7CisgICAg Y29uc3QgZG91YmxlIHp4ID0gZ3NsX21hdHJpeF9nZXQoZGF0YTIsIDAsIDAp OworCisgICAgZ3NsX3ZlY3Rvcl9zZXQoazMsIDAsIDMpOworICAgIGdzbF92 ZWN0b3Jfc2V0KGszLCAxLCA2KTsKKyAgICBnc2xfdmVjdG9yX3NldChrMywg MiwgOSk7CisKKyAgICBnc2xfbWF0cml4X3NldChkYXRhNCwgMCwgMCwgMS4w KTsKKyAgICBnc2xfbWF0cml4X3NldChkYXRhNCwgMCwgMSwgMi4wKTsKKyAg ICBnc2xfbWF0cml4X3NldChkYXRhNCwgMCwgMiwgMy4wKTsKKyAgICBnc2xf bWF0cml4X3NldChkYXRhNCwgMCwgMywgNC4wKTsKKyAgICBnc2xfdGVzdChn c2xfZXh0cmFwX3JpY2hhcmRzb25fdmVjdG9yKGRhdGE0LCAyLCBrMywgTlVM TCwgTlVMTCksCisgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3IgcmVw b3J0ZWQgaW4gJXMiKTsKKyAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9n ZXQoZGF0YTQsIDAsIDApLCB6eCwgR1NMX0RCTF9FUFNJTE9OLAorICAgICAg ICAgICAgICAgICAiJXMgc2NhbGFyIGNvcnJlY3QgcmVzdWx0IGF0ICVzOiVk IiwKKyAgICAgICAgICAgICAgICAgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJ TkVfXyk7CisKKyAgICBnc2xfbWF0cml4ICogbm9ybXRhYmxlID0gZ3NsX21h dHJpeF9hbGxvYyhkYXRhNC0+c2l6ZTIsIGRhdGE0LT5zaXplMik7CisKKyAg ICBnc2xfdmVjdG9yX3NldChrMiwgMCwgMyk7CisgICAgZ3NsX3ZlY3Rvcl9z ZXQoazIsIDEsIDYpOworCisgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTQsIDAs IDAsIDEuMCk7CisgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTQsIDAsIDEsIDIu MCk7CisgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTQsIDAsIDIsIDMuMCk7Cisg ICAgZ3NsX21hdHJpeF9zZXQoZGF0YTQsIDAsIDMsIDQuMCk7CisgICAgZ3Ns X3Rlc3QoZ3NsX2V4dHJhcF9yaWNoYXJkc29uX3ZlY3RvcihkYXRhNCwgMiwg azIsIG5vcm10YWJsZSwgTlVMTCksCisgICAgICAgICAgICAgIlVuZXhwZWN0 ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMiKTsKKyAgICBnc2xfdGVzdF9hYnMo Z3NsX21hdHJpeF9nZXQoZGF0YTQsIDAsIDApLCB6eCwgR1NMX0RCTF9FUFNJ TE9OLAorICAgICAgICAgICAgICAgICAiJXMgc2NhbGFyIGNvcnJlY3QgcmVz dWx0IGF0ICVzOiVkIiwKKyAgICAgICAgICAgICAgICAgX19mdW5jX18sIF9f RklMRV9fLCBfX0xJTkVfXyk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbm9y bXRhYmxlLT5zaXplMSAtIDE7ICsraSkKKyAgICAgIHsKKyAgICAgICAgZm9y IChqID0gaSArIDE7IGogPCBub3JtdGFibGUtPnNpemUyOyArK2opCisgICAg ICAgICAgeworICAgICAgICAgICAgZ3NsX3Rlc3QoIWdzbF9pc25hbihnc2xf bWF0cml4X2dldChub3JtdGFibGUsIGksIGopKSwKKyAgICAgICAgICAgICAg ICAgICAgICIlcyBleHBlY3RlZCBOQU4gaW4gbm9ybXRhYmxlIGF0ICglZCwg JWQpIiwKKyAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBpLCBqKTsK KyAgICAgICAgICB9CisgICAgICB9CisKKyAgICBnc2xfdGVzdF9hYnMoZ3Ns X21hdHJpeF9nZXQobm9ybXRhYmxlLCAwLCAwKSwgMS4wLCBHU0xfREJMX0VQ U0lMT04sCisgICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDAsMCkg dmFsdWUiLCBfX2Z1bmNfXyk7CisgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRy aXhfZ2V0KG5vcm10YWJsZSwgMSwgMCksIDIuMCwgR1NMX0RCTF9FUFNJTE9O LAorICAgICAgICAgICAgICAgICAiJXMgbm9ybXRhYmxlICgxLDApIHZhbHVl IiwgX19mdW5jX18pOworICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4X2dl dChub3JtdGFibGUsIDIsIDApLCAzLjAsIEdTTF9EQkxfRVBTSUxPTiwKKyAg ICAgICAgICAgICAgICAgIiVzIG5vcm10YWJsZSAoMiwwKSB2YWx1ZSIsIF9f ZnVuY19fKTsKKyAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQobm9y bXRhYmxlLCAzLCAwKSwgNC4wLCBHU0xfREJMX0VQU0lMT04sCisgICAgICAg ICAgICAgICAgICIlcyBub3JtdGFibGUgKDMsMCkgdmFsdWUiLCBfX2Z1bmNf Xyk7CisgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJs ZSwgMSwgMSksIHh4LCBHU0xfREJMX0VQU0lMT04sCisgICAgICAgICAgICAg ICAgICIlcyBub3JtdGFibGUgKDEsMSkgdmFsdWUiLCBfX2Z1bmNfXyk7Cisg ICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwgMiwg MSksIHh5LCBHU0xfREJMX0VQU0lMT04sCisgICAgICAgICAgICAgICAgICIl cyBub3JtdGFibGUgKDIsMSkgdmFsdWUiLCBfX2Z1bmNfXyk7CisgICAgZ3Ns X3Rlc3RfYWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwgMywgMSksIHh6 LCBHU0xfREJMX0VQU0lMT04sCisgICAgICAgICAgICAgICAgICIlcyBub3Jt dGFibGUgKDMsMSkgdmFsdWUiLCBfX2Z1bmNfXyk7CisgICAgZ3NsX3Rlc3Rf YWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwgMiwgMiksIHl4LCBHU0xf REJMX0VQU0lMT04sCisgICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUg KDIsMikgdmFsdWUiLCBfX2Z1bmNfXyk7CisgICAgZ3NsX3Rlc3RfYWJzKGdz bF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwgMywgMiksIHl5LCBHU0xfREJMX0VQ U0lMT04sCisgICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDMsMikg dmFsdWUiLCBfX2Z1bmNfXyk7CisgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRy aXhfZ2V0KG5vcm10YWJsZSwgMywgMyksIHp4LCBHU0xfREJMX0VQU0lMT04s CisgICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDMsMykgdmFsdWUi LCBfX2Z1bmNfXyk7CisKKyAgICBnc2xfbWF0cml4X2ZyZWUobm9ybXRhYmxl KTsKKyAgfQorCisgIGdzbF92ZWN0b3JfZnJlZShrMyk7CisgIGdzbF92ZWN0 b3JfZnJlZShrMik7CisgIGdzbF92ZWN0b3JfZnJlZShrMSk7CisgIGdzbF9t YXRyaXhfZnJlZShkYXRhNCk7CisgIGdzbF9tYXRyaXhfZnJlZShkYXRhMik7 Cit9CisKK3ZvaWQKK3Rlc3RfcmljaGFyZHNvbl92ZWN0b3JfZXh0cmFwb2xh dGlvbl92ZWN0b3JpbnB1dHMoKQoreworICB7CisgICAgZ3NsX21hdHJpeCAq IGRhdGEgPSBnc2xfbWF0cml4X2FsbG9jKDIsIDIpOworICAgIGdzbF9tYXRy aXhfc2V0KGRhdGEsIDAsIDAsIDEuMCk7CisgICAgZ3NsX21hdHJpeF9zZXQo ZGF0YSwgMCwgMSwgMi4wKTsKKyAgICBnc2xfbWF0cml4X3NldChkYXRhLCAx LCAwLCAyLjApOworICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEsIDEsIDEsIDMu MCk7CisKKyAgICBnc2xfbWF0cml4ICogbm9ybXRhYmxlID0gZ3NsX21hdHJp eF9hbGxvYyhkYXRhLT5zaXplMiwgZGF0YS0+c2l6ZTIpOworCisgICAgZ3Ns X3ZlY3RvciAqIGV4YWN0ID0gZ3NsX3ZlY3Rvcl9hbGxvYyhkYXRhLT5zaXpl Mik7CisgICAgZ3NsX3ZlY3Rvcl9zZXQoZXhhY3QsIDAsIDMuMCk7CisgICAg Z3NsX3ZlY3Rvcl9zZXQoZXhhY3QsIDEsIDQuMCk7CisKKyAgICBnc2xfdGVz dChnc2xfZXh0cmFwX3JpY2hhcmRzb25fdmVjdG9yKAorICAgICAgICAgICAg ICAgZGF0YSwgMiwgTlVMTCwgbm9ybXRhYmxlLCBleGFjdCksCisgICAgICAg ICAgICAgIlVuZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMiKTsKKyAg ICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQoZGF0YSwgMCwgMCksIDMu MCwgR1NMX0RCTF9FUFNJTE9OLAorICAgICAgICAgICAgICAgICAiJXMgZGF0 YSAoMCwwKSB2YWx1ZSBhdCAlczolZCIsIF9fZnVuY19fLCBfX0ZJTEVfXywg X19MSU5FX18pOworICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4X2dldChk YXRhLCAxLCAwKSwgNC4wLCBHU0xfREJMX0VQU0lMT04sCisgICAgICAgICAg ICAgICAgICIlcyBkYXRhICgxLDApIHZhbHVlIGF0ICVzOiVkIiwgX19mdW5j X18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKyAgICBnc2xfdGVzdF9hYnMo Z3NsX21hdHJpeF9nZXQobm9ybXRhYmxlLCAxLCAxKSwgMC4wLCBHU0xfREJM X0VQU0lMT04sCisgICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDEs MSkgdmFsdWUgYXQgJXM6JWQiLAorICAgICAgICAgICAgICAgICBfX2Z1bmNf XywgX19GSUxFX18sIF9fTElORV9fKTsKKworICAgIGdzbF92ZWN0b3JfZnJl ZShleGFjdCk7CisgICAgZ3NsX21hdHJpeF9mcmVlKG5vcm10YWJsZSk7Cisg ICAgZ3NsX21hdHJpeF9mcmVlKGRhdGEpOworICB9CisKKyAgeworICAgIGdz bF9tYXRyaXggKiBkYXRhID0gZ3NsX21hdHJpeF9hbGxvYygyLCAzKTsKKyAg ICBnc2xfbWF0cml4X3NldChkYXRhLCAwLCAwLCAxLjApOworICAgIGdzbF9t YXRyaXhfc2V0KGRhdGEsIDAsIDEsIDIuMCk7CisgICAgZ3NsX21hdHJpeF9z ZXQoZGF0YSwgMCwgMiwgMy4wKTsKKyAgICBnc2xfbWF0cml4X3NldChkYXRh LCAxLCAwLCAyLjApOworICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEsIDEsIDEs IDMuMCk7CisgICAgZ3NsX21hdHJpeF9zZXQoZGF0YSwgMSwgMiwgNC4wKTsK KworICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbl92ZWN0b3Io ZGF0YSwgMiwgTlVMTCwgTlVMTCwgTlVMTCksCisgICAgICAgICAgICAgIlVu ZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMiKTsKKyAgICBnc2xfdGVz dF9hYnMoZ3NsX21hdHJpeF9nZXQoZGF0YSwgMCwgMCksIDEzLjAgLyAzLjAs IEdTTF9EQkxfRVBTSUxPTiwKKyAgICAgICAgICAgICAgICAgIiVzIGRhdGEg KDAsMCkgdmFsdWUgYXQgJXM6JWQiLCBfX2Z1bmNfXywgX19GSUxFX18sIF9f TElORV9fKTsKKyAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQoZGF0 YSwgMSwgMCksIDE2LjAgLyAzLjAsIEdTTF9EQkxfRVBTSUxPTiwKKyAgICAg ICAgICAgICAgICAgIiVzIGRhdGEgKDEsMCkgdmFsdWUgYXQgJXM6JWQiLCBf X2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsKKworICAgIGdzbF9tYXRy aXhfZnJlZShkYXRhKTsKKyAgfQorfQorCit2b2lkCit0ZXN0X3JpY2hhcmRz b25fZXh0cmFwb2xhdGlvbl9zdGVwKCkKIHsKLSAgICBnc2xfbWF0cml4ICog ZGF0YTIgPSBnc2xfbWF0cml4X2FsbG9jKDEsIDIpOwotICAgIGdzbF9tYXRy aXggKiBkYXRhNCA9IGdzbF9tYXRyaXhfYWxsb2MoMSwgNCk7Ci0gICAgZ3Ns X3ZlY3RvciAqIGsxID0gZ3NsX3ZlY3Rvcl9hbGxvYygxKTsKLSAgICBnc2xf dmVjdG9yICogazIgPSBnc2xfdmVjdG9yX2FsbG9jKDIpOwotICAgIGdzbF92 ZWN0b3IgKiBrMyA9IGdzbF92ZWN0b3JfYWxsb2MoMyk7Ci0KLSAgICB7Ci0g ICAgICAgIGludCBpLCBqOwotICAgICAgICBnc2xfdmVjdG9yX3NldChrMSwg MCwgMyk7Ci0KLSAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIsIDAsIDAs IDEuMCk7Ci0gICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEyLCAwLCAxLCAy LjApOwotICAgICAgICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24o ZGF0YTIsIDIsIGsxLCBOVUxMLCBOVUxMKSwKLSAgICAgICAgICAgICAgICAi VW5leHBlY3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIpOwotICAgICAgICBj b25zdCBkb3VibGUgeHggPSBnc2xfbWF0cml4X2dldChkYXRhMiwgMCwgMCk7 Ci0KLSAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIsIDAsIDAsIDIuMCk7 Ci0gICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEyLCAwLCAxLCAzLjApOwot ICAgICAgICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24oZGF0YTIs IDIsIGsxLCBOVUxMLCBOVUxMKSwKLSAgICAgICAgICAgICAgICAiVW5leHBl Y3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIpOwotICAgICAgICBjb25zdCBk b3VibGUgeHkgPSBnc2xfbWF0cml4X2dldChkYXRhMiwgMCwgMCk7Ci0KLSAg ICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIsIDAsIDAsIDMuMCk7Ci0gICAg ICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEyLCAwLCAxLCA0LjApOwotICAgICAg ICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24oZGF0YTIsIDIsIGsx LCBOVUxMLCBOVUxMKSwKLSAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBl cnJvciByZXBvcnRlZCBpbiAlcyIpOwotICAgICAgICBjb25zdCBkb3VibGUg eHogPSBnc2xfbWF0cml4X2dldChkYXRhMiwgMCwgMCk7Ci0KLSAgICAgICAg Z3NsX3ZlY3Rvcl9zZXQoazEsIDAsIDYpOwotCi0gICAgICAgIGdzbF9tYXRy aXhfc2V0KGRhdGEyLCAwLCAwLCB4eCk7Ci0gICAgICAgIGdzbF9tYXRyaXhf c2V0KGRhdGEyLCAwLCAxLCB4eSk7Ci0gICAgICAgIGdzbF90ZXN0KGdzbF9l eHRyYXBfcmljaGFyZHNvbihkYXRhMiwgMiwgazEsIE5VTEwsIE5VTEwpLAot ICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGVycm9yIHJlcG9ydGVkIGlu ICVzIik7Ci0gICAgICAgIGNvbnN0IGRvdWJsZSB5eCA9IGdzbF9tYXRyaXhf Z2V0KGRhdGEyLCAwLCAwKTsKLQotICAgICAgICBnc2xfbWF0cml4X3NldChk YXRhMiwgMCwgMCwgeHkpOwotICAgICAgICBnc2xfbWF0cml4X3NldChkYXRh MiwgMCwgMSwgeHopOwotICAgICAgICBnc2xfdGVzdChnc2xfZXh0cmFwX3Jp Y2hhcmRzb24oZGF0YTIsIDIsIGsxLCBOVUxMLCBOVUxMKSwKLSAgICAgICAg ICAgICAgICAiVW5leHBlY3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIpOwot ICAgICAgICBjb25zdCBkb3VibGUgeXkgPSBnc2xfbWF0cml4X2dldChkYXRh MiwgMCwgMCk7Ci0KLSAgICAgICAgZ3NsX3ZlY3Rvcl9zZXQoazEsIDAsIDkp OwotCi0gICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEyLCAwLCAwLCB5eCk7 Ci0gICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEyLCAwLCAxLCB5eSk7Ci0g ICAgICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbihkYXRhMiwg MiwgazEsIE5VTEwsIE5VTEwpLAotICAgICAgICAgICAgICAgICJVbmV4cGVj dGVkIGVycm9yIHJlcG9ydGVkIGluICVzIik7Ci0gICAgICAgIGNvbnN0IGRv dWJsZSB6eCA9IGdzbF9tYXRyaXhfZ2V0KGRhdGEyLCAwLCAwKTsKLQotICAg ICAgICBnc2xfdmVjdG9yX3NldChrMywgMCwgMyk7Ci0gICAgICAgIGdzbF92 ZWN0b3Jfc2V0KGszLCAxLCA2KTsKLSAgICAgICAgZ3NsX3ZlY3Rvcl9zZXQo azMsIDIsIDkpOwotCi0gICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGE0LCAw LCAwLCAxLjApOwotICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhNCwgMCwg MSwgMi4wKTsKLSAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTQsIDAsIDIs IDMuMCk7Ci0gICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGE0LCAwLCAzLCA0 LjApOwotICAgICAgICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24o ZGF0YTQsIDIsIGszLCBOVUxMLCBOVUxMKSwKLSAgICAgICAgICAgICAgICAi VW5leHBlY3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIpOwotICAgICAgICBn c2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQoZGF0YTQsIDAsIDApLCB6eCwg R1NMX0RCTF9FUFNJTE9OLAotICAgICAgICAgICAgICAgICIlcyBzY2FsYXIg Y29ycmVjdCByZXN1bHQgYXQgJXM6JWQiLAotICAgICAgICAgICAgICAgIF9f ZnVuY19fLCBfX0ZJTEVfXywgX19MSU5FX18pOwotCi0gICAgICAgIGdzbF9t YXRyaXggKiBub3JtdGFibGUgPSBnc2xfbWF0cml4X2FsbG9jKGRhdGE0LT5z aXplMiwgZGF0YTQtPnNpemUyKTsKLQotICAgICAgICBnc2xfdmVjdG9yX3Nl dChrMiwgMCwgMyk7Ci0gICAgICAgIGdzbF92ZWN0b3Jfc2V0KGsyLCAxLCA2 KTsKLQotICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhNCwgMCwgMCwgMS4w KTsKLSAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTQsIDAsIDEsIDIuMCk7 Ci0gICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGE0LCAwLCAyLCAzLjApOwot ICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhNCwgMCwgMywgNC4wKTsKLSAg ICAgICAgZ3NsX3Rlc3QoZ3NsX2V4dHJhcF9yaWNoYXJkc29uKGRhdGE0LCAy LCBrMiwgbm9ybXRhYmxlLCBOVUxMKSwKLSAgICAgICAgICAgICAgICAiVW5l eHBlY3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIpOwotICAgICAgICBnc2xf dGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQoZGF0YTQsIDAsIDApLCB6eCwgR1NM X0RCTF9FUFNJTE9OLAotICAgICAgICAgICAgICAgICIlcyBzY2FsYXIgY29y cmVjdCByZXN1bHQgYXQgJXM6JWQiLAotICAgICAgICAgICAgICAgIF9fZnVu Y19fLCBfX0ZJTEVfXywgX19MSU5FX18pOwotCi0gICAgICAgIGZvciAoaSA9 IDA7IGkgPCBub3JtdGFibGUtPnNpemUxIC0gMTsgKytpKSB7Ci0gICAgICAg ICAgICBmb3IgKGogPSBpKzE7IGogPCBub3JtdGFibGUtPnNpemUyOyArK2op IHsKLSAgICAgICAgICAgICAgICBnc2xfdGVzdCghZ3NsX2lzbmFuKGdzbF9t YXRyaXhfZ2V0KG5vcm10YWJsZSwgaSwgaikpLAotICAgICAgICAgICAgICAg ICAgICAgICAgIiVzIGV4cGVjdGVkIE5BTiBpbiBub3JtdGFibGUgYXQgKCVk LCAlZCkiLAotICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGks IGopOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZ3Ns X3Rlc3RfYWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwgMCwgMCksIDEu MCwgR1NMX0RCTF9FUFNJTE9OLAotICAgICAgICAgICAgICAgICIlcyBub3Jt dGFibGUgKDAsMCkgdmFsdWUiLCBfX2Z1bmNfXyk7Ci0gICAgICAgIGdzbF90 ZXN0X2Ficyhnc2xfbWF0cml4X2dldChub3JtdGFibGUsIDEsIDApLCAyLjAs IEdTTF9EQkxfRVBTSUxPTiwKLSAgICAgICAgICAgICAgICAiJXMgbm9ybXRh YmxlICgxLDApIHZhbHVlIiwgX19mdW5jX18pOwotICAgICAgICBnc2xfdGVz dF9hYnMoZ3NsX21hdHJpeF9nZXQobm9ybXRhYmxlLCAyLCAwKSwgMy4wLCBH U0xfREJMX0VQU0lMT04sCi0gICAgICAgICAgICAgICAgIiVzIG5vcm10YWJs ZSAoMiwwKSB2YWx1ZSIsIF9fZnVuY19fKTsKLSAgICAgICAgZ3NsX3Rlc3Rf YWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwgMywgMCksIDQuMCwgR1NM X0RCTF9FUFNJTE9OLAotICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUg KDMsMCkgdmFsdWUiLCBfX2Z1bmNfXyk7Ci0gICAgICAgIGdzbF90ZXN0X2Fi cyhnc2xfbWF0cml4X2dldChub3JtdGFibGUsIDEsIDEpLCB4eCwgR1NMX0RC TF9FUFNJTE9OLAotICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDEs MSkgdmFsdWUiLCBfX2Z1bmNfXyk7Ci0gICAgICAgIGdzbF90ZXN0X2Ficyhn c2xfbWF0cml4X2dldChub3JtdGFibGUsIDIsIDEpLCB4eSwgR1NMX0RCTF9F UFNJTE9OLAotICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDIsMSkg dmFsdWUiLCBfX2Z1bmNfXyk7Ci0gICAgICAgIGdzbF90ZXN0X2Ficyhnc2xf bWF0cml4X2dldChub3JtdGFibGUsIDMsIDEpLCB4eiwgR1NMX0RCTF9FUFNJ TE9OLAotICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDMsMSkgdmFs dWUiLCBfX2Z1bmNfXyk7Ci0gICAgICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0 cml4X2dldChub3JtdGFibGUsIDIsIDIpLCB5eCwgR1NMX0RCTF9FUFNJTE9O LAotICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDIsMikgdmFsdWUi LCBfX2Z1bmNfXyk7Ci0gICAgICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4 X2dldChub3JtdGFibGUsIDMsIDIpLCB5eSwgR1NMX0RCTF9FUFNJTE9OLAot ICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDMsMikgdmFsdWUiLCBf X2Z1bmNfXyk7Ci0gICAgICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4X2dl dChub3JtdGFibGUsIDMsIDMpLCB6eCwgR1NMX0RCTF9FUFNJTE9OLAotICAg ICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDMsMykgdmFsdWUiLCBfX2Z1 bmNfXyk7Ci0KLSAgICAgICAgZ3NsX21hdHJpeF9mcmVlKG5vcm10YWJsZSk7 Ci0gICAgfQotCi0gICAgZ3NsX3ZlY3Rvcl9mcmVlKGszKTsKLSAgICBnc2xf dmVjdG9yX2ZyZWUoazIpOwotICAgIGdzbF92ZWN0b3JfZnJlZShrMSk7Ci0g ICAgZ3NsX21hdHJpeF9mcmVlKGRhdGE0KTsKLSAgICBnc2xfbWF0cml4X2Zy ZWUoZGF0YTIpOworICBjb25zdCBpbnQgICAga2kgICAgICAgICAgID0gMTsK KworICB7CisgICAgY29uc3QgZG91YmxlIHQgICA9IDIuMDsKKyAgICBkb3Vi bGUgICAgICAgQWggID0gMS4wOworICAgIGNvbnN0IGRvdWJsZSBBaHQgPSAy LjA7CisKKyAgICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb25fc3Rl cCgmQWgsICZBaHQsIHQsIGtpKSwKKyAgICAgICAgICAgICAiVW5leHBlY3Rl ZCBlcnJvciByZXBvcnRlZCBpbiAlcyBmb3IgdD0lZiIsIF9fZnVuY19fLCB0 KTsKKyAgICBnc2xfdGVzdF9hYnMoQWgsIDMuMCwgR1NMX0RCTF9FUFNJTE9O LAorICAgICAgICAgICAgICAgICAiRXh0cmFwb2xhdGlvbiBpbiAlcyBmb3Ig a2k9JWQsIHQ9JWYiLCBfX2Z1bmNfXywga2ksIHQpOworICB9CisKKyAgewor ICAgIGNvbnN0IGRvdWJsZSB0ID0gMy4wOworICAgIGRvdWJsZSAgICAgICBB aCAgPSAxLjA7CisgICAgY29uc3QgZG91YmxlIEFodCA9IDIuMDsKKyAgICBn c2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb25fc3RlcCgmQWgsICZBaHQs IHQsIGtpKSwKKyAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJvciByZXBv cnRlZCBpbiAlcyBmb3IgdD0lZiIsIF9fZnVuY19fLCB0KTsKKyAgICBnc2xf dGVzdF9hYnMoQWgsIDUuMCAvIDIuMCwgR1NMX0RCTF9FUFNJTE9OLAorICAg ICAgICAgICAgICAgICAiRXh0cmFwb2xhdGlvbiBpbiAlcyBmb3Iga2k9JWQs IHQ9JWYiLCBfX2Z1bmNfXywga2ksIHQpOworICB9CiB9CiAKIHZvaWQKLXRl c3RfcmljaGFyZHNvbl9leHRyYXBvbGF0aW9uX3ZlY3RvcmlucHV0cygpCit0 ZXN0X3JpY2hhcmRzb25fZXh0cmFwb2xhdGlvbl9kZWZhdWx0cygpCiB7Ci0g ICAgewotICAgICAgICBnc2xfbWF0cml4ICogZGF0YSA9IGdzbF9tYXRyaXhf YWxsb2MoMiwyKTsKLSAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YSwgMCwg MCwgMS4wKTsKLSAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YSwgMCwgMSwg Mi4wKTsKLSAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YSwgMSwgMCwgMi4w KTsKLSAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YSwgMSwgMSwgMy4wKTsK LQotICAgICAgICBnc2xfbWF0cml4ICogbm9ybXRhYmxlID0gZ3NsX21hdHJp eF9hbGxvYyhkYXRhLT5zaXplMiwgZGF0YS0+c2l6ZTIpOwotCi0gICAgICAg IGdzbF92ZWN0b3IgKiBleGFjdCA9IGdzbF92ZWN0b3JfYWxsb2MoZGF0YS0+ c2l6ZTIpOwotICAgICAgICBnc2xfdmVjdG9yX3NldChleGFjdCwgMCwgMy4w KTsKLSAgICAgICAgZ3NsX3ZlY3Rvcl9zZXQoZXhhY3QsIDEsIDQuMCk7Ci0K LSAgICAgICAgZ3NsX3Rlc3QoZ3NsX2V4dHJhcF9yaWNoYXJkc29uKAotICAg ICAgICAgICAgICAgICAgICBkYXRhLCAyLCBOVUxMLCBub3JtdGFibGUsIGV4 YWN0KSwKLSAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJvciByZXBv cnRlZCBpbiAlcyIpOwotICAgICAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJp eF9nZXQoZGF0YSwgMCwgMCksIDMuMCwgR1NMX0RCTF9FUFNJTE9OLAotICAg ICAgICAgICAgICAgICIlcyBkYXRhICgwLDApIHZhbHVlIGF0ICVzOiVkIiwg X19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gICAgICAgIGdzbF90 ZXN0X2Ficyhnc2xfbWF0cml4X2dldChkYXRhLCAxLCAwKSwgNC4wLCBHU0xf REJMX0VQU0lMT04sCi0gICAgICAgICAgICAgICAgIiVzIGRhdGEgKDEsMCkg dmFsdWUgYXQgJXM6JWQiLCBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9f KTsKLQotICAgICAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQobm9y bXRhYmxlLCAxLCAxKSwgMC4wLCBHU0xfREJMX0VQU0lMT04sCi0gICAgICAg ICAgICAgICAgIiVzIG5vcm10YWJsZSAoMSwxKSB2YWx1ZSBhdCAlczolZCIs Ci0gICAgICAgICAgICAgICAgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVf Xyk7Ci0KLSAgICAgICAgZ3NsX3ZlY3Rvcl9mcmVlKGV4YWN0KTsKLSAgICAg ICAgZ3NsX21hdHJpeF9mcmVlKG5vcm10YWJsZSk7Ci0gICAgICAgIGdzbF9t YXRyaXhfZnJlZShkYXRhKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIGdz bF9tYXRyaXggKiBkYXRhID0gZ3NsX21hdHJpeF9hbGxvYygyLDMpOwotICAg ICAgICBnc2xfbWF0cml4X3NldChkYXRhLCAwLCAwLCAxLjApOwotICAgICAg ICBnc2xfbWF0cml4X3NldChkYXRhLCAwLCAxLCAyLjApOwotICAgICAgICBn c2xfbWF0cml4X3NldChkYXRhLCAwLCAyLCAzLjApOwotICAgICAgICBnc2xf bWF0cml4X3NldChkYXRhLCAxLCAwLCAyLjApOwotICAgICAgICBnc2xfbWF0 cml4X3NldChkYXRhLCAxLCAxLCAzLjApOwotICAgICAgICBnc2xfbWF0cml4 X3NldChkYXRhLCAxLCAyLCA0LjApOwotCi0gICAgICAgIGdzbF90ZXN0KGdz bF9leHRyYXBfcmljaGFyZHNvbihkYXRhLCAyLCBOVUxMLCBOVUxMLCBOVUxM KSwKLSAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJvciByZXBvcnRl ZCBpbiAlcyIpOwotICAgICAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9n ZXQoZGF0YSwgMCwgMCksIDEzLjAvMy4wLCBHU0xfREJMX0VQU0lMT04sCi0g ICAgICAgICAgICAgICAgIiVzIGRhdGEgKDAsMCkgdmFsdWUgYXQgJXM6JWQi LCBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsKLSAgICAgICAgZ3Ns X3Rlc3RfYWJzKGdzbF9tYXRyaXhfZ2V0KGRhdGEsIDEsIDApLCAxNi4wLzMu MCwgR1NMX0RCTF9FUFNJTE9OLAotICAgICAgICAgICAgICAgICIlcyBkYXRh ICgxLDApIHZhbHVlIGF0ICVzOiVkIiwgX19mdW5jX18sIF9fRklMRV9fLCBf X0xJTkVfXyk7Ci0KLSAgICAgICAgZ3NsX21hdHJpeF9mcmVlKGRhdGEpOwot ICAgIH0KKyAgZ3NsX3ZlY3RvciAqIGRhdGExID0gZ3NsX3ZlY3Rvcl9hbGxv YygyKTsKKyAgZ3NsX3ZlY3RvciAqIGRhdGEyID0gZ3NsX3ZlY3Rvcl9hbGxv YyhkYXRhMS0+c2l6ZSk7CisgIHsKKyAgICBnc2xfdmVjdG9yX3NldChkYXRh MSwgMCwgMS4wKTsKKyAgICBnc2xfdmVjdG9yX3NldChkYXRhMSwgMSwgMi4w KTsKKworICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbihkYXRh MSwgMiwgTlVMTCwgTlVMTCwgMCksCisgICAgICAgICAgICAgIlVuZXhwZWN0 ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMiKTsKKyAgICBnc2xfdGVzdF9hYnMo Z3NsX3ZlY3Rvcl9nZXQoZGF0YTEsIDApLCAzLjAsIEdTTF9EQkxfRVBTSUxP TiwKKyAgICAgICAgICAgICAgICAgIiVzIHNjYWxhciBjb3JyZWN0IHJlc3Vs dCIsIF9fZnVuY19fKTsKKyAgfQorCisgIHsKKyAgICBnc2xfdmVjdG9yX3Nl dChkYXRhMSwgMCwgMS4wKTsKKyAgICBnc2xfdmVjdG9yX3NldChkYXRhMSwg MSwgMi4wKTsKKworICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNv bihkYXRhMSwgMywgTlVMTCwgTlVMTCwgMCksCisgICAgICAgICAgICAgIlVu ZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMiKTsKKyAgICBnc2xfdGVz dF9hYnMoZ3NsX3ZlY3Rvcl9nZXQoZGF0YTEsIDApLCA1LjAgLyAyLjAsIEdT TF9EQkxfRVBTSUxPTiwKKyAgICAgICAgICAgICAgICAgIiVzIHNjYWxhciBj b3JyZWN0IHJlc3VsdCIsIF9fZnVuY19fKTsKKyAgfQorCisgIHsKKyAgICBn c2xfdmVjdG9yX3NldChkYXRhMSwgMCwgMS4wKTsKKyAgICBnc2xfdmVjdG9y X3NldChkYXRhMSwgMSwgMi4wKTsKKyAgICBnc2xfdmVjdG9yX21lbWNweShk YXRhMiwgZGF0YTEpOworCisgICAgZ3NsX3Rlc3QoZ3NsX2V4dHJhcF9yaWNo YXJkc29uKGRhdGExLCAyLCBOVUxMLCBOVUxMLCAwKSwKKyAgICAgICAgICAg ICAiVW5leHBlY3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIpOworICAgIGNv bnN0IGRvdWJsZSByZXN1bHQxID0gZ3NsX3ZlY3Rvcl9nZXQoZGF0YTEsIDAp OworCisgICAgZ3NsX3Rlc3RfYWJzKHJlc3VsdDEsIDMuMCwgR1NMX0RCTF9F UFNJTE9OLAorICAgICAgICAgICAgICAgICAiJXMgc2NhbGFyIGNvcnJlY3Qg cmVzdWx0IiwgX19mdW5jX18pOworCisgICAgZ3NsX3ZlY3RvciAqIGsgPSBn c2xfdmVjdG9yX2FsbG9jKDEpOworICAgIGdzbF92ZWN0b3Jfc2V0KGssIDAs IDEpOworICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbihkYXRh MiwgMiwgaywgTlVMTCwgMCksCisgICAgICAgICAgICAgIlVuZXhwZWN0ZWQg ZXJyb3IgcmVwb3J0ZWQgaW4gJXMiKTsKKyAgICBnc2xfdmVjdG9yX2ZyZWUo ayk7CisgICAgY29uc3QgZG91YmxlIHJlc3VsdDIgPSBnc2xfdmVjdG9yX2dl dChkYXRhMiwgMCk7CisKKyAgICBnc2xfdGVzdF9hYnMocmVzdWx0MSwgcmVz dWx0MiwgR1NMX0RCTF9FUFNJTE9OLAorICAgICAgICAgICAgICAgICAiJXMg d2l0aCBrID09IE5VTEwiLCBfX2Z1bmNfXyk7CisgIH0KKworICB7CisgICAg aW50IGksIGo7CisgICAgZ3NsX3ZlY3Rvcl9zZXQoZGF0YTEsIDAsIDEuMCk7 CisgICAgZ3NsX3ZlY3Rvcl9zZXQoZGF0YTEsIDEsIDIuMCk7CisgICAgZ3Ns X3ZlY3Rvcl9tZW1jcHkoZGF0YTIsIGRhdGExKTsKKworICAgIGdzbF9tYXRy aXggKiBub3JtdGFibGUxID0gZ3NsX21hdHJpeF9hbGxvYyhkYXRhMS0+c2l6 ZSwgZGF0YTEtPnNpemUpOworICAgIGdzbF9tYXRyaXggKiBub3JtdGFibGUy ID0gZ3NsX21hdHJpeF9hbGxvYyhkYXRhMS0+c2l6ZSwgZGF0YTEtPnNpemUp OworCisgICAgZ3NsX3Rlc3QoZ3NsX2V4dHJhcF9yaWNoYXJkc29uKGRhdGEx LCAyLCBOVUxMLCBub3JtdGFibGUxLCAwKSwKKyAgICAgICAgICAgICAiVW5l eHBlY3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIpOworICAgIGNvbnN0IGRv dWJsZSByZXN1bHQxID0gZ3NsX3ZlY3Rvcl9nZXQoZGF0YTEsIDApOworCisg ICAgZ3NsX3Rlc3RfYWJzKHJlc3VsdDEsIDMuMCwgR1NMX0RCTF9FUFNJTE9O LAorICAgICAgICAgICAgICAgICAiJXMgY29ycmVjdCBleHRyYXBvbGF0aW9u IGFuc3dlciIpOworCisgICAgZm9yIChpID0gMDsgaSA8IG5vcm10YWJsZTEt PnNpemUxIC0gMTsgKytpKQorICAgICAgeworICAgICAgICBmb3IgKGogPSBp ICsgMTsgaiA8IG5vcm10YWJsZTEtPnNpemUyOyArK2opCisgICAgICAgICAg eworICAgICAgICAgICAgZ3NsX3Rlc3QoIWdzbF9pc25hbihnc2xfbWF0cml4 X2dldChub3JtdGFibGUxLCBpLCBqKSksCisgICAgICAgICAgICAgICAgICAg ICAiJXMgZXhwZWN0ZWQgTkFOIGluIG5vcm10YWJsZTEgYXQgKCVkLCAlZCki LAorICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGksIGopOworICAg ICAgICAgIH0KKyAgICAgIH0KKworICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0 cml4X2dldChub3JtdGFibGUxLCAwLCAwKSwgMS4wLCBHU0xfREJMX0VQU0lM T04sCisgICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUxICgwLDApIHZh bHVlIiwgX19mdW5jX18pOworICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4 X2dldChub3JtdGFibGUxLCAxLCAwKSwgMi4wLCBHU0xfREJMX0VQU0lMT04s CisgICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUxICgxLDApIHZhbHVl IiwgX19mdW5jX18pOworICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4X2dl dChub3JtdGFibGUxLCAxLCAxKSwgMy4wLCBHU0xfREJMX0VQU0lMT04sCisg ICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUxICgxLDEpIHZhbHVlIiwg X19mdW5jX18pOworCisgICAgY29uc3QgZG91YmxlIGV4YWN0ID0gMC4wOwor ICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbihkYXRhMiwgMi4w LCBOVUxMLCBub3JtdGFibGUyLCBleGFjdCksCisgICAgICAgICAgICAgIlVu ZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMiKTsKKyAgICBjb25zdCBk b3VibGUgcmVzdWx0MiA9IGdzbF92ZWN0b3JfZ2V0KGRhdGEyLCAwKTsKKwor ICAgIGZvciAoaSA9IDA7IGkgPCBub3JtdGFibGUyLT5zaXplMSAtIDE7ICsr aSkKKyAgICAgIHsKKyAgICAgICAgZm9yIChqID0gaSArIDE7IGogPCBub3Jt dGFibGUyLT5zaXplMjsgKytqKQorICAgICAgICAgIHsKKyAgICAgICAgICAg IGdzbF90ZXN0KCFnc2xfaXNuYW4oZ3NsX21hdHJpeF9nZXQobm9ybXRhYmxl MiwgaSwgaikpLAorICAgICAgICAgICAgICAgICAgICAgIiVzIGV4cGVjdGVk IE5BTiBpbiBub3JtdGFibGUyIGF0ICglZCwgJWQpIiwKKyAgICAgICAgICAg ICAgICAgICAgIF9fZnVuY19fLCBpLCBqKTsKKyAgICAgICAgICB9CisgICAg ICB9CisKKyAgICBnc2xfdGVzdF9hYnMocmVzdWx0MSwgcmVzdWx0MiwgR1NM X0RCTF9FUFNJTE9OLAorICAgICAgICAgICAgICAgICAiJXMgd2l0aCBleGFj dCA9PSBOVUxMIiwgX19mdW5jX18pOworCisgICAgZm9yIChpID0gMDsgaSA8 IG5vcm10YWJsZTEtPnNpemUxOyArK2kpCisgICAgICB7CisgICAgICAgIGZv ciAoaiA9IDA7IGogPCBpICsgMTsgKytqKQorICAgICAgICAgIHsKKyAgICAg ICAgICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4X2dldChub3JtdGFibGUx LCBpLCBqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnc2xfbWF0cml4 X2dldChub3JtdGFibGUyLCBpLCBqKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBHU0xfREJMX0VQU0lMT04sCisgICAgICAgICAgICAgICAgICAgICAg ICAgIiVzIGlkZW50aWNhbCBub3JtdGFibGUgcmVzdWx0cyBhdCAoJWQsICVk KSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGksIGop OworICAgICAgICAgIH0KKyAgICAgIH0KKworICAgIGdzbF9tYXRyaXhfZnJl ZShub3JtdGFibGUyKTsKKyAgICBnc2xfbWF0cml4X2ZyZWUobm9ybXRhYmxl MSk7CisgIH0KKworICBnc2xfdmVjdG9yX2ZyZWUoZGF0YTIpOworICBnc2xf dmVjdG9yX2ZyZWUoZGF0YTEpOworfQorCit2b2lkCit0ZXN0X3JpY2hhcmRz b25fZXh0cmFwb2xhdGlvbl90d29sZXZlbHMoKQoreworICBnc2xfdmVjdG9y ICogZGF0YTIgPSBnc2xfdmVjdG9yX2FsbG9jKDIpOworICBnc2xfdmVjdG9y ICogZGF0YTMgPSBnc2xfdmVjdG9yX2FsbG9jKDMpOworICBnc2xfdmVjdG9y ICogazEgPSBnc2xfdmVjdG9yX2FsbG9jKDEpOworICBnc2xfdmVjdG9yICog azIgPSBnc2xfdmVjdG9yX2FsbG9jKDIpOworCisgIHsKKyAgICBnc2xfdmVj dG9yX3NldChkYXRhMiwgMCwgMS4wKTsKKyAgICBnc2xfdmVjdG9yX3NldChk YXRhMiwgMSwgMi4wKTsKKyAgICBnc2xfdmVjdG9yX3NldChrMSwgMCwgMSk7 CisKKyAgICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24oZGF0YTIs IDIsIGsxLCBOVUxMLCAwKSwKKyAgICAgICAgICAgICAiVW5leHBlY3RlZCBl cnJvciByZXBvcnRlZCBpbiAlcyIpOworICAgIGdzbF90ZXN0X2Ficyhnc2xf dmVjdG9yX2dldChkYXRhMiwgMCksIDMuMCwgR1NMX0RCTF9FUFNJTE9OLAor ICAgICAgICAgICAgICAgICAiJXMgc2NhbGFyIGNvcnJlY3QgcmVzdWx0IGF0 ICVzOiVkIiwKKyAgICAgICAgICAgICAgICAgX19mdW5jX18sIF9fRklMRV9f LCBfX0xJTkVfXyk7CisgIH0KKworICB7CisgICAgZ3NsX3ZlY3Rvcl9zZXQo ZGF0YTIsIDAsIDIuMCk7CisgICAgZ3NsX3ZlY3Rvcl9zZXQoZGF0YTIsIDEs IDMuMCk7CisgICAgZ3NsX3ZlY3Rvcl9zZXQoazEsIDAsIDEpOworCisgICAg Z3NsX3Rlc3QoZ3NsX2V4dHJhcF9yaWNoYXJkc29uKGRhdGEyLCAyLCBrMSwg TlVMTCwgMCksCisgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3IgcmVw b3J0ZWQgaW4gJXMiKTsKKyAgICBnc2xfdGVzdF9hYnMoZ3NsX3ZlY3Rvcl9n ZXQoZGF0YTIsIDApLCA0LjAsIEdTTF9EQkxfRVBTSUxPTiwKKyAgICAgICAg ICAgICAgICAgIiVzIHNjYWxhciBjb3JyZWN0IHJlc3VsdCBhdCAlczolZCIs CisgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBfX0ZJTEVfXywgX19MSU5F X18pOworICB9CisKKyAgeworICAgIGdzbF92ZWN0b3Jfc2V0KGRhdGEyLCAw LCAzLjApOworICAgIGdzbF92ZWN0b3Jfc2V0KGRhdGEyLCAxLCA0LjApOwor ICAgIGdzbF92ZWN0b3Jfc2V0KGsxLCAwLCAyKTsKKworICAgIGdzbF90ZXN0 KGdzbF9leHRyYXBfcmljaGFyZHNvbihkYXRhMiwgMiwgazEsIE5VTEwsIDAp LAorICAgICAgICAgICAgICJVbmV4cGVjdGVkIGVycm9yIHJlcG9ydGVkIGlu ICVzIik7CisgICAgZ3NsX3Rlc3RfYWJzKGdzbF92ZWN0b3JfZ2V0KGRhdGEy LCAwKSwgMTMuMCAvIDMuMCwgR1NMX0RCTF9FUFNJTE9OLAorICAgICAgICAg ICAgICAgICAiJXMgc2NhbGFyIGNvcnJlY3QgcmVzdWx0IGF0ICVzOiVkIiwK KyAgICAgICAgICAgICAgICAgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVf Xyk7CisgIH0KKworICB7CisgICAgZ3NsX3ZlY3Rvcl9zZXQoZGF0YTMsIDAs IDEuMCk7CisgICAgZ3NsX3ZlY3Rvcl9zZXQoZGF0YTMsIDEsIDIuMCk7Cisg ICAgZ3NsX3ZlY3Rvcl9zZXQoZGF0YTMsIDIsIDMuMCk7CisgICAgZ3NsX3Zl Y3Rvcl9zZXQoazEsIDAsIDEpOworCisgICAgZ3NsX3Rlc3QoZ3NsX2V4dHJh cF9yaWNoYXJkc29uKGRhdGEzLCAyLCBrMSwgTlVMTCwgMCksCisgICAgICAg ICAgICAgIlVuZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMiKTsKKyAg ICBnc2xfdGVzdF9hYnMoZ3NsX3ZlY3Rvcl9nZXQoZGF0YTMsIDApLCAxMy4w IC8gMy4wLCBHU0xfREJMX0VQU0lMT04sCisgICAgICAgICAgICAgICAgICIl cyBzY2FsYXIgY29ycmVjdCByZXN1bHQgYXQgJXM6JWQiLAorICAgICAgICAg ICAgICAgICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsKKyAgfQor CisgIHsKKyAgICBpbnQgaSwgajsKKyAgICBnc2xfbWF0cml4ICogbm9ybXRh YmxlID0gZ3NsX21hdHJpeF9hbGxvYyhkYXRhMy0+c2l6ZSwgZGF0YTMtPnNp emUpOworCisgICAgZ3NsX3ZlY3Rvcl9zZXQoZGF0YTMsIDAsIDEuMCk7Cisg ICAgZ3NsX3ZlY3Rvcl9zZXQoZGF0YTMsIDEsIDIuMCk7CisgICAgZ3NsX3Zl Y3Rvcl9zZXQoZGF0YTMsIDIsIDMuMCk7CisgICAgZ3NsX3ZlY3Rvcl9zZXQo azIsIDAsIDEpOworICAgIGdzbF92ZWN0b3Jfc2V0KGsyLCAxLCAyKTsKKwor ICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbihkYXRhMywgMiwg azIsIG5vcm10YWJsZSwgMCksCisgICAgICAgICAgICAgIlVuZXhwZWN0ZWQg ZXJyb3IgcmVwb3J0ZWQgaW4gJXMiKTsKKyAgICBnc2xfdGVzdF9hYnMoZ3Ns X3ZlY3Rvcl9nZXQoZGF0YTMsIDApLCAxMy4wIC8gMy4wLCBHU0xfREJMX0VQ U0lMT04sCisgICAgICAgICAgICAgICAgICIlcyBzY2FsYXIgY29ycmVjdCBy ZXN1bHQgYXQgJXM6JWQiLAorICAgICAgICAgICAgICAgICBfX2Z1bmNfXywg X19GSUxFX18sIF9fTElORV9fKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBu b3JtdGFibGUtPnNpemUxIC0gMTsgKytpKQorICAgICAgeworICAgICAgICBm b3IgKGogPSBpICsgMTsgaiA8IG5vcm10YWJsZS0+c2l6ZTI7ICsraikKKyAg ICAgICAgICB7CisgICAgICAgICAgICBnc2xfdGVzdCghZ3NsX2lzbmFuKGdz bF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwgaSwgaikpLAorICAgICAgICAgICAg ICAgICAgICAgIiVzIGV4cGVjdGVkIE5BTiBpbiBub3JtdGFibGUgYXQgKCVk LCAlZCkiLAorICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGksIGop OworICAgICAgICAgIH0KKyAgICAgIH0KKworICAgIGdzbF90ZXN0X2Ficyhn c2xfbWF0cml4X2dldChub3JtdGFibGUsIDAsIDApLCAxLjAsIEdTTF9EQkxf RVBTSUxPTiwKKyAgICAgICAgICAgICAgICAgIiVzIG5vcm10YWJsZSAoMCww KSB2YWx1ZSIsIF9fZnVuY19fKTsKKyAgICBnc2xfdGVzdF9hYnMoZ3NsX21h dHJpeF9nZXQobm9ybXRhYmxlLCAxLCAwKSwgMi4wLCBHU0xfREJMX0VQU0lM T04sCisgICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDEsMCkgdmFs dWUiLCBfX2Z1bmNfXyk7CisgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRyaXhf Z2V0KG5vcm10YWJsZSwgMiwgMCksIDMuMCwgR1NMX0RCTF9FUFNJTE9OLAor ICAgICAgICAgICAgICAgICAiJXMgbm9ybXRhYmxlICgyLDApIHZhbHVlIiwg X19mdW5jX18pOworICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4X2dldChu b3JtdGFibGUsIDEsIDEpLCAzLjAsIEdTTF9EQkxfRVBTSUxPTiwKKyAgICAg ICAgICAgICAgICAgIiVzIG5vcm10YWJsZSAoMSwxKSB2YWx1ZSIsIF9fZnVu Y19fKTsKKyAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQobm9ybXRh YmxlLCAyLCAxKSwgNC4wLCBHU0xfREJMX0VQU0lMT04sCisgICAgICAgICAg ICAgICAgICIlcyBub3JtdGFibGUgKDIsMSkgdmFsdWUiLCBfX2Z1bmNfXyk7 CisgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwg MiwgMiksIDEzLjAgLyAzLjAsIEdTTF9EQkxfRVBTSUxPTiwKKyAgICAgICAg ICAgICAgICAgIiVzIG5vcm10YWJsZSAoMiwyKSB2YWx1ZSIsIF9fZnVuY19f KTsKKworICAgIGdzbF9tYXRyaXhfZnJlZShub3JtdGFibGUpOworICB9CisK KyAgeworICAgIGdzbF92ZWN0b3Jfc2V0KGRhdGEzLCAwLCAxLjApOworICAg IGdzbF92ZWN0b3Jfc2V0KGRhdGEzLCAxLCAyLjApOworICAgIGdzbF92ZWN0 b3Jfc2V0KGRhdGEzLCAyLCAzLjApOworICAgIGdzbF92ZWN0b3Jfc2V0KGsy LCAwLCAyKTsKKyAgICBnc2xfdmVjdG9yX3NldChrMiwgMSwgMyk7CisKKyAg ICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24oZGF0YTMsIDIsIGsy LCBOVUxMLCAwKSwKKyAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJvciBy ZXBvcnRlZCBpbiAlcyIpOworICAgIGdzbF90ZXN0X2Ficyhnc2xfdmVjdG9y X2dldChkYXRhMywgMCksIDczLjAgLyAyMS4wLAorICAgICAgICAgICAgICAg ICBHU0xfREJMX0VQU0lMT04qMTAsCisgICAgICAgICAgICAgICAgICIlcyBz Y2FsYXIgY29ycmVjdCByZXN1bHQgYXQgJXM6JWQiLAorICAgICAgICAgICAg ICAgICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsKKyAgfQorCisg IHsKKyAgICBnc2xfdmVjdG9yX3NldChkYXRhMywgMCwgMS4wKTsKKyAgICBn c2xfdmVjdG9yX3NldChkYXRhMywgMSwgMi4wKTsKKyAgICBnc2xfdmVjdG9y X3NldChkYXRhMywgMiwgMy4wKTsKKyAgICBnc2xfdmVjdG9yX3NldChrMSwg MCwgMik7CisKKyAgICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24o ZGF0YTMsIDIsIGsxLCBOVUxMLCAwKSwKKyAgICAgICAgICAgICAiVW5leHBl Y3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIpOworICAgIGdzbF90ZXN0X2Fi cyhnc2xfdmVjdG9yX2dldChkYXRhMywgMCksIDczLjAgLyAyMS4wLAorICAg ICAgICAgICAgICAgICBHU0xfREJMX0VQU0lMT04qMTAsCisgICAgICAgICAg ICAgICAgICIlcyBzY2FsYXIgY29ycmVjdCByZXN1bHQgYXQgJXM6JWQiLAor ICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9f KTsKKyAgfQorCisKKyAgZ3NsX3ZlY3Rvcl9mcmVlKGsyKTsKKyAgZ3NsX3Zl Y3Rvcl9mcmVlKGsxKTsKKyAgZ3NsX3ZlY3Rvcl9mcmVlKGRhdGEzKTsKKyAg Z3NsX3ZlY3Rvcl9mcmVlKGRhdGEyKTsKKworfQorCit2b2lkCit0ZXN0X3Jp Y2hhcmRzb25fZXh0cmFwb2xhdGlvbl9tdWx0aXBsZWxldmVscygpCit7Cisg IGdzbF92ZWN0b3IgKiBkYXRhMiA9IGdzbF92ZWN0b3JfYWxsb2MoMik7Cisg IGdzbF92ZWN0b3IgKiBkYXRhNCA9IGdzbF92ZWN0b3JfYWxsb2MoNCk7Cisg IGdzbF92ZWN0b3IgKiBrMSA9IGdzbF92ZWN0b3JfYWxsb2MoMSk7CisgIGdz bF92ZWN0b3IgKiBrMiA9IGdzbF92ZWN0b3JfYWxsb2MoMik7CisgIGdzbF92 ZWN0b3IgKiBrMyA9IGdzbF92ZWN0b3JfYWxsb2MoMyk7CisKKyAgeworICAg IGludCBpLCBqOworICAgIGdzbF92ZWN0b3Jfc2V0KGsxLCAwLCAzKTsKKwor ICAgIGdzbF92ZWN0b3Jfc2V0KGRhdGEyLCAwLCAxLjApOworICAgIGdzbF92 ZWN0b3Jfc2V0KGRhdGEyLCAxLCAyLjApOworICAgIGdzbF90ZXN0KGdzbF9l eHRyYXBfcmljaGFyZHNvbihkYXRhMiwgMiwgazEsIE5VTEwsIDApLAorICAg ICAgICAgICAgICJVbmV4cGVjdGVkIGVycm9yIHJlcG9ydGVkIGluICVzIik7 CisgICAgY29uc3QgZG91YmxlIHh4ID0gZ3NsX3ZlY3Rvcl9nZXQoZGF0YTIs IDApOworCisgICAgZ3NsX3ZlY3Rvcl9zZXQoZGF0YTIsIDAsIDIuMCk7Cisg ICAgZ3NsX3ZlY3Rvcl9zZXQoZGF0YTIsIDEsIDMuMCk7CisgICAgZ3NsX3Rl c3QoZ3NsX2V4dHJhcF9yaWNoYXJkc29uKGRhdGEyLCAyLCBrMSwgTlVMTCwg MCksCisgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQg aW4gJXMiKTsKKyAgICBjb25zdCBkb3VibGUgeHkgPSBnc2xfdmVjdG9yX2dl dChkYXRhMiwgMCk7CisKKyAgICBnc2xfdmVjdG9yX3NldChkYXRhMiwgMCwg My4wKTsKKyAgICBnc2xfdmVjdG9yX3NldChkYXRhMiwgMSwgNC4wKTsKKyAg ICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24oZGF0YTIsIDIsIGsx LCBOVUxMLCAwKSwKKyAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJvciBy ZXBvcnRlZCBpbiAlcyIpOworICAgIGNvbnN0IGRvdWJsZSB4eiA9IGdzbF92 ZWN0b3JfZ2V0KGRhdGEyLCAwKTsKKworICAgIGdzbF92ZWN0b3Jfc2V0KGsx LCAwLCA2KTsKKworICAgIGdzbF92ZWN0b3Jfc2V0KGRhdGEyLCAwLCB4eCk7 CisgICAgZ3NsX3ZlY3Rvcl9zZXQoZGF0YTIsIDEsIHh5KTsKKyAgICBnc2xf dGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24oZGF0YTIsIDIsIGsxLCBOVUxM LCAwKSwKKyAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJvciByZXBvcnRl ZCBpbiAlcyIpOworICAgIGNvbnN0IGRvdWJsZSB5eCA9IGdzbF92ZWN0b3Jf Z2V0KGRhdGEyLCAwKTsKKworICAgIGdzbF92ZWN0b3Jfc2V0KGRhdGEyLCAw LCB4eSk7CisgICAgZ3NsX3ZlY3Rvcl9zZXQoZGF0YTIsIDEsIHh6KTsKKyAg ICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24oZGF0YTIsIDIsIGsx LCBOVUxMLCAwKSwKKyAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJvciBy ZXBvcnRlZCBpbiAlcyIpOworICAgIGNvbnN0IGRvdWJsZSB5eSA9IGdzbF92 ZWN0b3JfZ2V0KGRhdGEyLCAwKTsKKworICAgIGdzbF92ZWN0b3Jfc2V0KGsx LCAwLCA5KTsKKworICAgIGdzbF92ZWN0b3Jfc2V0KGRhdGEyLCAwLCB5eCk7 CisgICAgZ3NsX3ZlY3Rvcl9zZXQoZGF0YTIsIDEsIHl5KTsKKyAgICBnc2xf dGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24oZGF0YTIsIDIsIGsxLCBOVUxM LCAwKSwKKyAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJvciByZXBvcnRl ZCBpbiAlcyIpOworICAgIGNvbnN0IGRvdWJsZSB6eCA9IGdzbF92ZWN0b3Jf Z2V0KGRhdGEyLCAwKTsKKworICAgIGdzbF92ZWN0b3Jfc2V0KGszLCAwLCAz KTsKKyAgICBnc2xfdmVjdG9yX3NldChrMywgMSwgNik7CisgICAgZ3NsX3Zl Y3Rvcl9zZXQoazMsIDIsIDkpOworCisgICAgZ3NsX3ZlY3Rvcl9zZXQoZGF0 YTQsIDAsIDEuMCk7CisgICAgZ3NsX3ZlY3Rvcl9zZXQoZGF0YTQsIDEsIDIu MCk7CisgICAgZ3NsX3ZlY3Rvcl9zZXQoZGF0YTQsIDIsIDMuMCk7CisgICAg Z3NsX3ZlY3Rvcl9zZXQoZGF0YTQsIDMsIDQuMCk7CisgICAgZ3NsX3Rlc3Qo Z3NsX2V4dHJhcF9yaWNoYXJkc29uKGRhdGE0LCAyLCBrMywgTlVMTCwgMCks CisgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4g JXMiKTsKKyAgICBnc2xfdGVzdF9hYnMoZ3NsX3ZlY3Rvcl9nZXQoZGF0YTQs IDApLCB6eCwgR1NMX0RCTF9FUFNJTE9OLAorICAgICAgICAgICAgICAgICAi JXMgc2NhbGFyIGNvcnJlY3QgcmVzdWx0IGF0ICVzOiVkIiwKKyAgICAgICAg ICAgICAgICAgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKyAg ICBnc2xfbWF0cml4ICogbm9ybXRhYmxlID0gZ3NsX21hdHJpeF9hbGxvYyhk YXRhNC0+c2l6ZSwgZGF0YTQtPnNpemUpOworCisgICAgZ3NsX3ZlY3Rvcl9z ZXQoazIsIDAsIDMpOworICAgIGdzbF92ZWN0b3Jfc2V0KGsyLCAxLCA2KTsK KworICAgIGdzbF92ZWN0b3Jfc2V0KGRhdGE0LCAwLCAxLjApOworICAgIGdz bF92ZWN0b3Jfc2V0KGRhdGE0LCAxLCAyLjApOworICAgIGdzbF92ZWN0b3Jf c2V0KGRhdGE0LCAyLCAzLjApOworICAgIGdzbF92ZWN0b3Jfc2V0KGRhdGE0 LCAzLCA0LjApOworICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNv bihkYXRhNCwgMiwgazIsIG5vcm10YWJsZSwgMCksCisgICAgICAgICAgICAg IlVuZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMiKTsKKyAgICBnc2xf dGVzdF9hYnMoZ3NsX3ZlY3Rvcl9nZXQoZGF0YTQsIDApLCB6eCwgR1NMX0RC TF9FUFNJTE9OLAorICAgICAgICAgICAgICAgICAiJXMgc2NhbGFyIGNvcnJl Y3QgcmVzdWx0IGF0ICVzOiVkIiwKKyAgICAgICAgICAgICAgICAgX19mdW5j X18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKyAgICBmb3IgKGkgPSAwOyBp IDwgbm9ybXRhYmxlLT5zaXplMSAtIDE7ICsraSkKKyAgICAgIHsKKyAgICAg ICAgZm9yIChqID0gaSArIDE7IGogPCBub3JtdGFibGUtPnNpemUyOyArK2op CisgICAgICAgICAgeworICAgICAgICAgICAgZ3NsX3Rlc3QoIWdzbF9pc25h bihnc2xfbWF0cml4X2dldChub3JtdGFibGUsIGksIGopKSwKKyAgICAgICAg ICAgICAgICAgICAgICIlcyBleHBlY3RlZCBOQU4gaW4gbm9ybXRhYmxlIGF0 ICglZCwgJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBp LCBqKTsKKyAgICAgICAgICB9CisgICAgICB9CisKKyAgICBnc2xfdGVzdF9h YnMoZ3NsX21hdHJpeF9nZXQobm9ybXRhYmxlLCAwLCAwKSwgMS4wLCBHU0xf REJMX0VQU0lMT04sCisgICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUg KDAsMCkgdmFsdWUiLCBfX2Z1bmNfXyk7CisgICAgZ3NsX3Rlc3RfYWJzKGdz bF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwgMSwgMCksIDIuMCwgR1NMX0RCTF9F UFNJTE9OLAorICAgICAgICAgICAgICAgICAiJXMgbm9ybXRhYmxlICgxLDAp IHZhbHVlIiwgX19mdW5jX18pOworICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0 cml4X2dldChub3JtdGFibGUsIDIsIDApLCAzLjAsIEdTTF9EQkxfRVBTSUxP TiwKKyAgICAgICAgICAgICAgICAgIiVzIG5vcm10YWJsZSAoMiwwKSB2YWx1 ZSIsIF9fZnVuY19fKTsKKyAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9n ZXQobm9ybXRhYmxlLCAzLCAwKSwgNC4wLCBHU0xfREJMX0VQU0lMT04sCisg ICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDMsMCkgdmFsdWUiLCBf X2Z1bmNfXyk7CisgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRyaXhfZ2V0KG5v cm10YWJsZSwgMSwgMSksIHh4LCBHU0xfREJMX0VQU0lMT04sCisgICAgICAg ICAgICAgICAgICIlcyBub3JtdGFibGUgKDEsMSkgdmFsdWUiLCBfX2Z1bmNf Xyk7CisgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJs ZSwgMiwgMSksIHh5LCBHU0xfREJMX0VQU0lMT04sCisgICAgICAgICAgICAg ICAgICIlcyBub3JtdGFibGUgKDIsMSkgdmFsdWUiLCBfX2Z1bmNfXyk7Cisg ICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwgMywg MSksIHh6LCBHU0xfREJMX0VQU0lMT04sCisgICAgICAgICAgICAgICAgICIl cyBub3JtdGFibGUgKDMsMSkgdmFsdWUiLCBfX2Z1bmNfXyk7CisgICAgZ3Ns X3Rlc3RfYWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwgMiwgMiksIHl4 LCBHU0xfREJMX0VQU0lMT04sCisgICAgICAgICAgICAgICAgICIlcyBub3Jt dGFibGUgKDIsMikgdmFsdWUiLCBfX2Z1bmNfXyk7CisgICAgZ3NsX3Rlc3Rf YWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwgMywgMiksIHl5LCBHU0xf REJMX0VQU0lMT04sCisgICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUg KDMsMikgdmFsdWUiLCBfX2Z1bmNfXyk7CisgICAgZ3NsX3Rlc3RfYWJzKGdz bF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwgMywgMyksIHp4LCBHU0xfREJMX0VQ U0lMT04sCisgICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDMsMykg dmFsdWUiLCBfX2Z1bmNfXyk7CisKKyAgICBnc2xfbWF0cml4X2ZyZWUobm9y bXRhYmxlKTsKKyAgfQorCisgIGdzbF92ZWN0b3JfZnJlZShrMyk7CisgIGdz bF92ZWN0b3JfZnJlZShrMik7CisgIGdzbF92ZWN0b3JfZnJlZShrMSk7Cisg IGdzbF92ZWN0b3JfZnJlZShkYXRhNCk7CisgIGdzbF92ZWN0b3JfZnJlZShk YXRhMik7CiB9CiAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiB7Ci0gICAgZ3NsX2llZWVfZW52X3NldHVwKCk7CisgIGdzbF9pZWVlX2Vu dl9zZXR1cCgpOworCisgIHRlc3RfcmljaGFyZHNvbl92ZWN0b3JfZXh0cmFw b2xhdGlvbl9zdGVwKCk7CisgIHRlc3RfcmljaGFyZHNvbl92ZWN0b3JfZXh0 cmFwb2xhdGlvbl9kZWZhdWx0cygpOworICB0ZXN0X3JpY2hhcmRzb25fdmVj dG9yX2V4dHJhcG9sYXRpb25fdHdvbGV2ZWxzKCk7CisgIHRlc3RfcmljaGFy ZHNvbl92ZWN0b3JfZXh0cmFwb2xhdGlvbl9tdWx0aXBsZWxldmVscygpOwor ICB0ZXN0X3JpY2hhcmRzb25fdmVjdG9yX2V4dHJhcG9sYXRpb25fdmVjdG9y aW5wdXRzKCk7CiAKLSAgICB0ZXN0X3JpY2hhcmRzb25fZXh0cmFwb2xhdGlv bl9zdGVwKCk7Ci0gICAgdGVzdF9yaWNoYXJkc29uX2V4dHJhcG9sYXRpb25f ZGVmYXVsdHMoKTsKLSAgICB0ZXN0X3JpY2hhcmRzb25fZXh0cmFwb2xhdGlv bl90d29sZXZlbHMoKTsKLSAgICB0ZXN0X3JpY2hhcmRzb25fZXh0cmFwb2xh dGlvbl9tdWx0aXBsZWxldmVscygpOwotICAgIHRlc3RfcmljaGFyZHNvbl9l eHRyYXBvbGF0aW9uX3ZlY3RvcmlucHV0cygpOworICB0ZXN0X3JpY2hhcmRz b25fZXh0cmFwb2xhdGlvbl9zdGVwKCk7CisgIHRlc3RfcmljaGFyZHNvbl9l eHRyYXBvbGF0aW9uX2RlZmF1bHRzKCk7CisgIHRlc3RfcmljaGFyZHNvbl9l eHRyYXBvbGF0aW9uX3R3b2xldmVscygpOworICB0ZXN0X3JpY2hhcmRzb25f ZXh0cmFwb2xhdGlvbl9tdWx0aXBsZWxldmVscygpOwogCi0gICAgZXhpdChn c2xfdGVzdF9zdW1tYXJ5KCkpOworICBleGl0KGdzbF90ZXN0X3N1bW1hcnko KSk7CiB9Ci0tIAoxLjYuMC40Cgo= --00032555992eb00b21047ad0e467--