From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-vs1-xe32.google.com (mail-vs1-xe32.google.com [IPv6:2607:f8b0:4864:20::e32]) by sourceware.org (Postfix) with ESMTPS id 161D83939C1B for ; Thu, 13 May 2021 09:18:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 161D83939C1B Received: by mail-vs1-xe32.google.com with SMTP id j13so13331229vsf.2 for ; Thu, 13 May 2021 02:18:39 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=2yjyUVaM0VqCVCXHXx17W5jYM/lz4hAJxXpBYUPtvWk=; b=dkJsGu3xopnRGxhGDhonPq1ZmOht2lDNaSh0/ZccJc7VUtnNtFwH3y4kqpoQjans91 9qc9TXXvBYwSnFfYb4F1NR6bQIg6jjckB02bupRNRK2ERPlfFmuWRwkdV7xWt2MBXlAh bSfeeBoWtU0g8z0JmxoSc625jxWvLO8uMgQYINQJ7S8WSBf/cQCpjybgpmKLqItA5uZT D9NkiYNo6b6BNKkxAGK//joHnN0OZTqBAmBYXif4M4XKry0FqveRmOV91vRteOVDN9eB wvjvM7cHKUdd35cPqKj06Ayd28Tgn0Ld1gExgpbYZYE/oh8n/jmyZl5W5IF6cUHphyJ5 1nUQ== X-Gm-Message-State: AOAM533/KxFvu9YPHQzzbE2dHl42ON+LqcRXnc0V35azMMMH8l6gjZFv p9bchJY02+OjZ6YTPlEjrOKV3apkx68UGT9V8xdNGiZrR7iHLg== X-Google-Smtp-Source: ABdhPJxMhMnEynwIeYPRuCp7L81dQk58LVs/e36KBjFFYox2u8dS00SHKxNaJSP85GE5voG870C+HVhdtidQheO/ZlE= X-Received: by 2002:a67:ffc3:: with SMTP id w3mr35352957vsq.6.1620897518402; Thu, 13 May 2021 02:18:38 -0700 (PDT) MIME-Version: 1.0 From: Hongtao Liu Date: Thu, 13 May 2021 17:23:07 +0800 Message-ID: Subject: [PATCH] [i386] Fix _mm256_zeroupper to notify LRA that vzeroupper will kill sse registers. [PR target/82735] To: GCC Patches Cc: Uros Bizjak , Jakub Jelinek , "H. J. Lu" Content-Type: multipart/mixed; boundary="000000000000cd633705c2329c67" X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 May 2021 09:18:43 -0000 --000000000000cd633705c2329c67 Content-Type: text/plain; charset="UTF-8" Hi: When __builtin_ia32_vzeroupper is called explicitly, the corresponding vzeroupper pattern does not carry any CLOBBERS or SETs before LRA, which leads to incorrect optimization in pass_reload. In order to solve this problem, this patch introduces a pre_reload splitter which adds CLOBBERS to vzeroupper's pattern, it can solve the problem in pr. At the same time, in order to optimize the low 128 bits in post_reload CSE, this patch also transforms those CLOBBERS to SETs in pass_vzeroupper. It works fine except for TARGET_64BIT_MS_ABI, under which xmm6-xmm15 are callee-saved, so even if there're no other uses of xmm6-xmm15 in the function, because of vzeroupper's pattern, pro_epilog will save and restore those registers, which is obviously redundant. In order to eliminate this redundancy, a post_reload splitter is introduced, which drops those SETs, until epilogue_completed splitter adds those SETs back, it looks to be safe since there's no CSE between post_reload split2 and epilogue_completed split3??? Also frame info needs to be updated in pro_epilog, which saves and restores xmm6-xmm15 only if there's usage other than explicit vzeroupper pattern. Bootstrapped and regtested on X86_64-linux-gnu{-m32,} Ok for trunk? gcc/ChangeLog: PR target/82735 * config/i386/i386-expand.c (ix86_expand_builtin): Count number of __builtin_ia32_vzeroupper. * config/i386/i386-features.c (ix86_add_reg_usage_to_vzerouppers): Transform CLOBBERs to SETs for explicit vzeroupper pattern so that CSE can optimize lower 128 bits. * config/i386/i386.c (ix86_handle_explicit_vzeroupper_in_pro_epilog): New. (ix86_save_reg): If there's no use of xmm6~xmm15 other than explicit vzeroupper under TARGET_64BIT_MS_ABI, no need to save REGNO. (ix86_finalize_stack_frame_flags): Recompute frame layout if there's explicit vzeroupper under TARGET_64BIT_MS_ABI. * config/i386/i386.h (struct machine_function): Change type of has_explicit_vzeroupper from BOOL_BITFILED to unsigned int. * config/i386/sse.md (*avx_vzeroupper_2): New post-reload splitter which will drop all SETs for explicit vzeroupper patterns. (*avx_vzeroupper_1): Generate SET reg to reg instead of CLOBBER, and add pre-reload splitter after it. gcc/testsuite/ChangeLog: PR target/82735 * gcc.target/i386/pr82735-1.c: New test. * gcc.target/i386/pr82735-2.c: New test. * gcc.target/i386/pr82735-3.c: New test. * gcc.target/i386/pr82735-4.c: New test. * gcc.target/i386/pr82735-5.c: New test. -- BR, Hongtao --000000000000cd633705c2329c67 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-i386-Fix-_mm256_zeroupper-to-notify-LRA-that-vzeroup.patch" Content-Disposition: attachment; filename="0001-i386-Fix-_mm256_zeroupper-to-notify-LRA-that-vzeroup.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_komolz7p0 RnJvbSBkNTNiMGM2OTM0ZWE0OTljOWY4N2RmOTYzNjYxYjYyN2U3ZTk3N2JmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBsaXVob25ndCA8aG9uZ3Rhby5saXVAaW50ZWwuY29tPgpEYXRl OiBXZWQsIDEyIE1heSAyMDIxIDE0OjIwOjU0ICswODAwClN1YmplY3Q6IFtQQVRDSF0gW2kzODZd IEZpeCBfbW0yNTZfemVyb3VwcGVyIHRvIG5vdGlmeSBMUkEgdGhhdCB2emVyb3VwcGVyCiB3aWxs IGtpbGwgc3NlIHJlZ2lzdGVycy4KCldoZW4gX19idWlsdGluX2lhMzJfdnplcm91cHBlciBpcyBj YWxsZWQgZXhwbGljaXRseSwgdGhlIGNvcnJlc3BvbmRpbmcKdnplcm91cHBlciBwYXR0ZXJuIGRv ZXMgbm90IGNhcnJ5IGFueSBDTE9CQkVSUyBvciBTRVRzIGJlZm9yZSBMUkEsCndoaWNoIGxlYWRz IHRvIGluY29ycmVjdCBvcHRpbWl6YXRpb24gaW4gcGFzc19yZWxvYWQuCkluIG9yZGVyIHRvIHNv bHZlIHRoaXMgcHJvYmxlbSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcHJlX3JlbG9hZApzcGxp dHRlciB3aGljaCBhZGRzIENMT0JCRVJTIHRvIHZ6ZXJvdXBwZXIncyBwYXR0ZXJuLCBpdCBjYW4g c29sdmUgdGhlCnByb2JsZW0gaW4gcHIuCgpBdCB0aGUgc2FtZSB0aW1lLCBpbiBvcmRlciB0byBv cHRpbWl6ZSB0aGUgbG93IDEyOCBiaXRzIGluCnBvc3RfcmVsb2FkIENTRSwgdGhpcyBwYXRjaCBh bHNvIHRyYW5zZm9ybXMgdGhvc2UgQ0xPQkJFUlMgdG8gU0VUcyBpbgpwYXNzX3Z6ZXJvdXBwZXIu CgpJdCB3b3JrcyBmaW5lIGV4Y2VwdCBmb3IgVEFSR0VUXzY0QklUX01TX0FCSSwgdW5kZXIgd2hp Y2ggeG1tNi14bW0xNQphcmUgY2FsbGVlLXNhdmVkLCBzbyBldmVuIGlmIHRoZXJlJ3JlIG5vIG90 aGVyIHVzZXMgb2YgeG1tNi14bW0xNSBpbiB0aGUKZnVuY3Rpb24sIGJlY2F1c2Ugb2Ygdnplcm91 cHBlcidzIHBhdHRlcm4sIHByb19lcGlsb2cgd2lsbCBzYXZlIGFuZApyZXN0b3JlIHRob3NlIHJl Z2lzdGVycywgd2hpY2ggaXMgb2J2aW91c2x5IHJlZHVuZGFudC4gSW4gb3JkZXIgdG8KZWxpbWlu YXRlIHRoaXMgcmVkdW5kYW5jeSwgYSBwb3N0X3JlbG9hZCBzcGxpdHRlciBpcyBpbnRyb2R1Y2Vk LCB3aGljaApkcm9wcyB0aG9zZSBTRVRzLCB1bnRpbCBlcGlsb2d1ZV9jb21wbGV0ZWQgc3BsaXR0 ZXIgYWRkcyB0aG9zZSBTRVRzCmJhY2ssIGl0IGxvb2tzIHRvIGJlIHNhZmUgc2luY2UgdGhlcmUn cyBubyBDU0UgYmV0d2VlbiBwb3N0X3JlbG9hZApzcGxpdDIgYW5kIGVwaWxvZ3VlX2NvbXBsZXRl ZCBzcGxpdDM/Pz8gQWxzbyBmcmFtZSBpbmZvIG5lZWRzIHRvIGJlCnVwZGF0ZWQgaW4gcHJvX2Vw aWxvZywgd2hpY2ggc2F2ZXMgYW5kIHJlc3RvcmVzIHhtbTYteG1tMTUgb25seSBpZgp0aGVyZSdz IHVzYWdlIG90aGVyIHRoYW4gZXhwbGljaXQgdnplcm91cHBlciBwYXR0ZXJuLgoKZ2NjL0NoYW5n ZUxvZzoKCglQUiB0YXJnZXQvODI3MzUKCSogY29uZmlnL2kzODYvaTM4Ni1leHBhbmQuYyAoaXg4 Nl9leHBhbmRfYnVpbHRpbik6IENvdW50CgludW1iZXIgb2YgX19idWlsdGluX2lhMzJfdnplcm91 cHBlci4KCSogY29uZmlnL2kzODYvaTM4Ni1mZWF0dXJlcy5jIChpeDg2X2FkZF9yZWdfdXNhZ2Vf dG9fdnplcm91cHBlcnMpOgoJVHJhbnNmb3JtIENMT0JCRVJzIHRvIFNFVHMgZm9yIGV4cGxpY3Qg dnplcm91cHBlciBwYXR0ZXJuIHNvCgl0aGF0IENTRSBjYW4gb3B0aW1pemUgbG93ZXIgMTI4IGJp dHMuCgkqIGNvbmZpZy9pMzg2L2kzODYuYyAoaXg4Nl9oYW5kbGVfZXhwbGljaXRfdnplcm91cHBl cl9pbl9wcm9fZXBpbG9nKToKCU5ldy4KCShpeDg2X3NhdmVfcmVnKTogSWYgdGhlcmUncyBubyB1 c2Ugb2YgeG1tNn54bW0xNSBvdGhlciB0aGFuCglleHBsaWNpdCB2emVyb3VwcGVyIHVuZGVyIFRB UkdFVF82NEJJVF9NU19BQkksIG5vIG5lZWQgdG8gc2F2ZQoJUkVHTk8uCgkoaXg4Nl9maW5hbGl6 ZV9zdGFja19mcmFtZV9mbGFncyk6IFJlY29tcHV0ZSBmcmFtZSBsYXlvdXQgaWYKCXRoZXJlJ3Mg ZXhwbGljaXQgdnplcm91cHBlciB1bmRlciBUQVJHRVRfNjRCSVRfTVNfQUJJLgoJKiBjb25maWcv aTM4Ni9pMzg2LmggKHN0cnVjdCBtYWNoaW5lX2Z1bmN0aW9uKTogQ2hhbmdlIHR5cGUgb2YKCWhh c19leHBsaWNpdF92emVyb3VwcGVyIGZyb20gQk9PTF9CSVRGSUxFRCB0byB1bnNpZ25lZCBpbnQu CgkqIGNvbmZpZy9pMzg2L3NzZS5tZCAoKmF2eF92emVyb3VwcGVyXzIpOiBOZXcgcG9zdC1yZWxv YWQKCXNwbGl0dGVyIHdoaWNoIHdpbGwgZHJvcCBhbGwgU0VUcyBmb3IgZXhwbGljaXQgdnplcm91 cHBlcgoJcGF0dGVybnMuCgkoKmF2eF92emVyb3VwcGVyXzEpOiBHZW5lcmF0ZSBTRVQgcmVnIHRv IHJlZyBpbnN0ZWFkIG9mCglDTE9CQkVSLCBhbmQgYWRkIHByZS1yZWxvYWQgc3BsaXR0ZXIgYWZ0 ZXIgaXQuCgpnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoKCglQUiB0YXJnZXQvODI3MzUKCSogZ2Nj LnRhcmdldC9pMzg2L3ByODI3MzUtMS5jOiBOZXcgdGVzdC4KCSogZ2NjLnRhcmdldC9pMzg2L3By ODI3MzUtMi5jOiBOZXcgdGVzdC4KCSogZ2NjLnRhcmdldC9pMzg2L3ByODI3MzUtMy5jOiBOZXcg dGVzdC4KCSogZ2NjLnRhcmdldC9pMzg2L3ByODI3MzUtNC5jOiBOZXcgdGVzdC4KCSogZ2NjLnRh cmdldC9pMzg2L3ByODI3MzUtNS5jOiBOZXcgdGVzdC4KLS0tCiBnY2MvY29uZmlnL2kzODYvaTM4 Ni1leHBhbmQuYyAgICAgICAgICAgICB8ICAyICstCiBnY2MvY29uZmlnL2kzODYvaTM4Ni1mZWF0 dXJlcy5jICAgICAgICAgICB8IDI1ICsrKysrKysrKystCiBnY2MvY29uZmlnL2kzODYvaTM4Ni5j ICAgICAgICAgICAgICAgICAgICB8IDIzICsrKysrKysrKysKIGdjYy9jb25maWcvaTM4Ni9pMzg2 LmggICAgICAgICAgICAgICAgICAgIHwgIDggKystLQogZ2NjL2NvbmZpZy9pMzg2L3NzZS5tZCAg ICAgICAgICAgICAgICAgICAgfCA0OCArKysrKysrKysrKysrKysrKysrLQogZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvcHI4MjczNS0xLmMgfCAyOSArKysrKysrKysrKysKIGdjYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODI3MzUtMi5jIHwgMjEgKysrKysrKysrCiBnY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjgyNzM1LTMuYyB8ICA1ICsrKwogZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvcHI4MjczNS00LmMgfCA0OCArKysrKysrKysrKysrKysrKysrKwog Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4MjczNS01LmMgfCA1NCArKysrKysrKysr KysrKysrKysrKysrKwogMTAgZmlsZXMgY2hhbmdlZCwgMjU2IGluc2VydGlvbnMoKyksIDcgZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvcHI4MjczNS0xLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9wcjgyNzM1LTIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L3ByODI3MzUtMy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvcHI4MjczNS00LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjgyNzM1LTUuYwoKZGlmZiAtLWdpdCBhL2djYy9jb25m aWcvaTM4Ni9pMzg2LWV4cGFuZC5jIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYtZXhwYW5kLmMKaW5k ZXggZmVlNGQwN2I3ZmQuLjdmMzMyNmExMmIyIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2kzODYv aTM4Ni1leHBhbmQuYworKysgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni1leHBhbmQuYwpAQCAtMTMy MzMsNyArMTMyMzMsNyBAQCByZHNlZWRfc3RlcDoKICAgICAgIHJldHVybiAwOwogCiAgICAgY2Fz ZSBJWDg2X0JVSUxUSU5fVlpFUk9VUFBFUjoKLSAgICAgIGNmdW4tPm1hY2hpbmUtPmhhc19leHBs aWNpdF92emVyb3VwcGVyID0gdHJ1ZTsKKyAgICAgIGNmdW4tPm1hY2hpbmUtPmhhc19leHBsaWNp dF92emVyb3VwcGVyKys7CiAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQg YS9nY2MvY29uZmlnL2kzODYvaTM4Ni1mZWF0dXJlcy5jIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYt ZmVhdHVyZXMuYwppbmRleCA3Nzc4M2ExNTRiNi4uNmIyMTc5ZjE2Y2IgMTAwNjQ0Ci0tLSBhL2dj Yy9jb25maWcvaTM4Ni9pMzg2LWZlYXR1cmVzLmMKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYt ZmVhdHVyZXMuYwpAQCAtMTgyNyw4ICsxODI3LDMxIEBAIGl4ODZfYWRkX3JlZ191c2FnZV90b192 emVyb3VwcGVycyAodm9pZCkKIAl7CiAJICBpZiAoIU5PTkRFQlVHX0lOU05fUCAoaW5zbikpCiAJ ICAgIGNvbnRpbnVlOworCSAgLyogVHJhbnNmb3JtIENMT0JCRVJzIHRvIFNFVHMgc28gdGhhdCBs b3dlciAxMjggYml0cyBvZiBzc2UgcmVpc3RlcnMKKwkgICAgIHdpbGwgYmUgYWJsZSB0byBjcm9z cyB2emVyb3VwcGVyIGluIHBvc3QtcmVsb2FkIENTRS4gICovCiAJICBpZiAodnplcm91cHBlcl9w YXR0ZXJuIChQQVRURVJOIChpbnNuKSwgVk9JRG1vZGUpKQotCSAgICBpeDg2X2FkZF9yZWdfdXNh Z2VfdG9fdnplcm91cHBlciAoaW5zbiwgbGl2ZV9yZWdzKTsKKwkgICAgeworCSAgICAgIGlmIChY VkVDRVhQIChYVkVDRVhQIChQQVRURVJOIChpbnNuKSwgMCwgMCksIDAsIDApID09IGNvbnN0MV9y dHgpCisJCXsKKwkJICB1bnNpZ25lZCBpbnQgbnJlZ3MgPSBUQVJHRVRfNjRCSVQgPyAxNiA6IDg7 CisJCSAgcnR2ZWMgdmVjID0gcnR2ZWNfYWxsb2MgKG5yZWdzICsgMSk7CisJCSAgUlRWRUNfRUxU ICh2ZWMsIDApID0gWFZFQ0VYUCAoUEFUVEVSTiAoaW5zbiksIDAsIDApOworCQkgIGZvciAodW5z aWduZWQgaW50IGkgPSAwOyBpIDwgbnJlZ3M7ICsraSkKKwkJICAgIHsKKwkJICAgICAgdW5zaWdu ZWQgaW50IHJlZ25vID0gR0VUX1NTRV9SRUdOTyAoaSk7CisJCSAgICAgIHJ0eCByZWcgPSBnZW5f cnR4X1JFRyAoVjJESW1vZGUsIHJlZ25vKTsKKwkJICAgICAgUlRWRUNfRUxUICh2ZWMsIGkgKyAx KSA9IGdlbl9ydHhfU0VUIChyZWcsIHJlZyk7CisJCSAgICB9CisJCSAgWFZFQyAoUEFUVEVSTiAo aW5zbiksIDApID0gdmVjOworCQkgIElOU05fQ09ERSAoaW5zbikgPSAtMTsKKwkJICBkZl9pbnNu X3Jlc2NhbiAoaW5zbik7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBnY2NfYXNzZXJ0IChY VkVDTEVOIChQQVRURVJOIChpbnNuKSwgMCkgPT0gMSk7CisJCSAgaXg4Nl9hZGRfcmVnX3VzYWdl X3RvX3Z6ZXJvdXBwZXIgKGluc24sIGxpdmVfcmVncyk7CisJCX0KKwkgICAgfQogCSAgZGZfc2lt dWxhdGVfb25lX2luc25fYmFja3dhcmRzIChiYiwgaW5zbiwgbGl2ZV9yZWdzKTsKIAl9CiAgICAg fQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYuYyBiL2djYy9jb25maWcvaTM4Ni9p Mzg2LmMKaW5kZXggNzgwZGExMDhhN2MuLjRkNGQ3ZGJiYzgyIDEwMDY0NAotLS0gYS9nY2MvY29u ZmlnL2kzODYvaTM4Ni5jCisrKyBiL2djYy9jb25maWcvaTM4Ni9pMzg2LmMKQEAgLTYxNzAsNiAr NjE3MCwxNyBAQCBpeDg2X2hhcmRfcmVnbm9fc2NyYXRjaF9vayAodW5zaWduZWQgaW50IHJlZ25v KQogCSAgICAgICYmIGRmX3JlZ3NfZXZlcl9saXZlX3AgKHJlZ25vKSkpOwogfQogCisvKiBSZXR1 cm4gdHJ1ZSBpZiBleHBsaWNpdCB1c2FnZSBvZiBfX2J1aWx0aW5faWEzMl92emVyb3VwcGVyCisg ICBzaG91bGQgYmUgc3BlY2lhbGx5IGhhbmRsZWQgaW4gcHJvX2VwaWxvZy4gICovCitzdGF0aWMg Ym9vbAoraXg4Nl9oYW5kbGVfZXhwbGljaXRfdnplcm91cHBlcl9pbl9wcm9fZXBpbG9nICgpCit7 CisgIHJldHVybiAoY2Z1bi0+bWFjaGluZS0+aGFzX2V4cGxpY2l0X3Z6ZXJvdXBwZXIKKwkgICYm IFRBUkdFVF82NEJJVF9NU19BQkkKKwkgICYmICFlcGlsb2d1ZV9jb21wbGV0ZWQKKwkgICYmIHJl bG9hZF9jb21wbGV0ZWQpOworfQorCiAvKiBSZXR1cm4gVFJVRSBpZiB3ZSBuZWVkIHRvIHNhdmUg UkVHTk8uICAqLwogCiBib29sCkBAIC02MjQ0LDYgKzYyNTUsMTYgQEAgaXg4Nl9zYXZlX3JlZyAo dW5zaWduZWQgaW50IHJlZ25vLCBib29sIG1heWJlX2VoX3JldHVybiwgYm9vbCBpZ25vcmVfb3V0 bGluZWQpCiAgICAgICAmJiAhY2Z1bi0+bWFjaGluZS0+bm9fZHJhcF9zYXZlX3Jlc3RvcmUpCiAg ICAgcmV0dXJuIHRydWU7CiAKKyAgLyogSWYgdGhlcmUncyBubyB1c2Ugb3RoZXIgdGhhbiBleHBs aWNpdCB2emVyb3VwcGVyCisgICAgIGZvciB4bW02fnhtbTE1IHVuZGVyIFRBUkdFVF82NEJJVF9N U19BQkksCisgICAgIG5vIG5lZWQgdG8gc2F2ZSBSRUdOTy4gICovCisgIGlmIChpeDg2X2hhbmRs ZV9leHBsaWNpdF92emVyb3VwcGVyX2luX3Byb19lcGlsb2cgKCkKKyAgICAgICYmIChJTl9SQU5H RSAocmVnbm8sIEZJUlNUX1NTRV9SRUcgKyA2LCBMQVNUX1NTRV9SRUcpCisJICB8fCBJTl9SQU5H RSAocmVnbm8sIEZJUlNUX1JFWF9TU0VfUkVHLCBMQVNUX1JFWF9TU0VfUkVHKSkpCisgICAgcmV0 dXJuIGRmX3JlZ3NfZXZlcl9saXZlX3AgKHJlZ25vKQorICAgICAgPyBkZl9oYXJkX3JlZ191c2Vk X2NvdW50IChyZWdubykgPiBjZnVuLT5tYWNoaW5lLT5oYXNfZXhwbGljaXRfdnplcm91cHBlcgor ICAgICAgOiBmYWxzZTsKKwogICByZXR1cm4gKGRmX3JlZ3NfZXZlcl9saXZlX3AgKHJlZ25vKQog CSAgJiYgIWNhbGxfdXNlZF9vcl9maXhlZF9yZWdfcCAocmVnbm8pCiAJICAmJiAocmVnbm8gIT0g SEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTSB8fCAhZnJhbWVfcG9pbnRlcl9uZWVkZWQpKTsKQEAg LTgwNDYsNiArODA2Nyw4IEBAIGl4ODZfZmluYWxpemVfc3RhY2tfZnJhbWVfZmxhZ3MgKHZvaWQp CiAgICAgcmVjb21wdXRlX2ZyYW1lX2xheW91dF9wID0gdHJ1ZTsKICAgY3J0bC0+c3RhY2tfcmVh bGlnbl9uZWVkZWQgPSBzdGFja19yZWFsaWduOwogICBjcnRsLT5zdGFja19yZWFsaWduX2ZpbmFs aXplZCA9IHRydWU7CisgIGlmIChpeDg2X2hhbmRsZV9leHBsaWNpdF92emVyb3VwcGVyX2luX3By b19lcGlsb2cgKCkpCisgICAgcmVjb21wdXRlX2ZyYW1lX2xheW91dF9wID0gdHJ1ZTsKICAgaWYg KHJlY29tcHV0ZV9mcmFtZV9sYXlvdXRfcCkKICAgICBpeDg2X2NvbXB1dGVfZnJhbWVfbGF5b3V0 ICgpOwogfQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYuaCBiL2djYy9jb25maWcv aTM4Ni9pMzg2LmgKaW5kZXggOTdkNmYzODYzY2IuLmMwODU1YTkzNmFjIDEwMDY0NAotLS0gYS9n Y2MvY29uZmlnL2kzODYvaTM4Ni5oCisrKyBiL2djYy9jb25maWcvaTM4Ni9pMzg2LmgKQEAgLTI2 NTQsMTAgKzI2NTQsNiBAQCBzdHJ1Y3QgR1RZKCgpKSBtYWNoaW5lX2Z1bmN0aW9uIHsKICAgLyog VHJ1ZSBpZiB0aGUgZnVuY3Rpb24gbmVlZHMgYSBzdGFjayBmcmFtZS4gICovCiAgIEJPT0xfQklU RklFTEQgc3RhY2tfZnJhbWVfcmVxdWlyZWQgOiAxOwogCi0gIC8qIFRydWUgaWYgX19idWlsdGlu X2lhMzJfdnplcm91cHBlciAoKSBoYXMgYmVlbiBleHBhbmRlZCBpbiBjdXJyZW50Ci0gICAgIGZ1 bmN0aW9uLiAgKi8KLSAgQk9PTF9CSVRGSUVMRCBoYXNfZXhwbGljaXRfdnplcm91cHBlciA6IDE7 Ci0KICAgLyogVHJ1ZSBpZiB3ZSBzaG91bGQgYWN0IHNpbGVudGx5LCByYXRoZXIgdGhhbiByYWlz ZSBhbiBlcnJvciBmb3IKICAgICAgaW52YWxpZCBjYWxscy4gICovCiAgIEJPT0xfQklURklFTEQg c2lsZW50X3AgOiAxOwpAQCAtMjY2NSw2ICsyNjYxLDEwIEBAIHN0cnVjdCBHVFkoKCkpIG1hY2hp bmVfZnVuY3Rpb24gewogICAvKiBUaGUgbGFyZ2VzdCBhbGlnbm1lbnQsIGluIGJ5dGVzLCBvZiBz dGFjayBzbG90IGFjdHVhbGx5IHVzZWQuICAqLwogICB1bnNpZ25lZCBpbnQgbWF4X3VzZWRfc3Rh Y2tfYWxpZ25tZW50OwogCisgIC8qIE51bWJlciBvZiBfX2J1aWx0aW5faWEzMl92emVyb3VwcGVy ICgpIHdoaWNoIGhhcyBiZWVuIGV4cGFuZGVkIGluCisgICAgIGN1cnJlbnQgZnVuY3Rpb24uICAq LworICB1bnNpZ25lZCBpbnQgaGFzX2V4cGxpY2l0X3Z6ZXJvdXBwZXI7CisKICAgLyogRHVyaW5n IHByb2xvZ3VlL2VwaWxvZ3VlIGdlbmVyYXRpb24sIHRoZSBjdXJyZW50IGZyYW1lIHN0YXRlLgog ICAgICBPdGhlcndpc2UsIHRoZSBmcmFtZSBzdGF0ZSBhdCB0aGUgZW5kIG9mIHRoZSBwcm9sb2d1 ZS4gICovCiAgIHN0cnVjdCBtYWNoaW5lX2ZyYW1lX3N0YXRlIGZzOwpkaWZmIC0tZ2l0IGEvZ2Nj L2NvbmZpZy9pMzg2L3NzZS5tZCBiL2djYy9jb25maWcvaTM4Ni9zc2UubWQKaW5kZXggODk3Y2Yz ZWFlYTkuLjQ4OWZhMDJmYTIwIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2kzODYvc3NlLm1kCisr KyBiL2djYy9jb25maWcvaTM4Ni9zc2UubWQKQEAgLTIwNjI2LDcgKzIwNjI2LDcgQEAgKGRlZmlu ZV9pbnNuX2FuZF9zcGxpdCAiKmF2eF92emVyb3VwcGVyXzEiCiAgICAgICBlbHNlCiAJewogCSAg cnR4IHJlZyA9IGdlbl9ydHhfUkVHIChWMkRJbW9kZSwgcmVnbm8pOwotCSAgUlRWRUNfRUxUICh2 ZWMsIGkgKyAxKSA9IGdlbl9ydHhfQ0xPQkJFUiAoVk9JRG1vZGUsIHJlZyk7CisJICBSVFZFQ19F TFQgKHZlYywgaSArIDEpID0gZ2VuX3J0eF9TRVQgKHJlZywgcmVnKTsKIAl9CiAgICAgfQogICBv cGVyYW5kc1swXSA9IGdlbl9ydHhfUEFSQUxMRUwgKFZPSURtb2RlLCB2ZWMpOwpAQCAtMjA2Mzgs NiArMjA2MzgsNTIgQEAgKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmF2eF92emVyb3VwcGVyXzEi CiAgICAoc2V0X2F0dHIgImJ0dmVyMl9kZWNvZGUiICJ2ZWN0b3IiKQogICAgKHNldF9hdHRyICJt b2RlIiAiT0kiKV0pCiAKKyhkZWZpbmVfc3BsaXQKKyAgWyhtYXRjaF9wYXJhbGxlbCAwICJ2emVy b3VwcGVyX3BhdHRlcm4iCisgICAgIFsodW5zcGVjX3ZvbGF0aWxlIFsoY29uc3RfaW50IDApXSBV TlNQRUNWX1ZaRVJPVVBQRVIpXSldCisgICJUQVJHRVRfQVZYICYmIGl4ODZfcHJlX3JlbG9hZF9z cGxpdCAoKSIKKyAgWyhtYXRjaF9kdXAgMCldCit7CisgIC8qIFdoZW4gdnplcm91cHBlciBpcyBl eHBsaWN0bHkgdXNlZCwgZm9yIExSQSBwdXJwb3NlLCBtYWtlIGl0IGNsZWFyCisgICAgIHRoZSBp bnN0cnVjdGlvbiBraWxscyBzc2UgcmVnaXN0ZXJzLiAgKi8KKyAgZ2NjX2Fzc2VydCAoY2Z1bi0+ bWFjaGluZS0+aGFzX2V4cGxpY2l0X3Z6ZXJvdXBwZXIpOworICB1bnNpZ25lZCBpbnQgbnJlZ3Mg PSBUQVJHRVRfNjRCSVQgPyAxNiA6IDg7CisgIHJ0dmVjIHZlYyA9IHJ0dmVjX2FsbG9jIChucmVn cyArIDEpOworICBSVFZFQ19FTFQgKHZlYywgMCkgPSBnZW5fcnR4X1VOU1BFQ19WT0xBVElMRSAo Vk9JRG1vZGUsCisJCQkJCQlnZW5fcnR2ZWMgKDEsIGNvbnN0MV9ydHgpLAorCQkJCQkJVU5TUEVD Vl9WWkVST1VQUEVSKTsKKyAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBucmVnczsgKytp KQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCByZWdubyA9IEdFVF9TU0VfUkVHTk8gKGkpOwor ICAgICAgcnR4IHJlZyA9IGdlbl9ydHhfUkVHIChWMkRJbW9kZSwgcmVnbm8pOworICAgICAgUlRW RUNfRUxUICh2ZWMsIGkgKyAxKSA9IGdlbl9ydHhfQ0xPQkJFUiAoVk9JRG1vZGUsIHJlZyk7Cisg ICAgfQorICBvcGVyYW5kc1swXSA9IGdlbl9ydHhfUEFSQUxMRUwgKFZPSURtb2RlLCB2ZWMpOwor fSkKKworKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmF2eF92emVyb3VwcGVyXzIiCisgIFsobWF0 Y2hfcGFyYWxsZWwgMCAidnplcm91cHBlcl9wYXR0ZXJuIgorICAgICBbKHVuc3BlY192b2xhdGls ZSBbKGNvbnN0X2ludCAxKV0gVU5TUEVDVl9WWkVST1VQUEVSKV0pXQorICAiVEFSR0VUX0FWWCAm JiBYVkVDTEVOIChvcGVyYW5kc1swXSwgMCkgPT0gKFRBUkdFVF82NEJJVCA/IDE2IDogOCkgKyAx IgorICAidnplcm91cHBlciIKKyAgIiYmIHJlbG9hZF9jb21wbGV0ZWQgJiYgVEFSR0VUXzY0QklU X01TX0FCSSIKKyAgWyhjb25zdF9pbnQgMCldCit7CisgIC8qIFRvIGF2b2lkIHJlZHVuZGFudCBz YXZlIGFuZCByZXN0b3JlIGluIHByb19hbmRfZXBpbG9nLCBkcm9wCisgICAgIHRob3NlIFNFVHMv Q0xPQkJFUnMgd2hpY2ggYXJlIGFkZGVkIGJ5IHByZS1yZWxvYWQgc3BsaXR0ZXIKKyAgICAgb3Ig cGFzc192emVyb3VwcGVyLCBpdCdzIHNhZmUgc2luY2UgdGhlcmUncyBubyBDU0Ugb3B0aW1pemF0 aW9uCisgICAgIGJldHdlZW4gcG9zdC1yZWxvYWQgc3BsaXQyIGFuZCBlcGlsb2d1ZS1jb21wbGV0 ZWQgc3BsaXQzPz8/ICAqLworICBnY2NfYXNzZXJ0IChjZnVuLT5tYWNoaW5lLT5oYXNfZXhwbGlj aXRfdnplcm91cHBlcik7CisgIGVtaXRfaW5zbiAoZ2VuX2F2eF92emVyb3VwcGVyICgpKTsKKyAg RE9ORTsKK30KKyAgWyhzZXRfYXR0ciAidHlwZSIgInNzZSIpCisgICAoc2V0X2F0dHIgIm1vZHJt IiAiMCIpCisgICAoc2V0X2F0dHIgIm1lbW9yeSIgIm5vbmUiKQorICAgKHNldF9hdHRyICJwcmVm aXgiICJ2ZXgiKQorICAgKHNldF9hdHRyICJidHZlcjJfZGVjb2RlIiAidmVjdG9yIikKKyAgIChz ZXRfYXR0ciAibW9kZSIgIk9JIildKQorCiAoZGVmaW5lX21vZGVfYXR0ciBwYnJvYWRjYXN0X2V2 ZXhfaXNhCiAgIFsoVjY0UUkgImF2eDUxMmJ3IikgKFYzMlFJICJhdng1MTJidyIpIChWMTZRSSAi YXZ4NTEyYnciKQogICAgKFYzMkhJICJhdng1MTJidyIpIChWMTZISSAiYXZ4NTEyYnciKSAoVjhI SSAiYXZ4NTEyYnciKQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv cHI4MjczNS0xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjgyNzM1LTEuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMWE2M2I5YWU5YzkKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjgyNzM1LTEuYwpA QCAtMCwwICsxLDI5IEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1P MiAtbWF2eCIgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXZ4IH0gKi8K KworI2luY2x1ZGUgImF2eC1jaGVjay5oIgorCit2b2lkCitfX2F0dHJpYnV0ZV9fICgobm9pcGEp KQorbXRlc3QoY2hhciAqZGVzdCkKK3sKKyAgX19tMjU2aSB5bW0xID0gX21tMjU2X3NldDFfZXBp OCgoY2hhcikweDEpOworICBfbW0yNTZfc3RvcmV1X3NpMjU2KChfX20yNTZpICopKGRlc3QgKyAz MiksIHltbTEpOworICBfbW0yNTZfemVyb3VwcGVyKCk7CisgIF9fbTI1NmkgeW1tMiA9IF9tbTI1 Nl9zZXQxX2VwaTgoKGNoYXIpMHgxKTsKKyAgX21tMjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAq KWRlc3QsIHltbTIpOworfQorCit2b2lkCithdnhfdGVzdCAoKQoreworICBjaGFyIGJ1Zls2NF07 CisgIGZvciAoaW50IGkgPSAwOyBpICE9IDY0OyBpKyspCisgICAgYnVmW2ldID0gMjsKKyAgbXRl c3QgKGJ1Zik7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAzMjsgKytpKQorICAgIGlmIChidWZb aV0gIT0gMSkKKyAgICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKK30KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODI3MzUtMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvcHI4MjczNS0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjQ4ZDBkNmU5ODNkCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvcHI4MjczNS0yLmMKQEAgLTAsMCArMSwyMSBAQAorLyogeyBkZy1kbyBjb21w aWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1hdnggLU8yIiB9ICovCisKKyNpbmNsdWRlIDxp bW1pbnRyaW4uaD4KKwordm9pZCB0ZXN0KGNoYXIgKmRlc3QpCit7CisgIC8qIHhtbTEgY2FuIGJl IHByb3BhZ2F0ZWQgdG8geG1tMiBieSBDU0UuICAqLworICBfX20xMjhpIHhtbTEgPSBfbW1fc2V0 MV9lcGk4KChjaGFyKTB4MSk7CisgIF9tbV9zdG9yZXVfc2kxMjgoKF9fbTEyOGkgKikoZGVzdCAr IDMyKSwgeG1tMSk7CisgIF9tbTI1Nl96ZXJvdXBwZXIoKTsKKyAgX21tMjU2X3plcm91cHBlcigp OworICBfbW0yNTZfemVyb3VwcGVyKCk7CisgIF9tbTI1Nl96ZXJvdXBwZXIoKTsKKyAgX21tMjU2 X3plcm91cHBlcigpOworICBfX20xMjhpIHhtbTIgPSBfbW1fc2V0MV9lcGk4KChjaGFyKTB4MSk7 CisgIF9tbV9zdG9yZXVfc2kxMjgoKF9fbTEyOGkgKilkZXN0LCB4bW0yKTsKK30KKworLyogRGFy d2luIGxvY2FsIGNvbnN0YW50IHN5bWJvbCBpcyAibEMwIiwgRUxGIHRhcmdldHMgIi5MQzAiICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgeyg/bil2bW92ZHFhXHRcLj9b TGxdQzBbXixdKiwgJXhtbVswLTldfSAxIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvcHI4MjczNS0zLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjgyNzM1LTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u ZTNmODAxZTY5MjQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjgyNzM1LTMuYwpAQCAtMCwwICsxLDUgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICov CisvKiB7IGRnLW9wdGlvbnMgIi1tYXZ4IC1PMiAtbWFiaT1tcyIgfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLW5vdCB7KD9uKXhtbShbNi05XXwxWzAtNV0pfSB9IH0gKi8KKwor I2luY2x1ZGUgInByODI3MzUtMi5jIgpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvcHI4MjczNS00LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjgy NzM1LTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzhjMGE2Y2Iy YzgKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjgy NzM1LTQuYwpAQCAtMCwwICsxLDQ4IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyAh IGlhMzIgfSB9IH0gICovCisvKiB7IGRnLW9wdGlvbnMgIi1tYXZ4IC1PMiAtbWFiaT1tcyAtbW5v LWF2eDUxMmYgLW1hc209YXR0IiB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMgeyg/bikoPzp2bW92ZHFhWzEtOV0qfHZtb3ZhcFtzZF0pW1x0IF0qJXhtbVswLTldKywg WzAtOV0qXCglcnNwXCl9IDEwIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzIHsoP24pKD86dm1vdmRxYVsxLTldKnx2bW92YXBbc2RdKVtcdCBdKlswLTldKlwoJXJz cFwpLCAleG1tWzAtOV0rfSAxMCB9IH0gKi8KKworI2luY2x1ZGUgPGltbWludHJpbi5oPgorCit2 b2lkIHRlc3QoY2hhciAqZGVzdCkKK3sKKyAgX19tMjU2aSB5bW0wLCB5bW0xLCB5bW0yLCB5bW0z LCB5bW00LCB5bW01LCB5bW02LCB5bW03LCB5bW04LCB5bW05LCB5bW0xMCwgeW1tMTEsIHltbTEy LCB5bW0xMywgeW1tMTQsIHltbTE1OworICBhc20gdm9sYXRpbGUgKCJ2bW92ZHFhXHQlJXltbTAs ICUwXG5cdCIKKwkJInZtb3ZkcWFcdCUleW1tMCwgJTFcblx0IgorCQkidm1vdmRxYVx0JSV5bW0w LCAlMlxuXHQiCisJCSJ2bW92ZHFhXHQlJXltbTAsICUzXG5cdCIKKwkJInZtb3ZkcWFcdCUleW1t MCwgJTRcblx0IgorCQkidm1vdmRxYVx0JSV5bW0wLCAlNVxuXHQiCisJCSJ2bW92ZHFhXHQlJXlt bTAsICU2XG5cdCIKKwkJInZtb3ZkcWFcdCUleW1tMCwgJTdcblx0IgorCQkidm1vdmRxYVx0JSV5 bW0wLCAlOFxuXHQiCisJCSJ2bW92ZHFhXHQlJXltbTAsICU5XG5cdCIKKwkJInZtb3ZkcWFcdCUl eW1tMCwgJTEwXG5cdCIKKwkJInZtb3ZkcWFcdCUleW1tMCwgJTExXG5cdCIKKwkJInZtb3ZkcWFc dCUleW1tMCwgJTEyXG5cdCIKKwkJInZtb3ZkcWFcdCUleW1tMCwgJTEzXG5cdCIKKwkJInZtb3Zk cWFcdCUleW1tMCwgJTE0XG5cdCIKKwkJInZtb3ZkcWFcdCUleW1tMCwgJTE1XG5cdCIKKwkJOiAi PXYiICh5bW0xKSwgIj12IiAoeW1tMiksICI9diIoeW1tMyksICI9diIgKHltbTQpLCAiPXYiICh5 bW01KSwKKwkJICAiPXYiICh5bW02KSwgIj12IiAoeW1tNyksICI9diIoeW1tOCksICI9diIgKHlt bTkpLCAiPXYiICh5bW0xMCksCisJCSAgIj12IiAoeW1tMTEpLCAiPXYiICh5bW0xMiksICI9diIo eW1tMTMpLCAiPXYiICh5bW0xNCksICI9diIgKHltbTE1KSwKKwkJICAiPXYiKHltbTApCisJCTo6 KTsKKyAgX21tMjU2X3plcm91cHBlcigpOworICBfbW0yNTZfc3RvcmV1X3NpMjU2KChfX20yNTZp ICopZGVzdCwgeW1tMSk7CisgIF9tbTI1Nl9zdG9yZXVfc2kyNTYoKF9fbTI1NmkgKikoZGVzdCAr IDMyKSwgeW1tMik7CisgIF9tbTI1Nl9zdG9yZXVfc2kyNTYoKF9fbTI1NmkgKikoZGVzdCArIDMy ICogMiksIHltbTMpOworICBfbW0yNTZfc3RvcmV1X3NpMjU2KChfX20yNTZpICopKGRlc3QgKyAz MiAqIDMpLCB5bW00KTsKKyAgX21tMjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAqKShkZXN0ICsg MzIgKiA0KSwgeW1tNSk7CisgIF9tbTI1Nl9zdG9yZXVfc2kyNTYoKF9fbTI1NmkgKikoZGVzdCAr IDMyICogNSksIHltbTYpOworICBfbW0yNTZfc3RvcmV1X3NpMjU2KChfX20yNTZpICopKGRlc3Qg KyAzMiAqIDYpLCB5bW03KTsKKyAgX21tMjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAqKShkZXN0 ICsgMzIgKiA3KSwgeW1tOCk7CisgIF9tbTI1Nl9zdG9yZXVfc2kyNTYoKF9fbTI1NmkgKikoZGVz dCArIDMyICogOCksIHltbTkpOworICBfbW0yNTZfc3RvcmV1X3NpMjU2KChfX20yNTZpICopKGRl c3QgKyAzMiAqIDkpLCB5bW0xMCk7CisgIF9tbTI1Nl9zdG9yZXVfc2kyNTYoKF9fbTI1NmkgKiko ZGVzdCArIDMyICogMTApLCB5bW0xMSk7CisgIF9tbTI1Nl9zdG9yZXVfc2kyNTYoKF9fbTI1Nmkg KikoZGVzdCArIDMyICogMTEpLCB5bW0xMik7CisgIF9tbTI1Nl9zdG9yZXVfc2kyNTYoKF9fbTI1 NmkgKikoZGVzdCArIDMyICogMTIpLCB5bW0xMyk7CisgIF9tbTI1Nl9zdG9yZXVfc2kyNTYoKF9f bTI1NmkgKikoZGVzdCArIDMyICogMTMpLCB5bW0xNCk7CisgIF9tbTI1Nl9zdG9yZXVfc2kyNTYo KF9fbTI1NmkgKikoZGVzdCArIDMyICogMTQpLCB5bW0xNSk7Cit9CmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjgyNzM1LTUuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L3ByODI3MzUtNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi4yYTU4Y2JlNTJkMAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L3ByODI3MzUtNS5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qIHsgZGctZG8gY29t cGlsZSB7IHRhcmdldCB7ICEgaWEzMiB9IH0gfSAgKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1hdngg LU8yIC1tYWJpPW1zIC1tbm8tYXZ4NTEyZiAtbWFzbT1hdHQiIH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyB7KD9uKSg/OnZtb3ZkcWFbMS05XSp8dm1vdmFwW3NkXSlb XHQgXSoleG1tWzAtOV0rLCBbMC05XSpcKCVyc3BcKX0gMTAgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgeyg/bikoPzp2bW92ZHFhWzEtOV0qfHZtb3ZhcFtzZF0p W1x0IF0qWzAtOV0qXCglcnNwXCksICV4bW1bMC05XSt9IDEwIH0gfSAqLworCisjaW5jbHVkZSA8 aW1taW50cmluLmg+CisKK3ZvaWQgdGVzdChjaGFyICpkZXN0KQoreworICBfX20yNTZpIHltbTAs IHltbTEsIHltbTIsIHltbTMsIHltbTQsIHltbTUsIHltbTYsIHltbTcsIHltbTgsIHltbTksIHlt bTEwLCB5bW0xMSwgeW1tMTIsIHltbTEzLCB5bW0xNCwgeW1tMTU7CisgIGFzbSB2b2xhdGlsZSAo InZtb3ZkcWFcdCUleW1tMCwgJTBcblx0IgorCQkidm1vdmRxYVx0JSV5bW0wLCAlMVxuXHQiCisJ CSJ2bW92ZHFhXHQlJXltbTAsICUyXG5cdCIKKwkJInZtb3ZkcWFcdCUleW1tMCwgJTNcblx0Igor CQkidm1vdmRxYVx0JSV5bW0wLCAlNFxuXHQiCisJCSJ2bW92ZHFhXHQlJXltbTAsICU1XG5cdCIK KwkJInZtb3ZkcWFcdCUleW1tMCwgJTZcblx0IgorCQkidm1vdmRxYVx0JSV5bW0wLCAlN1xuXHQi CisJCSJ2bW92ZHFhXHQlJXltbTAsICU4XG5cdCIKKwkJInZtb3ZkcWFcdCUleW1tMCwgJTlcblx0 IgorCQkidm1vdmRxYVx0JSV5bW0wLCAlMTBcblx0IgorCQkidm1vdmRxYVx0JSV5bW0wLCAlMTFc blx0IgorCQkidm1vdmRxYVx0JSV5bW0wLCAlMTJcblx0IgorCQkidm1vdmRxYVx0JSV5bW0wLCAl MTNcblx0IgorCQkidm1vdmRxYVx0JSV5bW0wLCAlMTRcblx0IgorCQkidm1vdmRxYVx0JSV5bW0w LCAlMTVcblx0IgorCQk6ICI9diIgKHltbTEpLCAiPXYiICh5bW0yKSwgIj12Iih5bW0zKSwgIj12 IiAoeW1tNCksICI9diIgKHltbTUpLAorCQkgICI9diIgKHltbTYpLCAiPXYiICh5bW03KSwgIj12 Iih5bW04KSwgIj12IiAoeW1tOSksICI9diIgKHltbTEwKSwKKwkJICAiPXYiICh5bW0xMSksICI9 diIgKHltbTEyKSwgIj12Iih5bW0xMyksICI9diIgKHltbTE0KSwgIj12IiAoeW1tMTUpLAorCQkg ICI9diIoeW1tMCkKKwkJOjopOworICBfbW0yNTZfemVyb3VwcGVyKCk7CisgIF9tbTI1Nl96ZXJv dXBwZXIoKTsKKyAgX21tMjU2X3plcm91cHBlcigpOworICBfbW0yNTZfemVyb3VwcGVyKCk7Cisg IF9tbTI1Nl96ZXJvdXBwZXIoKTsKKyAgX21tMjU2X3plcm91cHBlcigpOworICBfbW0yNTZfemVy b3VwcGVyKCk7CisgIF9tbTI1Nl9zdG9yZXVfc2kyNTYoKF9fbTI1NmkgKilkZXN0LCB5bW0xKTsK KyAgX21tMjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAqKShkZXN0ICsgMzIpLCB5bW0yKTsKKyAg X21tMjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAqKShkZXN0ICsgMzIgKiAyKSwgeW1tMyk7Cisg IF9tbTI1Nl9zdG9yZXVfc2kyNTYoKF9fbTI1NmkgKikoZGVzdCArIDMyICogMyksIHltbTQpOwor ICBfbW0yNTZfc3RvcmV1X3NpMjU2KChfX20yNTZpICopKGRlc3QgKyAzMiAqIDQpLCB5bW01KTsK KyAgX21tMjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAqKShkZXN0ICsgMzIgKiA1KSwgeW1tNik7 CisgIF9tbTI1Nl9zdG9yZXVfc2kyNTYoKF9fbTI1NmkgKikoZGVzdCArIDMyICogNiksIHltbTcp OworICBfbW0yNTZfc3RvcmV1X3NpMjU2KChfX20yNTZpICopKGRlc3QgKyAzMiAqIDcpLCB5bW04 KTsKKyAgX21tMjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAqKShkZXN0ICsgMzIgKiA4KSwgeW1t OSk7CisgIF9tbTI1Nl9zdG9yZXVfc2kyNTYoKF9fbTI1NmkgKikoZGVzdCArIDMyICogOSksIHlt bTEwKTsKKyAgX21tMjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAqKShkZXN0ICsgMzIgKiAxMCks IHltbTExKTsKKyAgX21tMjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAqKShkZXN0ICsgMzIgKiAx MSksIHltbTEyKTsKKyAgX21tMjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAqKShkZXN0ICsgMzIg KiAxMiksIHltbTEzKTsKKyAgX21tMjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAqKShkZXN0ICsg MzIgKiAxMyksIHltbTE0KTsKKyAgX21tMjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAqKShkZXN0 ICsgMzIgKiAxNCksIHltbTE1KTsKK30KLS0gCjIuMTguMQoK --000000000000cd633705c2329c67--