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 8D4583858D1E for ; Tue, 24 Jan 2023 13:56:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8D4583858D1E 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 1BED7C14; Tue, 24 Jan 2023 05:57:16 -0800 (PST) Received: from [10.57.75.149] (unknown [10.57.75.149]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 90CED3F71E; Tue, 24 Jan 2023 05:56:33 -0800 (PST) Content-Type: multipart/mixed; boundary="------------2cfeOmFEmgr6NslCLlsHNvZW" Message-ID: <7fea7fd8-2869-47cd-69cf-ccc9bfa05733@arm.com> Date: Tue, 24 Jan 2023 13:56:28 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: [PATCH 3/3] arm: Fix MVE predicates synthesis [PR 108443] Content-Language: en-US To: "gcc-patches@gcc.gnu.org" References: <13d03aef-f5d1-03fe-5281-31921d24dce0@arm.com> Cc: Kyrylo Tkachov , Richard Earnshaw From: "Andre Vieira (lists)" In-Reply-To: <13d03aef-f5d1-03fe-5281-31921d24dce0@arm.com> X-Spam-Status: No, score=-16.1 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_ASCII_DIVIDERS,KAM_DMARC_NONE,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,KAM_LOTSOFHASH,KAM_SHORT,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. --------------2cfeOmFEmgr6NslCLlsHNvZW Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, This patch fixes the way we synthesize MVE predicate immediates and fixes some other inconsistencies around predicates. For instance this patch fixes the modes used in the vctp intrinsics, to couple them with predicate modes with the appropriate lane numbers. For this V2QI is added to represent a predicate created by vctp64q. The reason we use V2QI and not for instance a V2BI with 8-bit boolean modes is because we are trying to avoid having two 'INT' modes of the same size. We make sure we use the V2QI mode instead of HI for any instruction working on two lanes of 64-bits consuming a predicate. Bootstrapped on aarch64-none-linux-gnu and regression tested on arm-none-eabi and armeb-none-eabi for armv8.1-m.main+mve.fp. OK for trunk? gcc/ChangeLog: PR target/108443 * config/arm/arm.h (VALID_MVE_PRED_MODE): Add V2QI. * config/arm/arm.cc (thumb2_legitimate_address_p): Use HImode for addressing MVE predicate modes. (mve_bool_vec_to_const): Change to represent correct MVE predicate format. (arm_hard_regno_mode_ok): Use VALID_MVE_PRED_MODE instead of checking modes. (arm_vector_mode_supported_p): Likewise. (arm_mode_to_pred_mode): Add V2QI. * config/arm/arm-builtins.cc (UNOP_PRED_UNONE_QUALIFIERS): New qualifier. (UNOP_PRED_PRED_QUALIFIERS): New qualifier (BINOP_PRED_UNONE_PRED_QUALIFIERS): New qualifier. (v2qi_UP): New macro. (v4bi_UP): New macro. (v8bi_UP): New macro. (v16bi_UP): New macro. (arm_expand_builtin_args): Make it able to expand the new predicate modes. * config/arm/arm-modes.def (V2QI): New mode. * config/arm/arm-simd-builtin-types.def (Pred1x16_t, Pred2x8_t Pred4x4_t): Remove unused predicate builtin types. * config/arm/arm_mve.h (__arm_vctp16q, __arm_vctp32q, __arm_vctp64q, __arm_vctp8q, __arm_vpnot, __arm_vctp8q_m, __arm_vctp64q_m, __arm_vctp32q_m, __arm_vctp16q_m): Use predicate modes. * config/arm/arm_mve_builtins.def (vctp16q, vctp32q, vctp64q, vctp8q, vpnot, vctp8q_m, vctp16q_m, vctp32q_m, vctp64q_m): Likewise. * config/arm/constraints.md (DB): Check for VALID_MVE_PRED_MODE instead of MODE_VECTOR_BOOL. * config/arm/iterators.md (MVE_7, MVE_7_HI): Add V2QI (MVE_VPRED): Likewise. (MVE_vpred): Add V2QI and map upper case predicate modes to lower case. (MVE_vctp): New mode attribute. (mode1): Remove. (VCTPQ): Remove. (VCTPQ_M): Remove. * config/arm/mve.md (mve_vctpqhi): Rename this... (mve_vctpq): ... to this. And use new mode attributes. (mve_vpnothi): Rename this... (mve_vpnotv16bi): ... to this. (mve_vctpq_mhi): Rename this... (mve_vctpq_m):... to this. (mve_vldrdq_gather_base_z_v2di, mve_vldrdq_gather_offset_z_v2di, mve_vldrdq_gather_shifted_offset_z_v2di, mve_vstrdq_scatter_base_p_v2di, mve_vstrdq_scatter_offset_p_v2di, mve_vstrdq_scatter_offset_p_v2di_insn, mve_vstrdq_scatter_shifted_offset_p_v2di, mve_vstrdq_scatter_shifted_offset_p_v2di_insn, mve_vstrdq_scatter_base_wb_p_v2di, mve_vldrdq_gather_base_wb_z_v2di, mve_vldrdq_gather_base_nowb_z_v2di, mve_vldrdq_gather_base_wb_z_v2di_insn): Use V2QI insead of HI for predicates. * config/arm/unspecs.md (VCTP8Q, VCTP16Q, VCTP32Q, VCTP64Q): Replace these... (VCTP): ... with this. (VCTP8Q_M, VCTP16Q_M, VCTP32Q_M, VCTP64Q_M): Replace these... (VCTP_M): ... with this. * config/arm/vfp.md (*thumb2_movhi_vfp, *thumb2_movhi_fp16): Use VALID_MVE_PRED_MODE instead of checking for MODE_VECTOR_BOOL class. gcc/testsuite/ChangeLog: * gcc.dg/rtl/arm/mve-vxbi.c: Use new predicate modes. * gcc.target/arm/mve/pr108443-run.c: New test. * gcc.target/arm/mve/pr108443.c: New test. --------------2cfeOmFEmgr6NslCLlsHNvZW Content-Type: text/plain; charset=UTF-8; name="pr108443.patch" Content-Disposition: attachment; filename="pr108443.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2FybS1idWlsdGlucy5jYyBiL2djYy9jb25m aWcvYXJtL2FybS1idWlsdGlucy5jYwppbmRleCA2YzY3Y2VjOTNmZjc2YTRiNDJmM2EwYjMw NWY2OTcxNDJlODhmY2Q5Li4yMmZjN2YxMGU5MmIzM2E4NjFhMzIxZTQzYmVjZWU0NjQ3NzM4 YjYxIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FybS9hcm0tYnVpbHRpbnMuY2MKKysrIGIv Z2NjL2NvbmZpZy9hcm0vYXJtLWJ1aWx0aW5zLmNjCkBAIC0zODQsNiArMzg0LDE5IEBAIGFy bV91bm9wX3Vub25lX2ltbV9xdWFsaWZpZXJzW1NJTURfTUFYX0JVSUxUSU5fQVJHU10KICNk ZWZpbmUgVU5PUF9VTk9ORV9JTU1fUVVBTElGSUVSUyBcCiAgIChhcm1fdW5vcF91bm9uZV9p bW1fcXVhbGlmaWVycykKIAorc3RhdGljIGVudW0gYXJtX3R5cGVfcXVhbGlmaWVycworYXJt X3Vub3BfcHJlZF91bm9uZV9xdWFsaWZpZXJzW1NJTURfTUFYX0JVSUxUSU5fQVJHU10KKyAg PSB7IHF1YWxpZmllcl9wcmVkaWNhdGUsIHF1YWxpZmllcl91bnNpZ25lZCB9OworI2RlZmlu ZSBVTk9QX1BSRURfVU5PTkVfUVVBTElGSUVSUyBcCisgIChhcm1fdW5vcF9wcmVkX3Vub25l X3F1YWxpZmllcnMpCisKK3N0YXRpYyBlbnVtIGFybV90eXBlX3F1YWxpZmllcnMKK2FybV91 bm9wX3ByZWRfcHJlZF9xdWFsaWZpZXJzW1NJTURfTUFYX0JVSUxUSU5fQVJHU10KKyAgPSB7 IHF1YWxpZmllcl9wcmVkaWNhdGUsIHF1YWxpZmllcl9wcmVkaWNhdGUgfTsKKyNkZWZpbmUg VU5PUF9QUkVEX1BSRURfUVVBTElGSUVSUyBcCisgIChhcm1fdW5vcF9wcmVkX3ByZWRfcXVh bGlmaWVycykKKworCiBzdGF0aWMgZW51bSBhcm1fdHlwZV9xdWFsaWZpZXJzCiBhcm1fYmlu b3Bfbm9uZV9ub25lX25vbmVfcXVhbGlmaWVyc1tTSU1EX01BWF9CVUlMVElOX0FSR1NdCiAg ID0geyBxdWFsaWZpZXJfbm9uZSwgcXVhbGlmaWVyX25vbmUsIHF1YWxpZmllcl9ub25lIH07 CkBAIC00MjYsNiArNDM5LDEyIEBAIGFybV9iaW5vcF9wcmVkX3Vub25lX3Vub25lX3F1YWxp ZmllcnNbU0lNRF9NQVhfQlVJTFRJTl9BUkdTXQogI2RlZmluZSBCSU5PUF9QUkVEX1VOT05F X1VOT05FX1FVQUxJRklFUlMgXAogICAoYXJtX2Jpbm9wX3ByZWRfdW5vbmVfdW5vbmVfcXVh bGlmaWVycykKIAorc3RhdGljIGVudW0gYXJtX3R5cGVfcXVhbGlmaWVycworYXJtX2Jpbm9w X3ByZWRfdW5vbmVfcHJlZF9xdWFsaWZpZXJzW1NJTURfTUFYX0JVSUxUSU5fQVJHU10KKyAg PSB7IHF1YWxpZmllcl9wcmVkaWNhdGUsIHF1YWxpZmllcl91bnNpZ25lZCwgcXVhbGlmaWVy X3ByZWRpY2F0ZSB9OworI2RlZmluZSBCSU5PUF9QUkVEX1VOT05FX1BSRURfUVVBTElGSUVS UyBcCisgIChhcm1fYmlub3BfcHJlZF91bm9uZV9wcmVkX3F1YWxpZmllcnMpCisKIHN0YXRp YyBlbnVtIGFybV90eXBlX3F1YWxpZmllcnMKIGFybV9iaW5vcF91bm9uZV9ub25lX2ltbV9x dWFsaWZpZXJzW1NJTURfTUFYX0JVSUxUSU5fQVJHU10KICAgPSB7IHF1YWxpZmllcl91bnNp Z25lZCwgcXVhbGlmaWVyX25vbmUsIHF1YWxpZmllcl9pbW1lZGlhdGUgfTsKQEAgLTg1MSw2 ICs4NzAsMTAgQEAgYXJtX3NldF9zYXRfcXVhbGlmaWVyc1tTSU1EX01BWF9CVUlMVElOX0FS R1NdCiAgID0geyBxdWFsaWZpZXJfdm9pZCwgcXVhbGlmaWVyX25vbmUgfTsKICNkZWZpbmUg U0VUX1NBVF9RVUFMSUZJRVJTIChhcm1fc2V0X3NhdF9xdWFsaWZpZXJzKQogCisjZGVmaW5l IHYycWlfVVAgIEVfVjJRSW1vZGUKKyNkZWZpbmUgdjRiaV9VUCAgRV9WNEJJbW9kZQorI2Rl ZmluZSB2OGJpX1VQICBFX1Y4Qkltb2RlCisjZGVmaW5lIHYxNmJpX1VQIEVfVjE2Qkltb2Rl CiAjZGVmaW5lIHY4cWlfVVAgIEVfVjhRSW1vZGUKICNkZWZpbmUgdjRoaV9VUCAgRV9WNEhJ bW9kZQogI2RlZmluZSB2NGhmX1VQICBFX1Y0SEZtb2RlCkBAIC0yOTg5LDExICszMDEyLDE0 IEBAIGFybV9leHBhbmRfYnVpbHRpbl9hcmdzIChydHggdGFyZ2V0LCBtYWNoaW5lX21vZGUg bWFwX21vZGUsIGludCBmY29kZSwKIAkJb3BbYXJnY10gPSBjb252ZXJ0X21lbW9yeV9hZGRy ZXNzIChQbW9kZSwgb3BbYXJnY10pOwogCiAJICAgICAgLyogTVZFIHVzZXMgbXZlX3ByZWQx Nl90IChha2EgSEltb2RlKSBmb3IgdmVjdG9ycyBvZgotCQkgcHJlZGljYXRlcy4gICovCi0J ICAgICAgaWYgKEdFVF9NT0RFX0NMQVNTIChtb2RlW2FyZ2NdKSA9PSBNT0RFX1ZFQ1RPUl9C T09MKQorCQkgcHJlZGljYXRlcywgYnV0IGludGVybmFsbHkgd2UgdXNlIFYxNkJJL1Y4Qkkv VjRCSS9WMlFJIGZvcgorCQkgTVZFIHByZWRpY2F0ZSBtb2Rlcy4gICovCisJICAgICAgaWYg KFRBUkdFVF9IQVZFX01WRSAmJiBWQUxJRF9NVkVfUFJFRF9NT0RFIChtb2RlW2FyZ2NdKSkK IAkJb3BbYXJnY10gPSBnZW5fbG93cGFydCAobW9kZVthcmdjXSwgb3BbYXJnY10pOwogCi0J ICAgICAgLypnY2NfYXNzZXJ0IChHRVRfTU9ERSAob3BbYXJnY10pID09IG1vZGVbYXJnY10p OyAqLworCSAgICAgIGdjY19hc3NlcnQgKEdFVF9NT0RFIChvcFthcmdjXSkgPT0gbW9kZVth cmdjXQorCQkJICB8fCAoR0VUX01PREUob3BbYXJnY10pID09IEVfVk9JRG1vZGUKKwkJCSAg ICAgICYmIENPTlNUQU5UX1AgKG9wW2FyZ2NdKSkpOwogCSAgICAgIGlmICghKCppbnNuX2Rh dGFbaWNvZGVdLm9wZXJhbmRbb3Bub10ucHJlZGljYXRlKQogCQkgIChvcFthcmdjXSwgbW9k ZVthcmdjXSkpCiAJCW9wW2FyZ2NdID0gY29weV90b19tb2RlX3JlZyAobW9kZVthcmdjXSwg b3BbYXJnY10pOwpAQCAtMzE5OCw3ICszMjI0LDcgQEAgY29uc3RhbnRfYXJnOgogICBlbHNl CiAgICAgZW1pdF9pbnNuIChpbnNuKTsKIAotICBpZiAoR0VUX01PREVfQ0xBU1MgKHRtb2Rl KSA9PSBNT0RFX1ZFQ1RPUl9CT09MKQorICBpZiAoVEFSR0VUX0hBVkVfTVZFICYmIFZBTElE X01WRV9QUkVEX01PREUgKHRtb2RlKSkKICAgICB7CiAgICAgICBydHggSEl0YXJnZXQgPSBn ZW5fcmVnX3J0eCAoSEltb2RlKTsKICAgICAgIGVtaXRfbW92ZV9pbnNuIChISXRhcmdldCwg Z2VuX2xvd3BhcnQgKEhJbW9kZSwgdGFyZ2V0KSk7CmRpZmYgLS1naXQgYS9nY2MvY29uZmln L2FybS9hcm0tbW9kZXMuZGVmIGIvZ2NjL2NvbmZpZy9hcm0vYXJtLW1vZGVzLmRlZgppbmRl eCAzNjQ3MzZkMTdmYTVhZTg3MWM0OWI3M2JjY2Q0Njk1Y2JhNzZjNzFlLi5jNzY0NWM0ODBm NjNhYjRkODVjYWQyMDcwOTljMzE4ZjhlNjlhMDdkIDEwMDY0NAotLS0gYS9nY2MvY29uZmln L2FybS9hcm0tbW9kZXMuZGVmCisrKyBiL2djYy9jb25maWcvYXJtL2FybS1tb2Rlcy5kZWYK QEAgLTkxLDYgKzkxLDcgQEAgQk9PTF9NT0RFIChCNEksIDQsIDEpOwogVkVDVE9SX0JPT0xf TU9ERSAoVjE2QkksIDE2LCBCSSwgMik7CiBWRUNUT1JfQk9PTF9NT0RFIChWOEJJLCA4LCBC MkksIDIpOwogVkVDVE9SX0JPT0xfTU9ERSAoVjRCSSwgNCwgQjRJLCAyKTsKK1ZFQ1RPUl9N T0RFIChJTlQsIFFJLCAyKTsKIAogLyogRnJhY3Rpb24gYW5kIGFjY3VtdWxhdG9yIHZlY3Rv ciBtb2Rlcy4gICovCiBWRUNUT1JfTU9ERVMgKEZSQUNULCA0KTsgICAgICAvKiBWNFFRICBW MkhRICovCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9hcm0tc2ltZC1idWlsdGluLXR5 cGVzLmRlZiBiL2djYy9jb25maWcvYXJtL2FybS1zaW1kLWJ1aWx0aW4tdHlwZXMuZGVmCmlu ZGV4IDkxNTg0Yzk5YWJiOGQwNDUyMjAxZjBhMzJjNDUzYTBkNDMwNGM5ZjQuLmRhYTRiZDk1 ZTMwNzk3M2U4OGE4NTkwZTUyMzFmYzQxMGM4NDBkNGYgMTAwNjQ0Ci0tLSBhL2djYy9jb25m aWcvYXJtL2FybS1zaW1kLWJ1aWx0aW4tdHlwZXMuZGVmCisrKyBiL2djYy9jb25maWcvYXJt L2FybS1zaW1kLWJ1aWx0aW4tdHlwZXMuZGVmCkBAIC01MSw3ICs1MSwzIEBACiAgIEVOVFJZ IChCZmxvYXQxNngyX3QsIFYyQkYsIG5vbmUsIDMyLCBiZmxvYXQxNiwgMjApCiAgIEVOVFJZ IChCZmxvYXQxNng0X3QsIFY0QkYsIG5vbmUsIDY0LCBiZmxvYXQxNiwgMjApCiAgIEVOVFJZ IChCZmxvYXQxNng4X3QsIFY4QkYsIG5vbmUsIDEyOCwgYmZsb2F0MTYsIDIwKQotCi0gIEVO VFJZIChQcmVkMXgxNl90LCBWMTZCSSwgcHJlZGljYXRlLCAxNiwgcHJlZDEsIDE2KQotICBF TlRSWSAoUHJlZDJ4OF90LCBWOEJJLCBwcmVkaWNhdGUsIDgsIHByZWQxLCAxNSkKLSAgRU5U UlkgKFByZWQ0eDRfdCwgVjRCSSwgcHJlZGljYXRlLCA0LCBwcmVkMSwgMTUpCmRpZmYgLS1n aXQgYS9nY2MvY29uZmlnL2FybS9hcm0uaCBiL2djYy9jb25maWcvYXJtL2FybS5oCmluZGV4 IDQzNTJjODMwY2I2ZDJlNjMyYTIyNWVkZWE4NjFiNWNlYjM1ZGQwMzUuLjZiNjIxNGViYjM4 Zjc0NjYyMzRiMmIyNjMyNzlkOTU2YzdiODBhZDIgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcv YXJtL2FybS5oCisrKyBiL2djYy9jb25maWcvYXJtL2FybS5oCkBAIC0xMDkzLDcgKzEwOTMs OCBAQCBleHRlcm4gY29uc3QgaW50IGFybV9hcmNoX2NkZV9jb3Byb2NfYml0c1tdOwogCiAj ZGVmaW5lIFZBTElEX01WRV9QUkVEX01PREUoTU9ERSkgXAogICAoKE1PREUpID09IEhJbW9k ZQkJCQkJCQlcCi0gICB8fCAoTU9ERSkgPT0gVjE2Qkltb2RlIHx8IChNT0RFKSA9PSBWOEJJ bW9kZSB8fCAoTU9ERSkgPT0gVjRCSW1vZGUpCisgICB8fCAoTU9ERSkgPT0gVjE2Qkltb2Rl IHx8IChNT0RFKSA9PSBWOEJJbW9kZSB8fCAoTU9ERSkgPT0gVjRCSW1vZGUJXAorICAgfHwg KE1PREUpID09IFYyUUltb2RlKQogCiAjZGVmaW5lIFZBTElEX01WRV9TSV9NT0RFKE1PREUp IFwKICAgKChNT0RFKSA9PSBWMkRJbW9kZSB8fChNT0RFKSA9PSBWNFNJbW9kZSB8fCAoTU9E RSkgPT0gVjhISW1vZGUgXApkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vYXJtLmNjIGIv Z2NjL2NvbmZpZy9hcm0vYXJtLmNjCmluZGV4IDE4NDYwZWY1MjgwYmU4YzFkZjg1ZWZmNDI0 YTFiZjY2ZDYwMTljMGEuLmI5Y2YxZTcwZDEzNWU3NTU2Mzc3MGM1MzYyMGJhZGNjZWQ0ZTRm NWUgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYXJtL2FybS5jYworKysgYi9nY2MvY29uZmln L2FybS9hcm0uY2MKQEAgLTg2NDMsNiArODY0MywxMSBAQCB0aHVtYjJfbGVnaXRpbWF0ZV9h ZGRyZXNzX3AgKG1hY2hpbmVfbW9kZSBtb2RlLCBydHggeCwgaW50IHN0cmljdF9wKQogICBi b29sIHVzZV9sZHJkOwogICBlbnVtIHJ0eF9jb2RlIGNvZGUgPSBHRVRfQ09ERSAoeCk7CiAK KyAgLyogSWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIE1WRSBwcmVkaWNhdGUgbW9kZSwgdGhl biB0cmVhdCBpdCBhcyBhIEhJbW9kZSBhcworICAgICBjYW4gc3RvcmUgYW5kIGxvYWQgaXQg bGlrZSBhbnkgb3RoZXIgMTYtYml0IHZhbHVlLiAgKi8KKyAgaWYgKFRBUkdFVF9IQVZFX01W RSAmJiBWQUxJRF9NVkVfUFJFRF9NT0RFIChtb2RlKSkKKyAgICBtb2RlID0gSEltb2RlOwor CiAgIGlmIChUQVJHRVRfSEFWRV9NVkUgJiYgVkFMSURfTVZFX01PREUgKG1vZGUpKQogICAg IHJldHVybiBtdmVfdmVjdG9yX21lbV9vcGVyYW5kIChtb2RlLCB4LCBzdHJpY3RfcCk7CiAK QEAgLTEyOTIxLDcgKzEyOTI2LDcgQEAgc2ltZF92YWxpZF9pbW1lZGlhdGUgKHJ0eCBvcCwg bWFjaGluZV9tb2RlIG1vZGUsIGludCBpbnZlcnNlLAogICAvKiBPbmx5IHN1cHBvcnQgMTI4 LWJpdCB2ZWN0b3JzIGZvciBNVkUuICAqLwogICBpZiAoVEFSR0VUX0hBVkVfTVZFCiAgICAg ICAmJiAoIXZlY3RvcgotCSAgfHwgKEdFVF9NT0RFX0NMQVNTIChtb2RlKSA9PSBNT0RFX1ZF Q1RPUl9CT09MKQorCSAgfHwgVkFMSURfTVZFX1BSRURfTU9ERSAobW9kZSkKIAkgIHx8IG5f ZWx0cyAqIGlubmVyc2l6ZSAhPSAxNikpCiAgICAgcmV0dXJuIC0xOwogCkBAIC0xMzI5NCw5 ICsxMzI5OSwxMSBAQCBuZW9uX3ZkdXBfY29uc3RhbnQgKHJ0eCB2YWxzLCBib29sIGdlbmVy YXRlKQogcnR4CiBtdmVfYm9vbF92ZWNfdG9fY29uc3QgKHJ0eCBjb25zdF92ZWMpCiB7Ci0g IGludCBuX2VsdHMgPSBHRVRfTU9ERV9OVU5JVFMgKCBHRVRfTU9ERSAoY29uc3RfdmVjKSk7 Ci0gIGludCByZXBlYXQgPSAxNiAvIG5fZWx0czsKLSAgaW50IGk7CisgIG1hY2hpbmVfbW9k ZSBtb2RlID0gR0VUX01PREUgKGNvbnN0X3ZlYyk7CisgIHVuc2lnbmVkIG5fZWx0cyA9IEdF VF9NT0RFX05VTklUUyAobW9kZSk7CisgIHVuc2lnbmVkIGVsX3ByZWMgPSBHRVRfTU9ERV9Q UkVDSVNJT04gKEdFVF9NT0RFX0lOTkVSIChtb2RlKSk7CisgIHVuc2lnbmVkIHNoaWZ0X2Mg PSAxNiAvIG5fZWx0czsKKyAgdW5zaWduZWQgaTsKICAgaW50IGhpX3ZhbCA9IDA7CiAKICAg Zm9yIChpID0gMDsgaSA8IG5fZWx0czsgaSsrKQpAQCAtMTMzMDUsMTIgKzEzMzEyLDE2IEBA IG12ZV9ib29sX3ZlY190b19jb25zdCAocnR4IGNvbnN0X3ZlYykKICAgICAgIHVuc2lnbmVk IEhPU1RfV0lERV9JTlQgZWxwYXJ0OwogCiAgICAgICBnY2NfYXNzZXJ0IChDT05TVF9JTlRf UCAoZWwpKTsKLSAgICAgIGVscGFydCA9IElOVFZBTCAoZWwpOworICAgICAgZWxwYXJ0ID0g SU5UVkFMIChlbCkgJiAoKDFVIDw8IGVsX3ByZWMpIC0gMSk7CisKKyAgICAgIHVuc2lnbmVk IGluZGV4ID0gQllURVNfQklHX0VORElBTiA/IG5fZWx0cyAtIGkgLSAxIDogaTsKIAotICAg ICAgZm9yIChpbnQgaiA9IDA7IGogPCByZXBlYXQ7IGorKykKLQloaV92YWwgfD0gZWxwYXJ0 IDw8IChpICogcmVwZWF0ICsgaik7CisgICAgICBoaV92YWwgfD0gZWxwYXJ0IDw8IChpbmRl eCAqIHNoaWZ0X2MpOwogICAgIH0KLSAgcmV0dXJuIGdlbl9pbnRfbW9kZSAoaGlfdmFsLCBI SW1vZGUpOworICAvKiBXZSBhcmUgdXNpbmcgbW92IGltbWVkaWF0ZSB0byBlbmNvZGUgdGhp cyBjb25zdGFudCB3aGljaCB3cml0ZXMgMzItYml0cworICAgICBzbyB3ZSBuZWVkIHRvIG1h a2Ugc3VyZSB0aGUgdG9wIDE2LWJpdHMgYXJlIGFsbCAwLCBvdGhlcndpc2Ugd2UgY2FuJ3QK KyAgICAgZ3VhcmFudGVlIHdlIGNhbiBhY3R1YWxseSB3cml0ZSB0aGlzIGltbWVkaWF0ZS4g ICovCisgIHJldHVybiBnZW5faW50X21vZGUgKGhpX3ZhbCwgU0ltb2RlKTsKIH0KIAogLyog UmV0dXJuIGEgbm9uLU5VTEwgUlRYIGlmZiBWQUxTLCB3aGljaCBpcyBhIFBBUkFMTEVMIGNv bnRhaW5pbmcgb25seQpAQCAtMTMzNTMsNyArMTMzNjQsNyBAQCBuZW9uX21ha2VfY29uc3Rh bnQgKHJ0eCB2YWxzLCBib29sIGdlbmVyYXRlKQogICAgICAgJiYgc2ltZF9pbW1lZGlhdGVf dmFsaWRfZm9yX21vdmUgKGNvbnN0X3ZlYywgbW9kZSwgTlVMTCwgTlVMTCkpCiAgICAgLyog TG9hZCB1c2luZyBWTU9WLiAgT24gQ29ydGV4LUE4IHRoaXMgdGFrZXMgb25lIGN5Y2xlLiAg Ki8KICAgICByZXR1cm4gY29uc3RfdmVjOwotICBlbHNlIGlmIChUQVJHRVRfSEFWRV9NVkUg JiYgKEdFVF9NT0RFX0NMQVNTIChtb2RlKSA9PSBNT0RFX1ZFQ1RPUl9CT09MKSkKKyAgZWxz ZSBpZiAoVEFSR0VUX0hBVkVfTVZFICYmIFZBTElEX01WRV9QUkVEX01PREUobW9kZSkpCiAg ICAgcmV0dXJuIG12ZV9ib29sX3ZlY190b19jb25zdCAoY29uc3RfdmVjKTsKICAgZWxzZSBp ZiAoKHRhcmdldCA9IG5lb25fdmR1cF9jb25zdGFudCAodmFscywgZ2VuZXJhdGUpKSAhPSBO VUxMX1JUWCkKICAgICAvKiBMb2FkZWQgdXNpbmcgVkRVUC4gIE9uIENvcnRleC1BOCB0aGUg VkRVUCB0YWtlcyBvbmUgTkVPTgpAQCAtMjk0NTgsMTQgKzI5NDY5LDEyIEBAIGFybV92ZWN0 b3JfbW9kZV9zdXBwb3J0ZWRfcCAobWFjaGluZV9tb2RlIG1vZGUpCiAgICAgcmV0dXJuIHRy dWU7CiAKICAgaWYgKFRBUkdFVF9IQVZFX01WRQotICAgICAgJiYgKG1vZGUgPT0gVjJESW1v ZGUgfHwgbW9kZSA9PSBWNFNJbW9kZSB8fCBtb2RlID09IFY4SEltb2RlCi0JICB8fCBtb2Rl ID09IFYxNlFJbW9kZQotCSAgfHwgbW9kZSA9PSBWMTZCSW1vZGUgfHwgbW9kZSA9PSBWOEJJ bW9kZSB8fCBtb2RlID09IFY0Qkltb2RlKSkKLSAgICAgIHJldHVybiB0cnVlOworICAgICAg JiYgKFZBTElEX01WRV9TSV9NT0RFIChtb2RlKSB8fCBWQUxJRF9NVkVfUFJFRF9NT0RFICht b2RlKSkpCisgICAgcmV0dXJuIHRydWU7CiAKICAgaWYgKFRBUkdFVF9IQVZFX01WRV9GTE9B VAogICAgICAgJiYgKG1vZGUgPT0gVjJERm1vZGUgfHwgbW9kZSA9PSBWNFNGbW9kZSB8fCBt b2RlID09IFY4SEZtb2RlKSkKLSAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB0cnVl OwogCiAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTMxMjY5LDYgKzMxMjc4LDcgQEAgYXJtX21v ZGVfdG9fcHJlZF9tb2RlIChtYWNoaW5lX21vZGUgbW9kZSkKICAgICBjYXNlIDE2OiByZXR1 cm4gVjE2Qkltb2RlOwogICAgIGNhc2UgODogcmV0dXJuIFY4Qkltb2RlOwogICAgIGNhc2Ug NDogcmV0dXJuIFY0Qkltb2RlOworICAgIGNhc2UgMjogcmV0dXJuIFYyUUltb2RlOwogICAg IH0KICAgcmV0dXJuIG9wdF9tYWNoaW5lX21vZGUgKCk7CiB9CmRpZmYgLS1naXQgYS9nY2Mv Y29uZmlnL2FybS9hcm1fbXZlLmggYi9nY2MvY29uZmlnL2FybS9hcm1fbXZlLmgKaW5kZXgg MDBmYjQyYWZlY2M3NGMyOWRjY2FhMWE2MDE3MDAwMzM1OTgxMDBjZS4uZDI4ODQzOTAyMjg1 NzYzZDBhNjQxNjgyNTM0OGVlNDlhNzFhMWVmZSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9h cm0vYXJtX212ZS5oCisrKyBiL2djYy9jb25maWcvYXJtL2FybV9tdmUuaApAQCAtMzUyOCwz NSArMzUyOCwzNSBAQCBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBtdmVfcHJlZDE2 X3QKIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKIF9fYXJtX3ZjdHAxNnEgKHVpbnQzMl90IF9fYSkKIHsKLSAg cmV0dXJuIF9fYnVpbHRpbl9tdmVfdmN0cDE2cWhpIChfX2EpOworICByZXR1cm4gX19idWls dGluX212ZV92Y3RwMTZxdjhiaSAoX19hKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4g X19pbmxpbmUgbXZlX3ByZWQxNl90CiBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5l X18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiBfX2FybV92Y3RwMzJxICh1 aW50MzJfdCBfX2EpCiB7Ci0gIHJldHVybiBfX2J1aWx0aW5fbXZlX3ZjdHAzMnFoaSAoX19h KTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9tdmVfdmN0cDMycXY0YmkgKF9fYSk7CiB9CiAKIF9f ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIG12ZV9wcmVkMTZfdAogX19hdHRyaWJ1dGVf XyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQogX19hcm1fdmN0cDY0cSAodWludDMyX3QgX19hKQogewotICByZXR1cm4gX19idWlsdGlu X212ZV92Y3RwNjRxaGkgKF9fYSk7CisgIHJldHVybiBfX2J1aWx0aW5fbXZlX3ZjdHA2NHF2 MnFpIChfX2EpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBtdmVfcHJl ZDE2X3QKIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKIF9fYXJtX3ZjdHA4cSAodWludDMyX3QgX19hKQogewot ICByZXR1cm4gX19idWlsdGluX212ZV92Y3RwOHFoaSAoX19hKTsKKyAgcmV0dXJuIF9fYnVp bHRpbl9tdmVfdmN0cDhxdjE2YmkgKF9fYSk7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJu IF9faW5saW5lIG12ZV9wcmVkMTZfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGlu ZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogX19hcm1fdnBub3QgKG12 ZV9wcmVkMTZfdCBfX2EpCiB7Ci0gIHJldHVybiBfX2J1aWx0aW5fbXZlX3Zwbm90aGkgKF9f YSk7CisgIHJldHVybiBfX2J1aWx0aW5fbXZlX3Zwbm90djE2YmkgKF9fYSk7CiB9CiAKIF9f ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVpbnQ4eDE2X3QKQEAgLTY2OTYsMjggKzY2 OTYsMjggQEAgX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbXZlX3ByZWQxNl90CiBf X2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCiBfX2FybV92Y3RwOHFfbSAodWludDMyX3QgX19hLCBtdmVfcHJlZDE2 X3QgX19wKQogewotICByZXR1cm4gX19idWlsdGluX212ZV92Y3RwOHFfbWhpIChfX2EsIF9f cCk7CisgIHJldHVybiBfX2J1aWx0aW5fbXZlX3ZjdHA4cV9tdjE2YmkgKF9fYSwgX19wKTsK IH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbXZlX3ByZWQxNl90CiBfX2F0 dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCiBfX2FybV92Y3RwNjRxX20gKHVpbnQzMl90IF9fYSwgbXZlX3ByZWQxNl90 IF9fcCkKIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9tdmVfdmN0cDY0cV9taGkgKF9fYSwgX19w KTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9tdmVfdmN0cDY0cV9tdjJxaSAoX19hLCBfX3ApOwog fQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBtdmVfcHJlZDE2X3QKIF9fYXR0 cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkKIF9fYXJtX3ZjdHAzMnFfbSAodWludDMyX3QgX19hLCBtdmVfcHJlZDE2X3Qg X19wKQogewotICByZXR1cm4gX19idWlsdGluX212ZV92Y3RwMzJxX21oaSAoX19hLCBfX3Ap OworICByZXR1cm4gX19idWlsdGluX212ZV92Y3RwMzJxX212NGJpIChfX2EsIF9fcCk7CiB9 CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIG12ZV9wcmVkMTZfdAogX19hdHRy aWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQogX19hcm1fdmN0cDE2cV9tICh1aW50MzJfdCBfX2EsIG12ZV9wcmVkMTZfdCBf X3ApCiB7Ci0gIHJldHVybiBfX2J1aWx0aW5fbXZlX3ZjdHAxNnFfbWhpIChfX2EsIF9fcCk7 CisgIHJldHVybiBfX2J1aWx0aW5fbXZlX3ZjdHAxNnFfbXY4YmkgKF9fYSwgX19wKTsKIH0K IAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDY0X3QKZGlmZiAtLWdpdCBh L2djYy9jb25maWcvYXJtL2FybV9tdmVfYnVpbHRpbnMuZGVmIGIvZ2NjL2NvbmZpZy9hcm0v YXJtX212ZV9idWlsdGlucy5kZWYKaW5kZXggZTNhNjFmODFiZTc4MTQ4MDZiZTRmNjllOWIy N2I4OTY2MzU1NDI5Ny4uNWU1NTEwZjZlMzdmMTk3ZmZjNGMwOGExMTY2YmQwZDgwMjYyZjY1 YSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hcm0vYXJtX212ZV9idWlsdGlucy5kZWYKKysr IGIvZ2NjL2NvbmZpZy9hcm0vYXJtX212ZV9idWlsdGlucy5kZWYKQEAgLTcxLDExICs3MSwx MSBAQCBWQVIyIChVTk9QX1VOT05FX05PTkUsIHZjdnRhcV91LCB2OGhpLCB2NHNpKQogVkFS MiAoVU5PUF9VTk9ORV9JTU0sIHZtdm5xX25fdSwgdjhoaSwgdjRzaSkKIFZBUjEgKFVOT1Bf VU5PTkVfVU5PTkUsIHZyZXYxNnFfdSwgdjE2cWkpCiBWQVIxIChVTk9QX1VOT05FX1VOT05F LCB2YWRkbHZxX3UsIHY0c2kpCi1WQVIxIChVTk9QX1VOT05FX1VOT05FLCB2Y3RwMTZxLCBo aSkKLVZBUjEgKFVOT1BfVU5PTkVfVU5PTkUsIHZjdHAzMnEsIGhpKQotVkFSMSAoVU5PUF9V Tk9ORV9VTk9ORSwgdmN0cDY0cSwgaGkpCi1WQVIxIChVTk9QX1VOT05FX1VOT05FLCB2Y3Rw OHEsIGhpKQotVkFSMSAoVU5PUF9VTk9ORV9VTk9ORSwgdnBub3QsIGhpKQorVkFSMSAoVU5P UF9QUkVEX1VOT05FLCB2Y3RwMTZxLCB2OGJpKQorVkFSMSAoVU5PUF9QUkVEX1VOT05FLCB2 Y3RwMzJxLCB2NGJpKQorVkFSMSAoVU5PUF9QUkVEX1VOT05FLCB2Y3RwNjRxLCB2MnFpKQor VkFSMSAoVU5PUF9QUkVEX1VOT05FLCB2Y3RwOHEsIHYxNmJpKQorVkFSMSAoVU5PUF9QUkVE X1BSRUQsIHZwbm90LCB2MTZiaSkKIFZBUjIgKEJJTk9QX05PTkVfTk9ORV9OT05FLCB2c3Vi cV9uX2YsIHY4aGYsIHY0c2YpCiBWQVIyIChCSU5PUF9OT05FX05PTkVfTk9ORSwgdmJyc3Jx X25fZiwgdjhoZiwgdjRzZikKIFZBUjIgKEJJTk9QX05PTkVfTk9ORV9JTU0sIHZjdnRxX25f dG9fZl9zLCB2OGhmLCB2NHNmKQpAQCAtMjY1LDEwICsyNjUsMTAgQEAgVkFSMiAoQklOT1Bf Tk9ORV9OT05FX0lNTSwgdnNobGxicV9uX3MsIHYxNnFpLCB2OGhpKQogVkFSMiAoQklOT1Bf Tk9ORV9OT05FX0lNTSwgdm9ycnFfbl9zLCB2OGhpLCB2NHNpKQogVkFSMiAoQklOT1BfTk9O RV9OT05FX0lNTSwgdmJpY3Ffbl9zLCB2OGhpLCB2NHNpKQogVkFSMSAoQklOT1BfVU5PTkVf VU5PTkVfVU5PTkUsIHZybWxhbGRhdmhxX3UsIHY0c2kpCi1WQVIxIChCSU5PUF9VTk9ORV9V Tk9ORV9VTk9ORSwgdmN0cDhxX20sIGhpKQotVkFSMSAoQklOT1BfVU5PTkVfVU5PTkVfVU5P TkUsIHZjdHA2NHFfbSwgaGkpCi1WQVIxIChCSU5PUF9VTk9ORV9VTk9ORV9VTk9ORSwgdmN0 cDMycV9tLCBoaSkKLVZBUjEgKEJJTk9QX1VOT05FX1VOT05FX1VOT05FLCB2Y3RwMTZxX20s IGhpKQorVkFSMSAoQklOT1BfUFJFRF9VTk9ORV9QUkVELCB2Y3RwOHFfbSwgdjE2YmkpCitW QVIxIChCSU5PUF9QUkVEX1VOT05FX1BSRUQsIHZjdHA2NHFfbSwgdjJxaSkKK1ZBUjEgKEJJ Tk9QX1BSRURfVU5PTkVfUFJFRCwgdmN0cDMycV9tLCB2NGJpKQorVkFSMSAoQklOT1BfUFJF RF9VTk9ORV9QUkVELCB2Y3RwMTZxX20sIHY4YmkpCiBWQVIxIChCSU5PUF9VTk9ORV9VTk9O RV9VTk9ORSwgdmFkZGx2YXFfdSwgdjRzaSkKIFZBUjEgKEJJTk9QX05PTkVfTk9ORV9OT05F LCB2cm1sc2xkYXZoeHFfcywgdjRzaSkKIFZBUjEgKEJJTk9QX05PTkVfTk9ORV9OT05FLCB2 cm1sc2xkYXZocV9zLCB2NHNpKQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vY29uc3Ry YWludHMubWQgYi9nY2MvY29uZmlnL2FybS9jb25zdHJhaW50cy5tZAppbmRleCAwMTU1YWI5 ZjdlNzc1MGY0MzU5YjkzNzI2M2UyOTdkYTljMTk2ZmM1Li41MDRjZDkzOGIyNmUyNjI5MTgz YTg4MzM4M2E4MWJiNGU3NzViYjkyIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FybS9jb25z dHJhaW50cy5tZAorKysgYi9nY2MvY29uZmlnL2FybS9jb25zdHJhaW50cy5tZApAQCAtMzE2 LDcgKzMxNiw3IEBAIChkZWZpbmVfY29uc3RyYWludCAiREIiCiAgIkBpbnRlcm5hbAogICBJ biBBUk0vVGh1bWItMiBzdGF0ZSB3aXRoIE1WRSBhIGNvbnN0YW50IHZlY3RvciBvZiBib29s ZWFucy4iCiAgKGFuZCAobWF0Y2hfY29kZSAiY29uc3RfdmVjdG9yIikKLSAgICAgIChtYXRj aF90ZXN0ICJUQVJHRVRfSEFWRV9NVkUgJiYgR0VUX01PREVfQ0xBU1MgKG1vZGUpID09IE1P REVfVkVDVE9SX0JPT0wiKSkpCisgICAgICAobWF0Y2hfdGVzdCAiVEFSR0VUX0hBVkVfTVZF ICYmIFZBTElEX01WRV9QUkVEX01PREUgKG1vZGUpIikpKQogCiAoZGVmaW5lX2NvbnN0cmFp bnQgIkRhIgogICJAaW50ZXJuYWwKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2l0ZXJh dG9ycy5tZCBiL2djYy9jb25maWcvYXJtL2l0ZXJhdG9ycy5tZAppbmRleCAwNDQ2OTA2NGYx MmNhMjkwMGIxNjU3Y2U2ZTFjY2NhOGM0MWU0NDc5Li4zOTg5NWFkNjJhYTNhZmQ1NWQzY2Jj OTJjNTViNDViYzU2NzEwYmNiIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FybS9pdGVyYXRv cnMubWQKKysrIGIvZ2NjL2NvbmZpZy9hcm0vaXRlcmF0b3JzLm1kCkBAIC0yNzIsOCArMjcy LDggQEAgKGRlZmluZV9tb2RlX2l0ZXJhdG9yIE1WRV8zIFtWMTZRSSBWOEhJXSkKIChkZWZp bmVfbW9kZV9pdGVyYXRvciBNVkVfMiBbVjE2UUkgVjhISSBWNFNJXSkKIChkZWZpbmVfbW9k ZV9pdGVyYXRvciBNVkVfNSBbVjhISSBWNFNJXSkKIChkZWZpbmVfbW9kZV9pdGVyYXRvciBN VkVfNiBbVjhISSBWNFNJXSkKLShkZWZpbmVfbW9kZV9pdGVyYXRvciBNVkVfNyBbVjE2Qkkg VjhCSSBWNEJJXSkKLShkZWZpbmVfbW9kZV9pdGVyYXRvciBNVkVfN19ISSBbSEkgVjE2Qkkg VjhCSSBWNEJJXSkKKyhkZWZpbmVfbW9kZV9pdGVyYXRvciBNVkVfNyBbVjE2QkkgVjhCSSBW NEJJIFYyUUldKQorKGRlZmluZV9tb2RlX2l0ZXJhdG9yIE1WRV83X0hJIFtISSBWMTZCSSBW OEJJIFY0QkkgVjJRSV0pCiAKIDs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOzsgQ29kZSBp dGVyYXRvcnMKQEAgLTk0OSw5ICs5NDksMTIgQEAgKGRlZmluZV9tb2RlX2F0dHIgVl9leHRy X2VsZW0gWyhWMTZRSSAidTgiKSAoVjhISSAidTE2IikgKFY0U0kgIjMyIikKIChkZWZpbmVf bW9kZV9hdHRyIGVhcmx5Y2xvYmJlcl8zMiBbKFYxNlFJICI9dyIpIChWOEhJICI9dyIpIChW NFNJICI9JnciKQogCQkJCQkJKFY4SEYgIj13IikgKFY0U0YgIj0mdyIpXSkKIChkZWZpbmVf bW9kZV9hdHRyIE1WRV9WUFJFRCBbKFYxNlFJICJWMTZCSSIpIChWOEhJICJWOEJJIikgKFY0 U0kgIlY0QkkiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVjJESSAiSEkiKSAo VjhIRiAiVjhCSSIpICAgKFY0U0YgIlY0QkkiKV0pCisJCQkgICAgIChWOEhGICJWOEJJIikg ICAoVjRTRiAiVjRCSSIpIChWMkRJICJWMlFJIildKQogKGRlZmluZV9tb2RlX2F0dHIgTVZF X3ZwcmVkIFsoVjE2UUkgInYxNmJpIikgKFY4SEkgInY4YmkiKSAoVjRTSSAidjRiaSIpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWMkRJICJoaSIpIChWOEhGICJ2OGJpIikg ICAoVjRTRiAidjRiaSIpXSkKKwkJCSAgICAgKFY4SEYgInY4YmkiKSAgIChWNFNGICJ2NGJp IikKKwkJCSAgICAgKFYxNkJJICJ2MTZiaSIpIChWOEJJICJ2OGJpIikgKFY0QkkgInY0Ymki KQorCQkJICAgICAoVjJRSSAidjJxaSIpXSkKKyhkZWZpbmVfbW9kZV9hdHRyIE1WRV92Y3Rw IFsoVjE2QkkgIjgiKSAoVjhCSSAiMTYiKSAoVjRCSSAiMzIiKSAoVjJRSSAiNjQiKV0pCiAK IDs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOzsgQ29kZSBhdHRyaWJ1dGVzCkBAIC0xNDYx LDExICsxNDY0LDYgQEAgKGRlZmluZV9pbnRfYXR0ciBzdXBmIFsoVkNWVFFfVE9fRl9TICJz IikgKFZDVlRRX1RPX0ZfVSAidSIpIChWUkVWMTZRX1MgInMiKQogCQkgICAgICAgKFZBRENJ UV9NX1MgInMiKSAoU1FSU0hSTF82NCAiNjQiKSAoU1FSU0hSTF80OCAiNDgiKQogCQkgICAg ICAgKFVRUlNITExfNjQgIjY0IikgKFVRUlNITExfNDggIjQ4IikgKFZTSExDUV9NX1MgInMi KQogCQkgICAgICAgKFZTSExDUV9NX1UgInUiKV0pCi0KLShkZWZpbmVfaW50X2F0dHIgbW9k ZTEgWyhWQ1RQOFEgIjgiKSAoVkNUUDE2USAiMTYiKSAoVkNUUDMyUSAiMzIiKQotCQkJKFZD VFA2NFEgIjY0IikgKFZDVFA4UV9NICI4IikgKFZDVFAxNlFfTSAiMTYiKQotCQkJKFZDVFAz MlFfTSAiMzIiKSAoVkNUUDY0UV9NICI2NCIpXSkKLQogOzsgQm90aCBraW5kcyBvZiByZXR1 cm4gaW5zbi4KIChkZWZpbmVfY29kZV9pdGVyYXRvciBSRVRVUk5TIFtyZXR1cm4gc2ltcGxl X3JldHVybl0pCiAoZGVmaW5lX2NvZGVfYXR0ciByZXR1cm5fc3RyIFsocmV0dXJuICIiKSAo c2ltcGxlX3JldHVybiAic2ltcGxlXyIpXSkKQEAgLTE1NTcsOCArMTU1NSw2IEBAIChkZWZp bmVfaW50X2l0ZXJhdG9yIFZDVlRQUSBbVkNWVFBRX1MgVkNWVFBRX1VdKQogKGRlZmluZV9p bnRfaXRlcmF0b3IgVkNWVE5RIFtWQ1ZUTlFfUyBWQ1ZUTlFfVV0pCiAoZGVmaW5lX2ludF9p dGVyYXRvciBWQ1ZUTVEgW1ZDVlRNUV9TIFZDVlRNUV9VXSkKIChkZWZpbmVfaW50X2l0ZXJh dG9yIFZBRERMVlEgW1ZBRERMVlFfVSBWQURETFZRX1NdKQotKGRlZmluZV9pbnRfaXRlcmF0 b3IgVkNUUFEgW1ZDVFA4USBWQ1RQMTZRIFZDVFAzMlEgVkNUUDY0UV0pCi0oZGVmaW5lX2lu dF9pdGVyYXRvciBWQ1RQUV9NIFtWQ1RQOFFfTSBWQ1RQMTZRX00gVkNUUDMyUV9NIFZDVFA2 NFFfTV0pCiAoZGVmaW5lX2ludF9pdGVyYXRvciBWQ1ZUUV9OX1RPX0YgW1ZDVlRRX05fVE9f Rl9TIFZDVlRRX05fVE9fRl9VXSkKIChkZWZpbmVfaW50X2l0ZXJhdG9yIFZDUkVBVEVRIFtW Q1JFQVRFUV9VIFZDUkVBVEVRX1NdKQogKGRlZmluZV9pbnRfaXRlcmF0b3IgVlNIUlFfTiBb VlNIUlFfTl9TIFZTSFJRX05fVV0pCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9tdmUu bWQgYi9nY2MvY29uZmlnL2FybS9tdmUubWQKaW5kZXggZjEyM2VkYzQ0OWI4YjIwYmZiNGEx NWMxZmIwZWNjZGJmZmYxMzM5Yy4uY2Q4N2UyYjU4ZDQ2Mjg5NWI5NTAyNTRkOWQ2YmMyZTJm ZjA2NWQ1NyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbXZlLm1kCisrKyBiL2djYy9j b25maWcvYXJtL212ZS5tZApAQCAtNjQzLDI0ICs2NDMsMjQgQEAgKGRlZmluZV9pbnNuICJt dmVfdmFkZGx2cV88c3VwZj52NHNpIgogOzsKIDs7IFt2Y3RwOHEgdmN0cDE2cSB2Y3RwMzJx IHZjdHA2NHFdKQogOzsKLShkZWZpbmVfaW5zbiAibXZlX3ZjdHA8bW9kZTE+cWhpIgorKGRl ZmluZV9pbnNuICJtdmVfdmN0cDxNVkVfdmN0cD5xPE1WRV92cHJlZD4iCiAgIFsKLSAgIChz ZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAidnByX3JlZ2lzdGVyX29wZXJhbmQiICI9VXAiKQot CSh1bnNwZWM6SEkgWyhtYXRjaF9vcGVyYW5kOlNJIDEgInNfcmVnaXN0ZXJfb3BlcmFuZCIg InIiKV0KLQlWQ1RQUSkpCisgICAoc2V0IChtYXRjaF9vcGVyYW5kOk1WRV83IDAgInZwcl9y ZWdpc3Rlcl9vcGVyYW5kIiAiPVVwIikKKwkodW5zcGVjOk1WRV83IFsobWF0Y2hfb3BlcmFu ZDpTSSAxICJzX3JlZ2lzdGVyX29wZXJhbmQiICJyIildCisJVkNUUCkpCiAgIF0KICAgIlRB UkdFVF9IQVZFX01WRSIKLSAgInZjdHAuPG1vZGUxPiAlMSIKKyAgInZjdHAuPE1WRV92Y3Rw PiAlMSIKICAgWyhzZXRfYXR0ciAidHlwZSIgIm12ZV9tb3ZlIikKIF0pCiAKIDs7CiA7OyBb dnBub3RdKQogOzsKLShkZWZpbmVfaW5zbiAibXZlX3Zwbm90aGkiCisoZGVmaW5lX2luc24g Im12ZV92cG5vdHYxNmJpIgogICBbCi0gICAoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInZw cl9yZWdpc3Rlcl9vcGVyYW5kIiAiPVVwIikKLQkodW5zcGVjOkhJIFsobWF0Y2hfb3BlcmFu ZDpISSAxICJ2cHJfcmVnaXN0ZXJfb3BlcmFuZCIgIjAiKV0KKyAgIChzZXQgKG1hdGNoX29w ZXJhbmQ6VjE2QkkgMCAidnByX3JlZ2lzdGVyX29wZXJhbmQiICI9VXAiKQorCSh1bnNwZWM6 VjE2QkkgWyhtYXRjaF9vcGVyYW5kOlYxNkJJIDEgInZwcl9yZWdpc3Rlcl9vcGVyYW5kIiAi MCIpXQogCSBWUE5PVCkpCiAgIF0KICAgIlRBUkdFVF9IQVZFX01WRSIKQEAgLTE5NTksMTUg KzE5NTksMTUgQEAgKGRlZmluZV9pbnNuICJtdmVfdmNtdWxxPG12ZV9yb3Q+PG1vZGU+Igog OzsKIDs7IFt2Y3RwOHFfbSB2Y3RwMTZxX20gdmN0cDMycV9tIHZjdHA2NHFfbV0pCiA7Owot KGRlZmluZV9pbnNuICJtdmVfdmN0cDxtb2RlMT5xX21oaSIKKyhkZWZpbmVfaW5zbiAibXZl X3ZjdHA8TVZFX3ZjdHA+cV9tPE1WRV92cHJlZD4iCiAgIFsKLSAgIChzZXQgKG1hdGNoX29w ZXJhbmQ6SEkgMCAidnByX3JlZ2lzdGVyX29wZXJhbmQiICI9VXAiKQotCSh1bnNwZWM6SEkg WyhtYXRjaF9vcGVyYW5kOlNJIDEgInNfcmVnaXN0ZXJfb3BlcmFuZCIgInIiKQotCQkgICAg KG1hdGNoX29wZXJhbmQ6SEkgMiAidnByX3JlZ2lzdGVyX29wZXJhbmQiICJVcCIpXQotCSBW Q1RQUV9NKSkKKyAgIChzZXQgKG1hdGNoX29wZXJhbmQ6TVZFXzcgMCAidnByX3JlZ2lzdGVy X29wZXJhbmQiICI9VXAiKQorCSh1bnNwZWM6TVZFXzcgWyhtYXRjaF9vcGVyYW5kOlNJIDEg InNfcmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorCQkgICAgKG1hdGNoX29wZXJhbmQ6TVZFXzcg MiAidnByX3JlZ2lzdGVyX29wZXJhbmQiICJVcCIpXQorCSBWQ1RQX00pKQogICBdCiAgICJU QVJHRVRfSEFWRV9NVkUiCi0gICJ2cHN0XDt2Y3RwdC48bW9kZTE+ICUxIgorICAidnBzdFw7 dmN0cHQuPE1WRV92Y3RwPiAlMSIKICAgWyhzZXRfYXR0ciAidHlwZSIgIm12ZV9tb3ZlIikK ICAgIChzZXRfYXR0ciAibGVuZ3RoIiI4IildKQogCkBAIC03NjY2LDcgKzc2NjYsNyBAQCAo ZGVmaW5lX2luc24gIm12ZV92bGRyZHFfZ2F0aGVyX2Jhc2Vfel88c3VwZj52MmRpIgogICBb KHNldCAobWF0Y2hfb3BlcmFuZDpWMkRJIDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIgIj0mdyIp CiAJKHVuc3BlYzpWMkRJIFsobWF0Y2hfb3BlcmFuZDpWMkRJIDEgInNfcmVnaXN0ZXJfb3Bl cmFuZCIgInciKQogCQkgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJpbW1lZGlhdGVfb3Bl cmFuZCIgImkiKQotCQkgICAgICAobWF0Y2hfb3BlcmFuZDpISSAzICJ2cHJfcmVnaXN0ZXJf b3BlcmFuZCIgIlVwIildCisJCSAgICAgIChtYXRjaF9vcGVyYW5kOlYyUUkgMyAidnByX3Jl Z2lzdGVyX29wZXJhbmQiICJVcCIpXQogCSBWTERSREdCUSkpCiAgIF0KICAgIlRBUkdFVF9I QVZFX01WRSIKQEAgLTc3MDcsNyArNzcwNyw3IEBAIChkZWZpbmVfaW5zbiAibXZlX3ZsZHJk cV9nYXRoZXJfb2Zmc2V0X3pfPHN1cGY+djJkaSIKICBbKHNldCAobWF0Y2hfb3BlcmFuZDpW MkRJIDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIgIj0mdyIpCiAgICAgICAgKHVuc3BlYzpWMkRJ IFsobWF0Y2hfb3BlcmFuZDpWMkRJIDEgIm1lbW9yeV9vcGVyYW5kIiAiVXMiKQogCQkgICAg IChtYXRjaF9vcGVyYW5kOlYyREkgMiAic19yZWdpc3Rlcl9vcGVyYW5kIiAidyIpCi0JCSAg ICAgKG1hdGNoX29wZXJhbmQ6SEkgMyAidnByX3JlZ2lzdGVyX29wZXJhbmQiICJVcCIpXQor CQkgICAgIChtYXRjaF9vcGVyYW5kOlYyUUkgMyAidnByX3JlZ2lzdGVyX29wZXJhbmQiICJV cCIpXQogCVZMRFJER09RKSkKICBdCiAgIlRBUkdFVF9IQVZFX01WRSIKQEAgLTc3NDgsNyAr Nzc0OCw3IEBAIChkZWZpbmVfaW5zbiAibXZlX3ZsZHJkcV9nYXRoZXJfc2hpZnRlZF9vZmZz ZXRfel88c3VwZj52MmRpIgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMkRJIDAgInNfcmVn aXN0ZXJfb3BlcmFuZCIgIj0mdyIpCiAJKHVuc3BlYzpWMkRJIFsobWF0Y2hfb3BlcmFuZDpW MkRJIDEgIm1lbW9yeV9vcGVyYW5kIiAiVXMiKQogCQkgICAgICAobWF0Y2hfb3BlcmFuZDpW MkRJIDIgInNfcmVnaXN0ZXJfb3BlcmFuZCIgInciKQotCQkgICAgICAobWF0Y2hfb3BlcmFu ZDpISSAzICJ2cHJfcmVnaXN0ZXJfb3BlcmFuZCIgIlVwIildCisJCSAgICAgIChtYXRjaF9v cGVyYW5kOlYyUUkgMyAidnByX3JlZ2lzdGVyX29wZXJhbmQiICJVcCIpXQogCSBWTERSREdT T1EpKQogICBdCiAgICJUQVJHRVRfSEFWRV9NVkUiCkBAIC04MzYxLDcgKzgzNjEsNyBAQCAo ZGVmaW5lX2luc24gIm12ZV92c3RyZHFfc2NhdHRlcl9iYXNlX3BfPHN1cGY+djJkaSIKIAkJ WyhtYXRjaF9vcGVyYW5kOlYyREkgMCAic19yZWdpc3Rlcl9vcGVyYW5kIiAidyIpCiAJCSAo bWF0Y2hfb3BlcmFuZDpTSSAxICJtdmVfdmxkcmRfaW1tZWRpYXRlIiAiUmkiKQogCQkgKG1h dGNoX29wZXJhbmQ6VjJESSAyICJzX3JlZ2lzdGVyX29wZXJhbmQiICJ3IikKLQkJIChtYXRj aF9vcGVyYW5kOkhJIDMgInZwcl9yZWdpc3Rlcl9vcGVyYW5kIiAiVXAiKV0KKwkJIChtYXRj aF9vcGVyYW5kOlYyUUkgMyAidnByX3JlZ2lzdGVyX29wZXJhbmQiICJVcCIpXQogCSBWU1RS RFNCUSkpCiAgIF0KICAgIlRBUkdFVF9IQVZFX01WRSIKQEAgLTg0MDQsNyArODQwNCw3IEBA IChkZWZpbmVfZXhwYW5kICJtdmVfdnN0cmRxX3NjYXR0ZXJfb2Zmc2V0X3BfPHN1cGY+djJk aSIKICAgWyhtYXRjaF9vcGVyYW5kOlYyREkgMCAibXZlX3NjYXR0ZXJfbWVtb3J5IikKICAg IChtYXRjaF9vcGVyYW5kOlYyREkgMSAic19yZWdpc3Rlcl9vcGVyYW5kIikKICAgIChtYXRj aF9vcGVyYW5kOlYyREkgMiAic19yZWdpc3Rlcl9vcGVyYW5kIikKLSAgIChtYXRjaF9vcGVy YW5kOkhJIDMgInZwcl9yZWdpc3Rlcl9vcGVyYW5kIikKKyAgIChtYXRjaF9vcGVyYW5kOlYy UUkgMyAidnByX3JlZ2lzdGVyX29wZXJhbmQiKQogICAgKHVuc3BlYzpWNFNJIFsoY29uc3Rf aW50IDApXSBWU1RSRFNPUSldCiAgICJUQVJHRVRfSEFWRV9NVkUiCiB7CkBAIC04NDIyLDcg Kzg0MjIsNyBAQCAoZGVmaW5lX2luc24gIm12ZV92c3RyZHFfc2NhdHRlcl9vZmZzZXRfcF88 c3VwZj52MmRpX2luc24iCiAJICBbKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgInIiKQogCSAgIChtYXRjaF9vcGVyYW5kOlYyREkgMSAic19yZWdpc3Rlcl9vcGVy YW5kIiAidyIpCiAJICAgKG1hdGNoX29wZXJhbmQ6VjJESSAyICJzX3JlZ2lzdGVyX29wZXJh bmQiICJ3IikKLQkgICAobWF0Y2hfb3BlcmFuZDpISSAzICJ2cHJfcmVnaXN0ZXJfb3BlcmFu ZCIgIlVwIildCisJICAgKG1hdGNoX29wZXJhbmQ6VjJRSSAzICJ2cHJfcmVnaXN0ZXJfb3Bl cmFuZCIgIlVwIildCiAJICBWU1RSRFNPUSkpXQogICAiVEFSR0VUX0hBVkVfTVZFIgogICAi dnBzdFw7dnN0cmR0LjY0XHQlcTIsIFslMCwgJXExXSIKQEAgLTg0NjMsNyArODQ2Myw3IEBA IChkZWZpbmVfZXhwYW5kICJtdmVfdnN0cmRxX3NjYXR0ZXJfc2hpZnRlZF9vZmZzZXRfcF88 c3VwZj52MmRpIgogICBbKG1hdGNoX29wZXJhbmQ6VjJESSAwICJtdmVfc2NhdHRlcl9tZW1v cnkiKQogICAgKG1hdGNoX29wZXJhbmQ6VjJESSAxICJzX3JlZ2lzdGVyX29wZXJhbmQiKQog ICAgKG1hdGNoX29wZXJhbmQ6VjJESSAyICJzX3JlZ2lzdGVyX29wZXJhbmQiKQotICAgKG1h dGNoX29wZXJhbmQ6SEkgMyAidnByX3JlZ2lzdGVyX29wZXJhbmQiKQorICAgKG1hdGNoX29w ZXJhbmQ6VjJRSSAzICJ2cHJfcmVnaXN0ZXJfb3BlcmFuZCIpCiAgICAodW5zcGVjOlY0U0kg Wyhjb25zdF9pbnQgMCldIFZTVFJEU1NPUSldCiAgICJUQVJHRVRfSEFWRV9NVkUiCiB7CkBA IC04NDgyLDcgKzg0ODIsNyBAQCAoZGVmaW5lX2luc24gIm12ZV92c3RyZHFfc2NhdHRlcl9z aGlmdGVkX29mZnNldF9wXzxzdXBmPnYyZGlfaW5zbiIKIAkgIFsobWF0Y2hfb3BlcmFuZDpT SSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCiAJICAgKG1hdGNoX29wZXJhbmQ6VjJESSAx ICJzX3JlZ2lzdGVyX29wZXJhbmQiICJ3IikKIAkgICAobWF0Y2hfb3BlcmFuZDpWMkRJIDIg InNfcmVnaXN0ZXJfb3BlcmFuZCIgInciKQotCSAgIChtYXRjaF9vcGVyYW5kOkhJIDMgInZw cl9yZWdpc3Rlcl9vcGVyYW5kIiAiVXAiKV0KKwkgICAobWF0Y2hfb3BlcmFuZDpWMlFJIDMg InZwcl9yZWdpc3Rlcl9vcGVyYW5kIiAiVXAiKV0KIAkgIFZTVFJEU1NPUSkpXQogICAiVEFS R0VUX0hBVkVfTVZFIgogICAidnBzdFw7dnN0cmR0LjY0XHQlcTIsIFslMCwgJXExLCBVWFRX ICMzXSIKQEAgLTk0NTQsNyArOTQ1NCw3IEBAIChkZWZpbmVfaW5zbiAibXZlX3ZzdHJkcV9z Y2F0dGVyX2Jhc2Vfd2JfcF88c3VwZj52MmRpIgogCQlbKG1hdGNoX29wZXJhbmQ6VjJESSAx ICJzX3JlZ2lzdGVyX29wZXJhbmQiICIwIikKIAkJIChtYXRjaF9vcGVyYW5kOlNJIDIgIm12 ZV92bGRyZF9pbW1lZGlhdGUiICJSaSIpCiAJCSAobWF0Y2hfb3BlcmFuZDpWMkRJIDMgInNf cmVnaXN0ZXJfb3BlcmFuZCIgInciKQotCQkgKG1hdGNoX29wZXJhbmQ6SEkgNCAidnByX3Jl Z2lzdGVyX29wZXJhbmQiKV0KKwkJIChtYXRjaF9vcGVyYW5kOlYyUUkgNCAidnByX3JlZ2lz dGVyX29wZXJhbmQiKV0KIAkgVlNUUkRTQldCUSkpCiAgICAoc2V0IChtYXRjaF9vcGVyYW5k OlYyREkgMCAic19yZWdpc3Rlcl9vcGVyYW5kIiAiPXciKQogCSh1bnNwZWM6VjJESSBbKG1h dGNoX2R1cCAxKSAobWF0Y2hfZHVwIDIpXQpAQCAtOTc0NSw3ICs5NzQ1LDcgQEAgKGRlZmlu ZV9leHBhbmQgIm12ZV92bGRyZHFfZ2F0aGVyX2Jhc2Vfd2Jfel88c3VwZj52MmRpIgogICBb KG1hdGNoX29wZXJhbmQ6VjJESSAwICJzX3JlZ2lzdGVyX29wZXJhbmQiKQogICAgKG1hdGNo X29wZXJhbmQ6VjJESSAxICJzX3JlZ2lzdGVyX29wZXJhbmQiKQogICAgKG1hdGNoX29wZXJh bmQ6U0kgMiAibXZlX3ZsZHJkX2ltbWVkaWF0ZSIpCi0gICAobWF0Y2hfb3BlcmFuZDpISSAz ICJ2cHJfcmVnaXN0ZXJfb3BlcmFuZCIpCisgICAobWF0Y2hfb3BlcmFuZDpWMlFJIDMgInZw cl9yZWdpc3Rlcl9vcGVyYW5kIikKICAgICh1bnNwZWM6VjJESSBbKGNvbnN0X2ludCAwKV0g VkxEUkRHQldCUSldCiAgICJUQVJHRVRfSEFWRV9NVkUiCiB7CkBAIC05NzYxLDcgKzk3NjEs NyBAQCAoZGVmaW5lX2V4cGFuZCAibXZlX3ZsZHJkcV9nYXRoZXJfYmFzZV9ub3diX3pfPHN1 cGY+djJkaSIKICAgWyhtYXRjaF9vcGVyYW5kOlYyREkgMCAic19yZWdpc3Rlcl9vcGVyYW5k IikKICAgIChtYXRjaF9vcGVyYW5kOlYyREkgMSAic19yZWdpc3Rlcl9vcGVyYW5kIikKICAg IChtYXRjaF9vcGVyYW5kOlNJIDIgIm12ZV92bGRyZF9pbW1lZGlhdGUiKQotICAgKG1hdGNo X29wZXJhbmQ6SEkgMyAidnByX3JlZ2lzdGVyX29wZXJhbmQiKQorICAgKG1hdGNoX29wZXJh bmQ6VjJRSSAzICJ2cHJfcmVnaXN0ZXJfb3BlcmFuZCIpCiAgICAodW5zcGVjOlYyREkgWyhj b25zdF9pbnQgMCldIFZMRFJER0JXQlEpXQogICAiVEFSR0VUX0hBVkVfTVZFIgogewpAQCAt OTc5NSw3ICs5Nzk1LDcgQEAgKGRlZmluZV9pbnNuICJtdmVfdmxkcmRxX2dhdGhlcl9iYXNl X3diX3pfPHN1cGY+djJkaV9pbnNuIgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMkRJIDAg InNfcmVnaXN0ZXJfb3BlcmFuZCIgIj0mdyIpCiAJKHVuc3BlYzpWMkRJIFsobWF0Y2hfb3Bl cmFuZDpWMkRJIDIgInNfcmVnaXN0ZXJfb3BlcmFuZCIgIjEiKQogCQkgICAgICAobWF0Y2hf b3BlcmFuZDpTSSAzICJtdmVfdmxkcmRfaW1tZWRpYXRlIiAiUmkiKQotCQkgICAgICAobWF0 Y2hfb3BlcmFuZDpISSA0ICJ2cHJfcmVnaXN0ZXJfb3BlcmFuZCIgIlVwIikKKwkJICAgICAg KG1hdGNoX29wZXJhbmQ6VjJRSSA0ICJ2cHJfcmVnaXN0ZXJfb3BlcmFuZCIgIlVwIikKIAkJ ICAgICAgKG1lbTpCTEsgKHNjcmF0Y2gpKV0KIAkgVkxEUkRHQldCUSkpCiAgICAoc2V0ICht YXRjaF9vcGVyYW5kOlYyREkgMSAic19yZWdpc3Rlcl9vcGVyYW5kIiAiPSZ3IikKZGlmZiAt LWdpdCBhL2djYy9jb25maWcvYXJtL3Vuc3BlY3MubWQgYi9nY2MvY29uZmlnL2FybS91bnNw ZWNzLm1kCmluZGV4IDJlZjZhMGY0YzMzNWE3NjdiZDQxZGE4NWFkMmE3ZjgwNmRjMzFmYTEu LmY5ZmY3OGZiZTAxZWIwNWE3MzYyMWQzNzAxZjlkZmUwYWUxYzY4NTQgMTAwNjQ0Ci0tLSBh L2djYy9jb25maWcvYXJtL3Vuc3BlY3MubWQKKysrIGIvZ2NjL2NvbmZpZy9hcm0vdW5zcGVj cy5tZApAQCAtNTc1LDEwICs1NzUsOCBAQCAoZGVmaW5lX2NfZW51bSAidW5zcGVjIiBbCiAg IFZDVlRNUV9TCiAgIFZDVlRNUV9VCiAgIFZBRERMVlFfVQotICBWQ1RQOFEKLSAgVkNUUDE2 UQotICBWQ1RQMzJRCi0gIFZDVFA2NFEKKyAgVkNUUAorICBWQ1RQX00KICAgVlBOT1QKICAg VkNSRUFURVFfRgogICBWQ1ZUUV9OX1RPX0ZfUwpAQCAtNzAyLDEwICs3MDAsNiBAQCAoZGVm aW5lX2NfZW51bSAidW5zcGVjIiBbCiAgIFZBRERMVkFRX1MKICAgVkJJQ1FfTl9VCiAgIFZC SUNRX05fUwotICBWQ1RQOFFfTQotICBWQ1RQMTZRX00KLSAgVkNUUDMyUV9NCi0gIFZDVFA2 NFFfTQogICBWQ1ZUQlFfRjE2X0YzMgogICBWQ1ZUVFFfRjE2X0YzMgogICBWTUxBTERBVlFf VQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vdmZwLm1kIGIvZ2NjL2NvbmZpZy9hcm0v dmZwLm1kCmluZGV4IDhhZGQxZTZiYmY1NmIyMTFjZWY1ZmM3ZjE4ZjI0MjYzMzJjYzQ1ZjUu LmYzNGYzNWUxMTg1ZTJiMDk3NGRmOTY1YWZmYjExMzc3MmVhOTI4MmQgMTAwNjQ0Ci0tLSBh L2djYy9jb25maWcvYXJtL3ZmcC5tZAorKysgYi9nY2MvY29uZmlnL2FybS92ZnAubWQKQEAg LTg4LDcgKzg4LDcgQEAgKGRlZmluZV9pbnNuICIqdGh1bWIyX21vdmhpX3ZmcCIKICAgICBj YXNlIDI6CiAgICAgICByZXR1cm4gIm1vdiU/XHQlMCwgJTFcdCVAIG1vdmhpIjsKICAgICBj YXNlIDE6Ci0gICAgICBpZiAoR0VUX01PREVfQ0xBU1MgKEdFVF9NT0RFIChvcGVyYW5kc1sx XSkpID09IE1PREVfVkVDVE9SX0JPT0wpCisgICAgICBpZiAoVkFMSURfTVZFX1BSRURfTU9E RSAoPE1PREU+bW9kZSkpCiAgICAgICAgIG9wZXJhbmRzWzFdID0gbXZlX2Jvb2xfdmVjX3Rv X2NvbnN0IChvcGVyYW5kc1sxXSk7CiAgICAgICBlbHNlCiAgICAgICAgIG9wZXJhbmRzWzFd ID0gZ2VuX2xvd3BhcnQgKEhJbW9kZSwgb3BlcmFuZHNbMV0pOwpAQCAtMTkyLDcgKzE5Miw3 IEBAIChkZWZpbmVfaW5zbiAiKnRodW1iMl9tb3ZoaV9mcDE2IgogICAgIGNhc2UgMjoKICAg ICAgIHJldHVybiAibW92JT9cdCUwLCAlMVx0JUAgbW92aGkiOwogICAgIGNhc2UgMToKLSAg ICAgIGlmIChHRVRfTU9ERV9DTEFTUyAoR0VUX01PREUgKG9wZXJhbmRzWzFdKSkgPT0gTU9E RV9WRUNUT1JfQk9PTCkKKyAgICAgIGlmIChWQUxJRF9NVkVfUFJFRF9NT0RFICg8TU9ERT5t b2RlKSkKICAgICAgICAgb3BlcmFuZHNbMV0gPSBtdmVfYm9vbF92ZWNfdG9fY29uc3QgKG9w ZXJhbmRzWzFdKTsKICAgICAgIGVsc2UKICAgICAgICAgb3BlcmFuZHNbMV0gPSBnZW5fbG93 cGFydCAoSEltb2RlLCBvcGVyYW5kc1sxXSk7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvYXJtL212ZS9wcjEwODQ0My1ydW4uYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9hcm0vbXZlL3ByMTA4NDQzLXJ1bi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiNGI0NWJk MzA1NjNjNTM2YTVjZGMwODE0Nzk3MGUwNzdhYmJmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL212ZS9wcjEwODQ0My1ydW4uYwpAQCAtMCww ICsxLDI5IEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiIg fSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXJtX212ZV9odyB9ICov CisvKiB7IGRnLWFkZC1vcHRpb25zIGFybV92OF8xbV9tdmUgfSAqLworI2luY2x1ZGUgInBy MTA4NDQzLmMiCisKK2V4dGVybiB2b2lkIGFib3J0ICh2b2lkKTsKKwordm9pZCBfX2F0dHJp YnV0ZV9fICgobm9pcGEpKSBwYXJ0aWFsX3dyaXRlX2NzdCAodWludDMyX3QgKiwgdWludDMy eDRfdCk7CisKK3ZvaWQKK19fYXR0cmlidXRlX18gKChub2lwYSkpIHBhcnRpYWxfd3JpdGUg KHVpbnQzMl90ICphLCB1aW50MzJ4NF90IHYsIHVuc2lnbmVkIHNob3J0IHApCit7CisgIHZz dHJ3cV9wX3UzMiAoYSwgdiwgcCk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICB1bnNp Z25lZCBzaG9ydCBwID0gMHgwMENDOworICB1aW50MzJfdCBhW10gPSB7MCwgMCwgMCwgMH07 CisgIHVpbnQzMl90IGJbXSA9IHswLCAwLCAwLCAwfTsKKyAgdWludDMyeDRfdCB2ID0gdmR1 cHFfbl91MzIgKDB4RkZGRkZGRkZVKTsKKyAgcGFydGlhbF93cml0ZV9jc3QgKCZhWzBdLCB2 KTsKKyAgcGFydGlhbF93cml0ZSAoJmJbMF0sIHYsIHApOworICBpZiAoX19idWlsdGluX21l bWNtcCAoJmFbMF0sICZiWzBdLCAxNikgIT0gMCkKKyAgICBhYm9ydCAoKTsKKworICByZXR1 cm4gMDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbXZl L3ByMTA4NDQzLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL212ZS9wcjEwODQ0 My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLjIyN2Q0YjExZjQ3N2E0M2I5NWVlOTgxYzE5MGMyODliODRm MWE0ODYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJt L212ZS9wcjEwODQ0My5jCkBAIC0wLDAgKzEsMTQgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9 ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiIgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVj dGl2ZS10YXJnZXQgYXJtX3Y4XzFtX212ZV9vayB9ICovCisvKiB7IGRnLWFkZC1vcHRpb25z IGFybV92OF8xbV9tdmUgfSAqLworI2luY2x1ZGUgPGFybV9tdmUuaD4KKwordm9pZAorX19h dHRyaWJ1dGVfXyAoKG5vaXBhKSkgcGFydGlhbF93cml0ZV9jc3QgKHVpbnQzMl90ICphLCB1 aW50MzJ4NF90IHYpCit7CisgIHZzdHJ3cV9wX3UzMiAoYSwgdiwgMHgwMENDKTsKK30KKwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyIHttb3ZcdHJbMC05XVswLTldKiwgIzIw NH0gfSB9ICovCisK --------------2cfeOmFEmgr6NslCLlsHNvZW--