From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id A51E43858C2B for ; Fri, 4 Nov 2022 17:40:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A51E43858C2B Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 5A1D41FB; Fri, 4 Nov 2022 10:40:58 -0700 (PDT) Received: from [10.57.3.140] (unknown [10.57.3.140]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 045CE3F5A1; Fri, 4 Nov 2022 10:40:50 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------uxVsSQdXqJXicjmcNYsjjBly" Message-ID: <051c70ff-7c59-bbfe-7780-4cb2380d9a93@arm.com> Date: Fri, 4 Nov 2022 17:40:45 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.4.0 Subject: Re: [AArch64] Enable generation of FRINTNZ instructions Content-Language: en-US To: Richard Biener , "Andre Vieira (lists) via Gcc-patches" , richard.sandiford@arm.com References: <8225375c-eb9e-f9b3-6bcd-9fbccf2fc87b@arm.com> <70s9nn94-452-5rrr-4458-q6n3qp563652@fhfr.qr> <36e3469a-3922-d49e-4006-0088eac29157@arm.com> <653o8886-3p5n-sr82-9n83-71q33o8824@fhfr.qr> <6c730f35-10b1-2843-cffc-4ed0851380be@arm.com> <85sr96q-o3s-602o-3436-40713n68pp84@fhfr.qr> <8d593d5f-41a0-6051-0ce0-d72834ecfa25@arm.com> <9d3755df-6c41-20e4-31fb-811e5cd9182a@arm.com> <231396s0-2756-q51s-q55-o8npqo91on32@fhfr.qr> <5d7bb7af-b09e-cb91-b457-c6148f65028e@arm.com> From: "Andre Vieira (lists)" In-Reply-To: X-Spam-Status: No, score=-16.9 required=5.0 tests=BAYES_00,BODY_8BITS,GIT_PATCH_0,KAM_DMARC_NONE,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,KAM_LOTSOFHASH,KAM_SHORT,NICE_REPLY_A,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------uxVsSQdXqJXicjmcNYsjjBly Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Sorry for the delay, just been reminded I still had this patch outstanding from last stage 1. Hopefully since it has been mostly reviewed it could go in for this stage 1? I addressed the comments and gave the slp-part of vectorizable_call some TLC to make it work. I also changed vect_get_slp_defs as I noticed that the call from vectorizable_call was creating an auto_vec with 'nargs' that might be less than the number of children in the slp_node, so that quick_push might not be safe as is, so I added the reserve (n) to ensure it's safe to push. I didn't actually come across any failure because of it though. Happy to split this into a separate patch if needed. Bootstrapped and regression tested on aarch64-none-linux-gnu and x86_64-pc-linux-gnu. OK for trunk? gcc/ChangeLog:         * config/aarch64/aarch64.md (ftrunc2): New pattern.         * config/aarch64/iterators.md (FRINTNZ): New iterator.         (frintnz_mode): New int attribute.         (VSFDF): Make iterator conditional.         * internal-fn.def (FTRUNC_INT): New IFN.         * internal-fn.cc (ftrunc_int_direct): New define.         (expand_ftrunc_int_optab_fn): New custom expander.         (direct_ftrunc_int_optab_supported_p): New supported_p.         * internal-fn.h (direct_internal_fn_info): Add new member         type1_is_scalar_p.         * match.pd: Add to the existing TRUNC pattern match.         * optabs.def (ftrunc_int): New entry.         * stor-layout.h (element_precision): Moved from here...         * tree.h (element_precision): ... to here.         (element_type): New declaration.         * tree.cc (element_type): New function.         (element_precision): Changed to use element_type.         * tree-vect-stmts.cc (vectorizable_internal_function): Add support for         IFNs with different input types.         (vect_get_scalar_oprnds): New function.         (vectorizable_call): Teach to handle IFN_FTRUNC_INT.         * tree-vect-slp.cc (check_scalar_arg_ok): New function.         (vect_slp_analyze_node_operations): Use check_scalar_arg_ok.         (vect_get_slp_defs): Ensure vec_oprnds has enough slots to push.         * doc/md.texi: New entry for ftrunc pattern name.         * doc/sourcebuild.texi (aarch64_frintzx_ok): New target. gcc/testsuite/ChangeLog:         * gcc.target/aarch64/merge_trunc1.c: Adapted to skip if frintnz instructions available.         * lib/target-supports.exp: Added aarch64_frintnzx_ok target and aarch64_frintz options.         * gcc.target/aarch64/frintnz.c: New test.         * gcc.target/aarch64/frintnz_vec.c: New test.         * gcc.target/aarch64/frintnz_slp.c: New test. --------------uxVsSQdXqJXicjmcNYsjjBly Content-Type: text/plain; charset=UTF-8; name="frintnzv2.patch" Content-Disposition: attachment; filename="frintnzv2.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0Lm1kIGIvZ2NjL2NvbmZp Zy9hYXJjaDY0L2FhcmNoNjQubWQKaW5kZXggZjJlM2Q5MDVkYmJlYjI5NDlmMjk0N2Y1Y2Zk NjgyMDhjOTRjOTI3Mi4uNDczNjhlMDliMTA2ZTViNDM2NDBiZDRmMTEzYWJkMGI5YTE1Yjlj OCAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQubWQKKysrIGIvZ2Nj L2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQubWQKQEAgLTc1NjQsMTIgKzc1NjQsMTggQEAKICAg IChzZXRfYXR0ciAic3BlY3VsYXRpb25fYmFycmllciIgInRydWUiKV0KICkKIAorKGRlZmlu ZV9leHBhbmQgImZ0cnVuYzxtb2RlPjxmcmludG56X21vZGU+MiIKKyAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6VlNGREYgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj13IikKKyAgICAgICAgKHVu c3BlYzpWU0ZERiBbKG1hdGNoX29wZXJhbmQ6VlNGREYgMSAicmVnaXN0ZXJfb3BlcmFuZCIg InciKV0KKwkJICAgICAgRlJJTlROWikpXQorICAiVEFSR0VUX0ZSSU5UIgorKQorCiAoZGVm aW5lX2luc24gImFhcmNoNjRfPGZyaW50bnpzX29wPjxtb2RlPiIKICAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6VlNGREYgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj13IikKIAkodW5zcGVjOlZT RkRGIFsobWF0Y2hfb3BlcmFuZDpWU0ZERiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAidyIpXQog CQkgICAgICBGUklOVE5aWCkpXQotICAiVEFSR0VUX0ZSSU5UICYmIFRBUkdFVF9GTE9BVAot ICAgJiYgIShWRUNUT1JfTU9ERV9QICg8TU9ERT5tb2RlKSAmJiAhVEFSR0VUX1NJTUQpIgor ICAiVEFSR0VUX0ZSSU5UIgogICAiPGZyaW50bnpzX29wPlxcdCU8dj4wPFZtdHlwZT4sICU8 dj4xPFZtdHlwZT4iCiAgIFsoc2V0X2F0dHIgInR5cGUiICJmX3JpbnQ8c3R5cGU+IildCiAp CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvaXRlcmF0b3JzLm1kIGIvZ2NjL2Nv bmZpZy9hYXJjaDY0L2l0ZXJhdG9ycy5tZAppbmRleCBhOGFkNGU1ZmYyMTVhZGUwNmMzY2Ex M2EyNGVmMThkMjU5YWZjYjZjLi5iMWY3OGQ4N2ZiZTYxMThlNzkyYjAwNTgwYzZiZWIyM2Nl NjNlMjdjIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvaXRlcmF0b3JzLm1kCisr KyBiL2djYy9jb25maWcvYWFyY2g2NC9pdGVyYXRvcnMubWQKQEAgLTE3Myw3ICsxNzMsMTEg QEAKIAkJCQkgIFNGIERGXSkKIAogOzsgU2NhbGFyIGFuZCB2ZXRvciBtb2RlcyBmb3IgU0Ys IERGLgotKGRlZmluZV9tb2RlX2l0ZXJhdG9yIFZTRkRGIFtWMlNGIFY0U0YgVjJERiBERiBT Rl0pCisoZGVmaW5lX21vZGVfaXRlcmF0b3IgVlNGREYgWyhWMlNGICJUQVJHRVRfU0lNRCIp CisJCQkgICAgIChWNFNGICJUQVJHRVRfU0lNRCIpCisJCQkgICAgIChWMkRGICJUQVJHRVRf U0lNRCIpCisJCQkgICAgIChERiAiVEFSR0VUX0ZMT0FUIikKKwkJCSAgICAgKFNGICJUQVJH RVRfRkxPQVQiKV0pCiAKIDs7IEFkdmFuY2VkIFNJTUQgc2luZ2xlIEZsb2F0IG1vZGVzLgog KGRlZmluZV9tb2RlX2l0ZXJhdG9yIFZEUVNGIFtWMlNGIFY0U0ZdKQpAQCAtMzEzNiw2ICsz MTQwLDggQEAKIChkZWZpbmVfaW50X2l0ZXJhdG9yIEZSSU5UTlpYIFtVTlNQRUNfRlJJTlQz MlogVU5TUEVDX0ZSSU5UMzJYCiAJCQkgICAgICAgVU5TUEVDX0ZSSU5UNjRaIFVOU1BFQ19G UklOVDY0WF0pCiAKKyhkZWZpbmVfaW50X2l0ZXJhdG9yIEZSSU5UTlogW1VOU1BFQ19GUklO VDMyWiBVTlNQRUNfRlJJTlQ2NFpdKQorCiAoZGVmaW5lX2ludF9pdGVyYXRvciBTVkVfQlJL X1VOQVJZIFtVTlNQRUNfQlJLQSBVTlNQRUNfQlJLQl0pCiAKIChkZWZpbmVfaW50X2l0ZXJh dG9yIFNWRV9CUktQIFtVTlNQRUNfQlJLUEEgVU5TUEVDX0JSS1BCXSkKQEAgLTM1NDUsNiAr MzU1MSw4IEBACiAoZGVmaW5lX2ludF9hdHRyIGZyaW50bnpzX29wIFsoVU5TUEVDX0ZSSU5U MzJaICJmcmludDMyeiIpIChVTlNQRUNfRlJJTlQzMlggImZyaW50MzJ4IikKIAkJCSAgICAg IChVTlNQRUNfRlJJTlQ2NFogImZyaW50NjR6IikgKFVOU1BFQ19GUklOVDY0WCAiZnJpbnQ2 NHgiKV0pCiAKKyhkZWZpbmVfaW50X2F0dHIgZnJpbnRuel9tb2RlIFsoVU5TUEVDX0ZSSU5U MzJaICJzaSIpIChVTlNQRUNfRlJJTlQ2NFogImRpIildKQorCiA7OyBUaGUgY29uZGl0aW9u IGFzc29jaWF0ZWQgd2l0aCBhbiBVTlNQRUNfQ09ORF88eHg+LgogKGRlZmluZV9pbnRfYXR0 ciBjbXBfb3AgWyhVTlNQRUNfQ09ORF9DTVBFUV9XSURFICJlcSIpCiAJCQkgKFVOU1BFQ19D T05EX0NNUEdFX1dJREUgImdlIikKZGlmZiAtLWdpdCBhL2djYy9kb2MvbWQudGV4aSBiL2dj Yy9kb2MvbWQudGV4aQppbmRleCBkMGE3MWVjYmI4MDZkZTNhNjU2NGM2ZmZlOTczZmVjNWRh NWM1OTdiLi43MjJhMDNkZTc5MDA0YzlkMmYyOTE4ODJiMzQ2ZmVjYjc0ZjlkZjFiIDEwMDY0 NAotLS0gYS9nY2MvZG9jL21kLnRleGkKKysrIGIvZ2NjL2RvYy9tZC50ZXhpCkBAIC02MDc2 LDYgKzYwNzYsMTQgQEAgb3BlcmFuZHM7IG90aGVyd2lzZSwgaXQgbWF5IG5vdC4KIAogVGhp cyBwYXR0ZXJuIGlzIG5vdCBhbGxvd2VkIHRvIEBjb2Rle0ZBSUx9LgogCitAY2luZGV4IEBj b2Rle2Z0cnVuY0B2YXJ7bX1AdmFye259Mn0gaW5zdHJ1Y3Rpb24gcGF0dGVybgorQGl0ZW0g QHNhbXB7ZnRydW5jQHZhcnttfUB2YXJ7bn0yfQorVHJ1bmNhdGUgb3BlcmFuZCAxIHRvIGEg QHZhcntufSBtb2RlIHNpZ25lZCBpbnRlZ2VyLCB0b3dhcmRzIHplcm8sIGFuZCBzdG9yZQor dGhlIHJlc3VsdCBpbiBvcGVyYW5kIDAuIEJvdGggb3BlcmFuZHMgaGF2ZSBtb2RlIEB2YXJ7 bX0sIHdoaWNoIGlzIGEgc2NhbGFyIG9yCit2ZWN0b3IgZmxvYXRpbmctcG9pbnQgbW9kZS4g IEFuIGV4Y2VwdGlvbiBtdXN0IGJlIHJhaXNlZCBpZiBvcGVyYW5kIDEgZG9lcyBub3QKK2Zp dCBpbiBhIEB2YXJ7bn0gbW9kZSBzaWduZWQgaW50ZWdlciBhcyBpdCB3b3VsZCBoYXZlIGlm IHRoZSB0cnVuY2F0aW9uCitoYXBwZW5lZCB0aHJvdWdoIHNlcGFyYXRlIGZsb2F0aW5nIHBv aW50IHRvIGludGVnZXIgY29udmVyc2lvbi4KKwogQGNpbmRleCBAY29kZXtyb3VuZEB2YXJ7 bX0yfSBpbnN0cnVjdGlvbiBwYXR0ZXJuCiBAaXRlbSBAc2FtcHtyb3VuZEB2YXJ7bX0yfQog Um91bmQgb3BlcmFuZCAxIHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIHJvdW5kaW5nIGF3YXkg ZnJvbSB6ZXJvIGluIHRoZQpkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9zb3VyY2VidWlsZC50ZXhp IGIvZ2NjL2RvYy9zb3VyY2VidWlsZC50ZXhpCmluZGV4IGExMjE3NWI2NDk4NDhjN2RkNzgw MmFlOTYwZjEzNjBjZDkyNjFiODguLjkyNmYxODU5YmVjZmUzMmI1YTE1N2ViYTgwMzFkOWVk MmY3ZmQyNDkgMTAwNjQ0Ci0tLSBhL2djYy9kb2Mvc291cmNlYnVpbGQudGV4aQorKysgYi9n Y2MvZG9jL3NvdXJjZWJ1aWxkLnRleGkKQEAgLTIzMTcsNiArMjMxNywxMCBAQCBMaWtlIEBj b2Rle2FhcmNoNjRfc3ZlX2h3fSwgYnV0IGFsc28gdGVzdCBmb3IgYW4gZXhhY3QgaGFyZHdh cmUgdmVjdG9yIGxlbmd0aC4KIEBpdGVtIGFhcmNoNjRfZmpjdnR6c19odwogQUFyY2g2NCB0 YXJnZXQgdGhhdCBpcyBhYmxlIHRvIGdlbmVyYXRlIGFuZCBleGVjdXRlIGFybXY4LjMtYSBG SkNWVFpTCiBpbnN0cnVjdGlvbi4KKworQGl0ZW0gYWFyY2g2NF9mcmludHp4X29rCitBQXJj aDY0IHRhcmdldCB0aGF0IGlzIGFibGUgdG8gZ2VuZXJhdGUgdGhlIEFybXY4LjUtYSBGUklO VDMyWiwgRlJJTlQ2NFosCitGUklOVDMyWCBhbmQgRlJJTlQ2NFggaW5zdHJ1Y3Rpb25zLgog QGVuZCB0YWJsZQogCiBAc3Vic3Vic2VjdGlvbiBNSVBTLXNwZWNpZmljIGF0dHJpYnV0ZXMK ZGlmZiAtLWdpdCBhL2djYy9pbnRlcm5hbC1mbi5jYyBiL2djYy9pbnRlcm5hbC1mbi5jYwpp bmRleCA5NDcxZjU0MzE5MWVkZjBhZWExMjVmZjBmYzQyNjUxMWIyMzA2MTY5Li5jY2U0Y2Qx NTNjYjU5NzUxZjU0ZGZkZjgyZWVlM2JkZDRmYzM5NGZkIDEwMDY0NAotLS0gYS9nY2MvaW50 ZXJuYWwtZm4uY2MKKysrIGIvZ2NjL2ludGVybmFsLWZuLmNjCkBAIC0xMDUsMzIgKzEwNSwz MyBAQCBpbml0X2ludGVybmFsX2ZucyAoKQogCiAvKiBDcmVhdGUgc3RhdGljIGluaXRpYWxp emVycyBmb3IgdGhlIGluZm9ybWF0aW9uIHJldHVybmVkIGJ5CiAgICBkaXJlY3RfaW50ZXJu YWxfZm4uICAqLwotI2RlZmluZSBub3RfZGlyZWN0IHsgLTIsIC0yLCBmYWxzZSB9Ci0jZGVm aW5lIG1hc2tfbG9hZF9kaXJlY3QgeyAtMSwgMiwgZmFsc2UgfQotI2RlZmluZSBsb2FkX2xh bmVzX2RpcmVjdCB7IC0xLCAtMSwgZmFsc2UgfQotI2RlZmluZSBtYXNrX2xvYWRfbGFuZXNf ZGlyZWN0IHsgLTEsIC0xLCBmYWxzZSB9Ci0jZGVmaW5lIGdhdGhlcl9sb2FkX2RpcmVjdCB7 IDMsIDEsIGZhbHNlIH0KLSNkZWZpbmUgbGVuX2xvYWRfZGlyZWN0IHsgLTEsIC0xLCBmYWxz ZSB9Ci0jZGVmaW5lIG1hc2tfc3RvcmVfZGlyZWN0IHsgMywgMiwgZmFsc2UgfQotI2RlZmlu ZSBzdG9yZV9sYW5lc19kaXJlY3QgeyAwLCAwLCBmYWxzZSB9Ci0jZGVmaW5lIG1hc2tfc3Rv cmVfbGFuZXNfZGlyZWN0IHsgMCwgMCwgZmFsc2UgfQotI2RlZmluZSB2ZWNfY29uZF9tYXNr X2RpcmVjdCB7IDEsIDAsIGZhbHNlIH0KLSNkZWZpbmUgdmVjX2NvbmRfZGlyZWN0IHsgMiwg MCwgZmFsc2UgfQotI2RlZmluZSBzY2F0dGVyX3N0b3JlX2RpcmVjdCB7IDMsIDEsIGZhbHNl IH0KLSNkZWZpbmUgbGVuX3N0b3JlX2RpcmVjdCB7IDMsIDMsIGZhbHNlIH0KLSNkZWZpbmUg dmVjX3NldF9kaXJlY3QgeyAzLCAzLCBmYWxzZSB9Ci0jZGVmaW5lIHVuYXJ5X2RpcmVjdCB7 IDAsIDAsIHRydWUgfQotI2RlZmluZSB1bmFyeV9jb252ZXJ0X2RpcmVjdCB7IC0xLCAwLCB0 cnVlIH0KLSNkZWZpbmUgYmluYXJ5X2RpcmVjdCB7IDAsIDAsIHRydWUgfQotI2RlZmluZSB0 ZXJuYXJ5X2RpcmVjdCB7IDAsIDAsIHRydWUgfQotI2RlZmluZSBjb25kX3VuYXJ5X2RpcmVj dCB7IDEsIDEsIHRydWUgfQotI2RlZmluZSBjb25kX2JpbmFyeV9kaXJlY3QgeyAxLCAxLCB0 cnVlIH0KLSNkZWZpbmUgY29uZF90ZXJuYXJ5X2RpcmVjdCB7IDEsIDEsIHRydWUgfQotI2Rl ZmluZSB3aGlsZV9kaXJlY3QgeyAwLCAyLCBmYWxzZSB9Ci0jZGVmaW5lIGZvbGRfZXh0cmFj dF9kaXJlY3QgeyAyLCAyLCBmYWxzZSB9Ci0jZGVmaW5lIGZvbGRfbGVmdF9kaXJlY3QgeyAx LCAxLCBmYWxzZSB9Ci0jZGVmaW5lIG1hc2tfZm9sZF9sZWZ0X2RpcmVjdCB7IDEsIDEsIGZh bHNlIH0KLSNkZWZpbmUgY2hlY2tfcHRyc19kaXJlY3QgeyAwLCAwLCBmYWxzZSB9CisjZGVm aW5lIG5vdF9kaXJlY3QgeyAtMiwgLTIsIGZhbHNlLCBmYWxzZSB9CisjZGVmaW5lIG1hc2tf bG9hZF9kaXJlY3QgeyAtMSwgMiwgZmFsc2UsIGZhbHNlIH0KKyNkZWZpbmUgbG9hZF9sYW5l c19kaXJlY3QgeyAtMSwgLTEsIGZhbHNlLCBmYWxzZSB9CisjZGVmaW5lIG1hc2tfbG9hZF9s YW5lc19kaXJlY3QgeyAtMSwgLTEsIGZhbHNlLCBmYWxzZSB9CisjZGVmaW5lIGdhdGhlcl9s b2FkX2RpcmVjdCB7IDMsIDEsIGZhbHNlLCBmYWxzZSB9CisjZGVmaW5lIGxlbl9sb2FkX2Rp cmVjdCB7IC0xLCAtMSwgZmFsc2UsIGZhbHNlIH0KKyNkZWZpbmUgbWFza19zdG9yZV9kaXJl Y3QgeyAzLCAyLCBmYWxzZSwgZmFsc2UgfQorI2RlZmluZSBzdG9yZV9sYW5lc19kaXJlY3Qg eyAwLCAwLCBmYWxzZSwgZmFsc2UgfQorI2RlZmluZSBtYXNrX3N0b3JlX2xhbmVzX2RpcmVj dCB7IDAsIDAsIGZhbHNlLCBmYWxzZSB9CisjZGVmaW5lIHZlY19jb25kX21hc2tfZGlyZWN0 IHsgMSwgMCwgZmFsc2UsIGZhbHNlIH0KKyNkZWZpbmUgdmVjX2NvbmRfZGlyZWN0IHsgMiwg MCwgZmFsc2UsIGZhbHNlIH0KKyNkZWZpbmUgc2NhdHRlcl9zdG9yZV9kaXJlY3QgeyAzLCAx LCBmYWxzZSwgZmFsc2UgfQorI2RlZmluZSBsZW5fc3RvcmVfZGlyZWN0IHsgMywgMywgZmFs c2UsIGZhbHNlIH0KKyNkZWZpbmUgdmVjX3NldF9kaXJlY3QgeyAzLCAzLCBmYWxzZSwgZmFs c2UgfQorI2RlZmluZSB1bmFyeV9kaXJlY3QgeyAwLCAwLCBmYWxzZSwgdHJ1ZSB9CisjZGVm aW5lIHVuYXJ5X2NvbnZlcnRfZGlyZWN0IHsgLTEsIDAsIGZhbHNlLCB0cnVlIH0KKyNkZWZp bmUgYmluYXJ5X2RpcmVjdCB7IDAsIDAsIGZhbHNlLCB0cnVlIH0KKyNkZWZpbmUgdGVybmFy eV9kaXJlY3QgeyAwLCAwLCBmYWxzZSwgdHJ1ZSB9CisjZGVmaW5lIGNvbmRfdW5hcnlfZGly ZWN0IHsgMSwgMSwgZmFsc2UsIHRydWUgfQorI2RlZmluZSBjb25kX2JpbmFyeV9kaXJlY3Qg eyAxLCAxLCBmYWxzZSwgdHJ1ZSB9CisjZGVmaW5lIGNvbmRfdGVybmFyeV9kaXJlY3QgeyAx LCAxLCBmYWxzZSwgdHJ1ZSB9CisjZGVmaW5lIHdoaWxlX2RpcmVjdCB7IDAsIDIsIGZhbHNl LCBmYWxzZSB9CisjZGVmaW5lIGZvbGRfZXh0cmFjdF9kaXJlY3QgeyAyLCAyLCBmYWxzZSwg ZmFsc2UgfQorI2RlZmluZSBmb2xkX2xlZnRfZGlyZWN0IHsgMSwgMSwgZmFsc2UsIGZhbHNl IH0KKyNkZWZpbmUgbWFza19mb2xkX2xlZnRfZGlyZWN0IHsgMSwgMSwgZmFsc2UsIGZhbHNl IH0KKyNkZWZpbmUgY2hlY2tfcHRyc19kaXJlY3QgeyAwLCAwLCBmYWxzZSwgZmFsc2UgfQor I2RlZmluZSBmdHJ1bmNfaW50X2RpcmVjdCB7IDAsIDEsIHRydWUsIHRydWUgfQogCiBjb25z dCBkaXJlY3RfaW50ZXJuYWxfZm5faW5mbyBkaXJlY3RfaW50ZXJuYWxfZm5fYXJyYXlbSUZO X0xBU1QgKyAxXSA9IHsKICNkZWZpbmUgREVGX0lOVEVSTkFMX0ZOKENPREUsIEZMQUdTLCBG TlNQRUMpIG5vdF9kaXJlY3QsCkBAIC0yMzcsNiArMjM4LDI5IEBAIGdldF9tdWx0aV92ZWN0 b3JfbW92ZSAodHJlZSBhcnJheV90eXBlLCBjb252ZXJ0X29wdGFiIG9wdGFiKQogICByZXR1 cm4gY29udmVydF9vcHRhYl9oYW5kbGVyIChvcHRhYiwgaW1vZGUsIHZtb2RlKTsKIH0KIAor LyogRXhwYW5kIEZUUlVOQ19JTlQgY2FsbCBTVE1UIHVzaW5nIG9wdGFiIE9QVEFCLiAgKi8K Kworc3RhdGljIHZvaWQKK2V4cGFuZF9mdHJ1bmNfaW50X29wdGFiX2ZuIChpbnRlcm5hbF9m biwgZ2NhbGwgKnN0bXQsIGNvbnZlcnRfb3B0YWIgb3B0YWIpCit7CisgIGNsYXNzIGV4cGFu ZF9vcGVyYW5kIG9wc1syXTsKKyAgdHJlZSBsaHMsIGZsb2F0X3R5cGUsIGludF90eXBlOwor ICBydHggdGFyZ2V0LCBvcDsKKworICBsaHMgPSBnaW1wbGVfY2FsbF9saHMgKHN0bXQpOwor ICB0YXJnZXQgPSBleHBhbmRfbm9ybWFsIChsaHMpOworICBvcCA9IGV4cGFuZF9ub3JtYWwg KGdpbXBsZV9jYWxsX2FyZyAoc3RtdCwgMCkpOworCisgIGZsb2F0X3R5cGUgPSBUUkVFX1RZ UEUgKGxocyk7CisgIGludF90eXBlID0gVFJFRV9UWVBFIChnaW1wbGVfY2FsbF9hcmcgKHN0 bXQsIDEpKTsKKworICBjcmVhdGVfb3V0cHV0X29wZXJhbmQgKCZvcHNbMF0sIHRhcmdldCwg VFlQRV9NT0RFIChmbG9hdF90eXBlKSk7CisgIGNyZWF0ZV9pbnB1dF9vcGVyYW5kICgmb3Bz WzFdLCBvcCwgVFlQRV9NT0RFIChmbG9hdF90eXBlKSk7CisKKyAgZXhwYW5kX2luc24gKGNv bnZlcnRfb3B0YWJfaGFuZGxlciAob3B0YWIsIFRZUEVfTU9ERSAoZmxvYXRfdHlwZSksCisJ CQkJICAgICAgVFlQRV9NT0RFIChpbnRfdHlwZSkpLCAyLCBvcHMpOworfQorCiAvKiBFeHBh bmQgTE9BRF9MQU5FUyBjYWxsIFNUTVQgdXNpbmcgb3B0YWIgT1BUQUIuICAqLwogCiBzdGF0 aWMgdm9pZApAQCAtMzg0OCw2ICszODcyLDcgQEAgbXVsdGlfdmVjdG9yX29wdGFiX3N1cHBv cnRlZF9wIChjb252ZXJ0X29wdGFiIG9wdGFiLCB0cmVlX3BhaXIgdHlwZXMsCiAjZGVmaW5l IGRpcmVjdF9tYXNrX2ZvbGRfbGVmdF9vcHRhYl9zdXBwb3J0ZWRfcCBkaXJlY3Rfb3B0YWJf c3VwcG9ydGVkX3AKICNkZWZpbmUgZGlyZWN0X2NoZWNrX3B0cnNfb3B0YWJfc3VwcG9ydGVk X3AgZGlyZWN0X29wdGFiX3N1cHBvcnRlZF9wCiAjZGVmaW5lIGRpcmVjdF92ZWNfc2V0X29w dGFiX3N1cHBvcnRlZF9wIGRpcmVjdF9vcHRhYl9zdXBwb3J0ZWRfcAorI2RlZmluZSBkaXJl Y3RfZnRydW5jX2ludF9vcHRhYl9zdXBwb3J0ZWRfcCBjb252ZXJ0X29wdGFiX3N1cHBvcnRl ZF9wCiAKIC8qIFJldHVybiB0aGUgb3B0YWIgdXNlZCBieSBpbnRlcm5hbCBmdW5jdGlvbiBG Ti4gICovCiAKZGlmZiAtLWdpdCBhL2djYy9pbnRlcm5hbC1mbi5kZWYgYi9nY2MvaW50ZXJu YWwtZm4uZGVmCmluZGV4IDYxNTE2ZGFiNjZkYzkwZTAxNjYyMmM0N2U4MzJiNzkwZGI4ZWE4 NjcuLjk3Njg2OWU1ZGJhMmEzZDA2N2I2ZWI2NGM3YmRkZGUwNGJhNmZiNzggMTAwNjQ0Ci0t LSBhL2djYy9pbnRlcm5hbC1mbi5kZWYKKysrIGIvZ2NjL2ludGVybmFsLWZuLmRlZgpAQCAt NjksNiArNjksOSBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAg SWYgbm90IHNlZQogCiAgICAtIGZvbGRfbGVmdDogZm9yIHNjYWxhciA9IEZOIChzY2FsYXIs IHZlY3RvciksIGtleWVkIG9mZiB0aGUgdmVjdG9yIG1vZGUKICAgIC0gY2hlY2tfcHRyczog dXNlZCBmb3IgY2hlY2tfe3Jhdyx3YXJ9X3B0cnMKKyAgIC0gZnRydW5jX2ludDogYSB1bmFy eSBjb252ZXJzaW9uIG9wdGFiIHRoYXQgdGFrZXMgYW5kIHJldHVybnMgdmFsdWVzIG9mIHRo ZQorICAgc2FtZSBtb2RlLCBidXQgaW50ZXJuYWxseSBjb252ZXJ0cyB2aWEgYW5vdGhlciBt b2RlLiAgVGhpcyBzZWNvbmQgbW9kZSBpcworICAgc3BlY2lmaWVkIHVzaW5nIGEgZHVtbXkg ZmluYWwgZnVuY3Rpb24gYXJndW1lbnQuCiAKICAgIERFRl9JTlRFUk5BTF9TSUdORURfT1BU QUJfRk4gZGVmaW5lcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB0aGF0CiAgICBtYXBzIHRvIG9u ZSBvZiB0d28gb3B0YWJzLCBkZXBlbmRpbmcgb24gdGhlIHNpZ25lZG5lc3Mgb2YgYW4gaW5w dXQuCkBAIC0yOTgsNiArMzAxLDcgQEAgREVGX0lOVEVSTkFMX0ZMVF9GTE9BVE5fRk4gKFJJ TlQsIEVDRl9DT05TVCwgcmludCwgdW5hcnkpCiBERUZfSU5URVJOQUxfRkxUX0ZMT0FUTl9G TiAoUk9VTkQsIEVDRl9DT05TVCwgcm91bmQsIHVuYXJ5KQogREVGX0lOVEVSTkFMX0ZMVF9G TE9BVE5fRk4gKFJPVU5ERVZFTiwgRUNGX0NPTlNULCByb3VuZGV2ZW4sIHVuYXJ5KQogREVG X0lOVEVSTkFMX0ZMVF9GTE9BVE5fRk4gKFRSVU5DLCBFQ0ZfQ09OU1QsIGJ0cnVuYywgdW5h cnkpCitERUZfSU5URVJOQUxfT1BUQUJfRk4gKEZUUlVOQ19JTlQsIEVDRl9DT05TVCwgZnRy dW5jaW50LCBmdHJ1bmNfaW50KQogCiAvKiBCaW5hcnkgbWF0aCBmdW5jdGlvbnMuICAqLwog REVGX0lOVEVSTkFMX0ZMVF9GTiAoQVRBTjIsIEVDRl9DT05TVCwgYXRhbjIsIGJpbmFyeSkK ZGlmZiAtLWdpdCBhL2djYy9pbnRlcm5hbC1mbi5oIGIvZ2NjL2ludGVybmFsLWZuLmgKaW5k ZXggMjFiMWNlNDNkZjZhOTI2YTU5ZTRiOWVhZjljZTA2ZDI0NDA4NDVlNy4uNDE2YjVmZTQy ZTM1NmFjZjk3YzkwZWZhZWJhYTIwN2QyOTU1MTc2OSAxMDA2NDQKLS0tIGEvZ2NjL2ludGVy bmFsLWZuLmgKKysrIGIvZ2NjL2ludGVybmFsLWZuLmgKQEAgLTE0NCwxMiArMTQ0LDE0IEBA IHN0cnVjdCBkaXJlY3RfaW50ZXJuYWxfZm5faW5mbwogICAgICBmdW5jdGlvbiBpc24ndCBk aXJlY3RseSBtYXBwZWQgdG8gYW4gb3B0YWIuICAqLwogICBzaWduZWQgaW50IHR5cGUwIDog ODsKICAgc2lnbmVkIGludCB0eXBlMSA6IDg7CisgIC8qIEluZGljYXRlcyB3aGV0aGVyIHR5 cGUxIGlzIGEgc2NhbGFyIHR5cGUuICAqLworICB1bnNpZ25lZCBpbnQgdHlwZTFfaXNfc2Nh bGFyX3AgOiAxOwogICAvKiBUcnVlIGlmIHRoZSBmdW5jdGlvbiBpcyBwb2ludHdpc2UsIHNv IHRoYXQgaXQgY2FuIGJlIHZlY3Rvcml6ZWQgYnkKICAgICAgY29udmVydGluZyB0aGUgcmV0 dXJuIHR5cGUgYW5kIGFsbCBhcmd1bWVudCB0eXBlcyB0byB2ZWN0b3JzIG9mIHRoZQogICAg ICBzYW1lIG51bWJlciBvZiBlbGVtZW50cy4gIEUuZy4gd2UgY2FuIHZlY3Rvcml6ZSBhbiBJ Rk5fU1FSVCBvbgogICAgICBmbG9hdHMgYXMgYW4gSUZOX1NRUlQgb24gdmVjdG9ycyBvZiBO IGZsb2F0cy4KIAotICAgICBUaGlzIG9ubHkgbmVlZHMgMSBiaXQsIGJ1dCBvY2N1cGllcyB0 aGUgZnVsbCAxNiB0byBlbnN1cmUgYSBuaWNlCisgICAgIFRoaXMgb25seSBuZWVkcyAxIGJp dCwgYnV0IG9jY3VwaWVzIHRoZSBmdWxsIDE1IHRvIGVuc3VyZSBhIG5pY2UKICAgICAgbGF5 b3V0LiAgKi8KICAgdW5zaWduZWQgaW50IHZlY3Rvcml6YWJsZSA6IDE2OwogfTsKZGlmZiAt LWdpdCBhL2djYy9tYXRjaC5wZCBiL2djYy9tYXRjaC5wZAppbmRleCAxOTRiYThmNTE4OGUx NzA1NmI5YzlhZjc5MGU5NzI1ZTNlNjViZmY0Li5jODM1YTM5MjIxMTVjNzc1MTMxMTYwNjc5 MDYwZmFkY2NiZGYxNjMzIDEwMDY0NAotLS0gYS9nY2MvbWF0Y2gucGQKKysrIGIvZ2NjL21h dGNoLnBkCkBAIC00MDIyLDEyICs0MDIyLDIxIEBAIERFRklORV9JTlRfQU5EX0ZMT0FUX1JP VU5EX0ZOIChSSU5UKQogICAgdHJhcHBpbmcgYmVoYXZpb3VyLCBzbyByZXF1aXJlICFmbGFn X3RyYXBwaW5nX21hdGguICovCiAjaWYgR0lNUExFCiAoc2ltcGxpZnkKLSAgIChmbG9hdCAo Zml4X3RydW5jIEAwKSkKLSAgIChpZiAoIWZsYWdfdHJhcHBpbmdfbWF0aAotCSYmIHR5cGVz X21hdGNoICh0eXBlLCBUUkVFX1RZUEUgKEAwKSkKLQkmJiBkaXJlY3RfaW50ZXJuYWxfZm5f c3VwcG9ydGVkX3AgKElGTl9UUlVOQywgdHlwZSwKLQkJCQkJICBPUFRJTUlaRV9GT1JfQk9U SCkpCi0gICAgICAoSUZOX1RSVU5DIEAwKSkpCisgICAoZmxvYXQgKGZpeF90cnVuY0AxIEAw KSkKKyAgIChpZiAodHlwZXNfbWF0Y2ggKHR5cGUsIFRSRUVfVFlQRSAoQDApKSkKKyAgICAo d2l0aCB7CisgICAgICB0cmVlIGludF90eXBlID0gZWxlbWVudF90eXBlIChAMSk7CisgICAg IH0KKyAgICAgKGlmIChUWVBFX1NJR04gKFRSRUVfVFlQRSAoQDEpKSA9PSBTSUdORUQKKwkg ICYmIGRpcmVjdF9pbnRlcm5hbF9mbl9zdXBwb3J0ZWRfcCAoSUZOX0ZUUlVOQ19JTlQsIHR5 cGUsIGludF90eXBlLAorCQkJCQkgICAgIE9QVElNSVpFX0ZPUl9CT1RIKSkKKyAgICAgIChJ Rk5fRlRSVU5DX0lOVCBAMCB7CisgICAgICAgd2lkZV9pbnRfdG9fdHJlZSAoaW50X3R5cGUs IHdpOjptYXhfdmFsdWUgKFRZUEVfUFJFQ0lTSU9OIChpbnRfdHlwZSksCisJCQkJCQkgIFNJ R05FRCkpOyB9KQorICAgICAgKGlmICghZmxhZ190cmFwcGluZ19tYXRoCisJICAgJiYgZGly ZWN0X2ludGVybmFsX2ZuX3N1cHBvcnRlZF9wIChJRk5fVFJVTkMsIHR5cGUsCisJCQkJCSAg ICAgIE9QVElNSVpFX0ZPUl9CT1RIKSkKKyAgICAgICAoSUZOX1RSVU5DIEAwKSkpKSkpCiAj ZW5kaWYKIAogLyogSWYgd2UgaGF2ZSBhIG5hcnJvd2luZyBjb252ZXJzaW9uIHRvIGFuIGlu dGVncmFsIHR5cGUgdGhhdCBpcyBmZWQgYnkgYQpkaWZmIC0tZ2l0IGEvZ2NjL29wdGFicy5k ZWYgYi9nY2Mvb3B0YWJzLmRlZgppbmRleCBhNmRiMjM0MmJlZDZiYWYxM2VjYmQ4NDExMmM4 NDMyYzY5NzJlNmZlLi44YzFjNjgxYTM5YjVhYWQ0ZWUyMDU4NzM5Yjc2NzZjMGM1ODI5YWNl IDEwMDY0NAotLS0gYS9nY2Mvb3B0YWJzLmRlZgorKysgYi9nY2Mvb3B0YWJzLmRlZgpAQCAt NjMsNiArNjMsNyBAQCBPUFRBQl9DWChmcmFjdHVuc19vcHRhYiwgImZyYWN0dW5zJFEkYiRJ JGEyIikKIE9QVEFCX0NMKHNhdGZyYWN0X29wdGFiLCAic2F0ZnJhY3QkYiRRJGEyIiwgU0FU X0ZSQUNULCAic2F0ZnJhY3QiLCBnZW5fc2F0ZnJhY3RfY29udl9saWJmdW5jKQogT1BUQUJf Q0woc2F0ZnJhY3R1bnNfb3B0YWIsICJzYXRmcmFjdHVucyRJJGIkUSRhMiIsIFVOU0lHTkVE X1NBVF9GUkFDVCwgInNhdGZyYWN0dW5zIiwgZ2VuX3NhdGZyYWN0dW5zX2NvbnZfbGliZnVu YykKIAorT1BUQUJfQ0QoZnRydW5jaW50X29wdGFiLCAiZnRydW5jJGEkYjIiKQogT1BUQUJf Q0Qoc2ZpeHRydW5jX29wdGFiLCAiZml4X3RydW5jJEYkYiRJJGEyIikKIE9QVEFCX0NEKHVm aXh0cnVuY19vcHRhYiwgImZpeHVuc190cnVuYyRGJGIkSSRhMiIpCiAKZGlmZiAtLWdpdCBh L2djYy9zdG9yLWxheW91dC5oIGIvZ2NjL3N0b3ItbGF5b3V0LmgKaW5kZXggMjJjOTE1OTA5 Mzg1ZmQ0YmMxYzY4YTRmNTg0NzkzMjJlOWU5MDY2Ni4uNmY3ODQ5MWE4ZmE2ZGJiNjc5OGM2 MzcyNzdmNzFmNGI5OWVlYTVjYiAxMDA2NDQKLS0tIGEvZ2NjL3N0b3ItbGF5b3V0LmgKKysr IGIvZ2NjL3N0b3ItbGF5b3V0LmgKQEAgLTM2LDcgKzM2LDYgQEAgZXh0ZXJuIHZvaWQgcGxh Y2VfZmllbGQgKHJlY29yZF9sYXlvdXRfaW5mbywgdHJlZSk7CiBleHRlcm4gdm9pZCBjb21w dXRlX3JlY29yZF9tb2RlICh0cmVlKTsKIGV4dGVybiB2b2lkIGZpbmlzaF9iaXRmaWVsZF9s YXlvdXQgKHRyZWUpOwogZXh0ZXJuIHZvaWQgZmluaXNoX3JlY29yZF9sYXlvdXQgKHJlY29y ZF9sYXlvdXRfaW5mbywgaW50KTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgZWxlbWVudF9wcmVj aXNpb24gKGNvbnN0X3RyZWUpOwogZXh0ZXJuIHZvaWQgZmluYWxpemVfc2l6ZV9mdW5jdGlv bnMgKHZvaWQpOwogZXh0ZXJuIHZvaWQgZml4dXBfdW5zaWduZWRfdHlwZSAodHJlZSk7CiBl eHRlcm4gdm9pZCBpbml0aWFsaXplX3NpemV0eXBlcyAodm9pZCk7CmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9mcmludG56LmMgYi9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvYWFyY2g2NC9mcmludG56LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E4ZTUz ZTIyMWUwOWQzZGEyOTdmMDY0ZmEzZjQ5NzBhZDBhNDUzOQotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2ZyaW50bnouYwpAQCAtMCwwICsx LDkyIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItc3Rk PWM5OSAtTzIiIH0gICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBhYXJj aDY0X2ZyaW50bnp4X29rIH0gKi8KKy8qIHsgZGctYWRkLW9wdGlvbnMgYWFyY2g2NF9mcmlu dG56eCB9ICovCisvKiB7IGRnLWZpbmFsIHsgY2hlY2stZnVuY3Rpb24tYm9kaWVzICIqKiIg IiIgfSB9ICovCisKKy8qCisqKiBmMToKKyoqCWZyaW50MzJ6CXMwLCBzMAorKioJcmV0Cisq LworZmxvYXQKK2YxIChmbG9hdCB4KQoreworICBpbnQgeSA9IHg7CisgIHJldHVybiAoZmxv YXQpIHk7Cit9CisKKy8qCisqKiBmMjoKKyoqCWZyaW50NjR6CXMwLCBzMAorKioJcmV0Cisq LworZmxvYXQKK2YyIChmbG9hdCB4KQoreworICBsb25nIGxvbmcgaW50IHkgPSB4OworICBy ZXR1cm4gKGZsb2F0KSB5OworfQorCisvKgorKiogZjM6CisqKglmcmludDMyeglkMCwgZDAK KyoqCXJldAorKi8KK2RvdWJsZQorZjMgKGRvdWJsZSB4KQoreworICBpbnQgeSA9IHg7Cisg IHJldHVybiAoZG91YmxlKSB5OworfQorCisvKgorKiogZjQ6CisqKglmcmludDY0eglkMCwg ZDAKKyoqCXJldAorKi8KK2RvdWJsZQorZjQgKGRvdWJsZSB4KQoreworICBsb25nIGxvbmcg aW50IHkgPSB4OworICByZXR1cm4gKGRvdWJsZSkgeTsKK30KKworZmxvYXQKK2YxX2RvbnQg KGZsb2F0IHgpCit7CisgIHVuc2lnbmVkIGludCB5ID0geDsKKyAgcmV0dXJuIChmbG9hdCkg eTsKK30KKworZmxvYXQKK2YyX2RvbnQgKGZsb2F0IHgpCit7CisgIHVuc2lnbmVkIGxvbmcg bG9uZyBpbnQgeSA9IHg7CisgIHJldHVybiAoZmxvYXQpIHk7Cit9CisKK2RvdWJsZQorZjNf ZG9udCAoZG91YmxlIHgpCit7CisgIHVuc2lnbmVkIGludCB5ID0geDsKKyAgcmV0dXJuIChk b3VibGUpIHk7Cit9CisKK2RvdWJsZQorZjRfZG9udCAoZG91YmxlIHgpCit7CisgIHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQgeSA9IHg7CisgIHJldHVybiAoZG91YmxlKSB5OworfQorCitk b3VibGUKK2Y1X2RvbnQgKGRvdWJsZSB4KQoreworICBzaWduZWQgc2hvcnQgeSA9IHg7Cisg IHJldHVybiAoZG91YmxlKSB5OworfQorCisvKiBNYWtlIHN1cmUgdGhlICdkb250J3MgZG9u J3QgZ2VuZXJhdGUgYW55IGZyaW50TnouICAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLXRpbWVzIHtmcmludDMyen0gMiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyB7ZnJpbnQ2NHp9IDIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9mcmludG56X3NscC5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvZnJpbnRuel9zbHAuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y MDhhMzI4Y2U4NGRmM2MzYWU3NjU0YzNkYjI1NGU4MWQwMjdjMjMxCi0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvZnJpbnRuel9zbHAuYwpA QCAtMCwwICsxLDUwIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRp b25zICItc3RkPWM5OSAtTzMiIH0gICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRh cmdldCBhYXJjaDY0X2ZyaW50bnp4X29rIH0gKi8KKy8qIHsgZGctYWRkLW9wdGlvbnMgYWFy Y2g2NF9mcmludG56eCB9ICovCisvKiB7IGRnLWZpbmFsIHsgY2hlY2stZnVuY3Rpb24tYm9k aWVzICIqKiIgIiIgfSB9ICovCisKKyNkZWZpbmUgVEVTVChuYW1lLGZsb2F0X3R5cGUsaW50 X3R5cGUpCQkJCQlcCit2b2lkCQkJCQkJCQkJXAorbmFtZSAoZmxvYXRfdHlwZSAqIF9fcmVz dHJpY3RfXyB4LCBmbG9hdF90eXBlICogX19yZXN0cmljdF9fIHksIGludCBuKSAgXAorewkJ CQkJCQkJCVwKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpICs9MikJCQkJCSAgICAgIFwK KyAgICB7CQkJCQkJCQkgICAgICBcCisgICAgICBpbnRfdHlwZSB4X2kwID0geFtpXTsJCQkJ CSAgICAgIFwKKyAgICAgIGludF90eXBlIHhfaTEgPSB4W2kgKyAxXTsJCQkJCSAgICAgIFwK KyAgICAgIHlbaV0gPSAoZmxvYXRfdHlwZSkgeF9pMTsJCQkJCSAgICAgIFwKKyAgICAgIHlb aSArIDFdID0gKGZsb2F0X3R5cGUpIHhfaTA7CQkJCSAgICAgIFwKKyAgICB9CQkJCQkJCQkg ICAgICBcCit9CisKKy8qCisqKiBmMToKKyoqCS4uLgorKioJZnJpbnQzMnoJdlswLTldK1wu NHMsIHZbMC05XStcLjRzCisqKgkuLi4KKyovCitURVNUKGYxLCBmbG9hdCwgaW50KQorCisv KgorKiogZjI6CisqKgkuLi4KKyoqCWZyaW50NjR6CXZbMC05XStcLjRzLCB2WzAtOV0rXC40 cworKioJLi4uCisqLworVEVTVChmMiwgZmxvYXQsIGxvbmcgbG9uZykKKworLyoKKyoqIGYz OgorKioJLi4uCisqKglmcmludDMyegl2WzAtOV0rXC4yZCwgdlswLTldK1wuMmQKKyoqCS4u LgorKi8KK1RFU1QoZjMsIGRvdWJsZSwgaW50KQorCisvKgorKiogZjQ6CisqKgkuLi4KKyoq CWZyaW50NjR6CXZbMC05XStcLjJkLCB2WzAtOV0rXC4yZAorKioJLi4uCisqLworVEVTVChm NCwgZG91YmxlLCBsb25nIGxvbmcpCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvYWFyY2g2NC9mcmludG56X3ZlYy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2FhcmNoNjQvZnJpbnRuel92ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjIzMmNiMDI2NDlhM2Mz ZjY1YWIyZmFkMTNmZGJkN2ZmOWEwNTI0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvZnJpbnRuel92ZWMuYwpAQCAtMCwwICsxLDQ4IEBA CisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItc3RkPWM5OSAt TzMiIH0gICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBhYXJjaDY0X2Zy aW50bnp4X29rIH0gKi8KKy8qIHsgZGctYWRkLW9wdGlvbnMgYWFyY2g2NF9mcmludG56eCB9 ICovCisvKiB7IGRnLWZpbmFsIHsgY2hlY2stZnVuY3Rpb24tYm9kaWVzICIqKiIgIiIgfSB9 ICovCisKKyNkZWZpbmUgVEVTVChuYW1lLGZsb2F0X3R5cGUsaW50X3R5cGUpCQkJCQlcCit2 b2lkCQkJCQkJCQkJXAorbmFtZSAoZmxvYXRfdHlwZSAqIF9fcmVzdHJpY3RfXyB4LCBmbG9h dF90eXBlICogX19yZXN0cmljdF9fIHksIGludCBuKSAgXAorewkJCQkJCQkJCVwKKyAgZm9y IChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCQkJCQkgICAgICBcCisgICAgewkJCQkJCQkJICAg ICAgXAorICAgICAgaW50X3R5cGUgeF9pID0geFtpXTsJCQkJCSAgICAgIFwKKyAgICAgIHlb aV0gPSAoZmxvYXRfdHlwZSkgeF9pOwkJCQkJICAgICAgXAorICAgIH0JCQkJCQkJCSAgICAg IFwKK30KKworLyoKKyoqIGYxOgorKioJLi4uCisqKglmcmludDMyegl2WzAtOV0rXC40cywg dlswLTldK1wuNHMKKyoqCS4uLgorKi8KK1RFU1QoZjEsIGZsb2F0LCBpbnQpCisKKy8qCisq KiBmMjoKKyoqCS4uLgorKioJZnJpbnQ2NHoJdlswLTldK1wuNHMsIHZbMC05XStcLjRzCisq KgkuLi4KKyovCitURVNUKGYyLCBmbG9hdCwgbG9uZyBsb25nKQorCisvKgorKiogZjM6Cisq KgkuLi4KKyoqCWZyaW50MzJ6CXZbMC05XStcLjJkLCB2WzAtOV0rXC4yZAorKioJLi4uCisq LworVEVTVChmMywgZG91YmxlLCBpbnQpCisKKy8qCisqKiBmNDoKKyoqCS4uLgorKioJZnJp bnQ2NHoJdlswLTldK1wuMmQsIHZbMC05XStcLjJkCisqKgkuLi4KKyovCitURVNUKGY0LCBk b3VibGUsIGxvbmcgbG9uZykKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9hYXJjaDY0L21lcmdlX3RydW5jMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2Fh cmNoNjQvbWVyZ2VfdHJ1bmMxLmMKaW5kZXggMDcyMTcwNjRlMmJhNTRmY2Y0ZjVlZGM0NDBl NmVjMTlkZGFlNjZlMS4uM2Q4MDg3MWM0Y2ViZDVmYjVjYWMwNzE0YjNmZWVlMjcwMzhmMDVm ZCAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvbWVyZ2Vf dHJ1bmMxLmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvbWVyZ2Vf dHJ1bmMxLmMKQEAgLTEsNSArMSw2IEBACiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwogLyog eyBkZy1vcHRpb25zICItTzIgLWZmYXN0LW1hdGgiIH0gKi8KKy8qIHsgZGctc2tpcC1pZiAi IiB7IGFhcmNoNjRfZnJpbnRuenhfb2sgfSB9ICovCiAKIGZsb2F0CiBmMSAoZmxvYXQgeCkK ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvbGliL3RhcmdldC1zdXBwb3J0cy5leHAgYi9n Y2MvdGVzdHN1aXRlL2xpYi90YXJnZXQtc3VwcG9ydHMuZXhwCmluZGV4IDc1MDg5N2QwODU0 ODBkNzkxMDEwYzU5M2I4MWU2OTEwZGYyNDYxNjkuLmI3NmU3MzcxZDVjMGMzN2QwYjc5ZWFi ZDM3NGVhODE3OGFmMGM1ZGMgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvbGliL3Rhcmdl dC1zdXBwb3J0cy5leHAKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0LXN1cHBvcnRz LmV4cApAQCAtMTE3MjksNiArMTE3MjksNDUgQEAgcHJvYyBjaGVja19lZmZlY3RpdmVfdGFy Z2V0X2FybV92OF8zYV9ia2V5X2RpcmVjdGl2ZSB7IH0gewogCX1dCiB9CiAKKworcHJvYyBh ZGRfb3B0aW9uc19mb3JfYWFyY2g2NF9mcmludG56eCB7IGZsYWdzIH0geworICAgIGlmIHsg ISBbY2hlY2tfZWZmZWN0aXZlX3RhcmdldF9hYXJjaDY0X2ZyaW50bnp4X29rXSB9IHsKKyAg ICAgICAgcmV0dXJuICIkZmxhZ3MiCisgICAgfQorICAgIGdsb2JhbCBldF9hYXJjaDY0X2Zy aW50bnp4X2ZsYWdzCisgICAgcmV0dXJuICIkZmxhZ3MgJGV0X2FhcmNoNjRfZnJpbnRuenhf ZmxhZ3MiCit9CisKKyMgUmV0dXJuIDEgaWYgdGhlIHRhcmdldCBzdXBwb3J0cyBBcm12OC41 LUEgc2NhbGFyIGFuZCBBZHZhbmNlZCBTSU1ECisjIEZSSU5UMzJbWlhdIGFuZGQgRlJJTlQ2 NFtaWF0gaW5zdHJ1Y3Rpb25zLCAwIG90aGVyd2lzZS4gVGhlIHRlc3QgaXMgdmFsaWQgZm9y CisjIEFBcmNoNjQuCitwcm9jIGNoZWNrX2VmZmVjdGl2ZV90YXJnZXRfYWFyY2g2NF9mcmlu dG56eF9va19ub2NhY2hlIHsgfSB7CisgICAgZ2xvYmFsIGV0X2FhcmNoNjRfZnJpbnRuenhf ZmxhZ3MKKyAgICBzZXQgZXRfYWFyY2g2NF9mcmludG56eF9mbGFncyAiIgorICAgIGlmIHsg IVtpc3RhcmdldCBhYXJjaDY0Ki0qLSpdIH0geworICAgICAgICByZXR1cm4gMDsKKyAgICB9 CisKKyAgICBmb3JlYWNoIGZsYWdzIHsiIiAiLW1hcmNoPWFybXY4LjUtYSJ9IHsKKwlpZiB7 IFtjaGVja19ub19jb21waWxlcl9tZXNzYWdlc19ub2NhY2hlIFwKKwkJICBhYXJjaDY0X2Zy aW50bnp4X29rIGFzc2VtYmx5IHsKKwkgICAgI2lmICFkZWZpbmVkIChfX0FSTV9GRUFUVVJF X0ZSSU5UKQorCSAgICAjZXJyb3IgIl9fQVJNX0ZFQVRVUkVfRlJJTlQgbm90IGRlZmluZWQi CisJICAgICNlbmRpZgorCX0gJGZsYWdzIF0gfSB7CisJICAgIHNldCBldF9hYXJjaDY0X2Zy aW50bnp4X2ZsYWdzICRmbGFncworCSAgICByZXR1cm4gMTsKKwl9CisgICAgfQorCisgICAg cmV0dXJuIDA7Cit9CisKK3Byb2MgY2hlY2tfZWZmZWN0aXZlX3RhcmdldF9hYXJjaDY0X2Zy aW50bnp4X29rIHsgfSB7CisgICAgcmV0dXJuIFtjaGVja19jYWNoZWRfZWZmZWN0aXZlX3Rh cmdldCBhYXJjaDY0X2ZyaW50bnp4X29rIFwKKyAgICAgICAgICAgICAgICBjaGVja19lZmZl Y3RpdmVfdGFyZ2V0X2FhcmNoNjRfZnJpbnRuenhfb2tfbm9jYWNoZV0KK30KKwogIyBSZXR1 cm4gMSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGV4ZWN1dGluZyB0aGUgQXJtdjguMS1NIE1h aW5saW5lIExvdwogIyBPdmVyaGVhZCBMb29wLCAwIG90aGVyd2lzZS4gIFRoZSB0ZXN0IGlz IHZhbGlkIGZvciBBUk0uCiAKZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3Qtc2xwLmNjIGIv Z2NjL3RyZWUtdmVjdC1zbHAuY2MKaW5kZXggZTU0NDE0ZjZiZWZhZGNlYTk1NDE5YmY5Yjg0 OTA0YjljYjQyNDViOS4uM2QwMWUwNTA2Njk5YjQ4YjZlNjRjOWZlYTdkMzc1NzEyOTJjYmU2 OCAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVjdC1zbHAuY2MKKysrIGIvZ2NjL3RyZWUtdmVj dC1zbHAuY2MKQEAgLTYwODEsNiArNjA4MSwzNSBAQCB2ZWN0X3Byb2xvZ3VlX2Nvc3RfZm9y X3NscCAoc2xwX3RyZWUgbm9kZSwKICAgICB9CiB9CiAKKy8qIENoZWNrIHdoZXRoZXIgdGhp cyBOT0RFIGNvbnRhaW5zIHN0YXRlbWVudHMgd2l0aCBhbiBleHBlY3RlZCBzY2FsYXIgYXJn dW1lbnQKKyAgIGF0IElOREVYLiAgKi8KKworc3RhdGljIGJvb2wKK2NoZWNrX3NjYWxhcl9h cmdfb2sgKHNscF90cmVlIG5vZGUsIGludCBpbmRleCkKK3sKKyAgaWYgKGluZGV4ICE9IDEp CisgICAgcmV0dXJuIGZhbHNlOworCisgIGVudW0gc3RtdF92ZWNfaW5mb190eXBlIHN0bXRf dHlwZQorICAgID0gU1RNVF9WSU5GT19UWVBFIChTTFBfVFJFRV9SRVBSRVNFTlRBVElWRSAo bm9kZSkpOworCisgIGlmIChzdG10X3R5cGUgPT0gc2hpZnRfdmVjX2luZm9fdHlwZSkKKyAg ICByZXR1cm4gdHJ1ZTsKKyAgZWxzZSBpZiAoc3RtdF90eXBlID09IGNhbGxfdmVjX2luZm9f dHlwZSkKKyAgICB7CisgICAgICBjb21iaW5lZF9mbiBjZm4KKwk9IGdpbXBsZV9jYWxsX2Nv bWJpbmVkX2ZuIChTTFBfVFJFRV9SRVBSRVNFTlRBVElWRSAobm9kZSktPnN0bXQpOworICAg ICAgaWYgKCFpbnRlcm5hbF9mbiAoY2ZuKSkKKwlyZXR1cm4gZmFsc2U7CisgICAgICBpbnRl cm5hbF9mbiBpZm4gPSBhc19pbnRlcm5hbF9mbiAoY2ZuKTsKKworICAgICAgcmV0dXJuIGRp cmVjdF9pbnRlcm5hbF9mbl9wIChpZm4pCisJJiYgZGlyZWN0X2ludGVybmFsX2ZuIChpZm4p LnR5cGUxX2lzX3NjYWxhcl9wOworICAgIH0KKworICByZXR1cm4gZmFsc2U7Cit9CisKIC8q IEFuYWx5emUgc3RhdGVtZW50cyBjb250YWluZWQgaW4gU0xQIHRyZWUgTk9ERSBhZnRlciBy ZWN1cnNpdmVseSBhbmFseXppbmcKICAgIHRoZSBzdWJ0cmVlLiAgTk9ERV9JTlNUQU5DRSBj b250YWlucyBOT0RFIGFuZCBWSU5GTyBjb250YWlucyBJTlNUQU5DRS4KIApAQCAtNjE4MCwx MCArNjIwOSwxMCBAQCB2ZWN0X3NscF9hbmFseXplX25vZGVfb3BlcmF0aW9ucyAodmVjX2lu Zm8gKnZpbmZvLCBzbHBfdHJlZSBub2RlLAogCSAgICB7CiAJICAgICAgLyogRm9yIHNoaWZ0 cyB3aXRoIGEgc2NhbGFyIGFyZ3VtZW50IHdlIGRvbid0IG5lZWQKIAkJIHRvIGNvc3Qgb3Ig Y29kZS1nZW5lcmF0ZSBhbnl0aGluZy4KKwkJIFRoZSBzYW1lIGlzIHRydWUgZm9yIGludGVy bmFsIGZ1bmN0aW9ucyB3aGVyZQorCQkgdHlwZTFfaXNfc2NhbGFyX3AuCiAJCSA/Pz8gIFJl cHJlc2VudCB0aGlzIG1vcmUgZXhwbGljaXRlbHkuICAqLwotCSAgICAgIGdjY19hc3NlcnQg KChTVE1UX1ZJTkZPX1RZUEUgKFNMUF9UUkVFX1JFUFJFU0VOVEFUSVZFIChub2RlKSkKLQkJ CSAgID09IHNoaWZ0X3ZlY19pbmZvX3R5cGUpCi0JCQkgICYmIGogPT0gMSk7CisJICAgICAg Z2NjX2Fzc2VydCAoY2hlY2tfc2NhbGFyX2FyZ19vayAobm9kZSwgaikpOwogCSAgICAgIGNv bnRpbnVlOwogCSAgICB9CiAJICB1bnNpZ25lZCBncm91cF9zaXplID0gU0xQX1RSRUVfTEFO RVMgKGNoaWxkKTsKQEAgLTgwNjQsNiArODA5Myw3IEBAIHZlY3RfZ2V0X3NscF9kZWZzICh2 ZWNfaW5mbyAqLAogICBpZiAobiA9PSAtMVUpCiAgICAgbiA9IFNMUF9UUkVFX0NISUxEUkVO IChzbHBfbm9kZSkubGVuZ3RoICgpOwogCisgIHZlY19vcHJuZHMtPnJlc2VydmUgKG4pOwog ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbjsgKytpKQogICAgIHsKICAgICAgIHNscF90 cmVlIGNoaWxkID0gU0xQX1RSRUVfQ0hJTERSRU4gKHNscF9ub2RlKVtpXTsKZGlmZiAtLWdp dCBhL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MgYi9nY2MvdHJlZS12ZWN0LXN0bXRzLmNjCmlu ZGV4IDRlMGQ3NWUwZDc1ODZhZDU3YTM3ODUwZDhhNzBmNjE4MmVjYjEzZDAuLmU3N2M0M2Vm ZGZmYmE3ZDdkOGI1YzYyNWFjZDZlYjMzM2IxZWJkMTEgMTAwNjQ0Ci0tLSBhL2djYy90cmVl LXZlY3Qtc3RtdHMuY2MKKysrIGIvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYwpAQCAtMTY1NCwx MyArMTY1NCwxNiBAQCB2ZWN0X2ZpbmlzaF9zdG10X2dlbmVyYXRpb24gKHZlY19pbmZvICp2 aW5mbywKIH0KIAogLyogV2Ugd2FudCB0byB2ZWN0b3JpemUgYSBjYWxsIHRvIGNvbWJpbmVk IGZ1bmN0aW9uIENGTiB3aXRoIGZ1bmN0aW9uCi0gICBkZWNsIEZOREVDTCwgdXNpbmcgVkVD VFlQRV9PVVQgYXMgdGhlIHR5cGUgb2YgdGhlIG91dHB1dCBhbmQgVkVDVFlQRV9JTgotICAg YXMgdGhlIHR5cGVzIG9mIGFsbCBpbnB1dHMuICBDaGVjayB3aGV0aGVyIHRoaXMgaXMgcG9z c2libGUgdXNpbmcKLSAgIGFuIGludGVybmFsIGZ1bmN0aW9uLCByZXR1cm5pbmcgaXRzIGNv ZGUgaWYgc28gb3IgSUZOX0xBU1QgaWYgbm90LiAgKi8KKyAgIGRlY2wgRk5ERUNMLCB1c2lu ZyBWRUNUWVBFX09VVCBhcyB0aGUgdHlwZSBvZiB0aGUgb3V0cHV0LCBWRUNUWVBFUyB0byBm aW5kCisgICB0aGUgdHlwZSBmb3IgZWFjaCBhcmd1bWVudCBhcyBkZXNjcmliZWQgaW4gdGhl IGRpcmVjdF9pbnRlcm5hbF9mbl9pbmZvIG9yCisgICBpZiBub25lIGlzIGRlc2NyaWJlZCB0 aGVyZSB1c2UgVkVDVFlQRV9JTiBpbnN0ZWFkLiBDaGVjayB3aGV0aGVyIHZlY3Rvcml6aW5n CisgICB0aGlzIGNhbGwgaXMgcG9zc2libGUgdXNpbmcgYW4gaW50ZXJuYWwgZnVuY3Rpb24s IHJldHVybmluZyBpdHMgY29kZSBpZiBzbworICAgb3IgSUZOX0xBU1QgaWYgbm90LiAgKi8K IAogc3RhdGljIGludGVybmFsX2ZuCiB2ZWN0b3JpemFibGVfaW50ZXJuYWxfZnVuY3Rpb24g KGNvbWJpbmVkX2ZuIGNmbiwgdHJlZSBmbmRlY2wsCi0JCQkJdHJlZSB2ZWN0eXBlX291dCwg dHJlZSB2ZWN0eXBlX2luKQorCQkJCXRyZWUgdmVjdHlwZV9vdXQsIHRyZWUgdmVjdHlwZV9p biwKKwkJCQl0cmVlICp2ZWN0eXBlcykKIHsKICAgaW50ZXJuYWxfZm4gaWZuOwogICBpZiAo aW50ZXJuYWxfZm5fcCAoY2ZuKSkKQEAgLTE2NzIsOCArMTY3NSwxMiBAQCB2ZWN0b3JpemFi bGVfaW50ZXJuYWxfZnVuY3Rpb24gKGNvbWJpbmVkX2ZuIGNmbiwgdHJlZSBmbmRlY2wsCiAg ICAgICBjb25zdCBkaXJlY3RfaW50ZXJuYWxfZm5faW5mbyAmaW5mbyA9IGRpcmVjdF9pbnRl cm5hbF9mbiAoaWZuKTsKICAgICAgIGlmIChpbmZvLnZlY3Rvcml6YWJsZSkKIAl7Ci0JICB0 cmVlIHR5cGUwID0gKGluZm8udHlwZTAgPCAwID8gdmVjdHlwZV9vdXQgOiB2ZWN0eXBlX2lu KTsKLQkgIHRyZWUgdHlwZTEgPSAoaW5mby50eXBlMSA8IDAgPyB2ZWN0eXBlX291dCA6IHZl Y3R5cGVfaW4pOworCSAgdHJlZSB0eXBlMCA9IChpbmZvLnR5cGUwIDwgMCA/IHZlY3R5cGVf b3V0IDogdmVjdHlwZXNbaW5mby50eXBlMF0pOworCSAgaWYgKCF0eXBlMCkKKwkgICAgdHlw ZTAgPSB2ZWN0eXBlX2luOworCSAgdHJlZSB0eXBlMSA9IChpbmZvLnR5cGUxIDwgMCA/IHZl Y3R5cGVfb3V0IDogdmVjdHlwZXNbaW5mby50eXBlMV0pOworCSAgaWYgKCF0eXBlMSkKKwkg ICAgdHlwZTEgPSB2ZWN0eXBlX2luOwogCSAgaWYgKGRpcmVjdF9pbnRlcm5hbF9mbl9zdXBw b3J0ZWRfcCAoaWZuLCB0cmVlX3BhaXIgKHR5cGUwLCB0eXBlMSksCiAJCQkJCSAgICAgIE9Q VElNSVpFX0ZPUl9TUEVFRCkpCiAJICAgIHJldHVybiBpZm47CkBAIC0zMjU5LDYgKzMyNjYs MjMgQEAgc2ltcGxlX2ludGVnZXJfbmFycm93aW5nICh0cmVlIHZlY3R5cGVfb3V0LCB0cmVl IHZlY3R5cGVfaW4sCiAgIHJldHVybiB0cnVlOwogfQogCisvKiBGdW5jdGlvbiB2ZWN0X2dl dF9zY2FsYXJfb3BybmRzLgorCisgICBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB2 ZWN0b3JpemFibGVfY2FsbCB0byBmaWxsIFZFQ19DU1RTIHdpdGggdGhlCisgICBBUkdOTyd0 aCBhcmd1bWVudCBvZiB0aGUgY2FsbHMgaW4gU0xQX05PREUuICAqLworCitzdGF0aWMgdm9p ZAordmVjdF9nZXRfc2NhbGFyX29wcm5kcyAoc2xwX3RyZWUgc2xwX25vZGUsIGludCBhcmdu bywgdmVjPHRyZWU+ICp2ZWNfY3N0cykKK3sKKyAgdW5zaWduZWQgajsKKyAgc3RtdF92ZWNf aW5mbyBzdG10X3ZpbmZvOworICBGT1JfRUFDSF9WRUNfRUxUIChTTFBfVFJFRV9TQ0FMQVJf U1RNVFMgKHNscF9ub2RlKSwgaiwgc3RtdF92aW5mbykKKyAgICB7CisgICAgICBnY2NfYXNz ZXJ0IChnaW1wbGVfY29kZSAoc3RtdF92aW5mby0+c3RtdCkgPT0gR0lNUExFX0NBTEwpOwor ICAgICAgdmVjX2NzdHMtPnNhZmVfcHVzaCAoZ2ltcGxlX2NhbGxfYXJnIChzdG10X3ZpbmZv LT5zdG10LCBhcmdubykpOworICAgIH0KK30KKwogLyogRnVuY3Rpb24gdmVjdG9yaXphYmxl X2NhbGwuCiAKICAgIENoZWNrIGlmIFNUTVRfSU5GTyBwZXJmb3JtcyBhIGZ1bmN0aW9uIGNh bGwgdGhhdCBjYW4gYmUgdmVjdG9yaXplZC4KQEAgLTMzNDAsOSArMzM2NCwyMCBAQCB2ZWN0 b3JpemFibGVfY2FsbCAodmVjX2luZm8gKnZpbmZvLAogICAgICAgcmhzX3R5cGUgPSB1bnNp Z25lZF90eXBlX25vZGU7CiAgICAgfQogCisgIC8qIFRoZSBhcmd1bWVudCB0aGF0IGlzIG5v dCBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZSBvdGhlcnMuICAqLwogICBpbnQgbWFza19vcG5v ID0gLTE7CisgIGludCBzY2FsYXJfb3BubyA9IC0xOwogICBpZiAoaW50ZXJuYWxfZm5fcCAo Y2ZuKSkKLSAgICBtYXNrX29wbm8gPSBpbnRlcm5hbF9mbl9tYXNrX2luZGV4IChhc19pbnRl cm5hbF9mbiAoY2ZuKSk7CisgICAgeworICAgICAgaW50ZXJuYWxfZm4gaWZuID0gYXNfaW50 ZXJuYWxfZm4gKGNmbik7CisgICAgICBpZiAoZGlyZWN0X2ludGVybmFsX2ZuX3AgKGlmbikK KwkgICYmIGRpcmVjdF9pbnRlcm5hbF9mbiAoaWZuKS50eXBlMV9pc19zY2FsYXJfcCkKKwlz Y2FsYXJfb3BubyA9IGRpcmVjdF9pbnRlcm5hbF9mbiAoaWZuKS50eXBlMTsKKyAgICAgIGVs c2UKKwkvKiBGb3IgbWFza2VkIG9wZXJhdGlvbnMgdGhpcyByZXByZXNlbnRzIHRoZSBhcmd1 bWVudCB0aGF0IGNhcnJpZXMgdGhlCisJICAgbWFzay4gICovCisJbWFza19vcG5vID0gaW50 ZXJuYWxfZm5fbWFza19pbmRleCAoYXNfaW50ZXJuYWxfZm4gKGNmbikpOworICAgIH0KIAog ICBmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKICAgICB7CkBAIC0zMzUzLDYgKzMzODgs MTEgQEAgdmVjdG9yaXphYmxlX2NhbGwgKHZlY19pbmZvICp2aW5mbywKIAkgICAgcmV0dXJu IGZhbHNlOwogCSAgY29udGludWU7CiAJfQorICAgICAgZWxzZSBpZiAoKGludCkgaSA9PSBz Y2FsYXJfb3BubykKKwl7CisJICB2ZWN0eXBlc1tpXSA9IFRSRUVfVFlQRSAoZ2ltcGxlX2Nh bGxfYXJnIChzdG10LCBpKSk7CisJICBjb250aW51ZTsKKwl9CiAKICAgICAgIGlmICghdmVj dF9pc19zaW1wbGVfdXNlICh2aW5mbywgc3RtdF9pbmZvLCBzbHBfbm9kZSwKIAkJCSAgICAg ICBpLCAmb3AsICZzbHBfb3BbaV0sICZkdFtpXSwgJnZlY3R5cGVzW2ldKSkKQEAgLTM0Njcs OCArMzUwNyw4IEBAIHZlY3Rvcml6YWJsZV9jYWxsICh2ZWNfaW5mbyAqdmluZm8sCiAJICB8 fCAobW9kaWZpZXIgPT0gTkFSUk9XCiAJICAgICAgJiYgc2ltcGxlX2ludGVnZXJfbmFycm93 aW5nICh2ZWN0eXBlX291dCwgdmVjdHlwZV9pbiwKIAkJCQkJICAgJmNvbnZlcnRfY29kZSkp KSkKLSAgICBpZm4gPSB2ZWN0b3JpemFibGVfaW50ZXJuYWxfZnVuY3Rpb24gKGNmbiwgY2Fs bGVlLCB2ZWN0eXBlX291dCwKLQkJCQkJICB2ZWN0eXBlX2luKTsKKyAgICBpZm4gPSB2ZWN0 b3JpemFibGVfaW50ZXJuYWxfZnVuY3Rpb24gKGNmbiwgY2FsbGVlLCB2ZWN0eXBlX291dCwg dmVjdHlwZV9pbiwKKwkJCQkJICAmdmVjdHlwZXNbMF0pOwogCiAgIC8qIElmIHRoYXQgZmFp bHMsIHRyeSBhc2tpbmcgZm9yIGEgdGFyZ2V0LXNwZWNpZmljIGJ1aWx0LWluIGZ1bmN0aW9u LiAgKi8KICAgaWYgKGlmbiA9PSBJRk5fTEFTVCkKQEAgLTM2MDgsNiArMzY0OCwxMCBAQCB2 ZWN0b3JpemFibGVfY2FsbCAodmVjX2luZm8gKnZpbmZvLAogCiAJICAgICAgdmVjdF9nZXRf c2xwX2RlZnMgKHZpbmZvLCBzbHBfbm9kZSwgJnZlY19kZWZzKTsKIAkgICAgICB2ZWNfb3By bmRzMCA9IHZlY19kZWZzWzBdOworCSAgICAgIHVuc2lnbmVkIGludCBjaGlsZHJlbl9uID0g U0xQX1RSRUVfQ0hJTERSRU4gKHNscF9ub2RlKS5sZW5ndGggKCk7CisJICAgICAgYXV0b192 ZWM8dHJlZT4gc2NhbGFyX2RlZnMgKGNoaWxkcmVuX24pOworCSAgICAgIGlmIChzY2FsYXJf b3BubyA+IC0xKQorCQl2ZWN0X2dldF9zY2FsYXJfb3BybmRzIChzbHBfbm9kZSwgc2NhbGFy X29wbm8sICZzY2FsYXJfZGVmcyk7CiAKIAkgICAgICAvKiBBcmd1bWVudHMgYXJlIHJlYWR5 LiAgQ3JlYXRlIHRoZSBuZXcgdmVjdG9yIHN0bXQuICAqLwogCSAgICAgIEZPUl9FQUNIX1ZF Q19FTFQgKHZlY19vcHJuZHMwLCBpLCB2ZWNfb3BybmQwKQpAQCAtMzYyNCw4ICszNjY4LDE1 IEBAIHZlY3Rvcml6YWJsZV9jYWxsICh2ZWNfaW5mbyAqdmluZm8sCiAJCSAgc2l6ZV90IGs7 CiAJCSAgZm9yIChrID0gMDsgayA8IG5hcmdzOyBrKyspCiAJCSAgICB7Ci0JCSAgICAgIHZl Yzx0cmVlPiB2ZWNfb3BybmRzayA9IHZlY19kZWZzW2tdOwotCQkgICAgICB2YXJnc1t2YXJn KytdID0gdmVjX29wcm5kc2tbaV07CisJCSAgICAgIHRyZWUgb3BlcmFuZDsKKwkJICAgICAg aWYgKHNjYWxhcl9vcG5vID09IChpbnQpIGspCisJCQlvcGVyYW5kID0gc2NhbGFyX2RlZnNb aV07CisJCSAgICAgIGVsc2UKKwkJCXsKKwkJCSAgdmVjPHRyZWU+IHZlY19vcHJuZHNrID0g dmVjX2RlZnNba107CisJCQkgIG9wZXJhbmQgPSB2ZWNfb3BybmRza1tpXTsKKwkJCX0KKwkJ ICAgICAgdmFyZ3NbdmFyZysrXSA9IG9wZXJhbmQ7CiAJCSAgICB9CiAJCSAgaWYgKG1hc2tl ZF9sb29wX3AgJiYgcmVkdWNfaWR4ID49IDApCiAJCSAgICB2YXJnc1t2YXJnKytdID0gdmFy Z3NbcmVkdWNfaWR4ICsgMV07CmRpZmYgLS1naXQgYS9nY2MvdHJlZS5oIGIvZ2NjL3RyZWUu aAppbmRleCBkNmE1ZmRmNmQ4MWJmMTAwNDQyNDljMDE1MDgzZTZkYjhiMzViNTE5Li40MmIy YWQ3NGQyNjAwNDExMThmMDc5ZjA1MDgzZjc0OThhNjBmYmE0IDEwMDY0NAotLS0gYS9nY2Mv dHJlZS5oCisrKyBiL2djYy90cmVlLmgKQEAgLTY2OTgsNCArNjY5OCwxMiBAQCBleHRlcm4g dHJlZSBnZXRfYXR0cl9ub25zdHJpbmdfZGVjbCAodHJlZSwgdHJlZSAqID0gTlVMTCk7CiAK IGV4dGVybiBpbnQgZ2V0X3RhcmdldF9jbG9uZV9hdHRyX2xlbiAodHJlZSk7CiAKKy8qIFJl dHVybiB0aGUgdHlwZSwgb3IgZm9yIGEgY29tcGxleCBvciB2ZWN0b3IgdHlwZSB0aGUgdHlw ZSBvZiBpdHMKKyAgIGVsZW1lbnRzLiAgKi8KK2V4dGVybiB0cmVlIGVsZW1lbnRfdHlwZSAo dHJlZSk7CisKKy8qIFJldHVybiB0aGUgcHJlY2lzaW9uIG9mIHRoZSB0eXBlLCBvciBmb3Ig YSBjb21wbGV4IG9yIHZlY3RvciB0eXBlIHRoZQorICAgcHJlY2lzaW9uIG9mIHRoZSB0eXBl IG9mIGl0cyBlbGVtZW50cy4gICovCitleHRlcm4gdW5zaWduZWQgaW50IGVsZW1lbnRfcHJl Y2lzaW9uIChjb25zdF90cmVlKTsKKwogI2VuZGlmICAvKiBHQ0NfVFJFRV9IICAqLwpkaWZm IC0tZ2l0IGEvZ2NjL3RyZWUuY2MgYi9nY2MvdHJlZS5jYwppbmRleCAxNzIwOTg3ODdkZDky NGVjMjMxMDFlNzQ5NWNmMGU2N2NhNDdkNzg3Li4xMjdjMmQxZmFkM2ZlNDg4ZmY0ZDYwMTE5 Y2UwZWM4YzEzYTc4NTI4IDEwMDY0NAotLS0gYS9nY2MvdHJlZS5jYworKysgYi9nY2MvdHJl ZS5jYwpAQCAtNjY5OSwxMSArNjY5OSwxMSBAQCB2YWxpZF9jb25zdGFudF9zaXplX3AgKGNv bnN0X3RyZWUgc2l6ZSwgY3N0X3NpemVfZXJyb3IgKnBlcnIgLyogPSBOVUxMICovKQogICBy ZXR1cm4gdHJ1ZTsKIH0KIAotLyogUmV0dXJuIHRoZSBwcmVjaXNpb24gb2YgdGhlIHR5cGUs IG9yIGZvciBhIGNvbXBsZXggb3IgdmVjdG9yIHR5cGUgdGhlCi0gICBwcmVjaXNpb24gb2Yg dGhlIHR5cGUgb2YgaXRzIGVsZW1lbnRzLiAgKi8KKy8qIFJldHVybiB0aGUgdHlwZSwgb3Ig Zm9yIGEgY29tcGxleCBvciB2ZWN0b3IgdHlwZSB0aGUgdHlwZSBvZiBpdHMKKyAgIGVsZW1l bnRzLiAgKi8KIAotdW5zaWduZWQgaW50Ci1lbGVtZW50X3ByZWNpc2lvbiAoY29uc3RfdHJl ZSB0eXBlKQordHJlZQorZWxlbWVudF90eXBlICh0cmVlIHR5cGUpCiB7CiAgIGlmICghVFlQ RV9QICh0eXBlKSkKICAgICB0eXBlID0gVFJFRV9UWVBFICh0eXBlKTsKQEAgLTY3MTEsNyAr NjcxMSwxNiBAQCBlbGVtZW50X3ByZWNpc2lvbiAoY29uc3RfdHJlZSB0eXBlKQogICBpZiAo Y29kZSA9PSBDT01QTEVYX1RZUEUgfHwgY29kZSA9PSBWRUNUT1JfVFlQRSkKICAgICB0eXBl ID0gVFJFRV9UWVBFICh0eXBlKTsKIAotICByZXR1cm4gVFlQRV9QUkVDSVNJT04gKHR5cGUp OworICByZXR1cm4gdHlwZTsKK30KKworLyogUmV0dXJuIHRoZSBwcmVjaXNpb24gb2YgdGhl IHR5cGUsIG9yIGZvciBhIGNvbXBsZXggb3IgdmVjdG9yIHR5cGUgdGhlCisgICBwcmVjaXNp b24gb2YgdGhlIHR5cGUgb2YgaXRzIGVsZW1lbnRzLiAgKi8KKwordW5zaWduZWQgaW50Citl bGVtZW50X3ByZWNpc2lvbiAoY29uc3RfdHJlZSB0eXBlKQoreworICByZXR1cm4gVFlQRV9Q UkVDSVNJT04gKGVsZW1lbnRfdHlwZSAoY29uc3RfY2FzdDx0cmVlPiAodHlwZSkpKTsKIH0K IAogLyogUmV0dXJuIHRydWUgaWYgQ09ERSByZXByZXNlbnRzIGFuIGFzc29jaWF0aXZlIHRy ZWUgY29kZS4gIE90aGVyd2lzZQo= --------------uxVsSQdXqJXicjmcNYsjjBly--