From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mo4-p00-ob.smtp.rzone.de (mo4-p00-ob.smtp.rzone.de [85.215.255.25]) by sourceware.org (Postfix) with ESMTPS id 20A653858C2B for ; Mon, 15 May 2023 18:05:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 20A653858C2B Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gjlay.de Authentication-Results: sourceware.org; spf=none smtp.mailfrom=gjlay.de ARC-Seal: i=1; a=rsa-sha256; t=1684173920; cv=none; d=strato.com; s=strato-dkim-0002; b=tZTDwc+GvtQTbKRd6/VqsJNojJdJMR6PIcBPZv6zX9JA8DFgt/JVZMDBUrRWIyZ9XC fodxHic72XvHg3EC/k7SdrYNYKHeV1lE6DAN3pW2kkxG02PVjA0aUQcsModOURyux8rH ArGOj50kC9sedS7pPiZxTX2oG1l7khbOZrC0AyscXo/F8yiytw7EQZcL591bdqD78umO 7f+K2EiqKbQw4oCc5SJkr+iwoHD9LaP9h/OhFhJyDsPTwXPnQWJGgW+ZV5QKlIXTj/5X bpFKPeO0phzyskONRmfYNY9L6Sdc7f4++XWfNYhmOjTBVX4lpnVpyxrmdMPJOJ+9Lm7e i8Mw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; t=1684173920; s=strato-dkim-0002; d=strato.com; h=Cc:Subject:From:To:Date:Message-ID:Cc:Date:From:Subject:Sender; bh=CS00nYM3BBSD/Yg6lMmGCQacB4kToJFljgFn+Qh6lZA=; b=aaHmhap79K2e4Fp1LJig3nKaN6XGjhc8qY6bhp1CNNLrQbueWWYSh4i/pFCwALmRuV pUQDuUONNmLvlqWmCfWr2oRthGcvDIQUzO8+iEFwyc1VE60ZEbEokUBDzwB9kyYt90/5 alzb8wbAdIvxCQvUCeqFnwHWn+PcJUkQ3g2HLU38l/EyvOPe5q6CKNUlp2WpRZ9UVmOi jF1uoqvslVNQ3/YeS+5Zo5GQ4iuYsJFMBxtpaI9DHqwKlRxVDvGac74E8etVKazcyo6h O8WODyZAKt8W9CP6kRzASSkzaBazLxBB7RZ+YpWV6WPVQdWLwBEx1X0D4w4qSRXc1HY4 6nhg== ARC-Authentication-Results: i=1; strato.com; arc=none; dkim=none X-RZG-CLASS-ID: mo00 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1684173920; s=strato-dkim-0002; d=gjlay.de; h=Cc:Subject:From:To:Date:Message-ID:Cc:Date:From:Subject:Sender; bh=CS00nYM3BBSD/Yg6lMmGCQacB4kToJFljgFn+Qh6lZA=; b=gMwV4CeUznSxdHMA6mHuZudk6DugUP6NWGCurQyXc/jo1zXnlo4URAtJIJehhcbx19 bdUFgH++o6vHXNlumN1tEb9Os4ukrpAf8yiDYZM/7y8oypfdNJo8p2Wmpk+cYe501XmM GCFyXVUtpezLgnIRiRzk8QT/ME7g3v5WHpzLIJYxZY0w9trxsl884eEdqxZ81EKdWFBZ wgbdZIK+YD3rigTCxtD5qCf3moqACdEpxjJ5CIYlKZTIv+AgTKV/wBnOWM8gSEHh0b73 HhhzfmaqrYy2SeilNVkXbyoW5lBDttrTJzECEURNhmD70/TJcqNWpJbiUWX7sUDc14gG Y3Ag== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; t=1684173920; s=strato-dkim-0003; d=gjlay.de; h=Cc:Subject:From:To:Date:Message-ID:Cc:Date:From:Subject:Sender; bh=CS00nYM3BBSD/Yg6lMmGCQacB4kToJFljgFn+Qh6lZA=; b=fLi6CskuDg94A3LFo4oO/+jthgomi1E0GGJ4s0BTZnyThrycf3X0DuZ+qS0fy+ZWth pWPUwkdD5lFyMY8i7iCg== X-RZG-AUTH: ":LXoWVUeid/7A29J/hMvvT3koxZnKT7Qq0xotTetVnKkRmM69o2y+LiO3MutATA==" Received: from [192.168.2.102] by smtp.strato.de (RZmta 49.4.0 DYNA|AUTH) with ESMTPSA id z691f1z4FI5I76n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Mon, 15 May 2023 20:05:18 +0200 (CEST) Content-Type: multipart/mixed; boundary="------------X0mOC4BBYJJzKunhD9sJ2qfO" Message-ID: <48369cc7-884d-9eef-2e16-9bc2bfe825f1@gjlay.de> Date: Mon, 15 May 2023 20:05:18 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 Content-Language: en-US To: gcc-patches@gcc.gnu.org From: Georg-Johann Lay Subject: [patch,avr] Fix PR109650 wrong code Cc: Jeff Law , Denis Chertykov Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-8.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_ASCII_DIVIDERS,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE 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. --------------X0mOC4BBYJJzKunhD9sJ2qfO Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit This patch fixes a wrong-code bug in the wake of PR92729, the transition that turned the AVR backend from cc0 to CCmode. In cc0, the insn that uses cc0 like a conditional branch always follows the cc0 setter, which is no more the case with CCmode where set and use of REG_CC might be in different basic blocks. This patch removes the machine-dependent reorg pass in avr_reorg entirely. It is replaced by a new, AVR specific mini-pass that runs prior to split2. Canonicalization of comparisons away from the "difficult" codes GT[U] and LE[U] is now mostly performed by implementing TARGET_CANONICALIZE_COMPARISON. Moreover: * Text peephole conditions get "dead_or_set_regno_p (*, REG_CC)" as needed. * RTL peephole conditions get "peep2_regno_dead_p (*, REG_CC)" as needed. * Conditional branches no more clobber REG_CC. * insn output for compares looks ahead to determine the branch mode in use. This needs also "dead_or_set_regno_p (*, REG_CC)". * Add RTL peepholes for decrement-and-branch detection. Finally, it fixes some of the many indentation glitches left over from PR92729. Ok? I'd also backport this one because all of v12+ is affected by the wrong code. Johann -- gcc/ PR/target 109650 PR/target 97279 * config/avr/avr-passes.def (avr_pass_ifelse): Insert new pass. * config/avr/avr.cc (avr_pass_ifelse): New RTL pass. (avr_pass_data_ifelse): New pass_data for it. (make_avr_pass_ifelse, avr_redundant_compare, avr_cbranch_cost) (avr_canonicalize_comparison, avr_out_plus_set_ZN): New functions. (compare_condtition): Make sure REG_CC dies in the branch insn. (avr_rtx_costs_1): Add computation of cbranch costs. (avr_adjust_insn_length) [ADJUST_LEN_ADD_SET_ZN]: Handle case. (TARGET_CANONICALIZE_COMPARISON): New define. (avr_simplify_comparison_p, compare_diff_p, avr_compare_pattern) (avr_reorg_remove_redundant_compare, avr_reorg): Remove functions. (TARGET_MACHINE_DEPENDENT_REORG): Remove define. * avr-protos.h (avr_simplify_comparison_p): Remove proto. (make_avr_pass_ifelse, avr_out_plus_set_ZN, cc_reg_rtx): New Protos * config/avr/avr.md (branch, difficult_branch): Don't split insns. (*swapped_tst, *add.for.eqne.): New insns. (*cbranch4): Rename to cbranch4_insn. (cbranch4): Try to canonicalize comparisons at expand. (define_peephole): Add dead_or_set_regno_p(insn,REG_CC) as needed. (define_deephole2): Add peep2_regno_dead_p(*,REG_CC) as needed. Add new RTL peepholes for decrement-and-branch and *swapped_tst. (adjust_len) [add_set_ZN]: New. (rvbranch, *rvbranch, difficult_rvbranch, *difficult_rvbranch) (branch_unspec, *negated_tst, *reversed_tst): Remove insns. (define_c_enum "unspec") [UNSPEC_IDENTITY]: Remove. * config/avr/avr-dimode.md (cbranch4): Canonicalize comparisons. * config/avr/predicates.md (scratch_or_d_register_operand): New. * config/avr/contraints.md (Yxx): New constraint. gcc/testsuite/ PR/target 109650 * config/avr/torture/pr109650-1.c: New test. --------------X0mOC4BBYJJzKunhD9sJ2qfO Content-Type: text/x-patch; charset=UTF-8; name="pr109650.diff" Content-Disposition: attachment; filename="pr109650.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXZyL2F2ci1kaW1vZGUubWQgYi9nY2MvY29uZmln L2F2ci9hdnItZGltb2RlLm1kCmluZGV4IGMwYmIwNGZmOWUwLi45MWYwZDM5NTc2MSAxMDA2 NDQKLS0tIGEvZ2NjL2NvbmZpZy9hdnIvYXZyLWRpbW9kZS5tZAorKysgYi9nY2MvY29uZmln L2F2ci9hdnItZGltb2RlLm1kCkBAIC00NTUsMTIgKzQ1NSwxOCBAQCAoZGVmaW5lX2V4cGFu ZCAiY29uZGl0aW9uYWxfanVtcCIKIChkZWZpbmVfZXhwYW5kICJjYnJhbmNoPG1vZGU+NCIK ICAgWyhzZXQgKHBjKQogICAgICAgICAoaWZfdGhlbl9lbHNlIChtYXRjaF9vcGVyYXRvciAw ICJvcmRlcmVkX2NvbXBhcmlzb25fb3BlcmF0b3IiCi0gICAgICAgICAgICAgICAgICAgICAg ICBbKG1hdGNoX29wZXJhbmQ6QUxMOCAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgIiIpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QUxMOCAyICJub25tZW1vcnlf b3BlcmFuZCIgIiIpXSkKLSAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMyAi IiAiIikpCi0gICAgICAgICAocGMpKSldCisgICAgICAgICAgICAgICAgICAgICAgICBbKG1h dGNoX29wZXJhbmQ6QUxMOCAxICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgICAgICAgICAgICAg ICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpBTEw4IDIgIm5vbm1lbW9yeV9vcGVyYW5kIild KQorICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMykp CisgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpXQogICAiYXZyX2hhdmVfZGltb2RlIgog ICAgeworICAgIGludCBpY29kZSA9IChpbnQpIEdFVF9DT0RFIChvcGVyYW5kc1swXSk7CisK KyAgICB0YXJnZXRtLmNhbm9uaWNhbGl6ZV9jb21wYXJpc29uICgmaWNvZGUsICZvcGVyYW5k c1sxXSwgJm9wZXJhbmRzWzJdLCBmYWxzZSk7CisgICAgb3BlcmFuZHNbMF0gPSBnZW5fcnR4 X2ZtdF9lZSAoKGVudW0gcnR4X2NvZGUpIGljb2RlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZPSURtb2RlLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pOworCiAg ICAgcnR4IGFjY19hID0gZ2VuX3J0eF9SRUcgKDxNT0RFPm1vZGUsIEFDQ19BKTsKIAogICAg IGF2cl9maXhfaW5wdXRzIChvcGVyYW5kcywgMSA8PCAyLCByZWdtYXNrICg8TU9ERT5tb2Rl LCBBQ0NfQSkpOwpAQCAtNDkwLDggKzQ5Niw4IEBAIChkZWZpbmVfaW5zbl9hbmRfc3BsaXQg ImNicmFuY2hfPG1vZGU+Ml9zcGxpdCIKICAgICAgICAgKGlmX3RoZW5fZWxzZSAobWF0Y2hf b3BlcmF0b3IgMCAib3JkZXJlZF9jb21wYXJpc29uX29wZXJhdG9yIgogICAgICAgICAgICAg ICAgICAgICAgICAgWyhyZWc6QUxMOCBBQ0NfQSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAocmVnOkFMTDggQUNDX0IpXSkKLSAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJh bmQgMSAiIiAiIikpCi0gICAgICAgICAocGMpKSldCisgICAgICAgICAgICAgICAgICAgICAg KGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAo cGMpKSldCiAgICJhdnJfaGF2ZV9kaW1vZGUiCiAgICIjIgogICAiJiYgcmVsb2FkX2NvbXBs ZXRlZCIKQEAgLTU0NCw4ICs1NTAsOCBAQCAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJjYnJh bmNoX2NvbnN0Xzxtb2RlPjJfc3BsaXQiCiAgICAgICAgIChpZl90aGVuX2Vsc2UgKG1hdGNo X29wZXJhdG9yIDAgIm9yZGVyZWRfY29tcGFyaXNvbl9vcGVyYXRvciIKICAgICAgICAgICAg ICAgICAgICAgICAgIFsocmVnOkFMTDggQUNDX0EpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgKG1hdGNoX29wZXJhbmQ6QUxMOCAxICJjb25zdF9vcGVyYW5kIiAibiBZbm4iKV0pCi0g ICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDIgIiIgIiIpKQotICAgICAgICAg KHBjKSkpCisgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFu ZCAyICIiICIiKSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMpKSkKICAgIChjbG9iYmVy IChtYXRjaF9zY3JhdGNoOlFJIDMgIj0mZCIpKV0KICAgImF2cl9oYXZlX2RpbW9kZQogICAg JiYgIXM4X29wZXJhbmQgKG9wZXJhbmRzWzFdLCBWT0lEbW9kZSkiCmRpZmYgLS1naXQgYS9n Y2MvY29uZmlnL2F2ci9hdnItcGFzc2VzLmRlZiBiL2djYy9jb25maWcvYXZyL2F2ci1wYXNz ZXMuZGVmCmluZGV4IDAyY2E3MzdkZWVlLi45ZmY5YjIzZjYyYyAxMDA2NDQKLS0tIGEvZ2Nj L2NvbmZpZy9hdnIvYXZyLXBhc3Nlcy5kZWYKKysrIGIvZ2NjL2NvbmZpZy9hdnIvYXZyLXBh c3Nlcy5kZWYKQEAgLTQzLDMgKzQzLDIzIEBAIElOU0VSVF9QQVNTX0JFRk9SRSAocGFzc19m cmVlX2NmZywgMSwgYXZyX3Bhc3NfcmVjb21wdXRlX25vdGVzKTsKICAgIGluc25zIHdpdGhh b3V0IGFueSBpbnNucyBpbiBiZXR3ZWVuLiAgKi8KIAogSU5TRVJUX1BBU1NfQUZURVIgKHBh c3NfZXhwYW5kLCAxLCBhdnJfcGFzc19jYXNlc2kpOworCisvKiBJZi1lbHNlIGRlY2lzaW9u IHRyZWVzIGdlbmVyYXRlZCBmb3Igc3dpdGNoIC8gY2FzZSBtYXkgcHJvZHVjZSBzZXF1ZW5j ZXMKKyAgIGxpa2UKKworICAgICAgU1JFRyA9IGNvbXBhcmUgKHJlZywgdmFsKTsKKwkgIGlm IChTUkVHID09IDApICBnb3RvIGxhYmVsMTsKKyAgICAgIFNSRUcgPSBjb21wYXJlIChyZWcs IDEgKyB2YWwpOworCSAgaWYgKFNSRUcgPj0gMCkgIGdvdG8gbGFiZWwyOworCisgICB3aGlj aCBjYW4gYmUgb3B0aW1pemVkIHRvCisKKyAgICAgIFNSRUcgPSBjb21wYXJlIChyZWcsIHZh bCk7CisJICBpZiAoU1JFRyA9PSAwKSAgZ290byBsYWJlbDE7CisJICBpZiAoU1JFRyA+PSAw KSAgZ290byBsYWJlbDI7CisKKyAgIFRoZSBvcHRpbWFsIHBsYWNlIGZvciBzdWNoIGEgcGFz cyB3b3VsZCBiZSBkaXJlY3RseSBhZnRlciBleHBhbmQsIGJ1dAorICAgaXQncyBub3QgcG9z c2libGUgZm9yIGEganVtcCBpbnNuIHRvIHRhcmdldCBtb3JlIHRoYW4gb25lIGNvZGUgbGFi ZWwuCisgICBIZW5jZSwgcnVuIGEgbWluaSBwYXNzIHJpZ2h0IGJlZm9yZSBzcGxpdDIgd2hp Y2ggaW50cm9kdWNlcyBSRUdfQ0MuICAqLworCitJTlNFUlRfUEFTU19CRUZPUkUgKHBhc3Nf c3BsaXRfYWZ0ZXJfcmVsb2FkLCAxLCBhdnJfcGFzc19pZmVsc2UpOwpkaWZmIC0tZ2l0IGEv Z2NjL2NvbmZpZy9hdnIvYXZyLXByb3Rvcy5oIGIvZ2NjL2NvbmZpZy9hdnIvYXZyLXByb3Rv cy5oCmluZGV4IGVjOTZmZDQ1ODY1Li5lM2FlZTU0YzA4MyAxMDA2NDQKLS0tIGEvZ2NjL2Nv bmZpZy9hdnIvYXZyLXByb3Rvcy5oCisrKyBiL2djYy9jb25maWcvYXZyL2F2ci1wcm90b3Mu aApAQCAtNTgsNiArNTgsNyBAQCBleHRlcm4gY29uc3QgY2hhciAqcmV0X2NvbmRfYnJhbmNo IChydHggeCwgaW50IGxlbiwgaW50IHJldmVyc2UpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmF2 cl9vdXRfbW92cHNpIChydHhfaW5zbiAqLCBydHgqLCBpbnQqKTsKIGV4dGVybiBjb25zdCBj aGFyICphdnJfb3V0X3NpZ25fZXh0ZW5kIChydHhfaW5zbiAqLCBydHgqLCBpbnQqKTsKIGV4 dGVybiBjb25zdCBjaGFyICphdnJfb3V0X2luc2VydF9ub3RiaXQgKHJ0eF9pbnNuICosIHJ0 eCosIHJ0eCwgaW50Kik7CitleHRlcm4gY29uc3QgY2hhciAqYXZyX291dF9wbHVzX3NldF9a TiAocnR4KiwgaW50Kik7CiAKIGV4dGVybiBjb25zdCBjaGFyICphc2hscWkzX291dCAocnR4 X2luc24gKmluc24sIHJ0eCBvcGVyYW5kc1tdLCBpbnQgKmxlbik7CiBleHRlcm4gY29uc3Qg Y2hhciAqYXNobGhpM19vdXQgKHJ0eF9pbnNuICppbnNuLCBydHggb3BlcmFuZHNbXSwgaW50 ICpsZW4pOwpAQCAtMTEyLDggKzExMyw2IEBAIGV4dGVybiBpbnQganVtcF9vdmVyX29uZV9p bnNuX3AgKHJ0eF9pbnNuICppbnNuLCBydHggZGVzdCk7CiAKIGV4dGVybiB2b2lkIGF2cl9m aW5hbF9wcmVzY2FuX2luc24gKHJ0eF9pbnNuICppbnNuLCBydHggKm9wZXJhbmQsCiAJCQkJ ICAgIGludCBudW1fb3BlcmFuZHMpOwotZXh0ZXJuIGludCBhdnJfc2ltcGxpZnlfY29tcGFy aXNvbl9wIChtYWNoaW5lX21vZGUgbW9kZSwKLQkJCQkgICAgICBSVFhfQ09ERSBvcCwgcnR4 IHgpOwogZXh0ZXJuIFJUWF9DT0RFIGF2cl9ub3JtYWxpemVfY29uZGl0aW9uIChSVFhfQ09E RSBjb25kaXRpb24pOwogZXh0ZXJuIHZvaWQgb3V0X3NoaWZ0X3dpdGhfY250IChjb25zdCBj aGFyICp0ZW1wbCwgcnR4X2luc24gKmluc24sCiAJCQkJcnR4IG9wZXJhbmRzW10sIGludCAq bGVuLCBpbnQgdF9sZW4pOwpAQCAtMTQ1LDYgKzE0NCw3IEBAIGV4dGVybiBydHggdG1wX3Jl Z19ydHg7CiBleHRlcm4gcnR4IHplcm9fcmVnX3J0eDsKIGV4dGVybiBydHggYWxsX3JlZ3Nf cnR4WzMyXTsKIGV4dGVybiBydHggcmFtcHpfcnR4OworZXh0ZXJuIHJ0eCBjY19yZWdfcnR4 OwogCiAjZW5kaWYgLyogUlRYX0NPREUgKi8KIApAQCAtMTYwLDYgKzE2MCw3IEBAIGNsYXNz IHJ0bF9vcHRfcGFzczsKIGV4dGVybiBydGxfb3B0X3Bhc3MgKm1ha2VfYXZyX3Bhc3NfcHJl X3Byb2VwIChnY2M6OmNvbnRleHQgKik7CiBleHRlcm4gcnRsX29wdF9wYXNzICptYWtlX2F2 cl9wYXNzX3JlY29tcHV0ZV9ub3RlcyAoZ2NjOjpjb250ZXh0ICopOwogZXh0ZXJuIHJ0bF9v cHRfcGFzcyAqbWFrZV9hdnJfcGFzc19jYXNlc2kgKGdjYzo6Y29udGV4dCAqKTsKK2V4dGVy biBydGxfb3B0X3Bhc3MgKm1ha2VfYXZyX3Bhc3NfaWZlbHNlIChnY2M6OmNvbnRleHQgKik7 CiAKIC8qIEZyb20gYXZyLWxvZy5jYyAqLwogCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2F2 ci9hdnIuY2MgYi9nY2MvY29uZmlnL2F2ci9hdnIuY2MKaW5kZXggYzE5MzQzMGNmMDcuLjAy MjA4M2FiMjA5IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2F2ci9hdnIuY2MKKysrIGIvZ2Nj L2NvbmZpZy9hdnIvYXZyLmNjCkBAIC0zNTksNiArMzU5LDQxIEBAIHB1YmxpYzoKICAgfQog fTsgLy8gYXZyX3Bhc3NfY2FzZXNpCiAKKworc3RhdGljIGNvbnN0IHBhc3NfZGF0YSBhdnJf cGFzc19kYXRhX2lmZWxzZSA9Cit7CisgIFJUTF9QQVNTLCAgICAgIC8vIHR5cGUKKyAgIiIs ICAgICAgICAgICAgLy8gbmFtZSAod2lsbCBiZSBwYXRjaGVkKQorICBPUFRHUk9VUF9OT05F LCAvLyBvcHRpbmZvX2ZsYWdzCisgIFRWX0RGX1NDQU4sICAgIC8vIHR2X2lkCisgIDAsICAg ICAgICAgICAgIC8vIHByb3BlcnRpZXNfcmVxdWlyZWQKKyAgMCwgICAgICAgICAgICAgLy8g cHJvcGVydGllc19wcm92aWRlZAorICAwLCAgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzX2Rl c3Ryb3llZAorICAwLCAgICAgICAgICAgICAvLyB0b2RvX2ZsYWdzX3N0YXJ0CisgIFRPRE9f ZGZfZmluaXNoIHwgVE9ET19kZl92ZXJpZnkgLy8gdG9kb19mbGFnc19maW5pc2gKK307CisK K2NsYXNzIGF2cl9wYXNzX2lmZWxzZSA6IHB1YmxpYyBydGxfb3B0X3Bhc3MKK3sKK3B1Ymxp YzoKKyAgYXZyX3Bhc3NfaWZlbHNlIChnY2M6OmNvbnRleHQgKmN0eHQsIGNvbnN0IGNoYXIg Km5hbWUpCisgICAgOiBydGxfb3B0X3Bhc3MgKGF2cl9wYXNzX2RhdGFfaWZlbHNlLCBjdHh0 KQorICB7CisgICAgdGhpcy0+bmFtZSA9IG5hbWU7CisgIH0KKworICB2b2lkIGF2cl9yZXN0 X29mX2hhbmRsZV9pZmVsc2UgKGZ1bmN0aW9uKik7CisKKyAgdmlydHVhbCBib29sIGdhdGUg KGZ1bmN0aW9uKikgeyByZXR1cm4gb3B0aW1pemUgPiAwOyB9CisKKyAgdmlydHVhbCB1bnNp Z25lZCBpbnQgZXhlY3V0ZSAoZnVuY3Rpb24gKmZ1bmMpCisgIHsKKyAgICBhdnJfcmVzdF9v Zl9oYW5kbGVfaWZlbHNlIChmdW5jKTsKKworICAgIHJldHVybiAwOworICB9Cit9OyAvLyBh dnJfcGFzc19pZmVsc2UKKwogfSAvLyBhbm9uIG5hbWVzcGFjZQogCiBydGxfb3B0X3Bhc3Mq CkBAIC0zNzMsNiArNDA4LDEyIEBAIG1ha2VfYXZyX3Bhc3NfY2FzZXNpIChnY2M6OmNvbnRl eHQgKmN0eHQpCiAgIHJldHVybiBuZXcgYXZyX3Bhc3NfY2FzZXNpIChjdHh0LCAiYXZyLWNh c2VzaSIpOwogfQogCitydGxfb3B0X3Bhc3MqCittYWtlX2F2cl9wYXNzX2lmZWxzZSAoZ2Nj Ojpjb250ZXh0ICpjdHh0KQoreworICByZXR1cm4gbmV3IGF2cl9wYXNzX2lmZWxzZSAoY3R4 dCwgImF2ci1pZmVsc2UiKTsKK30KKwogCiAvKiBNYWtlIG9uZSBwYXJhbGxlbCBpbnNuIHdp dGggYWxsIHRoZSBwYXR0ZXJucyBmcm9tIGluc25zIGlbMF0uLmlbNV0uICAqLwogCkBAIC02 ODYsNiArNzI3LDMwNCBAQCBhdnJfcGFzc19jYXNlc2k6OmF2cl9yZXN0X29mX2hhbmRsZV9j YXNlc2kgKGZ1bmN0aW9uICpmdW5jKQogfQogCiAKKy8qIEEgaGVscGVyIGZvciB0aGUgbmV4 dCBtZXRob2QuICBTdXBwb3NlIHdlIGhhdmUgdHdvIGNvbmRpdGlvbmFsIGJyYW5jaGVzCisK KyAgICAgIGlmIChyZWcgPGNvbmQxPiB4dmFsMSkgZ290byBsYWJlbDE7CisgICAgICBpZiAo cmVnIDxjb25kMj4geHZhbDIpIGdvdG8gbGFiZWwyOworCisgICBJZiB0aGUgc2Vjb25kIGNv bXBhcmlzb24gaXMgcmVkdW5kYW50IGFuZCB0aGVyZSBpcyBhIGNvZGUgPGNvbmQ+IHN1Y2gK KyAgIHRoYXQgdGhlIHNlcXVlbmNlIGNhbiBiZSBwZXJmb3JtZWQgYXMKKworICAgICAgUkVH X0NDID0gY29tcGFyZSAocmVnLCB4dmFsMSk7CisgICAgICBpZiAoUkVHX0NDIDxjb25kMT4g MCkgIGdvdG8gbGFiZWwxOworICAgICAgaWYgKFJFR19DQyA8Y29uZD4gMCkgICBnb3RvIGxh YmVsMjsKKworICAgdGhlbiByZXR1cm4gPGNvbmQ+LiAgT3RoZXJ3aXNlLCByZXR1cm4gVU5L Tk9XTi4KKyAgIHh2YWwxIGFuZCB4dmFsMiBhcmUgQ09OU1RfSU5ULCBhbmQgbW9kZSBpcyB0 aGUgc2NhbGFyIGludCBtb2RlIGluIHdoaWNoCisgICB0aGUgY29tcGFyaXNvbiB3aWxsIGJl IGNhcnJpZWQgb3V0LiAgcmV2ZXJzZV9jb25kMSBjYW4gYmUgc2V0IHRvIHJldmVyc2UKKyAg IGNvbmRpdGlvbiBjb25kMS4gIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSBzZWNvbmQgY29tcGFy aXNvbiBkb2VzIG5vdCBmb2xsb3cKKyAgIHRoZSBmaXJzdCBvbmUsIGJ1dCBpcyBsb2NhdGVk IGFmdGVyIGxhYmVsMSBsaWtlIGluOgorCisgICAgICBpZiAocmVnIDxjb25kMT4geHZhbDEp IGdvdG8gbGFiZWwxOworICAgICAgLi4uCisgICAgICBsYWJlbDE6CisgICAgICBpZiAocmVn IDxjb25kMj4geHZhbDIpIGdvdG8gbGFiZWwyOyAgKi8KKworc3RhdGljIGVudW0gcnR4X2Nv ZGUKK2F2cl9yZWR1bmRhbnRfY29tcGFyZSAoZW51bSBydHhfY29kZSBjb25kMSwgcnR4IHh2 YWwxLAorCQkgICAgICAgZW51bSBydHhfY29kZSBjb25kMiwgcnR4IHh2YWwyLAorCQkgICAg ICAgbWFjaGluZV9tb2RlIG1vZGUsIGJvb2wgcmV2ZXJzZV9jb25kMSkKK3sKKyAgSE9TVF9X SURFX0lOVCBpdmFsMSA9IElOVFZBTCAoeHZhbDEpOworICBIT1NUX1dJREVfSU5UIGl2YWwy ID0gSU5UVkFMICh4dmFsMik7CisKKyAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBtYXNrID0g R0VUX01PREVfTUFTSyAobW9kZSk7CisgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgdXZhbDEg PSBtYXNrICYgVUlOVFZBTCAoeHZhbDEpOworICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHV2 YWwyID0gbWFzayAmIFVJTlRWQUwgKHh2YWwyKTsKKworICBpZiAocmV2ZXJzZV9jb25kMSkK KyAgICBjb25kMSA9IHJldmVyc2VfY29uZGl0aW9uIChjb25kMSk7CisKKyAgaWYgKGNvbmQx ID09IEVRKQorICAgIHsKKyAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLworICAgICAgLy8gQSBzZXF1ZW5jZSBsaWtlCisgICAgICAvLyAg ICBpZiAocmVnID09IHZhbCkgIGdvdG8gbGFiZWwxOworICAgICAgLy8gICAgaWYgKHJlZyA+ IHZhbCkgICBnb3RvIGxhYmVsMjsKKyAgICAgIC8vIGNhbiBiZSByZS13cml0dGVuIHVzaW5n IHRoZSBzYW1lLCBzaW1wbGUgY29tcGFyaXNvbiBsaWtlIGluOgorICAgICAgLy8gICAgUkVH X0NDID0gY29tcGFyZSAocmVnLCB2YWwpCisgICAgICAvLyAgICBpZiAoUkVHX0NDID09IDAp ICBnb3RvIGxhYmVsMTsKKyAgICAgIC8vICAgIGlmIChSRUdfQ0MgPj0gMCkgIGdvdG8gbGFi ZWwyOworICAgICAgaWYgKGl2YWwxID09IGl2YWwyCisJICAmJiAoY29uZDIgPT0gR1QgfHwg Y29uZDIgPT0gR1RVKSkKKwlyZXR1cm4gYXZyX25vcm1hbGl6ZV9jb25kaXRpb24gKGNvbmQy KTsKKworICAgICAgLy8gU2ltaWxhciwgYnV0IHRoZSBpbnB1dCBzZXF1ZW5jZSBpcyBsaWtl CisgICAgICAvLyAgICBpZiAocmVnID09IHZhbCkgIGdvdG8gbGFiZWwxOworICAgICAgLy8g ICAgaWYgKHJlZyA+PSB2YWwpICBnb3RvIGxhYmVsMjsKKyAgICAgIGlmIChpdmFsMSA9PSBp dmFsMgorCSAgJiYgKGNvbmQyID09IEdFIHx8IGNvbmQyID09IEdFVSkpCisJcmV0dXJuIGNv bmQyOworCisgICAgICAvLyBTaW1pbGFyLCBidXQgdGhlIGlucHV0IHNlcXVlbmNlIGlzIGxp a2UKKyAgICAgIC8vICAgIGlmIChyZWcgPT0gdmFsKSAgICAgIGdvdG8gbGFiZWwxOworICAg ICAgLy8gICAgaWYgKHJlZyA+PSB2YWwgKyAxKSAgZ290byBsYWJlbDI7CisgICAgICBpZiAo KGNvbmQyID09IEdFICYmIGl2YWwyID09IDEgKyBpdmFsMSkKKwkgIHx8IChjb25kMiA9PSBH RVUgJiYgdXZhbDIgPT0gMSArIHV2YWwxKSkKKwlyZXR1cm4gY29uZDI7CisKKyAgICAgIC8v IFNpbWlsYXIsIGJ1dCB0aGUgaW5wdXQgc2VxdWVuY2UgaXMgbGlrZQorICAgICAgLy8gICAg aWYgKHJlZyA9PSB2YWwpICAgICAgZ290byBsYWJlbDE7CisgICAgICAvLyAgICBpZiAocmVn ID4gIHZhbCAtIDEpICBnb3RvIGxhYmVsMjsKKyAgICAgIGlmICgoY29uZDIgPT0gR1QgJiYg aXZhbDIgPT0gaXZhbDEgLSAxKQorCSAgfHwgKGNvbmQyID09IEdUVSAmJiB1dmFsMiA9PSB1 dmFsMSAtIDEpKQorCXJldHVybiBhdnJfbm9ybWFsaXplX2NvbmRpdGlvbiAoY29uZDIpOwor CisgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8KKyAgICAgIC8vIEEgc2VxdWVuY2UgbGlrZQorICAgICAgLy8gICAgaWYg KHJlZyA9PSB2YWwpICAgICAgZ290byBsYWJlbDE7CisgICAgICAvLyAgICBpZiAocmVnIDwg MSArIHZhbCkgICBnb3RvIGxhYmVsMjsKKyAgICAgIC8vIGNhbiBiZSByZS13cml0dGVuIGFz CisgICAgICAvLyAgICBSRUdfQ0MgPSBjb21wYXJlIChyZWcsIHZhbCkKKyAgICAgIC8vICAg IGlmIChSRUdfQ0MgPT0gMCkgIGdvdG8gbGFiZWwxOworICAgICAgLy8gICAgaWYgKFJFR19D QyA8IDApICAgZ290byBsYWJlbDI7CisgICAgICBpZiAoKGNvbmQyID09IExUICYmIGl2YWwy ID09IDEgKyBpdmFsMSkKKwkgIHx8IChjb25kMiA9PSBMVFUgJiYgdXZhbDIgPT0gMSArIHV2 YWwxKSkKKwlyZXR1cm4gY29uZDI7CisKKyAgICAgIC8vIFNpbWlsYXIsIGJ1dCB3aXRoIGFu IGlucHV0IHNlcXVlbmNlIGxpa2UKKyAgICAgIC8vICAgIGlmIChyZWcgPT0gdmFsKSAgIGdv dG8gbGFiZWwxOworICAgICAgLy8gICAgaWYgKHJlZyA8PSB2YWwpICAgZ290byBsYWJlbDI7 CisgICAgICBpZiAoaXZhbDEgPT0gaXZhbDIKKwkgICYmIChjb25kMiA9PSBMRSB8fCBjb25k MiA9PSBMRVUpKQorCXJldHVybiBhdnJfbm9ybWFsaXplX2NvbmRpdGlvbiAoY29uZDIpOwor CisgICAgICAvLyBTaW1pbGFyLCBidXQgd2l0aCBhbiBpbnB1dCBzZXF1ZW5jZSBsaWtlCisg ICAgICAvLyAgICBpZiAocmVnID09IHZhbCkgIGdvdG8gbGFiZWwxOworICAgICAgLy8gICAg aWYgKHJlZyA8IHZhbCkgICBnb3RvIGxhYmVsMjsKKyAgICAgIGlmIChpdmFsMSA9PSBpdmFs MgorCSAgJiYgKGNvbmQyID09IExUIHx8IGNvbmQyID09IExUVSkpCisJcmV0dXJuIGNvbmQy OworCisgICAgICAvLyBTaW1pbGFyLCBidXQgd2l0aCBhbiBpbnB1dCBzZXF1ZW5jZSBsaWtl CisgICAgICAvLyAgICBpZiAocmVnID09IHZhbCkgICAgICBnb3RvIGxhYmVsMTsKKyAgICAg IC8vICAgIGlmIChyZWcgPD0gdmFsIC0gMSkgIGdvdG8gbGFiZWwyOworICAgICAgaWYgKChj b25kMiA9PSBMRSAmJiBpdmFsMiA9PSBpdmFsMSAtIDEpCisJICB8fCAoY29uZDIgPT0gTEVV ICYmIHV2YWwyID09IHV2YWwxIC0gMSkpCisJcmV0dXJuIGF2cl9ub3JtYWxpemVfY29uZGl0 aW9uIChjb25kMik7CisKKyAgICB9IC8vIGNvbmQxID09IEVRCisKKyAgcmV0dXJuIFVOS05P V047Cit9CisKKworLyogSWYtZWxzZSBkZWNpc2lvbiB0cmVlcyBnZW5lcmF0ZWQgZm9yIHN3 aXRjaCAvIGNhc2UgbWF5IHByb2R1Y2Ugc2VxdWVuY2VzCisgICBsaWtlCisKKyAgICAgIFNS RUcgPSBjb21wYXJlIChyZWcsIHZhbCk7CisJICBpZiAoU1JFRyA9PSAwKSAgZ290byBsYWJl bDE7CisgICAgICBTUkVHID0gY29tcGFyZSAocmVnLCAxICsgdmFsKTsKKwkgIGlmIChTUkVH ID49IDApICBnb3RvIGxhYmVsMjsKKworICAgd2hpY2ggY2FuIGJlIG9wdGltaXplZCB0bwor CisgICAgICBTUkVHID0gY29tcGFyZSAocmVnLCB2YWwpOworCSAgaWYgKFNSRUcgPT0gMCkg IGdvdG8gbGFiZWwxOworCSAgaWYgKFNSRUcgPj0gMCkgIGdvdG8gbGFiZWwyOworCisgICBU aGUgb3B0aW1hbCBwbGFjZSBmb3Igc3VjaCBhIHBhc3Mgd291bGQgYmUgZGlyZWN0bHkgYWZ0 ZXIgZXhwYW5kLCBidXQKKyAgIGl0J3Mgbm90IHBvc3NpYmxlIGZvciBhIGp1bXAgaW5zbiB0 byB0YXJnZXQgbW9yZSB0aGFuIG9uZSBjb2RlIGxhYmVsLgorICAgSGVuY2UsIHJ1biBhIG1p bmkgcGFzcyByaWdodCBiZWZvcmUgc3BsaXQyIHdoaWNoIGludHJvZHVjZXMgUkVHX0NDLiAg Ki8KKwordm9pZAorYXZyX3Bhc3NfaWZlbHNlOjphdnJfcmVzdF9vZl9oYW5kbGVfaWZlbHNl IChmdW5jdGlvbiopCit7CisgIHJ0eF9pbnNuICpuZXh0X2luc247CisKKyAgZm9yIChydHhf aW5zbiAqaW5zbiA9IGdldF9pbnNucygpOyBpbnNuOyBpbnNuID0gbmV4dF9pbnNuKQorICAg IHsKKyAgICAgIG5leHRfaW5zbiA9IG5leHRfbm9ubm90ZV9ub25kZWJ1Z19pbnNuIChpbnNu KTsKKworICAgICAgaWYgKCEgbmV4dF9pbnNuKQorCWJyZWFrOworCisgICAgICAvLyBTZWFy Y2ggZm9yIHR3byBjYnJhbmNoIGluc25zLiAgVGhlIGZpcnN0IG9uZSBpcyBhIGNicmFuY2gu CisgICAgICAvLyBGaWx0ZXIgZm9yICJjYnJhbmNoPG1vZGU+NF9pbnNuIiB3aXRoIG1vZGUg aW4gUUksIEhJLCBQU0ksIFNJLgorCisgICAgICBpZiAoISBKVU1QX1AgKGluc24pKQorCWNv bnRpbnVlOworCisgICAgICBpbnQgaWNvZGUxID0gcmVjb2dfbWVtb2l6ZWQgKGluc24pOwor CisgICAgICBpZiAoaWNvZGUxICE9IENPREVfRk9SX2NicmFuY2hxaTRfaW5zbgorCSAgJiYg aWNvZGUxICE9IENPREVfRk9SX2NicmFuY2hoaTRfaW5zbgorCSAgJiYgaWNvZGUxICE9IENP REVfRk9SX2NicmFuY2hwc2k0X2luc24KKwkgICYmIGljb2RlMSAhPSBDT0RFX0ZPUl9jYnJh bmNoc2k0X2luc24pCisJY29udGludWU7CisKKyAgICAgIHJ0eF9qdW1wX2luc24gKmluc24x ID0gYXNfYTxydHhfanVtcF9pbnNuICo+IChpbnNuKTsKKyAgICAgIHJ0eF9qdW1wX2luc24g Kmluc24yID0gbnVsbHB0cjsKKyAgICAgIGJvb2wgZm9sbG93X2xhYmVsMSA9IGZhbHNlOwor CisgICAgICAvLyBFeHRyYWN0IHRoZSBvcGVyYW5kcyBvZiB0aGUgZmlyc3QgaW5zbjoKKyAg ICAgIC8vICQwID0gY29tcGFyaXNvbiBvcGVyYXRvciAoJDEsICQyKQorICAgICAgLy8gJDEg PSByZWcKKyAgICAgIC8vICQyID0gcmVnIG9yIGNvbnN0X2ludAorICAgICAgLy8gJDMgPSBj b2RlX2xhYmVsCisgICAgICAvLyAkNCA9IG9wdGlvbmFsIFNDUkFUQ0ggZm9yIEhJLCBQU0ks IFNJIGNhc2VzLgorCisgICAgICBjb25zdCBhdXRvICZvcCA9IHJlY29nX2RhdGEub3BlcmFu ZDsKKworICAgICAgZXh0cmFjdF9pbnNuIChpbnNuMSk7CisgICAgICBydHggeG9wMVs1XSA9 IHsgb3BbMF0sIG9wWzFdLCBvcFsyXSwgb3BbM10sIG9wWzRdIH07CisgICAgICBpbnQgbl9v cGVyYW5kcyA9IHJlY29nX2RhdGEubl9vcGVyYW5kczsKKworICAgICAgLy8gRm9yIG5vdywg d2UgY2FuIG9wdGltaXplIGNicmFuY2hlcyB0aGF0IGZvbGxvdyBhbiBFUSBjYnJhbmNoLAor ICAgICAgLy8gYW5kIGNicmFuY2hlcyB0aGF0IGZvbGxvdyB0aGUgbGFiZWwgb2YgYSBORSBj YnJhbmNoLgorCisgICAgICBpZiAoR0VUX0NPREUgKHhvcDFbMF0pID09IEVRCisJICAmJiBK VU1QX1AgKG5leHRfaW5zbikKKwkgICYmIHJlY29nX21lbW9pemVkIChuZXh0X2luc24pID09 IGljb2RlMSkKKwl7CisJICAvLyBUaGUgMm5kIGNicmFuY2ggaW5zbiBmb2xsb3dzIGluc24x LCBpLmUuIGlzIGxvY2F0ZWQgaW4gdGhlCisJICAvLyBmYWxsdGhyb3VnaCBwYXRoIG9mIGlu c24xLgorCisJICBpbnNuMiA9IGFzX2E8cnR4X2p1bXBfaW5zbiAqPiAobmV4dF9pbnNuKTsK Kwl9CisgICAgICBlbHNlIGlmIChHRVRfQ09ERSAoeG9wMVswXSkgPT0gTkUpCisJeworCSAg Ly8gaW5zbjEgbWlnaHQgYnJhbmNoIHRvIGEgbGFiZWwgZm9sbG93ZWQgYnkgYSBjYnJhbmNo LgorCisJICBydHggdGFyZ2V0MSA9IEpVTVBfTEFCRUwgKGluc24xKTsKKwkgIHJ0eF9pbnNu ICpjb2RlX2xhYmVsMSA9IEpVTVBfTEFCRUxfQVNfSU5TTiAoaW5zbjEpOworCSAgcnR4X2lu c24gKm5leHQgPSBuZXh0X25vbm5vdGVfbm9uZGVidWdfaW5zbiAoY29kZV9sYWJlbDEpOwor CSAgcnR4X2luc24gKmJhcnJpZXIgPSBwcmV2X25vbm5vdGVfbm9uZGVidWdfaW5zbiAoY29k ZV9sYWJlbDEpOworCisJICBpZiAoLy8gVGFyZ2V0IGxhYmVsIG9mIGluc24xIGlzIHVzZWQg ZXhhY3RseSBvbmNlIGFuZAorCSAgICAgIC8vIGlzIG5vdCBhIGZhbGx0aHJ1LCBpLmUuIGlz IHByZWNlZGVkIGJ5IGEgYmFycmllci4KKwkgICAgICBMQUJFTF9OVVNFUyAodGFyZ2V0MSkg PT0gMQorCSAgICAgICYmIGJhcnJpZXIKKwkgICAgICAmJiBCQVJSSUVSX1AgKGJhcnJpZXIp CisJICAgICAgLy8gRm9sbG93aW5nIHRoZSB0YXJnZXQgbGFiZWwgaXMgYSBjYnJhbmNoIG9m IHRoZSBzYW1lIGtpbmQuCisJICAgICAgJiYgbmV4dAorCSAgICAgICYmIEpVTVBfUCAobmV4 dCkKKwkgICAgICAmJiByZWNvZ19tZW1vaXplZCAobmV4dCkgPT0gaWNvZGUxKQorCSAgICB7 CisJICAgICAgZm9sbG93X2xhYmVsMSA9IHRydWU7CisJICAgICAgaW5zbjIgPSBhc19hPHJ0 eF9qdW1wX2luc24gKj4gKG5leHQpOworCSAgICB9CisJfQorCisgICAgICBpZiAoISBpbnNu MikKKwljb250aW51ZTsKKworICAgICAgLy8gQWxzbyBleHRyYWN0IG9wZXJhbmRzIG9mIGlu c24yLCBhbmQgZmlsdGVyIGZvciBSRUcgKyBDT05TVF9JTlQKKyAgICAgIC8vIGNvbXBhcnNv bnMgYWdhaW5zdCB0aGUgc2FtZSByZWdpc3Rlci4KKworICAgICAgZXh0cmFjdF9pbnNuIChp bnNuMik7CisgICAgICBydHggeG9wMls1XSA9IHsgb3BbMF0sIG9wWzFdLCBvcFsyXSwgb3Bb M10sIG9wWzRdIH07CisKKyAgICAgIGlmICghIHJ0eF9lcXVhbF9wICh4b3AxWzFdLCB4b3Ay WzFdKQorCSAgfHwgISBDT05TVF9JTlRfUCAoeG9wMVsyXSkKKwkgIHx8ICEgQ09OU1RfSU5U X1AgKHhvcDJbMl0pKQorCWNvbnRpbnVlOworCisgICAgICBtYWNoaW5lX21vZGUgbW9kZSA9 IEdFVF9NT0RFICh4b3AxWzFdKTsKKyAgICAgIGVudW0gcnR4X2NvZGUgY29kZTEgPSBHRVRf Q09ERSAoeG9wMVswXSk7CisgICAgICBlbnVtIHJ0eF9jb2RlIGNvZGUyID0gR0VUX0NPREUg KHhvcDJbMF0pOworCisgICAgICBjb2RlMiA9IGF2cl9yZWR1bmRhbnRfY29tcGFyZSAoY29k ZTEsIHhvcDFbMl0sIGNvZGUyLCB4b3AyWzJdLAorCQkJCSAgICAgbW9kZSwgZm9sbG93X2xh YmVsMSk7CisgICAgICBpZiAoY29kZTIgPT0gVU5LTk9XTikKKwljb250aW51ZTsKKworICAg ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vCisgICAgICAvLyBGb3VuZCBhIHJlcGxhY2VtZW50LgorCisgICAgICBpZiAoZHVtcF9m aWxlKQorCXsKKwkgIGZwcmludGYgKGR1bXBfZmlsZSwgIlxuOzsgRm91bmQgY2hhaW4gb2Yg anVtcF9pbnNuICVkIGFuZCIKKwkJICAgIiBqdW1wX2luc24gJWQsIGZvbGxvd19sYWJlbDE9 JWQ6XG4iLAorCQkgICBJTlNOX1VJRCAoaW5zbjEpLCBJTlNOX1VJRCAoaW5zbjIpLCBmb2xs b3dfbGFiZWwxKTsKKwkgIHByaW50X3J0bF9zaW5nbGUgKGR1bXBfZmlsZSwgUEFUVEVSTiAo aW5zbjEpKTsKKwkgIHByaW50X3J0bF9zaW5nbGUgKGR1bXBfZmlsZSwgUEFUVEVSTiAoaW5z bjIpKTsKKwl9CisKKyAgICAgIGlmICghIGZvbGxvd19sYWJlbDEpCisJbmV4dF9pbnNuID0g bmV4dF9ub25ub3RlX25vbmRlYnVnX2luc24gKGluc24yKTsKKworICAgICAgLy8gUG9wIHRo ZSBuZXcgYnJhbmNoIGNvbmRpdGlvbnMgYW5kIHRoZSBuZXcgY29tcGFyaXNvbi4KKyAgICAg IC8vIFByZW1hdHVyZWx5IHNwbGl0IGludG8gY29tcGFyZSArIGJyYW5jaCBzbyB0aGF0IHdl IGNhbiBkcm9wCisgICAgICAvLyB0aGUgMm5kIGNvbXBhcmlzb24uICBUaGUgZm9sbG93aW5n IHBhc3MsIHNwbGl0Miwgc3BsaXRzIGFsbAorICAgICAgLy8gaW5zbnMgZm9yIFJFR19DQywg YW5kIGl0IHNob3VsZCBzdGlsbCB3b3JrIGFzIHVzdWFsIGV2ZW4gd2hlbgorICAgICAgLy8g dGhlcmUgYXJlIGFscmVhZHkgc29tZSBSRUdfQ0MgaW5zbnMgYXJvdW5kLgorCisgICAgICBy dHggeGNvbmQxID0gZ2VuX3J0eF9mbXRfZWUgKGNvZGUxLCBWT0lEbW9kZSwgY2NfcmVnX3J0 eCwgY29uc3QwX3J0eCk7CisgICAgICBydHggeGNvbmQyID0gZ2VuX3J0eF9mbXRfZWUgKGNv ZGUyLCBWT0lEbW9kZSwgY2NfcmVnX3J0eCwgY29uc3QwX3J0eCk7CisgICAgICBydHggeHBh dDEgPSBnZW5fYnJhbmNoICh4b3AxWzNdLCB4Y29uZDEpOworICAgICAgcnR4IHhwYXQyID0g Z2VuX2JyYW5jaCAoeG9wMlszXSwgeGNvbmQyKTsKKyAgICAgIHJ0eCB4Y29tcGFyZSA9IE5V TExfUlRYOworCisgICAgICBpZiAobW9kZSA9PSBRSW1vZGUpCisJeworCSAgZ2NjX2Fzc2Vy dCAobl9vcGVyYW5kcyA9PSA0KTsKKwkgIHhjb21wYXJlID0gZ2VuX2NtcHFpMyAoeG9wMVsx XSwgeG9wMVsyXSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGdjY19hc3NlcnQgKG5fb3Bl cmFuZHMgPT0gNSk7CisJICBydHggKCpnZW5fY21wKShydHgscnR4LHJ0eCkKKwkgICAgPSBt b2RlID09IEhJbW9kZSAgPyBnZW5fZ2VuX2NvbXBhcmVoaQorCSAgICA6IG1vZGUgPT0gUFNJ bW9kZSA/IGdlbl9nZW5fY29tcGFyZXBzaQorCSAgICA6IGdlbl9nZW5fY29tcGFyZXNpOyAv LyBTSW1vZGUKKwkgIHhjb21wYXJlID0gZ2VuX2NtcCAoeG9wMVsxXSwgeG9wMVsyXSwgeG9w MVs0XSk7CisJfQorCisgICAgICAvLyBFbWl0IHRoYXQgc3R1ZmYuCisKKyAgICAgIHJ0eF9p bnNuICpjbXAgPSBlbWl0X2luc25fYmVmb3JlICh4Y29tcGFyZSwgaW5zbjEpOworICAgICAg cnR4X2p1bXBfaW5zbiAqYnJhbmNoMSA9IGVtaXRfanVtcF9pbnNuX2JlZm9yZSAoeHBhdDEs IGluc24xKTsKKyAgICAgIHJ0eF9qdW1wX2luc24gKmJyYW5jaDIgPSBlbWl0X2p1bXBfaW5z bl9iZWZvcmUgKHhwYXQyLCBpbnNuMik7CisKKyAgICAgIEpVTVBfTEFCRUwgKGJyYW5jaDEp ID0geG9wMVszXTsKKyAgICAgIEpVTVBfTEFCRUwgKGJyYW5jaDIpID0geG9wMlszXTsKKyAg ICAgIC8vIGRlbGV0ZV9pbnNuKCkgZGVjcmVtZW50cyBMQUJFTF9OVVNFUyB3aGVuIGRlbGV0 aW5nIGEgSlVNUF9JTlNOLCBidXQKKyAgICAgIC8vIHdoZW4gd2UgcG9wIGEgbmV3IEpVTVBf SU5TTiwgZG8gaXQgYnkgaGFuZC4KKyAgICAgICsrTEFCRUxfTlVTRVMgKHhvcDFbM10pOwor ICAgICAgKytMQUJFTF9OVVNFUyAoeG9wMlszXSk7CisKKyAgICAgIGRlbGV0ZV9pbnNuIChp bnNuMSk7CisgICAgICBkZWxldGVfaW5zbiAoaW5zbjIpOworCisgICAgICAvLyBBcyBhIHNp ZGUgZWZmZWN0LCBhbHNvIHJlY29nIHRoZSBuZXcgaW5zbnMuCisgICAgICBnY2NfYXNzZXJ0 ICh2YWxpZF9pbnNuX3AgKGNtcCkpOworICAgICAgZ2NjX2Fzc2VydCAodmFsaWRfaW5zbl9w IChicmFuY2gxKSk7CisgICAgICBnY2NfYXNzZXJ0ICh2YWxpZF9pbnNuX3AgKGJyYW5jaDIp KTsKKyAgICB9IC8vIGxvb3AgaW5zbnMKK30KKworCiAvKiBTZXQgYGF2cl9hcmNoJyBhcyBz cGVjaWZpZWQgYnkgYC1tbWN1PScuCiAgICBSZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzLiAgKi8K IApAQCAtMzE3MywyOCArMzUxMiw2IEBAIGF2cl9hc21fZmluYWxfcG9zdHNjYW5faW5zbiAo RklMRSAqc3RyZWFtLCBydHhfaW5zbiAqaW5zbiwgcnR4KiwgaW50KQogfQogCiAKLS8qIFJl dHVybiAwIGlmIHVuZGVmaW5lZCwgMSBpZiBhbHdheXMgdHJ1ZSBvciBhbHdheXMgZmFsc2Uu ICAqLwotCi1pbnQKLWF2cl9zaW1wbGlmeV9jb21wYXJpc29uX3AgKG1hY2hpbmVfbW9kZSBt b2RlLCBSVFhfQ09ERSBvcCwgcnR4IHgpCi17Ci0gIHVuc2lnbmVkIGludCBtYXggPSAobW9k ZSA9PSBRSW1vZGUgPyAweGZmIDoKLSAgICAgICAgICAgICAgICAgICAgICBtb2RlID09IEhJ bW9kZSA/IDB4ZmZmZiA6Ci0gICAgICAgICAgICAgICAgICAgICAgbW9kZSA9PSBQU0ltb2Rl ID8gMHhmZmZmZmYgOgotICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPT0gU0ltb2RlID8g MHhmZmZmZmZmZiA6IDApOwotICBpZiAobWF4ICYmIG9wICYmIENPTlNUX0lOVF9QICh4KSkK LSAgICB7Ci0gICAgICBpZiAodW5zaWduZWRfY29uZGl0aW9uIChvcCkgIT0gb3ApCi0gICAg ICAgIG1heCA+Pj0gMTsKLQotICAgICAgaWYgKG1heCAhPSAoSU5UVkFMICh4KSAmIG1heCkK LSAgICAgICAgICAmJiBJTlRWQUwgKHgpICE9IDB4ZmYpCi0gICAgICAgIHJldHVybiAxOwot ICAgIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLQogLyogV29ya2VyIGZ1bmN0aW9uIGZvciBgRlVO Q1RJT05fQVJHX1JFR05PX1AnLiAgKi8KIC8qIFJldHVybnMgbm9uemVybyBpZiBSRUdOTyBp cyB0aGUgbnVtYmVyIG9mIGEgaGFyZAogICAgcmVnaXN0ZXIgaW4gd2hpY2ggZnVuY3Rpb24g YXJndW1lbnRzIGFyZSBzb21ldGltZXMgcGFzc2VkLiAgKi8KQEAgLTU2NzcsMjkgKzU5OTQs MzYgQEAgYXZyX2ZyYW1lX3BvaW50ZXJfcmVxdWlyZWRfcCAodm9pZCkKICAgICAgICAgICB8 fCBnZXRfZnJhbWVfc2l6ZSAoKSA+IDApOwogfQogCi0vKiBSZXR1cm5zIHRoZSBjb25kaXRp b24gb2YgY29tcGFyZSBpbnNuIElOU04sIG9yIFVOS05PV04uICAqLworCisvKiBSZXR1cm5z IHRoZSBjb25kaXRpb24gb2YgdGhlIGJyYW5jaCBmb2xsb3dpbmcgSU5TTiwgd2hlcmUgSU5T TiBpcyBzb21lCisgICBjb21wYXJpc29uLiAgSWYgdGhlIG5leHQgaW5zbiBpcyBub3QgYSBi cmFuY2ggb3IgdGhlIGNvbmRpdGlvbiBjb2RlIHNldAorICAgYnkgSU5TTiBtaWdodCBiZSB1 c2VkIGJ5IG1vcmUgaW5zbnMgdGhhbiB0aGUgbmV4dCBvbmUsIHJldHVybiBVTktOT1dOLgor ICAgRm9yIG5vdywganVzdCBsb29rIGF0IHRoZSBuZXh0IGluc24sIHdoaWNoIG1pc3NlcyBz b21lIG9wcG9ydHVuaXRpZXMgbGlrZQorICAgZm9sbG93aW5nIGp1bXBzLiAgKi8KIAogc3Rh dGljIFJUWF9DT0RFCiBjb21wYXJlX2NvbmRpdGlvbiAocnR4X2luc24gKmluc24pCiB7Ci0g IHJ0eF9pbnNuICpuZXh0ID0gbmV4dF9yZWFsX2luc24gKGluc24pOworICBydHggc2V0Owor ICBydHhfaW5zbiAqbmV4dCA9IG5leHRfcmVhbF9ub25kZWJ1Z19pbnNuIChpbnNuKTsKIAot ICBpZiAobmV4dCAmJiBKVU1QX1AgKG5leHQpKQorICBpZiAobmV4dAorICAgICAgJiYgSlVN UF9QIChuZXh0KQorICAgICAgLy8gSWYgU1JFRyBkb2VzIG5vdCBkaWUgaW4gdGhlIG5leHQg aW5zbiwgaXQgaXMgdXNlZCBpbiBtb3JlIHRoYW4gb25lCisgICAgICAvLyBicmFuY2guICBU aGlzIGNhbiBoYXBwZW4gZHVlIHRvIHBhc3MgLmF2ci1pZmVsc2Ugb3B0aW1pemF0aW9ucy4K KyAgICAgICYmIGRlYWRfb3Jfc2V0X3JlZ25vX3AgKG5leHQsIFJFR19DQykKKyAgICAgIC8v IEJyYW5jaGVzIGFyZSAoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAoQ09ORCAoLi4uKSkpKS4K KyAgICAgICYmIChzZXQgPSBzaW5nbGVfc2V0IChuZXh0KSkKKyAgICAgICYmIEdFVF9DT0RF IChTRVRfU1JDIChzZXQpKSA9PSBJRl9USEVOX0VMU0UpCiAgICAgewotICAgICAgcnR4IHBh dCA9IFBBVFRFUk4gKG5leHQpOwotICAgICAgaWYgKEdFVF9DT0RFIChwYXQpID09IFBBUkFM TEVMKQotICAgICAgICBwYXQgPSBYVkVDRVhQIChwYXQsIDAsIDApOwotICAgICAgcnR4IHNy YyA9IFNFVF9TUkMgKHBhdCk7Ci0KLSAgICAgIGlmIChJRl9USEVOX0VMU0UgPT0gR0VUX0NP REUgKHNyYykpCi0gICAgICAgIHJldHVybiBHRVRfQ09ERSAoWEVYUCAoc3JjLCAwKSk7Cisg ICAgICByZXR1cm4gR0VUX0NPREUgKFhFWFAgKFNFVF9TUkMgKHNldCksIDApKTsKICAgICB9 CiAKICAgcmV0dXJuIFVOS05PV047CiB9CiAKIAotLyogUmV0dXJucyB0cnVlIGlmZiBJTlNO IGlzIGEgdHN0IGluc24gdGhhdCBvbmx5IHRlc3RzIHRoZSBzaWduLiAgKi8KKy8qIFJldHVy bnMgdHJ1ZSBpZiBJTlNOIGlzIGEgdHN0IGluc24gdGhhdCBvbmx5IHRlc3RzIHRoZSBzaWdu LiAgKi8KIAogc3RhdGljIGJvb2wKIGNvbXBhcmVfc2lnbl9wIChydHhfaW5zbiAqaW5zbikK QEAgLTU3MDksMjMgKzYwMzMsOTUgQEAgY29tcGFyZV9zaWduX3AgKHJ0eF9pbnNuICppbnNu KQogfQogCiAKLS8qIFJldHVybnMgdHJ1ZSBpZmYgdGhlIG5leHQgaW5zbiBpcyBhIEpVTVBf SU5TTiB3aXRoIGEgY29uZGl0aW9uCi0gICB0aGF0IG5lZWRzIHRvIGJlIHN3YXBwZWQgKEdU LCBHVFUsIExFLCBMRVUpLiAgKi8KKy8qIFJldHVybnMgdHJ1ZSBpZiBJTlNOIGlzIGEgY29t cGFyZSBpbnNuIHdpdGggdGhlIEVRIG9yIE5FIGNvbmRpdGlvbi4gICovCiAKIHN0YXRpYyBi b29sCi1jb21wYXJlX2RpZmZfcCAocnR4X2luc24gKmluc24pCitjb21wYXJlX2VxX3AgKHJ0 eF9pbnNuICppbnNuKQogewogICBSVFhfQ09ERSBjb25kID0gY29tcGFyZV9jb25kaXRpb24g KGluc24pOwotICByZXR1cm4gKGNvbmQgPT0gR1QgfHwgY29uZCA9PSBHVFUgfHwgY29uZCA9 PSBMRSB8fCBjb25kID09IExFVSkgPyBjb25kIDogMDsKKyAgcmV0dXJuIChjb25kID09IEVR IHx8IGNvbmQgPT0gTkUpOwogfQogCi0vKiBSZXR1cm5zIHRydWUgaWZmIElOU04gaXMgYSBj b21wYXJlIGluc24gd2l0aCB0aGUgRVEgb3IgTkUgY29uZGl0aW9uLiAgKi8KIAotc3RhdGlj IGJvb2wKLWNvbXBhcmVfZXFfcCAocnR4X2luc24gKmluc24pCisvKiBJbXBsZW1lbnQgYFRB UkdFVF9DQU5PTklDQUxJWkVfQ09NUEFSSVNPTicuICAqLworLyogQmFzaWNhbGx5IHRyaWVz IHRvIGNvbnZlcnQgImRpZmZpY3VsdCIgY29tcGFyaXNvbnMgbGlrZSBHVFtVXQorICAgYW5k IExFW1VdIHRvIHNpbXBsZSBvbmVzLiAgU29tZSBhc3ltbWV0cmljIGNvbXBhcmlzb25zIGNh biBiZQorICAgdHJhbnNmb3JtZWQgdG8gRVEgb3IgTkUgYWdhaW5zdCB6ZXJvLiAgKi8KKwor c3RhdGljIHZvaWQKK2F2cl9jYW5vbmljYWxpemVfY29tcGFyaXNvbiAoaW50ICppY29kZSwg cnR4ICpvcDAsIHJ0eCAqb3AxLCBib29sIG9wMF9maXhlZCkKIHsKLSAgUlRYX0NPREUgY29u ZCA9IGNvbXBhcmVfY29uZGl0aW9uIChpbnNuKTsKLSAgcmV0dXJuIChjb25kID09IEVRIHx8 IGNvbmQgPT0gTkUpOworICBlbnVtIHJ0eF9jb2RlIGNvZGUgPSAoZW51bSBydHhfY29kZSkg Kmljb2RlOworICBtYWNoaW5lX21vZGUgbW9kZSA9IEdFVF9NT0RFICgqb3AwKTsKKworICBi b29sIHNpZ25lZF9wID0gY29kZSA9PSBHVCB8fCBjb2RlID09IExFOworICBib29sIHVuc2ln bmVkX3AgPSBjb2RlID09IEdUVSB8fCBjb2RlID09IExFVTsKKyAgYm9vbCBkaWZmaWN1bHRf cCA9IHNpZ25lZF9wIHx8IHVuc2lnbmVkX3A7CisKKyAgaWYgKC8vIE9ubHkgZG8gaW50ZWdl cnMgYW5kIGZpeGVkLXBvaW50cy4KKyAgICAgICghIFNDQUxBUl9JTlRfTU9ERV9QIChtb2Rl KQorICAgICAgICYmICEgQUxMX1NDQUxBUl9GSVhFRF9QT0lOVF9NT0RFX1AgKG1vZGUpKQor ICAgICAgLy8gT25seSBkbyBjb21wYXJpc29ucyBhZ2FpbnN0IGEgcmVnaXN0ZXIuCisgICAg ICB8fCAhIHJlZ2lzdGVyX29wZXJhbmQgKCpvcDAsIG1vZGUpKQorICAgIHJldHVybjsKKwor ICAvLyBDYW5vbmljYWxpemUgImRpZmZpY3VsdCIgcmVnLXJlZyBjb21wYXJpc29ucy4KKwor ICBpZiAoISBvcDBfZml4ZWQKKyAgICAgICYmIGRpZmZpY3VsdF9wCisgICAgICAmJiByZWdp c3Rlcl9vcGVyYW5kICgqb3AxLCBtb2RlKSkKKyAgICB7CisgICAgICBzdGQ6OnN3YXAgKCpv cDAsICpvcDEpOworICAgICAgKmljb2RlID0gKGludCkgc3dhcF9jb25kaXRpb24gKGNvZGUp OworICAgICAgcmV0dXJuOworICAgIH0KKworICAvLyBDYW5vbmljYWxpemUgY29tcGFyaXNv bnMgYWdhaW5zdCBjb21waWxlLXRpbWUgY29uc3RhbnRzLgorCisgIGlmIChDT05TVF9JTlRf UCAoKm9wMSkKKyAgICAgIHx8IENPTlNUX0ZJWEVEX1AgKCpvcDEpKQorICAgIHsKKyAgICAg IC8vIElOVF9NT0RFIG9mIHRoZSBzYW1lIHNpemUuCisgICAgICBzY2FsYXJfaW50X21vZGUg aW1vZGUgPSBpbnRfbW9kZV9mb3JfbW9kZSAobW9kZSkucmVxdWlyZSAoKTsKKworICAgICAg dW5zaWduZWQgSE9TVF9XSURFX0lOVCBtYXNrID0gR0VUX01PREVfTUFTSyAoaW1vZGUpOwor ICAgICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBtYXh2YWwgPSBzaWduZWRfcCA/IG1hc2sg Pj4gMSA6IG1hc2s7CisKKyAgICAgIC8vIENvbnZlcnQgdmFsdWUgKm9wMSB0byBpbW9kZS4K KyAgICAgIHJ0eCB4dmFsID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAoaW1vZGUsICpvcDEsIG1v ZGUsIDApOworCisgICAgICAvLyBDYW5vbmljYWxpemUgZGlmZmljdWx0IGNvbXBhcmlzb25z IGFnYWluc3QgY29uc3QuCisgICAgICBpZiAoZGlmZmljdWx0X3AKKwkgICYmIChVSU5UVkFM ICh4dmFsKSAmIG1hc2spICE9IG1heHZhbCkKKwl7CisJICAvLyBDb252ZXJ0ICpvcDAgPiAq b3AxICB0byAqb3AwID49IDEgKyAqb3AxLgorCSAgLy8gQ29udmVydCAqb3AwIDw9ICpvcDEg dG8gKm9wMCA8ICAxICsgKm9wMS4KKwkgIHh2YWwgPSBzaW1wbGlmeV9iaW5hcnlfb3BlcmF0 aW9uIChQTFVTLCBpbW9kZSwgeHZhbCwgY29uc3QxX3J0eCk7CisKKwkgIC8vIENvbnZlcnQg dmFsdWUgYmFjayB0byBpdHMgb3JpZ2luYWwgbW9kZS4KKwkgICpvcDEgPSBzaW1wbGlmeV9n ZW5fc3VicmVnIChtb2RlLCB4dmFsLCBpbW9kZSwgMCk7CisKKwkgIC8vIE1hcCAgPiAgdG8g ID49ICBhbmQgIDw9ICB0byAgPC4KKwkgICppY29kZSA9IChpbnQpIGF2cl9ub3JtYWxpemVf Y29uZGl0aW9uIChjb2RlKTsKKworCSAgcmV0dXJuOworCX0KKworICAgICAgLy8gU29tZSBh c3ltbWV0cmljIGNvbXBhcmlzb25zIGNhbiBiZSB0dXJuZWQgaW50byBFUSBvciBORS4KKyAg ICAgIGlmIChjb2RlID09IExUVSAmJiB4dmFsID09IGNvbnN0MV9ydHgpCisJeworCSAgKmlj b2RlID0gKGludCkgRVE7CisJICAqb3AxID0gQ09OU1QwX1JUWCAobW9kZSk7CisJICByZXR1 cm47CisJfQorCisgICAgICBpZiAoY29kZSA9PSBHRVUgJiYgeHZhbCA9PSBjb25zdDFfcnR4 KQorCXsKKwkgICppY29kZSA9IChpbnQpIE5FOworCSAgKm9wMSA9IENPTlNUMF9SVFggKG1v ZGUpOworCSAgcmV0dXJuOworCX0KKyAgICB9CiB9CiAKIApAQCAtODE2MCw2ICs4NTU2LDEy MiBAQCBhdnJfb3V0X3BsdXMgKHJ0eCBpbnNuLCBydHggKnhvcCwgaW50ICpwbGVuLCBpbnQg KnBjYywgYm9vbCBvdXRfbGFiZWwpCiB9CiAKIAorLyogT3V0cHV0IGFuIGluc3RydWN0aW9u IHNlcXVlbmNlIGZvciBhZGRpdGlvbiBvZiBSRUcgaW4gWE9QWzBdIGFuZCBDT05TVF9JTlQK KyAgIGluIFhPUFsxXSBpbiBzdWNoIGEgd2F5IHRoYXQgU1JFRy5aIGFuZCBTUkVHLk4gYXJl IHNldCBhY2NvcmRpbmcgdG8gdGhlCisgICByZXN1bHQuICBYT1BbMl0gbWlnaHQgYmUgYSBk LXJlZ3MgY2xvYmJlciByZWdpc3Rlci4gIElmIFhPUFsyXSBpcyBTQ1JBVENILAorICAgdGhl biB0aGUgYWRkaXRpb24gY2FuIGJlIHBlcmZvcm1lZCB3aXRob3V0IGEgY2xvYmJlciByZWcu ICBSZXR1cm4gIiIuCisKKyAgIElmIFBMRU4gPT0gTlVMTCwgdGhlbiBvdXRwdXQgdGhlIGlu c3RydWN0aW9ucy4KKyAgIElmIFBMRU4gIT0gTlVMTCwgdGhlbiBzZXQgKlBMRU4gdG8gdGhl IGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgaW4gd29yZHMuICovCisKK2NvbnN0IGNoYXIqCith dnJfb3V0X3BsdXNfc2V0X1pOIChydHggKnhvcCwgaW50ICpwbGVuKQoreworICBpZiAocGxl bikKKyAgICAqcGxlbiA9IDA7CisKKyAgLy8gUmVnaXN0ZXIgdG8gY29tcGFyZSBhbmQgdmFs dWUgdG8gY29tcGFyZSBhZ2FpbnN0LgorICBydHggeHJlZyA9IHhvcFswXTsKKyAgcnR4IHh2 YWwgPSB4b3BbMV07CisKKyAgbWFjaGluZV9tb2RlIG1vZGUgPSBHRVRfTU9ERSAoeHJlZyk7 CisKKyAgLy8gTnVtYmVyIG9mIGJ5dGVzIHRvIG9wZXJhdGUgb24uICAqLworICBpbnQgbl9i eXRlcyA9IEdFVF9NT0RFX1NJWkUgKG1vZGUpOworCisgIGlmIChuX2J5dGVzID09IDEpCisg ICAgeworICAgICAgaWYgKElOVFZBTCAoeHZhbCkgPT0gMSkKKwlyZXR1cm4gYXZyX2FzbV9s ZW4gKCJpbmMgJTAiLCB4b3AsIHBsZW4sIDEpOworCisgICAgICBpZiAoSU5UVkFMICh4dmFs KSA9PSAtMSkKKwlyZXR1cm4gYXZyX2FzbV9sZW4gKCJkZWMgJTAiLCB4b3AsIHBsZW4sIDEp OworICAgIH0KKworICBpZiAobl9ieXRlcyA9PSAyCisgICAgICAmJiB0ZXN0X2hhcmRfcmVn X2NsYXNzIChBRERXX1JFR1MsIHhyZWcpCisgICAgICAmJiBJTl9SQU5HRSAoSU5UVkFMICh4 dmFsKSwgMSwgNjMpKQorICAgIHsKKyAgICAgIC8vIEFkZCAxNi1iaXQgdmFsdWUgaW4gWzEu LjYzXSB0byBhIHcgcmVnaXN0ZXIuCisgICAgICByZXR1cm4gYXZyX2FzbV9sZW4gKCJhZGl3 ICUwLCAlMSIsIHhvcCwgcGxlbiwgMSk7CisgICAgfQorCisgIC8vIEFkZGl0aW9uIHdvbid0 IHdvcms7IHN1YnRyYWN0IHRoZSBuZWdhdGl2ZSBvZiBYVkFMIGluc3RlYWQuCisgIHh2YWwg PSBzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24gKE5FRywgbW9kZSwgeHZhbCwgbW9kZSk7CisK KyAgLy8gVmFsdWUgKDAuLjB4ZmYpIGhlbGQgaW4gY2xvYmJlciByZWdpc3RlciB4b3BbMl0g b3IgLTEgaWYgdW5rbm93bi4KKyAgaW50IGNsb2JiZXJfdmFsID0gLTE7CisKKyAgLy8gWzBd ID0gQ3VycmVudCBzdWItcmVnaXN0ZXIuCisgIC8vIFsxXSA9IEN1cnJlbnQgcGFydGlhbCB4 dmFsLgorICAvLyBbMl0gPSA4LWJpdCBjbG9iYmVyIGQtcmVnaXN0ZXIgb3IgU0NSQVRDSC4K KyAgcnR4IG9wWzNdOworICBvcFsyXSA9IHhvcFsyXTsKKworICAvLyBXb3JrIGJ5dGUtd2lz ZSBmcm9tIExTQiB0byBNU0IuICBUaGUgbG93ZXIgdHdvIGJ5dGVzIG1pZ2h0IGJlCisgIC8v IFNCSVcnZWQgaW4gb25lIGdvLgorICBmb3IgKGludCBpID0gMDsgaSA8IG5fYnl0ZXM7ICsr aSkKKyAgICB7CisgICAgICBvcFswXSA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKFFJbW9kZSwg eHJlZywgbW9kZSwgaSk7CisKKyAgICAgIGlmIChpID09IDAKKwkgICYmIG5fYnl0ZXMgPj0g MgorCSAgJiYgdGVzdF9oYXJkX3JlZ19jbGFzcyAoQUREV19SRUdTLCBvcFswXSkpCisJewor CSAgb3BbMV0gPSBzaW1wbGlmeV9nZW5fc3VicmVnIChISW1vZGUsIHh2YWwsIG1vZGUsIDAp OworCSAgaWYgKElOX1JBTkdFIChJTlRWQUwgKG9wWzFdKSwgMCwgNjMpKQorCSAgICB7CisJ ICAgICAgLy8gU0JJVyBjYW4gaGFuZGxlIHRoZSBsb3dlciAxNiBiaXRzLgorCSAgICAgIGF2 cl9hc21fbGVuICgic2JpdyAlMCwgJTEiLCBvcCwgcGxlbiwgMSk7CisKKwkgICAgICAvLyBO ZXh0IGJ5dGUgaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkOiBTa2lwIGl0LgorCSAgICAgICsr aTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCX0KKworICAgICAgb3BbMV0gPSBzaW1w bGlmeV9nZW5fc3VicmVnIChRSW1vZGUsIHh2YWwsIG1vZGUsIGkpOworCisgICAgICBpZiAo dGVzdF9oYXJkX3JlZ19jbGFzcyAoTERfUkVHUywgb3BbMF0pKQorCXsKKwkgIC8vIGQtcmVn cyBjYW4gc3VidHJhY3QgaW1tZWRpYXRlcy4KKwkgIGF2cl9hc21fbGVuIChpID09IDAKKwkJ ICAgICAgID8gInN1YmkgJTAsICUxIgorCQkgICAgICAgOiAic2JjaSAlMCwgJTEiLCBvcCwg cGxlbiwgMSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGludCB2YWw4ID0gMHhmZiAmIElO VFZBTCAob3BbMV0pOworCSAgaWYgKHZhbDggPT0gMCkKKwkgICAgeworCSAgICAgIC8vIEFu eSByZWdpc3RlciBjYW4gc3VidHJhY3QgMC4KKwkgICAgICBhdnJfYXNtX2xlbiAoaSA9PSAw CisJCQkgICA/ICJzdWIgJTAsIF9femVyb19yZWdfXyIKKwkJCSAgIDogInNiYyAlMCwgX196 ZXJvX3JlZ19fIiwgb3AsIHBsZW4sIDEpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkg ICAgICAvLyBVc2UgZC1yZWdpc3RlciB0byBob2xkIHBhcnRpYWwgeHZhbC4KKworCSAgICAg IGlmICh2YWw4ICE9IGNsb2JiZXJfdmFsKQorCQl7CisJCSAgLy8gTG9hZCBwYXJ0aWFsIHh2 YWwgdG8gUUkgY2xvYmJlciByZWcgYW5kIG1lbW9pemUgZm9yIGxhdGVyLgorCQkgIGdjY19h c3NlcnQgKFJFR19QIChvcFsyXSkpOworCQkgIGF2cl9hc21fbGVuICgibGRpICUyLCAlMSIs IG9wLCBwbGVuLCAxKTsKKwkJICBjbG9iYmVyX3ZhbCA9IHZhbDg7CisJCX0KKworCSAgICAg IGF2cl9hc21fbGVuIChpID09IDAKKwkJCSAgID8gInN1YiAlMCwgJTIiCisJCQkgICA6ICJz YmMgJTAsICUyIiwgb3AsIHBsZW4sIDEpOworCSAgICB9CisJfQorICAgIH0gLy8gTG9vcCBi eXRlcy4KKworICByZXR1cm4gIiI7Cit9CisKKwogLyogT3V0cHV0IGJpdCBvcGVyYXRpb24g KElPUiwgQU5ELCBYT1IpIHdpdGggcmVnaXN0ZXIgWE9QWzBdIGFuZCBjb21waWxlCiAgICB0 aW1lIGNvbnN0YW50IFhPUFsyXToKIApAQCAtOTMxMSw2ICs5ODIzLDcgQEAgYXZyX2FkanVz dF9pbnNuX2xlbmd0aCAocnR4X2luc24gKmluc24sIGludCBsZW4pCiAgICAgY2FzZSBBREpV U1RfTEVOX0NBTEw6IGxlbiA9IEFWUl9IQVZFX0pNUF9DQUxMID8gMiA6IDE7IGJyZWFrOwog CiAgICAgY2FzZSBBREpVU1RfTEVOX0lOU0VSVF9CSVRTOiBhdnJfb3V0X2luc2VydF9iaXRz IChvcCwgJmxlbik7IGJyZWFrOworICAgIGNhc2UgQURKVVNUX0xFTl9BRERfU0VUX1pOOiBh dnJfb3V0X3BsdXNfc2V0X1pOIChvcCwgJmxlbik7IGJyZWFrOwogCiAgICAgY2FzZSBBREpV U1RfTEVOX0lOU1ZfTk9UQklUOgogICAgICAgYXZyX291dF9pbnNlcnRfbm90Yml0IChpbnNu LCBvcCwgTlVMTF9SVFgsICZsZW4pOwpAQCAtMTA2MDcsNiArMTExMjAsNDIgQEAgYXZyX211 bF9oaWdocGFydF9jb3N0IChydHggeCwgaW50KQogfQogCiAKKy8qIFJldHVybiB0aGUgZXhw ZWN0ZWQgY29zdCBvZiBhIGNvbmRpdGlvbmFsIGJyYW5jaCBsaWtlCisgICAoc2V0IChwYykK KwkoaWZfdGhlbl9lbHNlIChYKQorCQkgICAgICAobGFiZWxfcmVmICopCisJCSAgICAgIChw YykpKQorICAgd2hlcmUgWCBpcyBzb21lIGNvbXBhcmlzb24gb3BlcmF0b3IuICAqLworCitz dGF0aWMgaW50CithdnJfY2JyYW5jaF9jb3N0IChydHggeCkKK3sKKyAgYm9vbCBkaWZmaWN1 bHRfcCA9IGRpZmZpY3VsdF9jb21wYXJpc29uX29wZXJhdG9yICh4LCBWT0lEbW9kZSk7CisK KyAgaWYgKHJlbG9hZF9jb21wbGV0ZWQpCisgICAgeworICAgICAgLy8gQWZ0ZXIgcmVsb2Fk LCB3ZSBiYXNpY2FsbHkganVzdCBoYXZlIHBsYWluIGJyYW5jaGVzLgorICAgICAgcmV0dXJu IENPU1RTX05fSU5TTlMgKDEgKyBkaWZmaWN1bHRfcCk7CisgICAgfQorCisgIHJ0eCB4cmVn ID0gWEVYUCAoeCwgMCk7CisgIHJ0eCB4dmFsID0gWEVYUCAoeCwgMSk7CisgIG1hY2hpbmVf bW9kZSBtb2RlID0gR0VUX01PREUgKHhyZWcpOworICBpZiAobW9kZSA9PSBWT0lEbW9kZSkK KyAgICBtb2RlID0gR0VUX01PREUgKHh2YWwpOworICBpbnQgc2l6ZSA9IEdFVF9NT0RFX1NJ WkUgKG1vZGUpOworICBib29sIHJlZ19wID0gcmVnaXN0ZXJfb3BlcmFuZCAoeHJlZywgbW9k ZSk7CisgIGJvb2wgcmVnX29yXzBfcCA9IHJlZ19vcl8wX29wZXJhbmQgKHh2YWwsIG1vZGUp OworCisgIHJldHVybiBDT1NUU19OX0lOU05TIChzaXplCisJCQkvLyBGb3IgdGhlIGJyYW5j aAorCQkJKyAxICsgZGlmZmljdWx0X3AKKwkJCS8vIENvbWJpbmUgbWlnaHQgcHJvcGFnYXRl IGNvbnN0YW50cyBvdGhlciB0aGFuIHplcm8KKwkJCS8vIGludG8gdGhlIDJuZCBvcGVyYW5k LiAgTWFrZSB0aGF0IG1vcmUgZXhwZW5zaXZlLgorCQkJKyAxICogKCFyZWdfcCB8fCAhcmVn X29yXzBfcCkpOworfQorCisKIC8qIE11dHVhbGx5IHJlY3Vyc2l2ZSBzdWJyb3V0aW5lIG9m IGF2cl9ydHhfY29zdCBmb3IgY2FsY3VsYXRpbmcgdGhlCiAgICBjb3N0IG9mIGFuIFJUWCBv cGVyYW5kIGdpdmVuIGl0cyBjb250ZXh0LiAgWCBpcyB0aGUgcnR4IG9mIHRoZQogICAgb3Bl cmFuZCwgTU9ERSBpcyBpdHMgbW9kZSwgYW5kIE9VVEVSIGlzIHRoZSBydHhfY29kZSBvZiB0 aGlzCkBAIC0xMTQ5MCw2ICsxMjAzOSwxNSBAQCBhdnJfcnR4X2Nvc3RzXzEgKHJ0eCB4LCBt YWNoaW5lX21vZGUgbW9kZSwgaW50IG91dGVyX2NvZGUsCiAgICAgICAgIH0KICAgICAgIGJy ZWFrOwogCisgICAgY2FzZSBJRl9USEVOX0VMU0U6CisgICAgICBpZiAob3V0ZXJfY29kZSA9 PSBTRVQKKwkgICYmIFhFWFAgKHgsIDIpID09IHBjX3J0eAorCSAgJiYgb3JkZXJlZF9jb21w YXJpc29uX29wZXJhdG9yIChYRVhQICh4LCAwKSwgVk9JRG1vZGUpKQorCXsKKwkgICp0b3Rh bCA9IGF2cl9jYnJhbmNoX2Nvc3QgKFhFWFAgKHgsIDApKTsKKwkgIHJldHVybiB0cnVlOwor CX0KKwogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKICAgICB9CkBAIC0xMTYwMiwyODEg KzEyMTYwLDYgQEAgYXZyX25vcm1hbGl6ZV9jb25kaXRpb24gKFJUWF9DT0RFIGNvbmRpdGlv bikKICAgICB9CiB9CiAKLS8qIEhlbHBlciBmdW5jdGlvbiBmb3IgYGF2cl9yZW9yZycuICAq LwotCi1zdGF0aWMgcnR4Ci1hdnJfY29tcGFyZV9wYXR0ZXJuIChydHhfaW5zbiAqaW5zbikK LXsKLSAgcnR4IHBhdHRlcm4gPSBzaW5nbGVfc2V0IChpbnNuKTsKLQotICBpZiAocGF0dGVy bgotICAgICAgJiYgTk9OSlVNUF9JTlNOX1AgKGluc24pCi0gICAgICAmJiBSRUdfUCAoU0VU X0RFU1QgKHBhdHRlcm4pKQotICAgICAgJiYgUkVHTk8gKFNFVF9ERVNUIChwYXR0ZXJuKSkg PT0gUkVHX0NDCi0gICAgICAmJiBHRVRfQ09ERSAoU0VUX1NSQyAocGF0dGVybikpID09IENP TVBBUkUpCi0gICAgewotICAgICAgbWFjaGluZV9tb2RlIG1vZGUwID0gR0VUX01PREUgKFhF WFAgKFNFVF9TUkMgKHBhdHRlcm4pLCAwKSk7Ci0gICAgICBtYWNoaW5lX21vZGUgbW9kZTEg PSBHRVRfTU9ERSAoWEVYUCAoU0VUX1NSQyAocGF0dGVybiksIDEpKTsKLQotICAgICAgLyog VGhlIDY0LWJpdCBjb21wYXJpc29ucyBoYXZlIGZpeGVkIG9wZXJhbmRzIEFDQ19BIGFuZCBB Q0NfQi4KLSAgICAgICAgIFRoZXkgbXVzdCBub3QgYmUgc3dhcHBlZCwgdGh1cyBza2lwIHRo ZW0uICAqLwotCi0gICAgICBpZiAoKG1vZGUwID09IFZPSURtb2RlIHx8IEdFVF9NT0RFX1NJ WkUgKG1vZGUwKSA8PSA0KQotICAgICAgICAgICYmIChtb2RlMSA9PSBWT0lEbW9kZSB8fCBH RVRfTU9ERV9TSVpFIChtb2RlMSkgPD0gNCkpCi0gICAgICAgIHJldHVybiBwYXR0ZXJuOwot ICAgIH0KLQotICByZXR1cm4gTlVMTF9SVFg7Ci19Ci0KLS8qIEhlbHBlciBmdW5jdGlvbiBm b3IgYGF2cl9yZW9yZycuICAqLwotCi0vKiBFeHBhbnNpb24gb2Ygc3dpdGNoL2Nhc2UgZGVj aXNpb24gdHJlZXMgbGVhZHMgdG8gY29kZSBsaWtlCi0KLSAgICAgICBSRUdfQ0MgPSBjb21w YXJlIChSZWcsIE51bSkKLSAgICAgICBpZiAoUkVHX0NDID09IDApCi0gICAgICAgICBnb3Rv IEwxCi0KLSAgICAgICBSRUdfQ0MgPSBjb21wYXJlIChSZWcsIE51bSkKLSAgICAgICBpZiAo UkVHX0NDID4gMCkKLSAgICAgICAgIGdvdG8gTDIKLQotICAgVGhlIHNlY29uZCBjb21wYXJp c29uIGlzIHN1cGVyZmx1b3VzIGFuZCBjYW4gYmUgZGVsZXRlZC4KLSAgIFRoZSBzZWNvbmQg anVtcCBjb25kaXRpb24gY2FuIGJlIHRyYW5zZm9ybWVkIGZyb20gYQotICAgImRpZmZpY3Vs dCIgb25lIHRvIGEgInNpbXBsZSIgb25lIGJlY2F1c2UgIlJFR19DQyA+IDAiIGFuZAotICAg IlJFR19DQyA+PSAwIiB3aWxsIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGhlcmUuCi0KLSAgIFRo aXMgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSB3YXkgc3dpdGNoL2Nhc2UgaXMgYmVpbmcgZXhw YW5lZAotICAgYXMgYmluYXJ5IGRlY2lzaW9uIHRyZWUuICBGb3IgZXhhbXBsZSBjb2RlIHNl ZSBQUiA0OTkwMy4KLQotICAgUmV0dXJuIFRSVUUgaWYgb3B0aW1pemF0aW9uIHBlcmZvcm1l ZC4KLSAgIFJldHVybiBGQUxTRSBpZiBub3RoaW5nIGNoYW5nZWQuCi0KLSAgIElOU04xIGlz IGEgY29tcGFyaXNvbiwgaS5lLiBhdnJfY29tcGFyZV9wYXR0ZXJuICE9IDAuCi0KLSAgIFdl IGRvbid0IHdhbnQgdG8gZG8gdGhpcyBpbiB0ZXh0IHBlZXBob2xlIGJlY2F1c2UgaXQgaXMK LSAgIHRlZGlvdXMgdG8gd29yayBvdXQganVtcCBvZmZzZXRzIHRoZXJlIGFuZCB0aGUgc2Vj b25kIGNvbXBhcmlzb24KLSAgIG1pZ2h0IGhhdmUgYmVlbiB0cmFuc29ybWVkIGJ5IGBhdnJf cmVvcmcnLgotCi0gICBSVEwgcGVlcGhvbGUgd29uJ3QgZG8gYmVjYXVzZSBwZWVwaG9sZTIg ZG9lcyBub3Qgc2NhbiBhY3Jvc3MKLSAgIGJhc2ljIGJsb2Nrcy4gICovCi0KLXN0YXRpYyBi b29sCi1hdnJfcmVvcmdfcmVtb3ZlX3JlZHVuZGFudF9jb21wYXJlIChydHhfaW5zbiAqaW5z bjEpCi17Ci0gIHJ0eCBjb21wMSwgaWZlbHNlMSwgeGNvbmQxOwotICBydHhfaW5zbiAqYnJh bmNoMTsKLSAgcnR4IGNvbXAyLCBpZmVsc2UyLCB4Y29uZDI7Ci0gIHJ0eF9pbnNuICpicmFu Y2gyLCAqaW5zbjI7Ci0gIGVudW0gcnR4X2NvZGUgY29kZTsKLSAgcnR4X2luc24gKmp1bXA7 Ci0gIHJ0eCB0YXJnZXQsIGNvbmQ7Ci0KLSAgLyogTG9vayBvdXQgZm9yOiAgY29tcGFyZTEg LSBicmFuY2gxIC0gY29tcGFyZTIgLSBicmFuY2gyICAqLwotCi0gIGJyYW5jaDEgPSBuZXh0 X25vbm5vdGVfbm9uZGVidWdfaW5zbiAoaW5zbjEpOwotICBpZiAoIWJyYW5jaDEgfHwgIUpV TVBfUCAoYnJhbmNoMSkpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGluc24yID0gbmV4dF9u b25ub3RlX25vbmRlYnVnX2luc24gKGJyYW5jaDEpOwotICBpZiAoIWluc24yIHx8ICFhdnJf Y29tcGFyZV9wYXR0ZXJuIChpbnNuMikpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGJyYW5j aDIgPSBuZXh0X25vbm5vdGVfbm9uZGVidWdfaW5zbiAoaW5zbjIpOwotICBpZiAoIWJyYW5j aDIgfHwgIUpVTVBfUCAoYnJhbmNoMikpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGNvbXAx ID0gYXZyX2NvbXBhcmVfcGF0dGVybiAoaW5zbjEpOwotICBjb21wMiA9IGF2cl9jb21wYXJl X3BhdHRlcm4gKGluc24yKTsKLSAgeGNvbmQxID0gc2luZ2xlX3NldCAoYnJhbmNoMSk7Ci0g IHhjb25kMiA9IHNpbmdsZV9zZXQgKGJyYW5jaDIpOwotCi0gIGlmICghY29tcDEgfHwgIWNv bXAyCi0gICAgICB8fCAhcnR4X2VxdWFsX3AgKGNvbXAxLCBjb21wMikKLSAgICAgIHx8ICF4 Y29uZDEgfHwgU0VUX0RFU1QgKHhjb25kMSkgIT0gcGNfcnR4Ci0gICAgICB8fCAheGNvbmQy IHx8IFNFVF9ERVNUICh4Y29uZDIpICE9IHBjX3J0eAotICAgICAgfHwgSUZfVEhFTl9FTFNF ICE9IEdFVF9DT0RFIChTRVRfU1JDICh4Y29uZDEpKQotICAgICAgfHwgSUZfVEhFTl9FTFNF ICE9IEdFVF9DT0RFIChTRVRfU1JDICh4Y29uZDIpKSkKLSAgICB7Ci0gICAgICByZXR1cm4g ZmFsc2U7Ci0gICAgfQotCi0gIGNvbXAxID0gU0VUX1NSQyAoY29tcDEpOwotICBpZmVsc2Ux ID0gU0VUX1NSQyAoeGNvbmQxKTsKLSAgaWZlbHNlMiA9IFNFVF9TUkMgKHhjb25kMik7Ci0K LSAgLyogY29tcDxuPiBpcyBDT01QQVJFIG5vdyBhbmQgaWZlbHNlPG4+IGlzIElGX1RIRU5f RUxTRS4gICovCi0KLSAgaWYgKEVRICE9IEdFVF9DT0RFIChYRVhQIChpZmVsc2UxLCAwKSkK LSAgICAgIHx8ICFSRUdfUCAoWEVYUCAoY29tcDEsIDApKQotICAgICAgfHwgIUNPTlNUX0lO VF9QIChYRVhQIChjb21wMSwgMSkpCi0gICAgICB8fCBYRVhQIChpZmVsc2UxLCAyKSAhPSBw Y19ydHgKLSAgICAgIHx8IFhFWFAgKGlmZWxzZTIsIDIpICE9IHBjX3J0eAotICAgICAgfHwg TEFCRUxfUkVGICE9IEdFVF9DT0RFIChYRVhQIChpZmVsc2UxLCAxKSkKLSAgICAgIHx8IExB QkVMX1JFRiAhPSBHRVRfQ09ERSAoWEVYUCAoaWZlbHNlMiwgMSkpCi0gICAgICB8fCAhQ09N UEFSSVNPTl9QIChYRVhQIChpZmVsc2UyLCAwKSkKLSAgICAgIHx8IFJFR19DQyAhPSBSRUdO TyAoWEVYUCAoWEVYUCAoaWZlbHNlMSwgMCksIDApKQotICAgICAgfHwgUkVHX0NDICE9IFJF R05PIChYRVhQIChYRVhQIChpZmVsc2UyLCAwKSwgMCkpCi0gICAgICB8fCBjb25zdDBfcnR4 ICE9IFhFWFAgKFhFWFAgKGlmZWxzZTEsIDApLCAxKQotICAgICAgfHwgY29uc3QwX3J0eCAh PSBYRVhQIChYRVhQIChpZmVsc2UyLCAwKSwgMSkpCi0gICAgewotICAgICAgcmV0dXJuIGZh bHNlOwotICAgIH0KLQotICAvKiBXZSBmaWx0ZXJlZCB0aGUgaW5zbiBzZXF1ZW5jZSB0byBs b29rIGxpa2UKLQotICAgICAgICAoc2V0IChyZWc6Q0MgY2MpCi0gICAgICAgICAgICAgKGNv bXBhcmUgKHJlZzpNIE4pCi0gICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCBWQUwp KSkKLSAgICAgICAgKHNldCAocGMpCi0gICAgICAgICAgICAgKGlmX3RoZW5fZWxzZSAoZXEg KHJlZzpDQyBjYykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50 IDApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiBMMSkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIChwYykpKQotCi0gICAgICAgIChzZXQgKHJlZzpDQyBj YykKLSAgICAgICAgICAgICAoY29tcGFyZSAocmVnOk0gTikKLSAgICAgICAgICAgICAgICAg ICAgICAoY29uc3RfaW50IFZBTCkpKQotICAgICAgICAoc2V0IChwYykKLSAgICAgICAgICAg ICAoaWZfdGhlbl9lbHNlIChDT0RFIChyZWc6Q0MgY2MpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxhYmVsX3JlZiBMMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYykpKQot ICAqLwotCi0gIGNvZGUgPSBHRVRfQ09ERSAoWEVYUCAoaWZlbHNlMiwgMCkpOwotCi0gIC8q IE1hcCBHVC9HVFUgdG8gR0UvR0VVIHdoaWNoIGlzIGVhc2llciBmb3IgQVZSLgotICAgICBU aGUgZmlyc3QgdHdvIGluc3RydWN0aW9ucyBjb21wYXJlL2JyYW5jaCBvbiBFUQotICAgICBz byB3ZSBtYXkgcmVwbGFjZSB0aGUgZGlmZmljdWx0Ci0KLSAgICAgICAgaWYgKHggPT0gVkFM KSAgIGdvdG8gTDE7Ci0gICAgICAgIGlmICh4ID4gVkFMKSAgICBnb3RvIEwyOwotCi0gICAg IHdpdGggZWFzeQotCi0gICAgICAgICBpZiAoeCA9PSBWQUwpICAgZ290byBMMTsKLSAgICAg ICAgIGlmICh4ID49IFZBTCkgICBnb3RvIEwyOwotCi0gICAgIFNpbWlsYXJseSwgcmVwbGFj ZSBMRS9MRVUgYnkgTFQvTFRVLiAgKi8KLQotICBzd2l0Y2ggKGNvZGUpCi0gICAgewotICAg IGNhc2UgRVE6Ci0gICAgY2FzZSBMVDogIGNhc2UgTFRVOgotICAgIGNhc2UgR0U6ICBjYXNl IEdFVToKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBMRTogIGNhc2UgTEVVOgotICAgIGNh c2UgR1Q6ICBjYXNlIEdUVToKLSAgICAgIGNvZGUgPSBhdnJfbm9ybWFsaXplX2NvbmRpdGlv biAoY29kZSk7Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4g ZmFsc2U7Ci0gICAgfQotCi0gIC8qIFdyYXAgdGhlIGJyYW5jaGVzIGludG8gVU5TUEVDcyBz byB0aGV5IHdvbid0IGJlIGNoYW5nZWQgb3IKLSAgICAgb3B0aW1pemVkIGluIHRoZSByZW1h aW5kZXIuICAqLwotCi0gIHRhcmdldCA9IFhFWFAgKFhFWFAgKGlmZWxzZTEsIDEpLCAwKTsK LSAgY29uZCA9IFhFWFAgKGlmZWxzZTEsIDApOwotICBqdW1wID0gZW1pdF9qdW1wX2luc25f YWZ0ZXIgKGdlbl9icmFuY2hfdW5zcGVjICh0YXJnZXQsIGNvbmQpLCBpbnNuMSk7Ci0KLSAg SlVNUF9MQUJFTCAoanVtcCkgPSBKVU1QX0xBQkVMIChicmFuY2gxKTsKLQotICB0YXJnZXQg PSBYRVhQIChYRVhQIChpZmVsc2UyLCAxKSwgMCk7Ci0gIGNvbmQgPSBnZW5fcnR4X2ZtdF9l ZSAoY29kZSwgVk9JRG1vZGUsIGNjX3JlZ19ydHgsIGNvbnN0MF9ydHgpOwotICBqdW1wID0g ZW1pdF9qdW1wX2luc25fYWZ0ZXIgKGdlbl9icmFuY2hfdW5zcGVjICh0YXJnZXQsIGNvbmQp LCBpbnNuMik7Ci0KLSAgSlVNUF9MQUJFTCAoanVtcCkgPSBKVU1QX0xBQkVMIChicmFuY2gy KTsKLQotICAvKiBUaGUgY29tcGFyaXNvbnMgaW4gaW5zbjEgYW5kIGluc24yIGFyZSBleGFj dGx5IHRoZSBzYW1lOwotICAgICBpbnNuMiBpcyBzdXBlcmZsdW91cyBzbyBkZWxldGUgaXQu ICAqLwotCi0gIGRlbGV0ZV9pbnNuIChpbnNuMik7Ci0gIGRlbGV0ZV9pbnNuIChicmFuY2gx KTsKLSAgZGVsZXRlX2luc24gKGJyYW5jaDIpOwotCi0gIHJldHVybiB0cnVlOwotfQotCi0K LS8qIEltcGxlbWVudCBgVEFSR0VUX01BQ0hJTkVfREVQRU5ERU5UX1JFT1JHJy4gICovCi0v KiBPcHRpbWl6ZSBjb25kaXRpb25hbCBqdW1wcy4gICovCi0KLXN0YXRpYyB2b2lkCi1hdnJf cmVvcmcgKHZvaWQpCi17Ci0gIHJ0eF9pbnNuICppbnNuID0gZ2V0X2luc25zKCk7Ci0KLSAg Zm9yIChpbnNuID0gbmV4dF9yZWFsX2luc24gKGluc24pOyBpbnNuOyBpbnNuID0gbmV4dF9y ZWFsX2luc24gKGluc24pKQotICAgIHsKLSAgICAgIHJ0eCBwYXR0ZXJuID0gYXZyX2NvbXBh cmVfcGF0dGVybiAoaW5zbik7Ci0KLSAgICAgIGlmICghcGF0dGVybikKLSAgICAgICAgY29u dGludWU7Ci0KLSAgICAgIGlmIChvcHRpbWl6ZQotICAgICAgICAgICYmIGF2cl9yZW9yZ19y ZW1vdmVfcmVkdW5kYW50X2NvbXBhcmUgKGluc24pKQotICAgICAgICB7Ci0gICAgICAgICAg Y29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgaWYgKGNvbXBhcmVfZGlmZl9wIChpbnNu KSkKLQl7Ci0gICAgICAgICAgLyogTm93IHdlIHdvcmsgdW5kZXIgY29tcGFyZSBpbnNuIHdp dGggZGlmZmljdWx0IGJyYW5jaC4gICovCi0KLQkgIHJ0eF9pbnNuICpuZXh0ID0gbmV4dF9y ZWFsX2luc24gKGluc24pOwotICAgICAgICAgIHJ0eCBwYXQgPSBQQVRURVJOIChuZXh0KTsK LSAgICAgICAgICBpZiAoR0VUX0NPREUgKHBhdCkgPT0gUEFSQUxMRUwpCi0gICAgICAgICAg ICBwYXQgPSBYVkVDRVhQIChwYXQsIDAsIDApOwotCi0gICAgICAgICAgcGF0dGVybiA9IFNF VF9TUkMgKHBhdHRlcm4pOwotCi0gICAgICAgICAgaWYgKHRydWVfcmVnbnVtIChYRVhQIChw YXR0ZXJuLCAwKSkgPj0gMAotICAgICAgICAgICAgICAmJiB0cnVlX3JlZ251bSAoWEVYUCAo cGF0dGVybiwgMSkpID49IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJ0eCB4 ID0gWEVYUCAocGF0dGVybiwgMCk7Ci0gICAgICAgICAgICAgIHJ0eCBzcmMgPSBTRVRfU1JD IChwYXQpOwotICAgICAgICAgICAgICBydHggdCA9IFhFWFAgKHNyYywgMCk7Ci0gICAgICAg ICAgICAgIFBVVF9DT0RFICh0LCBzd2FwX2NvbmRpdGlvbiAoR0VUX0NPREUgKHQpKSk7Ci0g ICAgICAgICAgICAgIFhFWFAgKHBhdHRlcm4sIDApID0gWEVYUCAocGF0dGVybiwgMSk7Ci0g ICAgICAgICAgICAgIFhFWFAgKHBhdHRlcm4sIDEpID0geDsKLSAgICAgICAgICAgICAgSU5T Tl9DT0RFIChuZXh0KSA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYg KHRydWVfcmVnbnVtIChYRVhQIChwYXR0ZXJuLCAwKSkgPj0gMAotICAgICAgICAgICAgICAg ICAgICYmIFhFWFAgKHBhdHRlcm4sIDEpID09IGNvbnN0MF9ydHgpCi0gICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgIC8qIFRoaXMgaXMgYSB0c3QgaW5zbiwgd2UgY2FuIHJldmVyc2Ug aXQuICAqLwotICAgICAgICAgICAgICBydHggc3JjID0gU0VUX1NSQyAocGF0KTsKLSAgICAg ICAgICAgICAgcnR4IHQgPSBYRVhQIChzcmMsIDApOwotCi0gICAgICAgICAgICAgIFBVVF9D T0RFICh0LCBzd2FwX2NvbmRpdGlvbiAoR0VUX0NPREUgKHQpKSk7Ci0gICAgICAgICAgICAg IFhFWFAgKHBhdHRlcm4sIDEpID0gWEVYUCAocGF0dGVybiwgMCk7Ci0gICAgICAgICAgICAg IFhFWFAgKHBhdHRlcm4sIDApID0gY29uc3QwX3J0eDsKLSAgICAgICAgICAgICAgSU5TTl9D T0RFIChuZXh0KSA9IC0xOwotICAgICAgICAgICAgICBJTlNOX0NPREUgKGluc24pID0gLTE7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAodHJ1ZV9yZWdudW0gKFhFWFAg KHBhdHRlcm4sIDApKSA+PSAwCi0gICAgICAgICAgICAgICAgICAgJiYgQ09OU1RfSU5UX1Ag KFhFWFAgKHBhdHRlcm4sIDEpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcnR4 IHggPSBYRVhQIChwYXR0ZXJuLCAxKTsKLSAgICAgICAgICAgICAgcnR4IHNyYyA9IFNFVF9T UkMgKHBhdCk7Ci0gICAgICAgICAgICAgIHJ0eCB0ID0gWEVYUCAoc3JjLCAwKTsKLSAgICAg ICAgICAgICAgbWFjaGluZV9tb2RlIG1vZGUgPSBHRVRfTU9ERSAoWEVYUCAocGF0dGVybiwg MCkpOwotCi0gICAgICAgICAgICAgIGlmIChhdnJfc2ltcGxpZnlfY29tcGFyaXNvbl9wICht b2RlLCBHRVRfQ09ERSAodCksIHgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg ICAgICAgIFhFWFAgKHBhdHRlcm4sIDEpID0gZ2VuX2ludF9tb2RlIChJTlRWQUwgKHgpICsg MSwgbW9kZSk7Ci0gICAgICAgICAgICAgICAgICBQVVRfQ09ERSAodCwgYXZyX25vcm1hbGl6 ZV9jb25kaXRpb24gKEdFVF9DT0RFICh0KSkpOwotICAgICAgICAgICAgICAgICAgSU5TTl9D T0RFIChuZXh0KSA9IC0xOwotICAgICAgICAgICAgICAgICAgSU5TTl9DT0RFIChpbnNuKSA9 IC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg IH0KLX0KIAogLyogUmV0dXJucyByZWdpc3RlciBudW1iZXIgZm9yIGZ1bmN0aW9uIHJldHVy biB2YWx1ZS4qLwogCkBAIC0xNDU4MCw4ICsxNDg2Myw2IEBAIGF2cl9mbG9hdF9saWJfY29t cGFyZV9yZXR1cm5zX2Jvb2wgKG1hY2hpbmVfbW9kZSBtb2RlLCBlbnVtIHJ0eF9jb2RlKQog I2RlZmluZSBUQVJHRVRfUlRYX0NPU1RTIGF2cl9ydHhfY29zdHMKICN1bmRlZiAgVEFSR0VU X0FERFJFU1NfQ09TVAogI2RlZmluZSBUQVJHRVRfQUREUkVTU19DT1NUIGF2cl9hZGRyZXNz X2Nvc3QKLSN1bmRlZiAgVEFSR0VUX01BQ0hJTkVfREVQRU5ERU5UX1JFT1JHCi0jZGVmaW5l IFRBUkdFVF9NQUNISU5FX0RFUEVOREVOVF9SRU9SRyBhdnJfcmVvcmcKICN1bmRlZiAgVEFS R0VUX0ZVTkNUSU9OX0FSRwogI2RlZmluZSBUQVJHRVRfRlVOQ1RJT05fQVJHIGF2cl9mdW5j dGlvbl9hcmcKICN1bmRlZiAgVEFSR0VUX0ZVTkNUSU9OX0FSR19BRFZBTkNFCkBAIC0xNDcx MSw2ICsxNDk5Miw5IEBAIGF2cl9mbG9hdF9saWJfY29tcGFyZV9yZXR1cm5zX2Jvb2wgKG1h Y2hpbmVfbW9kZSBtb2RlLCBlbnVtIHJ0eF9jb2RlKQogI3VuZGVmICBUQVJHRVRfTURfQVNN X0FESlVTVAogI2RlZmluZSBUQVJHRVRfTURfQVNNX0FESlVTVCBhdnJfbWRfYXNtX2FkanVz dAogCisjdW5kZWYgIFRBUkdFVF9DQU5PTklDQUxJWkVfQ09NUEFSSVNPTgorI2RlZmluZSBU QVJHRVRfQ0FOT05JQ0FMSVpFX0NPTVBBUklTT04gYXZyX2Nhbm9uaWNhbGl6ZV9jb21wYXJp c29uCisKIHN0cnVjdCBnY2NfdGFyZ2V0IHRhcmdldG0gPSBUQVJHRVRfSU5JVElBTElaRVI7 CiAKIAwKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXZyL2F2ci5tZCBiL2djYy9jb25maWcv YXZyL2F2ci5tZAppbmRleCA0M2I3NTA0NjM4NC4uNWM4ZTM3NmY3ZGEgMTAwNjQ0Ci0tLSBh L2djYy9jb25maWcvYXZyL2F2ci5tZAorKysgYi9nY2MvY29uZmlnL2F2ci9hdnIubWQKQEAg LTc3LDcgKzc3LDYgQEAgKGRlZmluZV9jX2VudW0gInVuc3BlYyIKICAgIFVOU1BFQ19GTVVM UwogICAgVU5TUEVDX0ZNVUxTVQogICAgVU5TUEVDX0NPUFlTSUdOCi0gICBVTlNQRUNfSURF TlRJVFkKICAgIFVOU1BFQ19JTlNFUlRfQklUUwogICAgVU5TUEVDX1JPVU5ECiAgICBdKQpA QCAtMTY1LDYgKzE2NCw3IEBAIChkZWZpbmVfYXR0ciAiYWRqdXN0X2xlbiIKICAgIGFzaGxz aSwgYXNocnNpLCBsc2hyc2ksCiAgICBhc2hscHNpLCBhc2hycHNpLCBsc2hycHNpLAogICAg aW5zZXJ0X2JpdHMsIGluc3Zfbm90Yml0LCBpbnN2X25vdGJpdF8wLCBpbnN2X25vdGJpdF83 LAorICAgYWRkX3NldF9aTiwKICAgIG5vIgogICAoY29uc3Rfc3RyaW5nICJubyIpKQogCkBA IC02NDQ4LDgwICs2NDQ4LDQ2IEBAIChkZWZpbmVfaW5zbl9hbmRfc3BsaXQgInplcm9fZXh0 ZW5kc2lkaTIiCiA7Ozw9Pjw9Pjw9Pjw9Pjw9Pjw9Pjw9Pjw9Pjw9Pjw9Pjw9Pjw9Pjw9Pjw9 Pjw9Pjw9Pjw9Pjw9Pjw9Pjw9Pjw9Pjw9Pjw9Pjw9Pjw9PgogOzsgY29tcGFyZQogCi07IE9w dGltaXplIG5lZ2F0ZWQgdGVzdHMgaW50byByZXZlcnNlIGNvbXBhcmUgaWYgb3ZlcmZsb3cg aXMgdW5kZWZpbmVkLgotKGRlZmluZV9pbnNuICIqbmVnYXRlZF90c3RxaSIKKzs7ICIqc3dh cHBlZF90c3RxaSIKKzs7ICIqc3dhcHBlZF90c3RxcSIgIipzd2FwcGVkX3RzdHVxcSIKKyhk ZWZpbmVfaW5zbiAiKnN3YXBwZWRfdHN0PG1vZGU+IgogICBbKHNldCAocmVnOkNDIFJFR19D QykKLSAgICAgICAgKGNvbXBhcmU6Q0MgKG5lZzpRSSAobWF0Y2hfb3BlcmFuZDpRSSAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQotICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDAp KSldCi0gICJyZWxvYWRfY29tcGxldGVkICYmICFmbGFnX3dyYXB2ICYmICFmbGFnX3RyYXB2 IgotICAiY3AgX196ZXJvX3JlZ19fLCUwIgotICBbKHNldF9hdHRyICJsZW5ndGgiICIxIild KQotCi0oZGVmaW5lX2luc24gIipyZXZlcnNlZF90c3RxaSIKLSAgWyhzZXQgKHJlZzpDQyBS RUdfQ0MpCi0gICAgICAgIChjb21wYXJlOkNDIChjb25zdF9pbnQgMCkKLSAgICAgICAgICAg ICAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQor ICAgICAgICAoY29tcGFyZTpDQyAobWF0Y2hfb3BlcmFuZDpBTEwxIDAgImNvbnN0MF9vcGVy YW5kIiAgICJZMDAiKQorICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpBTEwx IDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKV0KICAgInJlbG9hZF9jb21wbGV0ZWQiCi0g ICJjcCBfX3plcm9fcmVnX18sJTAiCi1bKHNldF9hdHRyICJsZW5ndGgiICIyIildKQorICAi Y3AgX196ZXJvX3JlZ19fLCUxIgorWyhzZXRfYXR0ciAibGVuZ3RoIiAiMSIpXSkKIAotKGRl ZmluZV9pbnNuICIqbmVnYXRlZF90c3RoaSIKLSAgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCi0g ICAgICAgIChjb21wYXJlOkNDIChuZWc6SEkgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0 ZXJfb3BlcmFuZCIgInIiKSkKLSAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKSkpXQot ICAicmVsb2FkX2NvbXBsZXRlZCAmJiAhZmxhZ193cmFwdiAmJiAhZmxhZ190cmFwdiIKLSAg ImNwIF9femVyb19yZWdfXywlQTAKLQljcGMgX196ZXJvX3JlZ19fLCVCMCIKLVsoc2V0X2F0 dHIgImxlbmd0aCIgIjIiKV0pCi0KLTs7IExlYXZlIGhlcmUgdGhlIGNsb2JiZXIgdXNlZCBi eSB0aGUgY21waGkgcGF0dGVybiBmb3Igc2ltcGxpY2l0eSwgZXZlbgotOzsgdGhvdWdoIGl0 IGlzIHVudXNlZCwgYmVjYXVzZSB0aGlzIHBhdHRlcm4gaXMgc3ludGhlc2l6ZWQgYnkgYXZy X3Jlb3JnLgotKGRlZmluZV9pbnNuICIqcmV2ZXJzZWRfdHN0aGkiCisKKzs7ICIqc3dhcHBl ZF90c3RoaSIKKzs7ICIqc3dhcHBlZF90c3RocSIgIipzd2FwcGVkX3RzdHVocSIKKzs7ICIq c3dhcHBlZF90c3RoYSIgIipzd2FwcGVkX3RzdHVoYSIKKyhkZWZpbmVfaW5zbiAiKnN3YXBw ZWRfdHN0PG1vZGU+IgogICBbKHNldCAocmVnOkNDIFJFR19DQykKLSAgICAgICAgKGNvbXBh cmU6Q0MgKGNvbnN0X2ludCAwKQotICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpI SSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkKLSAgIChjbG9iYmVyIChtYXRjaF9zY3Jh dGNoOlFJIDEgIj1YIikpXQorICAgICAgICAoY29tcGFyZTpDQyAobWF0Y2hfb3BlcmFuZDpB TEwyIDAgImNvbnN0MF9vcGVyYW5kIiAgICJZMDAiKQorICAgICAgICAgICAgICAgICAgICAo bWF0Y2hfb3BlcmFuZDpBTEwyIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKV0KICAgInJl bG9hZF9jb21wbGV0ZWQiCi0gICJjcCBfX3plcm9fcmVnX18sJUEwCi0JY3BjIF9femVyb19y ZWdfXywlQjAiCi1bKHNldF9hdHRyICJsZW5ndGgiICIyIildKQorICAiY3AgX196ZXJvX3Jl Z19fLCVBMQorCWNwYyBfX3plcm9fcmVnX18sJUIxIgorICBbKHNldF9hdHRyICJsZW5ndGgi ICIyIildKQogCi0oZGVmaW5lX2luc24gIipuZWdhdGVkX3RzdHBzaSIKLSAgWyhzZXQgKHJl ZzpDQyBSRUdfQ0MpCi0gICAgICAgIChjb21wYXJlOkNDIChuZWc6UFNJIChtYXRjaF9vcGVy YW5kOlBTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQotICAgICAgICAgICAgICAgICAo Y29uc3RfaW50IDApKSldCi0gICJyZWxvYWRfY29tcGxldGVkICYmICFmbGFnX3dyYXB2ICYm ICFmbGFnX3RyYXB2IgotICAiY3AgX196ZXJvX3JlZ19fLCVBMFw7Y3BjIF9femVyb19yZWdf XywlQjBcO2NwYyBfX3plcm9fcmVnX18sJUMwIgotICBbKHNldF9hdHRyICJsZW5ndGgiICIz IildKQogCi0oZGVmaW5lX2luc24gIipyZXZlcnNlZF90c3Rwc2kiCisoZGVmaW5lX2luc24g Iipzd2FwcGVkX3RzdHBzaSIKICAgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCiAgICAgICAgIChj b21wYXJlOkNDIChjb25zdF9pbnQgMCkKLSAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJh bmQ6UFNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQotICAgKGNsb2JiZXIgKG1hdGNo X3NjcmF0Y2g6UUkgMSAiPVgiKSldCisgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVy YW5kOlBTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSldCiAgICJyZWxvYWRfY29tcGxl dGVkIgogICAiY3AgX196ZXJvX3JlZ19fLCVBMFw7Y3BjIF9femVyb19yZWdfXywlQjBcO2Nw YyBfX3plcm9fcmVnX18sJUMwIgogICBbKHNldF9hdHRyICJsZW5ndGgiICIzIildKQogCi0o ZGVmaW5lX2luc24gIipuZWdhdGVkX3RzdHNpIgotICBbKHNldCAocmVnOkNDIFJFR19DQykK LSAgICAgICAgKGNvbXBhcmU6Q0MgKG5lZzpTSSAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdp c3Rlcl9vcGVyYW5kIiAiciIpKQotICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKSld Ci0gICJyZWxvYWRfY29tcGxldGVkICYmICFmbGFnX3dyYXB2ICYmICFmbGFnX3RyYXB2Igot ICAiY3AgX196ZXJvX3JlZ19fLCVBMAotCWNwYyBfX3plcm9fcmVnX18sJUIwCi0JY3BjIF9f emVyb19yZWdfXywlQzAKLQljcGMgX196ZXJvX3JlZ19fLCVEMCIKLSAgWyhzZXRfYXR0ciAi bGVuZ3RoIiAiNCIpXSkKIAotOzsgIipyZXZlcnNlZF90c3RzaSIKLTs7ICIqcmV2ZXJzZWRf dHN0c3EiICIqcmV2ZXJzZWRfdHN0dXNxIgotOzsgIipyZXZlcnNlZF90c3RzYSIgIipyZXZl cnNlZF90c3R1c2EiCi0oZGVmaW5lX2luc24gIipyZXZlcnNlZF90c3Q8bW9kZT4iCis7OyAi KnN3YXBwZWRfdHN0c2kiCis7OyAiKnN3YXBwZWRfdHN0c3EiICIqc3dhcHBlZF90c3R1c3Ei Cis7OyAiKnN3YXBwZWRfdHN0c2EiICIqc3dhcHBlZF90c3R1c2EiCisoZGVmaW5lX2luc24g Iipzd2FwcGVkX3RzdDxtb2RlPiIKICAgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCiAgICAgICAg IChjb21wYXJlOkNDIChtYXRjaF9vcGVyYW5kOkFMTDQgMCAiY29uc3QwX29wZXJhbmQiICAg IlkwMCIpCi0gICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkFMTDQgMSAicmVnaXN0 ZXJfb3BlcmFuZCIgInIiKSkpCi0gICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpRSSAyICI9 WCIpKV0KKyAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QUxMNCAxICJyZWdp c3Rlcl9vcGVyYW5kIiAiciIpKSldCiAgICJyZWxvYWRfY29tcGxldGVkIgogICAiY3AgX196 ZXJvX3JlZ19fLCVBMQogCWNwYyBfX3plcm9fcmVnX18sJUIxCkBAIC02NTM1LDcgKzY1MDEs NyBAQCAoZGVmaW5lX2luc24gIipyZXZlcnNlZF90c3Q8bW9kZT4iCiAoZGVmaW5lX2luc24g ImNtcDxtb2RlPjMiCiAgIFsoc2V0IChyZWc6Q0MgUkVHX0NDKQogICAgICAgICAoY29tcGFy ZTpDQyAobWF0Y2hfb3BlcmFuZDpBTEwxIDAgInJlZ2lzdGVyX29wZXJhbmQiICAiciAgLHIs ZCIpCi0gICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkFMTDEgMSAibm9ubWVtb3J5 X29wZXJhbmQiICJZMDAscixpIikpKV0KKyAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29w ZXJhbmQ6QUxMMSAxICJub25tZW1vcnlfb3BlcmFuZCIgIlkwMCxyLGkiKSkpXQogICAicmVs b2FkX2NvbXBsZXRlZCIKICAgIkAKIAl0c3QgJTAKQEAgLTY1NDYsNyArNjUxMiw3IEBAIChk ZWZpbmVfaW5zbiAiY21wPG1vZGU+MyIKIChkZWZpbmVfaW5zbiAiKmNtcHFpX3NpZ25fZXh0 ZW5kIgogICBbKHNldCAocmVnOkNDIFJFR19DQykKICAgICAgICAgKGNvbXBhcmU6Q0MgKHNp Z25fZXh0ZW5kOkhJIChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICJk IikpCi0gICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkhJIDEgInM4X29wZXJhbmQi ICAgICAgICAgICAgICAgICAgICAgICAibiIpKSldCisgICAgICAgICAgICAgICAgICAgICht YXRjaF9vcGVyYW5kOkhJIDEgInM4X29wZXJhbmQiICAgICAgICAgICAgICAgICAgICAgICAi biIpKSldCiAgICJyZWxvYWRfY29tcGxldGVkIgogICAiY3BpICUwLGxvOCglMSkiCiAgIFso c2V0X2F0dHIgImxlbmd0aCIgIjEiKV0pCkBAIC02NTU1LDcgKzY1MjEsNyBAQCAoZGVmaW5l X2luc24gIipjbXBxaV9zaWduX2V4dGVuZCIKIChkZWZpbmVfaW5zbiAiKmNtcGhpLnplcm8t ZXh0ZW5kLjAiCiAgIFsoc2V0IChyZWc6Q0MgUkVHX0NDKQogICAgICAgICAoY29tcGFyZTpD QyAoemVyb19leHRlbmQ6SEkgKG1hdGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFu ZCIgInIiKSkKLSAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0 ZXJfb3BlcmFuZCIgInIiKSkpXQorICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFu ZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSldCiAgICJyZWxvYWRfY29tcGxldGVk IgogICAiY3AgJTAsJUExXDtjcGMgX196ZXJvX3JlZ19fLCVCMSIKICAgWyhzZXRfYXR0ciAi bGVuZ3RoIiAiMiIpXSkKQEAgLTY1NjMsNyArNjUyOSw3IEBAIChkZWZpbmVfaW5zbiAiKmNt cGhpLnplcm8tZXh0ZW5kLjAiCiAoZGVmaW5lX2luc24gIipjbXBoaS56ZXJvLWV4dGVuZC4x IgogICBbKHNldCAocmVnOkNDIFJFR19DQykKICAgICAgICAgKGNvbXBhcmU6Q0MgKG1hdGNo X29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQotICAgICAgICAgICAgICAg ICAoemVyb19leHRlbmQ6SEkgKG1hdGNoX29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFu ZCIgInIiKSkpKV0KKyAgICAgICAgICAgICAgICAgICAgKHplcm9fZXh0ZW5kOkhJIChtYXRj aF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKSldCiAgICJyZWxvYWRf Y29tcGxldGVkIgogICAiY3AgJUEwLCUxXDtjcGMgJUIwLF9femVyb19yZWdfXyIKICAgWyhz ZXRfYXR0ciAibGVuZ3RoIiAiMiIpXSkKQEAgLTY1NzQsOCArNjU0MCw4IEBAIChkZWZpbmVf aW5zbiAiKmNtcGhpLnplcm8tZXh0ZW5kLjEiCiAoZGVmaW5lX2luc24gImNtcDxtb2RlPjMi CiAgIFsoc2V0IChyZWc6Q0MgUkVHX0NDKQogICAgICAgICAoY29tcGFyZTpDQyAobWF0Y2hf b3BlcmFuZDpBTEwyIDAgInJlZ2lzdGVyX29wZXJhbmQiICAiIXcgICxyICAscixkICxyICAs ZCxyIikKLSAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QUxMMiAxICJub25tZW1v cnlfb3BlcmFuZCIgICJZMDAsWTAwLHIscyAscyAgLE0sbiBZbm4iKSkpCi0gICAoY2xvYmJl ciAobWF0Y2hfc2NyYXRjaDpRSSAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9WCAg LFggICxYLCZkLCZkICxYLCZkIikpXQorICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3Bl cmFuZDpBTEwyIDEgIm5vbm1lbW9yeV9vcGVyYW5kIiAgIlkwMCxZMDAscixzICxzICAsTSxu IFlubiIpKSkKKyAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOlFJIDIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIj1YICAsWCAgLFgsJmQsJmQgLFgsJmQiKSldCiAgICJyZWxv YWRfY29tcGxldGVkIgogICB7CiAgICAgc3dpdGNoICh3aGljaF9hbHRlcm5hdGl2ZSkKQEAg LTY2MDgsOCArNjU3NCw4IEBAIChkZWZpbmVfaW5zbiAiY21wPG1vZGU+MyIKIChkZWZpbmVf aW5zbiAiKmNtcHBzaSIKICAgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCiAgICAgICAgIChjb21w YXJlOkNDIChtYXRjaF9vcGVyYW5kOlBTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgInIscixk ICxyICAsZCxyIikKLSAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UFNJIDEgIm5v bm1lbW9yeV9vcGVyYW5kIiAiTCxyLHMgLHMgICxNLG4iKSkpCi0gICAoY2xvYmJlciAobWF0 Y2hfc2NyYXRjaDpRSSAyICAgICAgICAgICAgICAgICAgICAgICAgICAiPVgsWCwmZCwmZCAs WCwmZCIpKV0KKyAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UFNJIDEgIm5v bm1lbW9yeV9vcGVyYW5kIiAiTCxyLHMgLHMgICxNLG4iKSkpCisgICAoY2xvYmJlciAobWF0 Y2hfc2NyYXRjaDpRSSAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVgsWCwmZCwm ZCAsWCwmZCIpKV0KICAgInJlbG9hZF9jb21wbGV0ZWQiCiAgIHsKICAgICBzd2l0Y2ggKHdo aWNoX2FsdGVybmF0aXZlKQpAQCAtNjY0MCw4ICs2NjA2LDggQEAgKGRlZmluZV9pbnNuICIq Y21wcHNpIgogKGRlZmluZV9pbnNuICIqY21wPG1vZGU+IgogICBbKHNldCAocmVnOkNDIFJF R19DQykKICAgICAgICAgKGNvbXBhcmU6Q0MgKG1hdGNoX29wZXJhbmQ6QUxMNCAwICJyZWdp c3Rlcl9vcGVyYW5kIiAgInIgICxyICxkLHIgLHIiKQotICAgICAgICAgICAgICAgICAobWF0 Y2hfb3BlcmFuZDpBTEw0IDEgIm5vbm1lbW9yeV9vcGVyYW5kIiAiWTAwLHIgLE0sTSAsbiBZ bm4iKSkpCi0gICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpRSSAyICAgICAgICAgICAgICAg ICAgICAgICAgICAgIj1YICAsWCAsWCwmZCwmZCIpKV0KKyAgICAgICAgICAgICAgICAgICAg KG1hdGNoX29wZXJhbmQ6QUxMNCAxICJub25tZW1vcnlfb3BlcmFuZCIgIlkwMCxyICxNLE0g LG4gWW5uIikpKQorICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkgMiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICI9WCAgLFggLFgsJmQsJmQiKSldCiAgICJyZWxvYWRfY29t cGxldGVkIgogICB7CiAgICAgaWYgKDAgPT0gd2hpY2hfYWx0ZXJuYXRpdmUpCkBAIC02NjU1 LDYgKzY2MjEsMTMgQEAgKGRlZmluZV9pbnNuICIqY21wPG1vZGU+IgogICAgKHNldF9hdHRy ICJhZGp1c3RfbGVuIiAidHN0c2ksKixjb21wYXJlLGNvbXBhcmUsY29tcGFyZSIpXSkKIAog Cis7OyBBIGhlbHBlciBmb3IgYXZyX3Bhc3NfaWZlbHNlOjphdnJfcmVzdF9vZl9oYW5kbGVf aWZlbHNlKCkuCisoZGVmaW5lX2V4cGFuZCAiZ2VuX2NvbXBhcmU8bW9kZT4iCisgIFsocGFy YWxsZWwgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCisgICAgICAgICAgICAgICAgICAgKGNvbXBh cmU6Q0MgKG1hdGNoX29wZXJhbmQ6SElTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpISVNJIDEgImNvbnN0 X2ludF9vcGVyYW5kIikpKQorICAgICAgICAgICAgICAoY2xvYmJlciAobWF0Y2hfb3BlcmFu ZDpRSSAyICJzY3JhdGNoX29wZXJhbmQiKSldKV0pCisKIDs7IC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K IDs7IEpVTVAgSU5TVFJVQ1RJT05TCiA7OyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02NjYzLDUz ICs2NjM2LDY5IEBAIChkZWZpbmVfaW5zbiAiKmNtcDxtb2RlPiIKIChkZWZpbmVfZXhwYW5k ICJjYnJhbmNoPG1vZGU+NCIKICAgWyhzZXQgKHBjKQogICAgICAgICAoaWZfdGhlbl9lbHNl IChtYXRjaF9vcGVyYXRvciAwICJvcmRlcmVkX2NvbXBhcmlzb25fb3BlcmF0b3IiCi0gICAg ICAgICAgICAgICAgICAgICAgICBbKG1hdGNoX29wZXJhbmQ6QUxMMSAxICJyZWdpc3Rlcl9v cGVyYW5kIiAiIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpB TEwxIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAiIildKQotICAgICAgICAgKGxhYmVsX3JlZiAo bWF0Y2hfb3BlcmFuZCAzICIiICIiKSkKLSAgICAgICAgIChwYykpKV0pCisgICAgICAgICAg ICAgICAgICAgICAgICBbKG1hdGNoX29wZXJhbmQ6QUxMMSAxICJyZWdpc3Rlcl9vcGVyYW5k IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpBTEwxIDIgIm5v bm1lbW9yeV9vcGVyYW5kIildKQorICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYg KG1hdGNoX29wZXJhbmQgMykpCisgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpXQorICAi IgorICB7CisgICAgaW50IGljb2RlID0gKGludCkgR0VUX0NPREUgKG9wZXJhbmRzWzBdKTsK KworICAgIHRhcmdldG0uY2Fub25pY2FsaXplX2NvbXBhcmlzb24gKCZpY29kZSwgJm9wZXJh bmRzWzFdLCAmb3BlcmFuZHNbMl0sIGZhbHNlKTsKKyAgICBvcGVyYW5kc1swXSA9IGdlbl9y dHhfZm10X2VlICgoZW51bSBydHhfY29kZSkgaWNvZGUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVk9JRG1vZGUsIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSk7Cisg IH0pCiAKIChkZWZpbmVfZXhwYW5kICJjYnJhbmNoPG1vZGU+NCIKICAgWyhwYXJhbGxlbAog ICAgICBbKHNldCAocGMpCi0gICAgICAgICAgIChpZl90aGVuX2Vsc2UKLSAgICAgICAgICAg ICAobWF0Y2hfb3BlcmF0b3IgMCAib3JkZXJlZF9jb21wYXJpc29uX29wZXJhdG9yIgotICAg ICAgICAgICAgICAgWyhtYXRjaF9vcGVyYW5kOk9SREVSRUQyMzQgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgIiIpCi0gICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6T1JERVJFRDIzNCAy ICJub25tZW1vcnlfb3BlcmFuZCIgIiIpXSkKLSAgICAgICAgICAgICAobGFiZWxfcmVmICht YXRjaF9vcGVyYW5kIDMgIiIgIiIpKQotICAgICAgICAgICAgIChwYykpKQotICAgICAgKGNs b2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkgNCAiIikpXSldKQotCi07OyAiKmNicmFuY2hxaTQi Ci07OyAiKmNicmFuY2hxcTQiICAiKmNicmFuY2h1cXE0IgotKGRlZmluZV9pbnNuX2FuZF9z cGxpdCAiKmNicmFuY2g8bW9kZT40IgorICAgICAgICAgICAoaWZfdGhlbl9lbHNlIChtYXRj aF9vcGVyYXRvciAwICJvcmRlcmVkX2NvbXBhcmlzb25fb3BlcmF0b3IiCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBbKG1hdGNoX29wZXJhbmQ6T1JERVJFRDIzNCAxICJyZWdpc3Rl cl9vcGVyYW5kIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFu ZDpPUkRFUkVEMjM0IDIgIm5vbm1lbW9yeV9vcGVyYW5kIildKQorICAgICAgICAgICAgICAg ICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMykpCisgICAgICAgICAgICAg ICAgICAgICAgICAgKHBjKSkpCisgICAgICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpRSSA0 KSldKV0KKyAgIiIKKyAgeworICAgIGludCBpY29kZSA9IChpbnQpIEdFVF9DT0RFIChvcGVy YW5kc1swXSk7CisKKyAgICB0YXJnZXRtLmNhbm9uaWNhbGl6ZV9jb21wYXJpc29uICgmaWNv ZGUsICZvcGVyYW5kc1sxXSwgJm9wZXJhbmRzWzJdLCBmYWxzZSk7CisgICAgb3BlcmFuZHNb MF0gPSBnZW5fcnR4X2ZtdF9lZSAoKGVudW0gcnR4X2NvZGUpIGljb2RlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZPSURtb2RlLCBvcGVyYW5kc1sxXSwgb3BlcmFu ZHNbMl0pOworICB9KQorCisKKzs7ICJjYnJhbmNocWk0X2luc24iCis7OyAiY2JyYW5jaHFx NF9pbnNuIiAgImNicmFuY2h1cXE0X2luc24iCisoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJj YnJhbmNoPG1vZGU+NF9pbnNuIgogICBbKHNldCAocGMpCiAgICAgICAgIChpZl90aGVuX2Vs c2UgKG1hdGNoX29wZXJhdG9yIDAgIm9yZGVyZWRfY29tcGFyaXNvbl9vcGVyYXRvciIKLSAg ICAgICAgICAgICAgICAgICAgICAgIFsobWF0Y2hfb3BlcmFuZDpBTEwxIDEgInJlZ2lzdGVy X29wZXJhbmQiICJyICAscixkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIFsobWF0Y2hf b3BlcmFuZDpBTEwxIDEgInJlZ2lzdGVyX29wZXJhbmQiICAiciAgLHIsZCIpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QUxMMSAyICJub25tZW1vcnlfb3Bl cmFuZCIgIlkwMCxyLGkiKV0pCi0gICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5k IDMgIiIgIiIpKQotICAgICAgICAgKHBjKSkpXQorICAgICAgICAgICAgICAgICAgICAgIChs YWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMykpCisgICAgICAgICAgICAgICAgICAgICAgKHBj KSkpXQogICAgIiIKICAgICIjIgogICAgInJlbG9hZF9jb21wbGV0ZWQiCiAgICBbKHNldCAo cmVnOkNDIFJFR19DQykKLSAgICAgICAgICAgICAgICAgICAgKGNvbXBhcmU6Q0MgKG1hdGNo X2R1cCAxKSAobWF0Y2hfZHVwIDIpKSkKKyAgICAgICAgIChjb21wYXJlOkNDIChtYXRjaF9k dXAgMSkgKG1hdGNoX2R1cCAyKSkpCiAgICAgKHNldCAocGMpCiAgICAgICAgICAoaWZfdGhl bl9lbHNlIChtYXRjaF9vcF9kdXAgMAogICAgICAgICAgICAgICAgICAgICAgICAgIFsocmVn OkNDIFJFR19DQykgKGNvbnN0X2ludCAwKV0pCiAgICAgICAgICAgICAgICAgICAgICAgIChs YWJlbF9yZWYgKG1hdGNoX2R1cCAzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkp XQotICAgIiIpCisgICAgICAgICAgICAgICAgICAgICAgIChwYykpKV0pCiAKLTs7ICIqY2Jy YW5jaHNpNCIgICIqY2JyYW5jaHNxNCIgICIqY2JyYW5jaHVzcTQiICAiKmNicmFuY2hzYTQi ICAiKmNicmFuY2h1c2E0IgotKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmNicmFuY2g8bW9k ZT40IgorOzsgImNicmFuY2hzaTRfaW5zbiIKKzs7ICJjYnJhbmNoc3E0X2luc24iICAiY2Jy YW5jaHVzcTRfaW5zbiIgICJjYnJhbmNoc2E0X2luc24iICAiY2JyYW5jaHVzYTRfaW5zbiIK KyhkZWZpbmVfaW5zbl9hbmRfc3BsaXQgImNicmFuY2g8bW9kZT40X2luc24iCiAgIFsoc2V0 IChwYykKLSAgICAgICAgICAgKGlmX3RoZW5fZWxzZQotICAgICAgICAgICAgIChtYXRjaF9v cGVyYXRvciAwICJvcmRlcmVkX2NvbXBhcmlzb25fb3BlcmF0b3IiCi0gICAgICAgICAgICAg ICBbKG1hdGNoX29wZXJhbmQ6QUxMNCAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciAgLHIgLGQs ciAsciIpCi0gICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QUxMNCAyICJub25tZW1v cnlfb3BlcmFuZCIgIlkwMCxyICxNLE0gLG4gWW5uIildKQotICAgICAgICAgICAgIChsYWJl bF9yZWYgKG1hdGNoX29wZXJhbmQgMyAiIiAiIikpCi0gICAgICAgICAgICAgKHBjKSkpCi0g ICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpRSSA0ICI9WCAgLFggLFgsJmQsJmQiKSldCisg ICAgICAgIChpZl90aGVuX2Vsc2UKKyAgICAgICAgIChtYXRjaF9vcGVyYXRvciAwICJvcmRl cmVkX2NvbXBhcmlzb25fb3BlcmF0b3IiCisgICAgICAgICAgIFsobWF0Y2hfb3BlcmFuZDpB TEw0IDEgInJlZ2lzdGVyX29wZXJhbmQiICAiciAgLHIsZCxyICxyIikKKyAgICAgICAgICAg IChtYXRjaF9vcGVyYW5kOkFMTDQgMiAibm9ubWVtb3J5X29wZXJhbmQiICJZMDAscixNLE0g LG4gWW5uIildKQorICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAzKSkKKyAg ICAgICAgIChwYykpKQorICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkgNCAgICAgICAg ICAgICAgICAgICAgICAiPVggICxYLFgsJmQsJmQiKSldCiAgICAiIgogICAgIiMiCiAgICAi cmVsb2FkX2NvbXBsZXRlZCIKQEAgLTY3MjAsMTkgKzY3MDksMTggQEAgKGRlZmluZV9pbnNu X2FuZF9zcGxpdCAiKmNicmFuY2g8bW9kZT40IgogICAgICAgICAgKGlmX3RoZW5fZWxzZSAo bWF0Y2hfb3BfZHVwIDAKICAgICAgICAgICAgICAgICAgICAgICAgICBbKHJlZzpDQyBSRUdf Q0MpIChjb25zdF9pbnQgMCldKQogICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVm IChtYXRjaF9kdXAgMykpCi0gICAgICAgICAgICAgICAgICAgICAgIChwYykpKV0KLSAgICIi KQorICAgICAgICAgICAgICAgICAgICAgICAocGMpKSldKQogCi07OyAiKmNicmFuY2hwc2k0 IgotKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmNicmFuY2hwc2k0IgorOzsgImNicmFuY2hw c2k0X2luc24iCisoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJjYnJhbmNocHNpNF9pbnNuIgog ICBbKHNldCAocGMpCi0gICAgICAgICAgIChpZl90aGVuX2Vsc2UKLSAgICAgICAgICAgICAo bWF0Y2hfb3BlcmF0b3IgMCAib3JkZXJlZF9jb21wYXJpc29uX29wZXJhdG9yIgotICAgICAg ICAgICAgICAgWyhtYXRjaF9vcGVyYW5kOlBTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAicixy LGQgLHIgICxkLHIiKQotICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlBTSSAyICJu b25tZW1vcnlfb3BlcmFuZCIgIkwscixzICxzICAsTSxuIildKQotICAgICAgICAgICAgIChs YWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMyAiIiAiIikpCi0gICAgICAgICAgICAgKHBjKSkp Ci0gICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpRSSA0ICI9WCxYLCZkLCZkICxYLCZkIikp XQorICAgICAgICAoaWZfdGhlbl9lbHNlCisgICAgICAgICAobWF0Y2hfb3BlcmF0b3IgMCAi b3JkZXJlZF9jb21wYXJpc29uX29wZXJhdG9yIgorICAgICAgICAgICBbKG1hdGNoX29wZXJh bmQ6UFNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICAicixyLGQgLHIgLGQsciIpCisgICAgICAg ICAgICAobWF0Y2hfb3BlcmFuZDpQU0kgMiAibm9ubWVtb3J5X29wZXJhbmQiICJMLHIscyAs cyAsTSxuIildKQorICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAzKSkKKyAg ICAgICAgIChwYykpKQorICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkgNCAgICAgICAg ICAgICAgICAgICAgICI9WCxYLCZkLCZkLFgsJmQiKSldCiAgICAiIgogICAgIiMiCiAgICAi cmVsb2FkX2NvbXBsZXRlZCIKQEAgLTY3NDMsMTkgKzY3MzEsMTkgQEAgKGRlZmluZV9pbnNu X2FuZF9zcGxpdCAiKmNicmFuY2hwc2k0IgogICAgICAgICAgKGlmX3RoZW5fZWxzZSAobWF0 Y2hfb3BfZHVwIDAKICAgICAgICAgICAgICAgICAgICAgICAgICBbKHJlZzpDQyBSRUdfQ0Mp IChjb25zdF9pbnQgMCldKQogICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmICht YXRjaF9kdXAgMykpCi0gICAgICAgICAgICAgICAgICAgICAgIChwYykpKV0KLSAgICIiKQor ICAgICAgICAgICAgICAgICAgICAgICAocGMpKSldKQogCi07OyAiKmNicmFuY2hoaTQiICAi KmNicmFuY2hocTQiICAiKmNicmFuY2h1aHE0IiAgIipjYnJhbmNoaGE0IiAgIipjYnJhbmNo dWhhNCIKLShkZWZpbmVfaW5zbl9hbmRfc3BsaXQgIipjYnJhbmNoPG1vZGU+NCIKKzs7ICJj YnJhbmNoaGk0X2luc24iCis7OyAiY2JyYW5jaGhxNF9pbnNuIiAgImNicmFuY2h1aHE0X2lu c24iICAiY2JyYW5jaGhhNF9pbnNuIiAgImNicmFuY2h1aGE0X2luc24iCisoZGVmaW5lX2lu c25fYW5kX3NwbGl0ICJjYnJhbmNoPG1vZGU+NF9pbnNuIgogICBbKHNldCAocGMpCi0gICAg ICAgICAgIChpZl90aGVuX2Vsc2UKLSAgICAgICAgICAgICAobWF0Y2hfb3BlcmF0b3IgMCAi b3JkZXJlZF9jb21wYXJpc29uX29wZXJhdG9yIgotICAgICAgICAgICAgICAgWyhtYXRjaF9v cGVyYW5kOkFMTDIgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiF3ICAsciAgLHIsZCAsciAgLGQs ciIpCi0gICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QUxMMiAyICJub25tZW1vcnlf b3BlcmFuZCIgIlkwMCxZMDAscixzICxzICAsTSxuIFlubiIpXSkKLSAgICAgICAgICAgICAo bGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDMgIiIgIiIpKQotICAgICAgICAgICAgIChwYykp KQotICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkgNCAiPVggICxYICAsWCwmZCwmZCAs WCwmZCIpKV0KKyAgICAgICAgKGlmX3RoZW5fZWxzZQorICAgICAgICAgKG1hdGNoX29wZXJh dG9yIDAgIm9yZGVyZWRfY29tcGFyaXNvbl9vcGVyYXRvciIKKyAgICAgICAgICAgWyhtYXRj aF9vcGVyYW5kOkFMTDIgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiF3ICAsciAgLHIsZCAsciAs ZCxyIikKKyAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkFMTDIgMiAibm9ubWVtb3J5X29w ZXJhbmQiICJZMDAsWTAwLHIscyAscyAsTSxuIFlubiIpXSkKKyAgICAgICAgIChsYWJlbF9y ZWYgKG1hdGNoX29wZXJhbmQgMykpCisgICAgICAgICAocGMpKSkKKyAgIChjbG9iYmVyICht YXRjaF9zY3JhdGNoOlFJIDQgICAgICAgICAgICAgICAgICAgICAgIj1YICAsWCAgLFgsJmQs JmQsWCwmZCIpKV0KICAgICIiCiAgICAiIyIKICAgICJyZWxvYWRfY29tcGxldGVkIgpAQCAt Njc2Niw4ICs2NzU0LDcgQEAgKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmNicmFuY2g8bW9k ZT40IgogICAgICAgICAgKGlmX3RoZW5fZWxzZSAobWF0Y2hfb3BfZHVwIDAKICAgICAgICAg ICAgICAgICAgICAgICAgICBbKHJlZzpDQyBSRUdfQ0MpIChjb25zdF9pbnQgMCldKQogICAg ICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9kdXAgMykpCi0gICAgICAg ICAgICAgICAgICAgICAgIChwYykpKV0KLSAgICIiKQorICAgICAgICAgICAgICAgICAgICAg ICAocGMpKSldKQogCiA7OyBUZXN0IGEgc2luZ2xlIGJpdCBpbiBhIFFJL0hJL1NJbW9kZSBy ZWdpc3Rlci4KIDs7IENvbWJpbmUgd2lsbCBjcmVhdGUgemVybyBleHRyYWN0IHBhdHRlcm5z IGZvciBzaW5nbGUgYml0IHRlc3RzLgpAQCAtNjg3OSwxNjEgKzY4NjYsMTQ1IEBAIChkZWZp bmVfaW5zbiAiKnNicnhfYW5kX2JyYW5jaDxtb2RlPiIKIAogOzsgQ29udmVydCBzaWduIHRl c3RzIHRvIGJpdCA3LzE1LzMxIHRlc3RzIHRoYXQgbWF0Y2ggdGhlIGFib3ZlIGluc25zLgog KGRlZmluZV9wZWVwaG9sZTIKLSAgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpIChjb21wYXJlOkND IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQotICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3RfaW50IDApKSkKLSAgIChwYXJhbGxlbCBbKHNldCAocGMp IChpZl90aGVuX2Vsc2UgKGdlIChyZWc6Q0MgUkVHX0NDKSAoY29uc3RfaW50IDApKQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9v cGVyYW5kIDEgIiIgIiIpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAocGMpKSkKLSAgICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXQot ICAiIgotICBbKHBhcmFsbGVsIFsoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAoZXEgKHplcm9f ZXh0cmFjdDpISSAobWF0Y2hfZHVwIDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMSkKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv bnN0X2ludCA3KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjb25zdF9pbnQgMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChsYWJlbF9yZWYgKG1hdGNoX2R1cCAxKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHBjKSkpCisgIFsoc2V0IChyZWc6Q0MgUkVHX0NDKQorICAgICAgICAo Y29tcGFyZTpDQyAobWF0Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAg ICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKSkpCisgICAoc2V0IChwYykKKyAgICAg ICAgKGlmX3RoZW5fZWxzZSAoZ2UgKHJlZzpDQyBSRUdfQ0MpCisgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25zdF9pbnQgMCkpCisgICAgICAgICAgICAgICAgICAgICAgKGxhYmVs X3JlZiAobWF0Y2hfb3BlcmFuZCAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMpKSld CisgICJwZWVwMl9yZWdub19kZWFkX3AgKDIsIFJFR19DQykiCisgIFsocGFyYWxsZWwgWyhz ZXQgKHBjKQorICAgICAgICAgICAgICAgICAgIChpZl90aGVuX2Vsc2UgKGVxICh6ZXJvX2V4 dHJhY3Q6SEkgKG1hdGNoX2R1cCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAxKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCA3KSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfZHVw IDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCiAgICAgICAg ICAgICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldKV0pCiAKIChkZWZpbmVfcGVlcGhv bGUyCi0gIFsoc2V0IChyZWc6Q0MgUkVHX0NDKSAoY29tcGFyZTpDQyAobWF0Y2hfb3BlcmFu ZDpRSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKLSAgICAgICAgICAgICAgICAgICAgICAg KGNvbnN0X2ludCAwKSkpCi0gICAocGFyYWxsZWwgWyhzZXQgKHBjKSAoaWZfdGhlbl9lbHNl IChsdCAocmVnOkNDIFJFR19DQykgKGNvbnN0X2ludCAwKSkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAxICIiICIi KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCi0gICAg ICAgICAgICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldKV0KLSAgIiIKLSAgWyhwYXJh bGxlbCBbKHNldCAocGMpIChpZl90aGVuX2Vsc2UgKG5lICh6ZXJvX2V4dHJhY3Q6SEkgKG1h dGNoX2R1cCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDEpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgNykpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDAp KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmICht YXRjaF9kdXAgMSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChw YykpKQorICBbKHNldCAocmVnOkNDIFJFR19DQykKKyAgICAgICAgKGNvbXBhcmU6Q0MgKG1h dGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAgICAgICAgICAgICAg ICAgIChjb25zdF9pbnQgMCkpKQorICAgKHNldCAocGMpCisgICAgICAgIChpZl90aGVuX2Vs c2UgKGx0IChyZWc6Q0MgUkVHX0NDKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u c3RfaW50IDApKQorICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29w ZXJhbmQgMSkpCisgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpXQorICAicGVlcDJfcmVn bm9fZGVhZF9wICgyLCBSRUdfQ0MpIgorICBbKHBhcmFsbGVsIFsoc2V0IChwYykKKyAgICAg ICAgICAgICAgICAgICAoaWZfdGhlbl9lbHNlIChuZSAoemVyb19leHRyYWN0OkhJIChtYXRj aF9kdXAgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25zdF9pbnQgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgNykpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX2R1cCAxKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChwYykpKQogICAgICAgICAgICAgICAoY2xvYmJl ciAocmVnOkNDIFJFR19DQykpXSldKQogCiAoZGVmaW5lX3BlZXBob2xlMgotICBbKHBhcmFs bGVsIFsoc2V0IChyZWc6Q0MgUkVHX0NDKSAoY29tcGFyZTpDQyAobWF0Y2hfb3BlcmFuZDpI SSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY29uc3RfaW50IDApKSkKLSAgICAgICAgICAgICAgKGNsb2JiZXIgKG1hdGNo X29wZXJhbmQ6SEkgMiAiIikpXSkKLSAgIChwYXJhbGxlbCBbKHNldCAocGMpIChpZl90aGVu X2Vsc2UgKGdlIChyZWc6Q0MgUkVHX0NDKSAoY29uc3RfaW50IDApKQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDEg IiIgIiIpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGMpKSkK LSAgICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXQotICAiIgotICBb KHBhcmFsbGVsIFsoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAoZXEgKGFuZDpISSAobWF0Y2hf ZHVwIDApIChjb25zdF9pbnQgLTMyNzY4KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCkpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX2R1cCAxKSkKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCisgIFsocGFyYWxsZWwgWyhzZXQg KHJlZzpDQyBSRUdfQ0MpCisgICAgICAgICAgICAgICAgICAgKGNvbXBhcmU6Q0MgKG1hdGNo X29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNvbnN0X2ludCAwKSkpCisgICAgICAgICAgICAgIChjbG9iYmVyICht YXRjaF9vcGVyYW5kOkhJIDIpKV0pCisgICAoc2V0IChwYykKKyAgICAgICAgKGlmX3RoZW5f ZWxzZSAoZ2UgKHJlZzpDQyBSRUdfQ0MpCisgICAgICAgICAgICAgICAgICAgICAgICAgIChj b25zdF9pbnQgMCkpCisgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hf b3BlcmFuZCAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMpKSldCisgICJwZWVwMl9y ZWdub19kZWFkX3AgKDIsIFJFR19DQykiCisgIFsocGFyYWxsZWwgWyhzZXQgKHBjKQorICAg ICAgICAgICAgICAgICAgIChpZl90aGVuX2Vsc2UgKGVxIChhbmQ6SEkgKG1hdGNoX2R1cCAw KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0 X2ludCAtMzI3NjgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj b25zdF9pbnQgMCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxf cmVmIChtYXRjaF9kdXAgMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo cGMpKSkKICAgICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXSkKIAog KGRlZmluZV9wZWVwaG9sZTIKLSAgWyhwYXJhbGxlbCBbKHNldCAocmVnOkNDIFJFR19DQykg KGNvbXBhcmU6Q0MgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIp Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKSkpCi0g ICAgICAgICAgICAgIChjbG9iYmVyIChtYXRjaF9vcGVyYW5kOkhJIDIgIiIpKV0pCi0gICAo cGFyYWxsZWwgWyhzZXQgKHBjKSAoaWZfdGhlbl9lbHNlIChsdCAocmVnOkNDIFJFR19DQykg KGNvbnN0X2ludCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCi0gICAgICAgICAgICAgIChjbG9iYmVyIChy ZWc6Q0MgUkVHX0NDKSldKV0KLSAgIiIKLSAgWyhwYXJhbGxlbCBbKHNldCAocGMpIChpZl90 aGVuX2Vsc2UgKG5lIChhbmQ6SEkgKG1hdGNoX2R1cCAwKSAoY29uc3RfaW50IC0zMjc2OCkp Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50 IDApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVm IChtYXRjaF9kdXAgMSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChwYykpKQorICBbKHBhcmFsbGVsIFsoc2V0IChyZWc6Q0MgUkVHX0NDKQorICAgICAgICAg ICAgICAgICAgIChjb21wYXJlOkNDIChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29w ZXJhbmQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCkp KQorICAgICAgICAgICAgICAoY2xvYmJlciAobWF0Y2hfb3BlcmFuZDpISSAyKSldKQorICAg KHNldCAocGMpCisgICAgICAgIChpZl90aGVuX2Vsc2UgKGx0IChyZWc6Q0MgUkVHX0NDKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQorICAgICAgICAgICAg ICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMSkpCisgICAgICAgICAgICAg ICAgICAgICAgKHBjKSkpXQorICAicGVlcDJfcmVnbm9fZGVhZF9wICgyLCBSRUdfQ0MpIgor ICBbKHBhcmFsbGVsIFsoc2V0IChwYykKKyAgICAgICAgICAgICAgICAgICAoaWZfdGhlbl9l bHNlIChuZSAoYW5kOkhJIChtYXRjaF9kdXAgMCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgLTMyNzY4KSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfZHVwIDEpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCiAgICAgICAgICAgICAgIChjbG9i YmVyIChyZWc6Q0MgUkVHX0NDKSldKV0pCiAKIChkZWZpbmVfcGVlcGhvbGUyCi0gIFsocGFy YWxsZWwgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpIChjb21wYXJlOkNDIChtYXRjaF9vcGVyYW5k OlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25zdF9pbnQgMCkpKQotICAgICAgICAgICAgICAoY2xvYmJlciAobWF0 Y2hfb3BlcmFuZDpTSSAyICIiKSldKQotICAgKHBhcmFsbGVsIFsoc2V0IChwYykgKGlmX3Ro ZW5fZWxzZSAoZ2UgKHJlZzpDQyBSRUdfQ0MpIChjb25zdF9pbnQgMCkpCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQg MSAiIiAiIikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYykp KQotICAgICAgICAgICAgICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXSldCi0gICIiCi0g IFsocGFyYWxsZWwgWyhzZXQgKHBjKSAoaWZfdGhlbl9lbHNlIChlcSAoYW5kOlNJIChtYXRj aF9kdXAgMCkgKG1hdGNoX2R1cCAyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjb25zdF9pbnQgMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX2R1cCAxKSkKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCisgIFsocGFyYWxsZWwgWyhzZXQgKHJl ZzpDQyBSRUdfQ0MpCisgICAgICAgICAgICAgICAgICAgKGNvbXBhcmU6Q0MgKG1hdGNoX29w ZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNvbnN0X2ludCAwKSkpCisgICAgICAgICAgICAgIChjbG9iYmVyIChtYXRj aF9vcGVyYW5kOlNJIDIpKV0pCisgICAoc2V0IChwYykKKyAgICAgICAgKGlmX3RoZW5fZWxz ZSAoZ2UgKHJlZzpDQyBSRUdfQ0MpCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z dF9pbnQgMCkpCisgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3Bl cmFuZCAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMpKSldCisgICJwZWVwMl9yZWdu b19kZWFkX3AgKDIsIFJFR19DQykiCisgIFsocGFyYWxsZWwgWyhzZXQgKHBjKQorICAgICAg ICAgICAgICAgICAgIChpZl90aGVuX2Vsc2UgKGVxIChhbmQ6U0kgKG1hdGNoX2R1cCAwKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1 cCAyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50 IDApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0 Y2hfZHVwIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCiAg ICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldKV0KLSAgIm9wZXJhbmRz WzJdID0gZ2VuX2ludF9tb2RlICgtMjE0NzQ4MzY0NyAtIDEsIFNJbW9kZSk7IikKKyAgewor ICAgIG9wZXJhbmRzWzJdID0gZ2VuX2ludF9tb2RlICgtMjE0NzQ4MzY0NyAtIDEsIFNJbW9k ZSk7CisgIH0pCiAKIChkZWZpbmVfcGVlcGhvbGUyCi0gIFsocGFyYWxsZWwgWyhzZXQgKHJl ZzpDQyBSRUdfQ0MpIChjb21wYXJlOkNDIChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVy X29wZXJhbmQiICIiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z dF9pbnQgMCkpKQotICAgICAgICAgICAgICAoY2xvYmJlciAobWF0Y2hfb3BlcmFuZDpTSSAy ICIiKSldKQotICAgKHBhcmFsbGVsIFsoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAobHQgKHJl ZzpDQyBSRUdfQ0MpIChjb25zdF9pbnQgMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMSAiIiAiIikpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYykpKQotICAgICAgICAgICAg ICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXSldCi0gICIiCi0gIFsocGFyYWxsZWwgWyhz ZXQgKHBjKSAoaWZfdGhlbl9lbHNlIChuZSAoYW5kOlNJIChtYXRjaF9kdXAgMCkgKG1hdGNo X2R1cCAyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj b25zdF9pbnQgMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChs YWJlbF9yZWYgKG1hdGNoX2R1cCAxKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHBjKSkpCisgIFsocGFyYWxsZWwgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCisg ICAgICAgICAgICAgICAgICAgKGNvbXBhcmU6Q0MgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVn aXN0ZXJfb3BlcmFuZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0 X2ludCAwKSkpCisgICAgICAgICAgICAgIChjbG9iYmVyIChtYXRjaF9vcGVyYW5kOlNJIDIp KV0pCisgICAoc2V0IChwYykKKyAgICAgICAgKGlmX3RoZW5fZWxzZSAobHQgKHJlZzpDQyBS RUdfQ0MpCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCkpCisgICAg ICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAxKSkKKyAgICAg ICAgICAgICAgICAgICAgICAocGMpKSldCisgICJwZWVwMl9yZWdub19kZWFkX3AgKDIsIFJF R19DQykiCisgIFsocGFyYWxsZWwgWyhzZXQgKHBjKQorICAgICAgICAgICAgICAgICAgIChp Zl90aGVuX2Vsc2UgKG5lIChhbmQ6U0kgKG1hdGNoX2R1cCAwKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAyKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfZHVwIDEpKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCiAgICAgICAgICAgICAgIChj bG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldKV0KLSAgIm9wZXJhbmRzWzJdID0gZ2VuX2ludF9t b2RlICgtMjE0NzQ4MzY0NyAtIDEsIFNJbW9kZSk7IikKKyAgeworICAgIG9wZXJhbmRzWzJd ID0gZ2VuX2ludF9tb2RlICgtMjE0NzQ4MzY0NyAtIDEsIFNJbW9kZSk7CisgIH0pCiAKIDs7 ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgogOzsgSW1wbGVtZW50YXRpb24gb2YgY29uZGl0aW9uYWwg anVtcHMgaGVyZS4KIDs7ICBDb21wYXJlIHdpdGggMCAodGVzdCkganVtcHMKIDs7ICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgogCi0oZGVmaW5lX2luc25fYW5kX3NwbGl0ICJicmFuY2giCisoZGVm aW5lX2luc24gImJyYW5jaCIKICAgWyhzZXQgKHBjKQogICAgICAgICAoaWZfdGhlbl9lbHNl IChtYXRjaF9vcGVyYXRvciAxICJzaW1wbGVfY29tcGFyaXNvbl9vcGVyYXRvciIKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhyZWc6Q0MgUkVHX0NDKQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKV0pCi0g ICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIiICIi KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFsocmVnOkNDIFJFR19DQykKKyAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApXSkKKyAgICAgICAgICAgICAgICAgICAg ICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDApKQogICAgICAgICAgICAgICAgICAgICAg IChwYykpKV0KICAgInJlbG9hZF9jb21wbGV0ZWQiCi0gICIjIgotICAiJiYgcmVsb2FkX2Nv bXBsZXRlZCIKLSAgWyhwYXJhbGxlbCBbKHNldCAocGMpCi0gICAgICAgICAgICAgICAgICAg KGlmX3RoZW5fZWxzZSAobWF0Y2hfb3BfZHVwIDEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgWyhyZWc6Q0MgUkVHX0NDKQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKV0pCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9kdXAg MCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGMpKSkKLSAgICAgICAg ICAgICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXSkKLQotKGRlZmluZV9pbnNuICIq YnJhbmNoIgotICBbKHNldCAocGMpCi0gICAgICAgIChpZl90aGVuX2Vsc2UgKG1hdGNoX29w ZXJhdG9yIDEgInNpbXBsZV9jb21wYXJpc29uX29wZXJhdG9yIgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBbKHJlZzpDQyBSRUdfQ0MpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApXSkKLSAgICAgICAgICAg ICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKQotICAgICAg ICAgICAgICAgICAgICAgIChwYykpKQotICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0K LSAgInJlbG9hZF9jb21wbGV0ZWQiCiAgIHsKICAgICByZXR1cm4gcmV0X2NvbmRfYnJhbmNo IChvcGVyYW5kc1sxXSwgYXZyX2p1bXBfbW9kZSAob3BlcmFuZHNbMF0sIGluc24pLCAwKTsK ICAgfQogICBbKHNldF9hdHRyICJ0eXBlIiAiYnJhbmNoIildKQogCiAKLTs7IFNhbWUgYXMg YWJvdmUgYnV0IHdyYXAgU0VUX1NSQyBzbyB0aGF0IHRoaXMgYnJhbmNoIHdvbid0IGJlIHRy YW5zZm9ybWVkCi07OyBvciBvcHRpbWl6ZWQgaW4gdGhlIHJlbWFpbmRlci4KLQotKGRlZmlu ZV9pbnNuICJicmFuY2hfdW5zcGVjIgotICBbKHNldCAocGMpCi0gICAgICAgICh1bnNwZWMg WyhpZl90aGVuX2Vsc2UgKG1hdGNoX29wZXJhdG9yIDEgInNpbXBsZV9jb21wYXJpc29uX29w ZXJhdG9yIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBbKHJlZzpDQyBSRUdfQ0MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3RfaW50IDApXSkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChwYykpCi0gICAgICAgICAgICAgICAgIF0gVU5TUEVD X0lERU5USVRZKSkKLSAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldCi0gICJyZWxvYWRf Y29tcGxldGVkIgotICB7Ci0gICAgcmV0dXJuIHJldF9jb25kX2JyYW5jaCAob3BlcmFuZHNb MV0sIGF2cl9qdW1wX21vZGUgKG9wZXJhbmRzWzBdLCBpbnNuKSwgMCk7Ci0gIH0KLSAgWyhz ZXRfYXR0ciAidHlwZSIgImJyYW5jaCIpXSkKLQotOzsgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotOzsgQVZSIGRv ZXMgbm90IGhhdmUgZm9sbG93aW5nIGNvbmRpdGlvbmFsIGp1bXBzOiBMRSxMRVUsR1QsR1RV LgotOzsgQ29udmVydCB0aGVtIGFsbCB0byBwcm9wZXIganVtcHMuCi07OyAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwotCi0oZGVmaW5lX2luc25fYW5kX3NwbGl0ICJkaWZmaWN1bHRfYnJhbmNoIgorKGRlZmlu ZV9pbnNuICJkaWZmaWN1bHRfYnJhbmNoIgogICBbKHNldCAocGMpCiAgICAgICAgIChpZl90 aGVuX2Vsc2UgKG1hdGNoX29wZXJhdG9yIDEgImRpZmZpY3VsdF9jb21wYXJpc29uX29wZXJh dG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgWyhyZWc6Q0MgUkVHX0NDKQpAQCAtNzA0 MSw5NSArNzAxMiwxMSBAQCAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJkaWZmaWN1bHRfYnJh bmNoIgogICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQg MCAiIiAiIikpCiAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpXQogICAicmVsb2FkX2Nv bXBsZXRlZCIKLSAgIiMiCi0gICImJiByZWxvYWRfY29tcGxldGVkIgotICBbKHBhcmFsbGVs IFsoc2V0IChwYykKLSAgICAgICAgICAgICAgICAgICAoaWZfdGhlbl9lbHNlIChtYXRjaF9v cF9kdXAgMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHJlZzpDQyBS RUdfQ0MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50 IDApXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1h dGNoX2R1cCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYykpKQot ICAgICAgICAgICAgICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXSldKQotCi0oZGVmaW5l X2luc24gIipkaWZmaWN1bHRfYnJhbmNoIgotICBbKHNldCAocGMpCi0gICAgICAgIChpZl90 aGVuX2Vsc2UgKG1hdGNoX29wZXJhdG9yIDEgImRpZmZpY3VsdF9jb21wYXJpc29uX29wZXJh dG9yIgotICAgICAgICAgICAgICAgICAgICAgICAgWyhyZWc6Q0MgUkVHX0NDKQotICAgICAg ICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCldKQotICAgICAgICAgICAgICAgICAg ICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMCAiIiAiIikpCi0gICAgICAgICAgICAg ICAgICAgICAgKHBjKSkpCi0gICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXQotICAicmVs b2FkX2NvbXBsZXRlZCIKICAgewogICAgIHJldHVybiByZXRfY29uZF9icmFuY2ggKG9wZXJh bmRzWzFdLCBhdnJfanVtcF9tb2RlIChvcGVyYW5kc1swXSwgaW5zbiksIDApOwogICB9CiAg IFsoc2V0X2F0dHIgInR5cGUiICJicmFuY2gxIildKQogCi07OyByZXZlcnMgYnJhbmNoCi0K LShkZWZpbmVfaW5zbl9hbmRfc3BsaXQgInJ2YnJhbmNoIgotICBbKHNldCAocGMpCi0gICAg ICAgIChpZl90aGVuX2Vsc2UgKG1hdGNoX29wZXJhdG9yIDEgInNpbXBsZV9jb21wYXJpc29u X29wZXJhdG9yIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHJl ZzpDQyBSRUdfQ0MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y29uc3RfaW50IDApXSkKLSAgICAgICAgICAgICAgICAgICAgICAocGMpCi0gICAgICAgICAg ICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIiICIiKSkpKV0KLSAg InJlbG9hZF9jb21wbGV0ZWQiCi0gICIjIgotICAiJiYgcmVsb2FkX2NvbXBsZXRlZCIKLSAg WyhwYXJhbGxlbCBbKHNldCAocGMpCi0gICAgICAgICAgICAgICAgICAgKGlmX3RoZW5fZWxz ZSAobWF0Y2hfb3BfZHVwIDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgWyhyZWc6Q0MgUkVHX0NDKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKV0pCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocGMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobGFiZWxfcmVmIChtYXRjaF9kdXAgMCkpKSkKLSAgICAgICAgICAgICAgKGNsb2Ji ZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXSkKLQotKGRlZmluZV9pbnNuICIqcnZicmFuY2giCi0g IFsoc2V0IChwYykKLSAgICAgICAgKGlmX3RoZW5fZWxzZSAobWF0Y2hfb3BlcmF0b3IgMSAi c2ltcGxlX2NvbXBhcmlzb25fb3BlcmF0b3IiCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFsocmVnOkNDIFJFR19DQykKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCldKQotICAgICAgICAgICAgICAgICAgICAg IChwYykKLSAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5k IDAgIiIgIiIpKSkpCi0gICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXQotICAicmVsb2Fk X2NvbXBsZXRlZCIKLSAgewotICAgIHJldHVybiByZXRfY29uZF9icmFuY2ggKG9wZXJhbmRz WzFdLCBhdnJfanVtcF9tb2RlIChvcGVyYW5kc1swXSwgaW5zbiksIDEpOwotICB9Ci0gIFso c2V0X2F0dHIgInR5cGUiICJicmFuY2gxIildKQotCi0oZGVmaW5lX2luc25fYW5kX3NwbGl0 ICJkaWZmaWN1bHRfcnZicmFuY2giCi0gIFsoc2V0IChwYykKLSAgICAgICAgKGlmX3RoZW5f ZWxzZSAobWF0Y2hfb3BlcmF0b3IgMSAiZGlmZmljdWx0X2NvbXBhcmlzb25fb3BlcmF0b3Ii Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsocmVnOkNDIFJFR19D QykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQg MCldKQotICAgICAgICAgICAgICAgICAgICAgIChwYykKLSAgICAgICAgICAgICAgICAgICAg ICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKSkpXQotICAicmVsb2FkX2Nv bXBsZXRlZCIKLSAgIiMiCi0gICImJiByZWxvYWRfY29tcGxldGVkIgotICBbKHBhcmFsbGVs IFsoc2V0IChwYykKLSAgICAgICAgICAgICAgICAgICAoaWZfdGhlbl9lbHNlIChtYXRjaF9v cF9kdXAgMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBbKHJlZzpDQyBSRUdfQ0MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3RfaW50IDApXSkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChwYykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYWJl bF9yZWYgKG1hdGNoX2R1cCAwKSkpKQotICAgICAgICAgICAgICAoY2xvYmJlciAocmVnOkND IFJFR19DQykpXSldKQotCi0oZGVmaW5lX2luc24gIipkaWZmaWN1bHRfcnZicmFuY2giCi0g IFsoc2V0IChwYykKLSAgICAgICAgKGlmX3RoZW5fZWxzZSAobWF0Y2hfb3BlcmF0b3IgMSAi ZGlmZmljdWx0X2NvbXBhcmlzb25fb3BlcmF0b3IiCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFsocmVnOkNDIFJFR19DQykKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCldKQotICAgICAgICAgICAgICAgICAg ICAgIChwYykKLSAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVy YW5kIDAgIiIgIiIpKSkpCi0gICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXQotICAicmVs b2FkX2NvbXBsZXRlZCIKLSAgewotICAgIHJldHVybiByZXRfY29uZF9icmFuY2ggKG9wZXJh bmRzWzFdLCBhdnJfanVtcF9tb2RlIChvcGVyYW5kc1swXSwgaW5zbiksIDEpOwotICB9Ci0g IFsoc2V0X2F0dHIgInR5cGUiICJicmFuY2giKV0pCiAKIDs7ICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCiA7OyBVbmNvbmRpdGlvbmFsIGFuZCBvdGhlciBqdW1wIGluc3RydWN0aW9ucy4KQEAg LTc2NTUsMTUgKzc1NDIsMTQgQEAgKGRlZmluZV9wZWVwaG9sZSA7ICIqZGVjLWFuZC1icmFu Y2hzaSE9LTEuZC5jbG9iYmVyIgogICAgICAgICAgICAgICAoY2xvYmJlciAocmVnOkNDIFJF R19DQykpXSkKICAgIChwYXJhbGxlbCBbKHNldCAocmVnOkNDIFJFR19DQykKICAgICAgICAg ICAgICAgICAgICAoY29tcGFyZTpDQyAobWF0Y2hfZHVwIDApCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNvbnN0X2ludCAtMSkpKQotICAgICAgICAgICAgICAoY2xvYmJlciAo bWF0Y2hfb3BlcmFuZDpRSSAxICJkX3JlZ2lzdGVyX29wZXJhbmQiICIiKSldKQotICAgKHBh cmFsbGVsIFsoc2V0IChwYykKLSAgICAgICAgICAgICAgICAgICAoaWZfdGhlbl9lbHNlIChl cW5lIChyZWc6Q0MgUkVHX0NDKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNvbnN0X2ludCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMiAiIiAiIikpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocGMpKSkKLSAgICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpD QyBSRUdfQ0MpKV0pXQotICAiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj b25zdF9pbnQgLTEpKSkKKyAgICAgICAgICAgICAgKGNsb2JiZXIgKG1hdGNoX29wZXJhbmQ6 UUkgMSAic2NyYXRjaF9vcl9kX3JlZ2lzdGVyX29wZXJhbmQiKSldKQorICAgKHNldCAocGMp CisgICAgICAgIChpZl90aGVuX2Vsc2UgKGVxbmUgKHJlZzpDQyBSRUdfQ0MpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKSkKKyAgICAgICAgICAgICAgICAg ICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDIpKQorICAgICAgICAgICAgICAgICAg ICAgIChwYykpKV0KKyAgImRlYWRfb3Jfc2V0X3JlZ25vX3AgKGluc24sIFJFR19DQykiCiAg IHsKICAgICBjb25zdCBjaGFyICpvcDsKICAgICBpbnQganVtcF9tb2RlOwpAQCAtNzY5OSwx NSArNzU4NSwxNCBAQCAoZGVmaW5lX3BlZXBob2xlIDsgIipkZWMtYW5kLWJyYW5jaGhpIT0t MSIKICAgICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pCiAgICAocGFy YWxsZWwgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCiAgICAgICAgICAgICAgICAgICAgKGNvbXBh cmU6Q0MgKG1hdGNoX2R1cCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z dF9pbnQgLTEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50 IC0xKSkpCiAgICAgICAgICAgICAgIChjbG9iYmVyIChtYXRjaF9vcGVyYW5kOlFJIDEgImRf cmVnaXN0ZXJfb3BlcmFuZCIgIiIpKV0pCi0gICAocGFyYWxsZWwgWyhzZXQgKHBjKQotICAg ICAgICAgICAgICAgICAgIChpZl90aGVuX2Vsc2UgKGVxbmUgKHJlZzpDQyBSRUdfQ0MpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3Bl cmFuZCAyICIiICIiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYykp KQotICAgICAgICAgICAgICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXSldCi0gICIiCisg ICAoc2V0IChwYykKKyAgICAgICAgKGlmX3RoZW5fZWxzZSAoZXFuZSAocmVnOkNDIFJFR19D QykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQorICAgICAg ICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMikpCisgICAgICAg ICAgICAgICAgICAgICAgKHBjKSkpXQorICAiZGVhZF9vcl9zZXRfcmVnbm9fcCAoaW5zbiwg UkVHX0NDKSIKICAgewogICAgIGNvbnN0IGNoYXIgKm9wOwogICAgIGludCBqdW1wX21vZGU7 CkBAIC03NzQxLDE1ICs3NjI2LDE0IEBAIChkZWZpbmVfcGVlcGhvbGUgOyAiKmRlYy1hbmQt YnJhbmNoaGkhPS0xLmQuY2xvYmJlciIKICAgICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpD QyBSRUdfQ0MpKV0pCiAgICAocGFyYWxsZWwgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCiAgICAg ICAgICAgICAgICAgICAgKGNvbXBhcmU6Q0MgKG1hdGNoX2R1cCAwKQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjb25zdF9pbnQgLTEpKSkKLSAgICAgICAgICAgICAgKGNsb2Ji ZXIgKG1hdGNoX29wZXJhbmQ6UUkgMSAiZF9yZWdpc3Rlcl9vcGVyYW5kIiAiIikpXSkKLSAg IChwYXJhbGxlbCBbKHNldCAocGMpCi0gICAgICAgICAgICAgICAgICAgKGlmX3RoZW5fZWxz ZSAoZXFuZSAocmVnOkNDIFJFR19DQykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25zdF9pbnQgMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDIgIiIgIiIpKQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCi0gICAgICAgICAgICAgIChjbG9iYmVyIChy ZWc6Q0MgUkVHX0NDKSldKV0KLSAgIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY29uc3RfaW50IC0xKSkpCisgICAgICAgICAgICAgIChjbG9iYmVyIChtYXRjaF9vcGVy YW5kOlFJIDEgInNjcmF0Y2hfb3JfZF9yZWdpc3Rlcl9vcGVyYW5kIikpXSkKKyAgIChzZXQg KHBjKQorICAgICAgICAoaWZfdGhlbl9lbHNlIChlcW5lIChyZWc6Q0MgUkVHX0NDKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCkpCisgICAgICAgICAgICAg ICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAyKSkKKyAgICAgICAgICAgICAg ICAgICAgICAocGMpKSldCisgICJkZWFkX29yX3NldF9yZWdub19wIChpbnNuLCBSRUdfQ0Mp IgogICB7CiAgICAgY29uc3QgY2hhciAqb3A7CiAgICAgaW50IGp1bXBfbW9kZTsKQEAgLTc3 ODMsMTUgKzc2NjcsMTQgQEAgKGRlZmluZV9wZWVwaG9sZSA7ICIqZGVjLWFuZC1icmFuY2ho aSE9LTEubC5jbG9iYmVyIgogICAgICAgICAgICAgICAoY2xvYmJlciAocmVnOkNDIFJFR19D QykpXSkKICAgIChwYXJhbGxlbCBbKHNldCAocmVnOkNDIFJFR19DQykKICAgICAgICAgICAg ICAgICAgICAoY29tcGFyZTpDQyAobWF0Y2hfZHVwIDApCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNvbnN0X2ludCAtMSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjb25zdF9pbnQgLTEpKSkKICAgICAgICAgICAgICAgKGNsb2JiZXIgKG1hdGNoX29w ZXJhbmQ6UUkgMSAiZF9yZWdpc3Rlcl9vcGVyYW5kIiAiIikpXSkKLSAgIChwYXJhbGxlbCBb KHNldCAocGMpCi0gICAgICAgICAgICAgICAgICAgKGlmX3RoZW5fZWxzZSAoZXFuZSAocmVn OkNDIFJFR19DQykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj b25zdF9pbnQgMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxf cmVmIChtYXRjaF9vcGVyYW5kIDIgIiIgIiIpKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHBjKSkpCi0gICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0ND KSldKV0KLSAgIiIKKyAgIChzZXQgKHBjKQorICAgICAgICAoaWZfdGhlbl9lbHNlIChlcW5l IChyZWc6Q0MgUkVHX0NDKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9p bnQgMCkpCisgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFu ZCAyKSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMpKSldCisgICJkZWFkX29yX3NldF9y ZWdub19wIChpbnNuLCBSRUdfQ0MpIgogICB7CiAgICAgY29uc3QgY2hhciAqb3A7CiAgICAg aW50IGp1bXBfbW9kZTsKQEAgLTc4MjEsMTQgKzc3MDQsMTMgQEAgKGRlZmluZV9wZWVwaG9s ZSA7ICIqZGVjLWFuZC1icmFuY2hxaSE9LTEiCiAgICAgICAgICAgICAgIChjbG9iYmVyIChy ZWc6Q0MgUkVHX0NDKSldKQogICAgKHNldCAocmVnOkNDIFJFR19DQykKICAgICAgICAgKGNv bXBhcmU6Q0MgKG1hdGNoX2R1cCAwKQotICAgICAgICAgICAgICAgICAoY29uc3RfaW50IC0x KSkpCi0gICAocGFyYWxsZWwgWyhzZXQgKHBjKQotICAgICAgICAgICAgICAgICAgIChpZl90 aGVuX2Vsc2UgKGVxbmUgKHJlZzpDQyBSRUdfQ0MpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYykpKQotICAgICAgICAgICAgICAoY2xv YmJlciAocmVnOkNDIFJFR19DQykpXSldCi0gICIiCisgICAgICAgICAgICAgICAgICAgIChj b25zdF9pbnQgLTEpKSkKKyAgIChzZXQgKHBjKQorICAgICAgICAoaWZfdGhlbl9lbHNlIChl cW5lIChyZWc6Q0MgUkVHX0NDKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z dF9pbnQgMCkpCisgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3Bl cmFuZCAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMpKSldCisgICJkZWFkX29yX3Nl dF9yZWdub19wIChpbnNuLCBSRUdfQ0MpIgogICB7CiAgICAgY29uc3QgY2hhciAqb3A7CiAg ICAgaW50IGp1bXBfbW9kZTsKQEAgLTc4NTQsMTQgKzc3MzYsMTQgQEAgKGRlZmluZV9wZWVw aG9sZSA7ICIqZGVjLWFuZC1icmFuY2hxaSE9LTEiCiAoZGVmaW5lX3BlZXBob2xlIDsgIipj cHNlLmVxIgogICBbKHNldCAocmVnOkNDIFJFR19DQykKICAgICAgICAgKGNvbXBhcmU6Q0Mg KG1hdGNoX29wZXJhbmQ6QUxMMSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAicixyIikKLSAgICAg ICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QUxMMSAyICJyZWdfb3JfMF9vcGVyYW5kIiAi cixZMDAiKSkpCi0gICAocGFyYWxsZWwgWyhzZXQgKHBjKQotICAgICAgICAgICAgICAgICAg IChpZl90aGVuX2Vsc2UgKGVxIChyZWc6Q0MgUkVHX0NDKQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCkpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCi0gICAgICAgICAgICAgIChj bG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldKV0KLSAgImp1bXBfb3Zlcl9vbmVfaW5zbl9wIChp bnNuLCBvcGVyYW5kc1swXSkiCisgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5k OkFMTDEgMiAicmVnX29yXzBfb3BlcmFuZCIgInIsWTAwIikpKQorICAgKHNldCAocGMpCisg ICAgICAgIChpZl90aGVuX2Vsc2UgKGVxIChyZWc6Q0MgUkVHX0NDKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQorICAgICAgICAgICAgICAgICAgICAgIChs YWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMCkpCisgICAgICAgICAgICAgICAgICAgICAgKHBj KSkpXQorICAianVtcF9vdmVyX29uZV9pbnNuX3AgKGluc24sIG9wZXJhbmRzWzBdKQorICAg JiYgZGVhZF9vcl9zZXRfcmVnbm9fcCAoaW5zbiwgUkVHX0NDKSIKICAgIkAKIAljcHNlICUx LCUyCiAJY3BzZSAlMSxfX3plcm9fcmVnX18iKQpAQCAtNzg4OSwxNiArNzc3MSwxNiBAQCAo ZGVmaW5lX3BlZXBob2xlIDsgIipjcHNlLmVxIgogCiAoZGVmaW5lX3BlZXBob2xlIDsgIipj cHNlLm5lIgogICBbKHNldCAocmVnOkNDIFJFR19DQykKLSAgICAgICAgKGNvbXBhcmU6Q0Mg KG1hdGNoX29wZXJhbmQ6QUxMMSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKLSAgICAgICAg ICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QUxMMSAyICJyZWdfb3JfMF9vcGVyYW5kIiAiIikp KQotICAgKHBhcmFsbGVsIFsoc2V0IChwYykKLSAgICAgICAgICAgICAgICAgICAoaWZfdGhl bl9lbHNlIChuZSAocmVnOkNDIFJFR19DQykKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY29uc3RfaW50IDApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIiICIiKSkKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChwYykpKQotICAgICAgICAgICAgICAoY2xvYmJlciAo cmVnOkNDIFJFR19DQykpXSldCi0gICIhQVZSX0hBVkVfSk1QX0NBTEwKLSAgIHx8ICFUQVJH RVRfU0tJUF9CVUciCisgICAgICAgIChjb21wYXJlOkNDIChtYXRjaF9vcGVyYW5kOkFMTDEg MSAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVy YW5kOkFMTDEgMiAicmVnX29yXzBfb3BlcmFuZCIpKSkKKyAgIChzZXQgKHBjKQorICAgICAg ICAoaWZfdGhlbl9lbHNlIChuZSAocmVnOkNDIFJFR19DQykKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNvbnN0X2ludCAwKSkKKyAgICAgICAgICAgICAgICAgICAgICAobGFiZWxf cmVmIChtYXRjaF9vcGVyYW5kIDApKQorICAgICAgICAgICAgICAgICAgICAgIChwYykpKV0K KyAgIighQVZSX0hBVkVfSk1QX0NBTEwKKyAgICB8fCAhVEFSR0VUX1NLSVBfQlVHKQorICAg JiYgZGVhZF9vcl9zZXRfcmVnbm9fcCAoaW5zbiwgUkVHX0NDKSIKICAgewogICAgIGlmIChv cGVyYW5kc1syXSA9PSBDT05TVDBfUlRYICg8TU9ERT5tb2RlKSkKICAgICAgIG9wZXJhbmRz WzJdID0gemVyb19yZWdfcnR4OwpAQCAtODA5Myw3ICs3OTc1LDcgQEAgKGRlZmluZV9pbnNu X2FuZF9zcGxpdCAiZGVsYXlfY3ljbGVzXzEiCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zdF9pbnQgMSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VU5TUEVDVl9ERUxBWV9DWUNMRVMpCiAgICAgICAgICAgICAgIChzZXQgKG1hdGNoX2R1cCAx KQotICAgICAgICAgICAgICAgKHVuc3BlY192b2xhdGlsZTpCTEsgWyhtYXRjaF9kdXAgMSld IFVOU1BFQ1ZfTUVNT1JZX0JBUlJJRVIpKQorICAgICAgICAgICAgICAgICAgICh1bnNwZWNf dm9sYXRpbGU6QkxLIFsobWF0Y2hfZHVwIDEpXSBVTlNQRUNWX01FTU9SWV9CQVJSSUVSKSkK ICAgICAgICAgICAgICAgKGNsb2JiZXIgKG1hdGNoX2R1cCAyKSkKICAgICAgICAgICAgICAg KGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXSkKIApAQCAtODEyNSw3ICs4MDA3LDcgQEAg KGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiZGVsYXlfY3ljbGVzXzIiCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMildCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVU5TUEVDVl9ERUxBWV9DWUNMRVMpCiAgICAgICAgICAgICAgIChzZXQg KG1hdGNoX2R1cCAxKQotICAgICAgICAgICAgICAgKHVuc3BlY192b2xhdGlsZTpCTEsgWyht YXRjaF9kdXAgMSldIFVOU1BFQ1ZfTUVNT1JZX0JBUlJJRVIpKQorICAgICAgICAgICAgICAg ICAgICh1bnNwZWNfdm9sYXRpbGU6QkxLIFsobWF0Y2hfZHVwIDEpXSBVTlNQRUNWX01FTU9S WV9CQVJSSUVSKSkKICAgICAgICAgICAgICAgKGNsb2JiZXIgKG1hdGNoX2R1cCAyKSkKICAg ICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXQogICAiIgpAQCAtODE2 Miw3ICs4MDQ0LDcgQEAgKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiZGVsYXlfY3ljbGVzXzMi CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMyldCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5TUEVDVl9ERUxBWV9DWUNMRVMpCiAgICAg ICAgICAgICAgIChzZXQgKG1hdGNoX2R1cCAxKQotICAgICAgICAgICAgICAgKHVuc3BlY192 b2xhdGlsZTpCTEsgWyhtYXRjaF9kdXAgMSldIFVOU1BFQ1ZfTUVNT1JZX0JBUlJJRVIpKQor ICAgICAgICAgICAgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6QkxLIFsobWF0Y2hfZHVwIDEp XSBVTlNQRUNWX01FTU9SWV9CQVJSSUVSKSkKICAgICAgICAgICAgICAgKGNsb2JiZXIgKG1h dGNoX2R1cCAyKSkKICAgICAgICAgICAgICAgKGNsb2JiZXIgKG1hdGNoX2R1cCAzKSkKICAg ICAgICAgICAgICAgKGNsb2JiZXIgKG1hdGNoX2R1cCA0KSkKQEAgLTgyMDUsNyArODA4Nyw3 IEBAIChkZWZpbmVfaW5zbl9hbmRfc3BsaXQgImRlbGF5X2N5Y2xlc180IgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDQpXQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFVOU1BFQ1ZfREVMQVlfQ1lDTEVTKQogICAgICAgICAgICAgICAo c2V0IChtYXRjaF9kdXAgMSkKLSAgICAgICAgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6QkxL IFsobWF0Y2hfZHVwIDEpXSBVTlNQRUNWX01FTU9SWV9CQVJSSUVSKSkKKyAgICAgICAgICAg ICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOkJMSyBbKG1hdGNoX2R1cCAxKV0gVU5TUEVDVl9N RU1PUllfQkFSUklFUikpCiAgICAgICAgICAgICAgIChjbG9iYmVyIChtYXRjaF9kdXAgMikp CiAgICAgICAgICAgICAgIChjbG9iYmVyIChtYXRjaF9kdXAgMykpCiAgICAgICAgICAgICAg IChjbG9iYmVyIChtYXRjaF9kdXAgNCkpCkBAIC05NDg4LDYgKzkzNzAsMjU4IEBAIChkZWZp bmVfcGVlcGhvbGUyCiAgICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSld KV0pCiAKIAorOzsgVHJ5IG9wdGltaXplIGRlY3JlbWVudC1hbmQtYnJhbmNoLiAgV2hlbiB3 ZSBoYXZlIGFuIGFkZGl0aW9uIGZvbGxvd2VkCis7OyBieSBhIGNvbXBhcmlzb24gb2YgdGhl IHJlc3VsdCBhZ2FpbnN0IHplcm8sIHdlIGNhbiBvdXRwdXQgdGhlIGFkZGl0aW9uCis7OyBp biBzdWNoIGEgd2F5IHRoYXQgU1JFRy5OIGFuZCBTUkVHLlogYXJlIHNldCBhY2NvcmRpbmcg dG8gdGhlIHJlc3VsdC4KKworOzsgeyAtMSwgKzEgfSBmb3IgUUltb2RlLCBvdGhlcndpc2Ug dGhlIGVtcHR5IHNldC4KKyhkZWZpbmVfbW9kZV9hdHRyIHAxbTEgWyhRSSAiTiBQIikKKyAg ICAgICAgICAgICAgICAgICAgICAgIChISSAiWXh4IikgKFBTSSAiWXh4IikgKFNJICJZeHgi KV0pCisKKzs7IEZJWE1FOiByZWxvYWQxLmNjOjpkb19vdXRwdXRfcmVsb2FkKCkgZG9lcyBu b3Qgc3VwcG9ydCBvdXRwdXQgcmVsb2FkcworOzsgZm9yIEpVTVBfSU5TTnMsIGhlbmNlIGxl dHRpbmcgY29tYmluZSBkb2luZyBkZWNyZW1lbnQtYW5kLWJyYW5jaCBsaWtlCis7OyB0aGUg Zm9sbG93aW5nIG1pZ2h0IHJ1biBpbnRvIElDRS4gIERvaW5nIHJlbG9hZHMgYnkgaGFuZCBp cyB0b28gcGFpbmZ1bC4uLgorOworOyAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIqYWRkLmZv ci5lcW5lLjxtb2RlPi5jYnJhbmNoIgorOyAgIFsoc2V0IChwYykKKzsgICAgICAgICAoaWZf dGhlbl9lbHNlIChlcW5lIChtYXRjaF9vcGVyYW5kOlFJU0kgMSAicmVnaXN0ZXJfb3BlcmFu ZCIgICIwIikKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5k OlFJU0kgMiAiY29uc3RfaW50X29wZXJhbmQiICJuIikpCis7ICAgICAgICAgICAgICAgICAg ICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDQpKQorOyAgICAgICAgICAgICAgICAg ICAgICAgKHBjKSkpCis7ICAgIChzZXQgKG1hdGNoX29wZXJhbmQ6UUlTSSAwICJyZWdpc3Rl cl9vcGVyYW5kIiAiPXIiKQorOyAgICAgICAgIChwbHVzOlFJU0kgKG1hdGNoX2R1cCAxKQor OyAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUlTSSAzICJjb25zdF9pbnRf b3BlcmFuZCIgIm4iKSkpXQorOyAgIDs7IE5vIGNsb2JiZXIgZm9yIG5vdyBhcyBjb21iaW5l IG1pZ2h0IG5vdCBoYXZlIG9uZSBoYW5keS4KKzsgICA7OyBXZSBwb3AgYSBzY2F0Y2ggaW4g c3BsaXQxLgorOyAgICIhcmVsb2FkX2NvbXBsZXRlZAorOyAgICAmJiBjb25zdDBfcnR4ID09 IHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24gKFBMVVMsIDxNT0RFPm1vZGUsCis7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZHNbMl0s IG9wZXJhbmRzWzNdKSIKKzsgICB7IGdjY191bnJlYWNoYWJsZSgpOyB9Cis7ICAgIiYmIDEi Cis7ICAgWyhwYXJhbGxlbCBbKHNldCAocGMpCis7ICAgICAgICAgICAgICAgICAgICAoaWZf dGhlbl9lbHNlIChlcW5lIChtYXRjaF9kdXAgMSkKKzsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAyKSkKKzsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfZHVwIDQpKQorOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAocGMpKSkKKzsgICAgICAgICAgICAgICAoc2V0ICht YXRjaF9kdXAgMCkKKzsgICAgICAgICAgICAgICAgICAgIChwbHVzOlFJU0kgKG1hdGNoX2R1 cCAxKQorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDMpKSkK KzsgICAgICAgICAgICAgICAoY2xvYmJlciAoc2NyYXRjaDpRSSkpXSldKQorOworOzsgLi4u SGVuY2UsIHN0aWNrIHdpdGggUlRMIHBlZXBob2xlcyBmb3Igbm93LiAgVW5mb3J0dW5hdGVs eSwgdGhlcmUgaXMgbm8KKzs7IGNhbm9uaWNhbCBmb3JtLCBhbmQgaWYgcmVsb2FkIHNodWZm bGVzIHJlZ2lzdGVycyBhcm91bmQsIHdlIG1pZ2h0IG1pc3MKKzs7IG9wcG9ydHVuaXRpZXMg dG8gbWF0Y2ggYSBkZWNyZW1lbnQtYW5kLWJyYW5jaC4KKzs7IGRvbG9vcF9lbmQgZG9lc24n dCByZWxvYWQgZWl0aGVyLCBzbyBkb2xvb3BfZW5kIGFsc28gd29uJ3Qgd29yay4KKworKGRl ZmluZV9leHBhbmQgImdlbl9hZGRfZm9yXzxjb2RlPl88bW9kZT4iCisgIDsgIiphZGQuZm9y LmVxbmUuPG1vZGU+IgorICBbKHBhcmFsbGVsIFsoc2V0IChyZWc6Q0MgUkVHX0NDKQorICAg ICAgICAgICAgICAgICAgIChjb21wYXJlOkNDIChwbHVzOlFJU0kgKG1hdGNoX29wZXJhbmQ6 UUlTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJU0kgMSAiY29uc3RfaW50X29wZXJh bmQiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKSkK KyAgICAgICAgICAgICAgKHNldCAobWF0Y2hfZHVwIDApCisgICAgICAgICAgICAgICAgICAg KHBsdXM6UUlTSSAobWF0Y2hfZHVwIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobWF0Y2hfZHVwIDEpKSkKKyAgICAgICAgICAgICAgKGNsb2JiZXIgKG1hdGNoX29wZXJh bmQ6UUkgMykpXSkKKyAgIDsgImJyYW5jaCIKKyAgIChzZXQgKHBjKQorICAgICAgICAoaWZf dGhlbl9lbHNlIChlcW5lIChyZWc6Q0MgUkVHX0NDKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zdF9pbnQgMCkpCisgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3Jl ZiAobWF0Y2hfZHVwIDIpKQorICAgICAgICAgICAgICAgICAgICAgIChwYykpKV0pCisKKwor OzsgMS8zOiBBIHZlcnNpb24gd2l0aG91dCBjbG9iYmVyOiBkLXJlZyBvciA4LWJpdCBhZGRz ICsvLTEuCisoZGVmaW5lX3BlZXBob2xlMgorICBbKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9v cGVyYW5kOlFJU0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAgICAgICAgICAgICAgICAg KHBsdXM6UUlTSSAobWF0Y2hfZHVwIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobWF0Y2hfb3BlcmFuZDpRSVNJIDEgImNvbnN0X2ludF9vcGVyYW5kIikpKQorICAgICAg ICAgICAgICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXSkKKyAgIChzZXQgKHJlZzpDQyBS RUdfQ0MpCisgICAgICAgIChjb21wYXJlOkNDIChtYXRjaF9kdXAgMCkKKyAgICAgICAgICAg ICAgICAgICAgKGNvbnN0X2ludCAwKSkpCisgICAoc2V0IChwYykKKyAgICAgICAgKGlmX3Ro ZW5fZWxzZSAoZXFuZSAocmVnOkNDIFJFR19DQykKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY29uc3RfaW50IDApKQorICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYg KG1hdGNoX29wZXJhbmQgMikpCisgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpXQorICAi cGVlcDJfcmVnbm9fZGVhZF9wICgzLCBSRUdfQ0MpCisgICAmJiAoZF9yZWdpc3Rlcl9vcGVy YW5kIChvcGVyYW5kc1swXSwgPE1PREU+bW9kZSkKKyAgICAgICB8fCAoPE1PREU+bW9kZSA9 PSBRSW1vZGUKKyAgICAgICAgICAgJiYgKElOVFZBTCAob3BlcmFuZHNbMV0pID09IDEKKyAg ICAgICAgICAgICAgIHx8IElOVFZBTCAob3BlcmFuZHNbMV0pID09IC0xKSkpIgorICBbKHNj cmF0Y2gpXQorICB7CisgICAgZW1pdCAoZ2VuX2dlbl9hZGRfZm9yXzxjb2RlPl88bW9kZT4g KG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0sCisgICAgICAgICAgZ2Vu X3J0eF9TQ1JBVENIIChRSW1vZGUpKSk7CisgICAgRE9ORTsKKyAgfSkKKworOzsgMi8zOiBB IHZlcnNpb24gd2l0aCBjbG9iYmVyIGZyb20gdGhlIGluc24uCisoZGVmaW5lX3BlZXBob2xl MgorICBbKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJU0kgMCAicmVnaXN0ZXJf b3BlcmFuZCIpCisgICAgICAgICAgICAgICAgICAgKHBsdXM6UUlTSSAobWF0Y2hfZHVwIDAp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpRSVNJIDEg ImNvbnN0X2ludF9vcGVyYW5kIikpKQorICAgICAgICAgICAgICAoY2xvYmJlciAobWF0Y2hf b3BlcmFuZDpRSSAzICJzY3JhdGNoX29yX2RfcmVnaXN0ZXJfb3BlcmFuZCIpKQorICAgICAg ICAgICAgICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXSkKKyAgIChwYXJhbGxlbCBbKHNl dCAocmVnOkNDIFJFR19DQykKKyAgICAgICAgICAgICAgICAgICAoY29tcGFyZTpDQyAobWF0 Y2hfZHVwIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAw KSkpCisgICAgICAgICAgICAgIChjbG9iYmVyIChtYXRjaF9vcGVyYW5kOlFJIDQgInNjcmF0 Y2hfb3JfZF9yZWdpc3Rlcl9vcGVyYW5kIikpXSkKKyAgIChzZXQgKHBjKQorICAgICAgICAo aWZfdGhlbl9lbHNlIChlcW5lIChyZWc6Q0MgUkVHX0NDKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25zdF9pbnQgMCkpCisgICAgICAgICAgICAgICAgICAgICAgKGxhYmVs X3JlZiAobWF0Y2hfb3BlcmFuZCAyKSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMpKSld CisgICJwZWVwMl9yZWdub19kZWFkX3AgKDMsIFJFR19DQykiCisgIFsoc2NyYXRjaCldCisg IHsKKyAgICBydHggc2NyYXRjaCA9IFJFR19QIChvcGVyYW5kc1szXSkgPyBvcGVyYW5kc1sz XSA6IG9wZXJhbmRzWzRdOworCisgICAgLy8gV2UgbmVlZCBlaXRoZXIgYSBkLXJlZ2lzdGVy IG9yIGEgc2NyYXRjaCByZWdpc3RlciB0byBjbG9iYmVyLgorICAgIGlmICghIFJFR19QIChz Y3JhdGNoKQorICAgICAgICAmJiAhIGRfcmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMF0s IDxNT0RFPm1vZGUpCisgICAgICAgICYmICEgKFFJbW9kZSA9PSA8TU9ERT5tb2RlCisgICAg ICAgICAgICAgICYmIChJTlRWQUwgKG9wZXJhbmRzWzFdKSA9PSAxCisgICAgICAgICAgICAg ICAgICB8fCBJTlRWQUwgKG9wZXJhbmRzWzFdKSA9PSAtMSkpKQorICAgICAgeworICAgICAg ICBGQUlMOworICAgICAgfQorICAgIGVtaXQgKGdlbl9nZW5fYWRkX2Zvcl88Y29kZT5fPG1v ZGU+IChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdLAorICAgICAgICAg IHNjcmF0Y2gpKTsKKyAgICBET05FOworICB9KQorCis7OyAzLzMgQSB2ZXJzaW9uIHdpdGgg YSBjbG9iYmVyIGZyb20gcGVlcGhvbGUyLgorKGRlZmluZV9wZWVwaG9sZTIKKyAgWyhtYXRj aF9zY3JhdGNoOlFJIDMgImQiKQorICAgKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9vcGVyYW5k OlFJU0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAgICAgICAgICAgICAgICAgKHBsdXM6 UUlTSSAobWF0Y2hfZHVwIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0 Y2hfb3BlcmFuZDpRSVNJIDEgImNvbnN0X2ludF9vcGVyYW5kIikpKQorICAgICAgICAgICAg ICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXSkKKyAgIChzZXQgKHJlZzpDQyBSRUdfQ0Mp CisgICAgICAgIChjb21wYXJlOkNDIChtYXRjaF9kdXAgMCkKKyAgICAgICAgICAgICAgICAg ICAgKGNvbnN0X2ludCAwKSkpCisgICAoc2V0IChwYykKKyAgICAgICAgKGlmX3RoZW5fZWxz ZSAoZXFuZSAocmVnOkNDIFJFR19DQykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y29uc3RfaW50IDApKQorICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNo X29wZXJhbmQgMikpCisgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpXQorICAicGVlcDJf cmVnbm9fZGVhZF9wICgzLCBSRUdfQ0MpIgorICBbKHNjcmF0Y2gpXQorICB7CisgICAgZW1p dCAoZ2VuX2dlbl9hZGRfZm9yXzxjb2RlPl88bW9kZT4gKG9wZXJhbmRzWzBdLCBvcGVyYW5k c1sxXSwgb3BlcmFuZHNbMl0sCisgICAgICAgICAgb3BlcmFuZHNbM10pKTsKKyAgICBET05F OworICB9KQorCis7OyBSZXN1bHQgb2YgdGhlIGFib3ZlIHRocmVlIHBlZXBob2xlcyBpcyBh biBhZGRpdGlvbiB0aGF0IGFsc28KKzs7IHBlcmZvcm1zIGFuIEVRIG9yIE5FIGNvbXBhcmlz b24gKG9mIHRoZSByZXN1bHQpIGFnYWluc3QgemVyby4KKzs7IEZJWE1FOiBVc2luZyAobWF0 Y2hfZHVwIDApIGluc3RlYWQgb2Ygb3BlcmFuZHNbMy80XSBtYWtlcyBybnJlZ3MKKzs7IGJh cmYgaW4gcmVncmVuYW1lLmNjOjptZXJnZV9vdmVybGFwcGluZ19yZWdzKCkuICBGb3Igbm93 LCB1c2UgdGhlCis7OyBmaXggZnJvbSBQUjUwNzg4OiBDb25zdHJhaW4gYXMgIjAiLgorKGRl ZmluZV9pbnNuICIqYWRkLmZvci5lcW5lLjxtb2RlPiIKKyAgWyhzZXQgKHJlZzpDQyBSRUdf Q0MpCisgICAgICAgIChjb21wYXJlOkNDCisgICAgICAgICAocGx1czpRSVNJIChtYXRjaF9v cGVyYW5kOlFJU0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgICIwLDAgICAgICwwIikKKyAgICAg ICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUlTSSAxICJjb25zdF9pbnRfb3BlcmFu ZCIgIm4sPHAxbTE+LG4iKSkKKyAgICAgICAgIChjb25zdF9pbnQgMCkpKQorICAgKHNldCAo bWF0Y2hfb3BlcmFuZDpRSVNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAgICAgICI9 ZCwqciAgICAsciIpCisgICAgICAgIChwbHVzOlFJU0kgKG1hdGNoX29wZXJhbmQ6UUlTSSA0 ICJyZWdpc3Rlcl9vcGVyYW5kIiAgICIwLDAgICAgICwwIikKKyAgICAgICAgICAgICAgICAg ICAobWF0Y2hfZHVwIDEpKSkKKyAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOlFJIDIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiPVgsWCAgICAgLCZkIikpXQorICAicmVsb2Fk X2NvbXBsZXRlZCIKKyAgeworICAgIHJldHVybiBhdnJfb3V0X3BsdXNfc2V0X1pOIChvcGVy YW5kcywgbnVsbHB0cik7CisgIH0KKyAgWyhzZXRfYXR0ciAiYWRqdXN0X2xlbiIgImFkZF9z ZXRfWk4iKV0pCisKKworOzsgU3dhcHBpbmcgYm90aCBjb21wYXJpc29uIGFuZCBicmFuY2gg Y29uZGl0aW9uLiAgVGhpcyBjYW4gdHVybiBkaWZmaWN1bHQKKzs7IGJyYW5jaGVzIHRvIGVh c3kgb25lcy4gIEFuZCBpbiBzb21lIGNhc2VzLCBhIGNvbXBhcmlzb24gYWdhaW5zdCBvbmUg Y2FuCis7OyBiZSB0dXJuZWQgaW50byBhIGNvbXBhcmlzb24gYWdhaW5zdCB6ZXJvLgorCiso ZGVmaW5lX3BlZXBob2xlMiA7ICIqc3dhcHBlZF90c3Q8bW9kZT4iCisgIFsocGFyYWxsZWwg WyhzZXQgKHJlZzpDQyBSRUdfQ0MpCisgICAgICAgICAgICAgICAgICAgKGNvbXBhcmU6Q0Mg KG1hdGNoX29wZXJhbmQ6T1JERVJFRDIzNCAxICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpPUkRFUkVEMjM0IDIg ImNvbnN0X29wZXJhbmQiKSkpCisgICAgICAgICAgICAgIChjbG9iYmVyIChtYXRjaF9vcGVy YW5kOlFJIDMgInNjcmF0Y2hfb3BlcmFuZCIpKV0pCisgICAoc2V0IChwYykKKyAgICAgICAg KGlmX3RoZW5fZWxzZSAobWF0Y2hfb3BlcmF0b3IgMCAib3JkZXJlZF9jb21wYXJpc29uX29w ZXJhdG9yIgorICAgICAgICAgICAgICAgICAgICAgICAgWyhyZWc6Q0MgUkVHX0NDKQorICAg ICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCldKQorICAgICAgICAgICAgICAg ICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgNCkpCisgICAgICAgICAgICAgICAg ICAgICAgKHBjKSkpXQorICAicGVlcDJfcmVnbm9fZGVhZF9wICgyLCBSRUdfQ0MpIgorICBb KHNldCAocmVnOkNDIFJFR19DQykKKyAgICAgICAgKGNvbXBhcmU6Q0MgKG1hdGNoX2R1cCAy KQorICAgICAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDEpKSkKKyAgIDsgImJyYW5jaCIK KyAgIChzZXQgKHBjKQorICAgICAgICAoaWZfdGhlbl9lbHNlIChtYXRjaF9vcF9kdXAgMCBb KHJlZzpDQyBSRUdfQ0MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY29uc3RfaW50IDApXSkKKyAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmICht YXRjaF9kdXAgNCkpCisgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpXQorICB7CisgICAg cnR4IHh2YWwgPSBhdnJfdG9faW50X21vZGUgKG9wZXJhbmRzWzJdKTsKKyAgICBlbnVtIHJ0 eF9jb2RlIGNvZGUgPSBHRVRfQ09ERSAob3BlcmFuZHNbMF0pOworCisgICAgaWYgKGNvZGUg PT0gR1QgJiYgeHZhbCA9PSBjb25zdDBfcnR4KQorICAgICAgY29kZSA9IExUOworICAgIGVs c2UgaWYgKGNvZGUgPT0gR0UgJiYgeHZhbCA9PSBjb25zdDFfcnR4KQorICAgICAgY29kZSA9 IExUOworICAgIGVsc2UgaWYgKGNvZGUgPT0gTEUgJiYgeHZhbCA9PSBjb25zdDBfcnR4KQor ICAgICAgY29kZSA9IEdFOworICAgIGVsc2UgaWYgKGNvZGUgPT0gTFQgJiYgeHZhbCA9PSBj b25zdDFfcnR4KQorICAgICAgY29kZSA9IEdFOworICAgIGVsc2UKKyAgICAgIEZBSUw7CisK KyAgICBvcGVyYW5kc1syXSA9IENPTlNUMF9SVFggKDxNT0RFPm1vZGUpOworICAgIFBVVF9D T0RFIChvcGVyYW5kc1swXSwgY29kZSk7CisgIH0pCisKKzs7IFNhbWUsIGJ1dCBmb3IgOC1i aXQgbW9kZXMgd2hpY2ggaGF2ZSBubyBzY3JhdGNoIHJlZy4KKyhkZWZpbmVfcGVlcGhvbGUy IDsgIipzd2FwcGVkX3RzdDxtb2RlPiIKKyAgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCisgICAg ICAgIChjb21wYXJlOkNDIChtYXRjaF9vcGVyYW5kOkFMTDEgMSAicmVnaXN0ZXJfb3BlcmFu ZCIpCisgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkFMTDEgMiAiY29uc3Rf b3BlcmFuZCIpKSkKKyAgIChzZXQgKHBjKQorICAgICAgICAoaWZfdGhlbl9lbHNlIChtYXRj aF9vcGVyYXRvciAwICJvcmRlcmVkX2NvbXBhcmlzb25fb3BlcmF0b3IiCisgICAgICAgICAg ICAgICAgICAgICAgICBbKHJlZzpDQyBSRUdfQ0MpCisgICAgICAgICAgICAgICAgICAgICAg ICAgKGNvbnN0X2ludCAwKV0pCisgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAo bWF0Y2hfb3BlcmFuZCA0KSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMpKSldCisgICJw ZWVwMl9yZWdub19kZWFkX3AgKDIsIFJFR19DQykiCisgIFsoc2V0IChyZWc6Q0MgUkVHX0ND KQorICAgICAgICAoY29tcGFyZTpDQyAobWF0Y2hfZHVwIDIpCisgICAgICAgICAgICAgICAg ICAgIChtYXRjaF9kdXAgMSkpKQorICAgOyAiYnJhbmNoIgorICAgKHNldCAocGMpCisgICAg ICAgIChpZl90aGVuX2Vsc2UgKG1hdGNoX29wX2R1cCAwIFsocmVnOkNDIFJFR19DQykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCldKQor ICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX2R1cCA0KSkKKyAgICAg ICAgICAgICAgICAgICAgICAocGMpKSldCisgIHsKKyAgICBydHggeHZhbCA9IGF2cl90b19p bnRfbW9kZSAob3BlcmFuZHNbMl0pOworICAgIGVudW0gcnR4X2NvZGUgY29kZSA9IEdFVF9D T0RFIChvcGVyYW5kc1swXSk7CisKKyAgICBpZiAoY29kZSA9PSBHVCAmJiB4dmFsID09IGNv bnN0MF9ydHgpCisgICAgICBjb2RlID0gTFQ7CisgICAgZWxzZSBpZiAoY29kZSA9PSBHRSAm JiB4dmFsID09IGNvbnN0MV9ydHgpCisgICAgICBjb2RlID0gTFQ7CisgICAgZWxzZSBpZiAo Y29kZSA9PSBMRSAmJiB4dmFsID09IGNvbnN0MF9ydHgpCisgICAgICBjb2RlID0gR0U7Cisg ICAgZWxzZSBpZiAoY29kZSA9PSBMVCAmJiB4dmFsID09IGNvbnN0MV9ydHgpCisgICAgICBj b2RlID0gR0U7CisgICAgZWxzZQorICAgICAgRkFJTDsKKworICAgIG9wZXJhbmRzWzJdID0g Q09OU1QwX1JUWCAoPE1PREU+bW9kZSk7CisgICAgUFVUX0NPREUgKG9wZXJhbmRzWzBdLCBj b2RlKTsKKyAgfSkKKworCiAoZGVmaW5lX2V4cGFuZCAiZXh0enYiCiAgIFsoc2V0IChtYXRj aF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQogICAgICAgICAoemVyb19l eHRyYWN0OlFJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVyX29wZXJhbmQiICAiIikK ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXZyL2NvbnN0cmFpbnRzLm1kIGIvZ2NjL2NvbmZp Zy9hdnIvY29uc3RyYWludHMubWQKaW5kZXggYWM0MzY3ODg3MmQuLmY4NDBjMDExNGEwIDEw MDY0NAotLS0gYS9nY2MvY29uZmlnL2F2ci9jb25zdHJhaW50cy5tZAorKysgYi9nY2MvY29u ZmlnL2F2ci9jb25zdHJhaW50cy5tZApAQCAtMjQ1LDYgKzI0NSwxMSBAQCAoZGVmaW5lX2Nv bnN0cmFpbnQgIlltMiIKIAkgICAgKG1hdGNoX3Rlc3QgIklOVFZBTCAoYXZyX3RvX2ludF9t b2RlIChvcCkpID09IC0yIikpCiAgICAgICAgKG1hdGNoX3Rlc3QgInNhdGlzZmllc19jb25z dHJhaW50X0NtMiAob3ApIikpKQogCis7OyBDb25zdHJhaW50IHRoYXQncyB0aGUgZW1wdHkg c2V0LiAgVXNlZnVsIHdpdGggbW9kZSBhbmQgY29kZSBpdGVyYXRvcnMuCisoZGVmaW5lX2Nv bnN0cmFpbnQgIll4eCIKKyAgIkEgY29uc3RyYWludHMgdGhhdCBpcyBhbHdheXMgZmFsc2Ui CisgIChtYXRjaF90ZXN0ICJmYWxzZSIpKQorCiAoZGVmaW5lX2NvbnN0cmFpbnQgIll4MiIK ICAgIkZpeGVkLXBvaW50IG9yIGludGVnZXIgY29uc3RhbnQgbm90IGluIHRoZSByYW5nZSBA bWludXN7fTIgQGRvdHN7fSAyIgogICAoYW5kIChpb3IgKG1hdGNoX2NvZGUgImNvbnN0X2lu dCIpCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2F2ci9wcmVkaWNhdGVzLm1kIGIvZ2NjL2Nv bmZpZy9hdnIvcHJlZGljYXRlcy5tZAppbmRleCBlMzUyMzI2NDY2Zi4uZjRlZTQyYWYyNzQg MTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYXZyL3ByZWRpY2F0ZXMubWQKKysrIGIvZ2NjL2Nv bmZpZy9hdnIvcHJlZGljYXRlcy5tZApAQCAtMjcsNiArMjcsMTEgQEAgKGRlZmluZV9wcmVk aWNhdGUgImRfcmVnaXN0ZXJfb3BlcmFuZCIKICAgKGFuZCAobWF0Y2hfY29kZSAicmVnIikK ICAgICAgICAobWF0Y2hfdGVzdCAiUkVHTk8gKG9wKSA+PSAxNiAmJiBSRUdOTyAob3ApIDw9 IDMxIikpKQogCisoZGVmaW5lX3ByZWRpY2F0ZSAic2NyYXRjaF9vcl9kX3JlZ2lzdGVyX29w ZXJhbmQiCisgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAiZF9yZWdpc3Rlcl9vcGVyYW5kIikK KyAgICAgICAoYW5kIChtYXRjaF9jb2RlICgic2NyYXRjaCIpKQorICAgICAgICAgICAgKG1h dGNoX29wZXJhbmQgMCAic2NyYXRjaF9vcGVyYW5kIikpKSkKKwogKGRlZmluZV9wcmVkaWNh dGUgImV2ZW5fcmVnaXN0ZXJfb3BlcmFuZCIKICAgKGFuZCAobWF0Y2hfY29kZSAicmVnIikK ICAgICAgICAoYW5kIChtYXRjaF90ZXN0ICJSRUdOTyAob3ApIDw9IDMxIikK --------------X0mOC4BBYJJzKunhD9sJ2qfO Content-Type: text/x-patch; charset=UTF-8; name="pr109650-test.diff" Content-Disposition: attachment; filename="pr109650-test.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hdnIvdG9ydHVyZS9wcjEw OTY1MC0xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXZyL3RvcnR1cmUvcHIxMDk2 NTAtMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45MDMwZGIw MGZkZQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hdnIv dG9ydHVyZS9wcjEwOTY1MC0xLmMKQEAgLTAsMCArMSw2MyBAQAorLyogeyBkZy1kbyBydW4g fSAqLworLyogeyBkZy1vcHRpb25zIHsgLXN0ZD1jOTkgfSB9ICovCisKK3R5cGVkZWYgX0Jv b2wgYm9vbDsKK3R5cGVkZWYgX19VSU5UOF9UWVBFX18gdWludDhfdDsKKworc3RhdGljIGlu bGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCitib29sIGZ1bmMxYSAo Ym9vbCBwMSwgdWludDhfdCBwMikKK3sKKyAgaWYgKHAxKQorICAgIHJldHVybiBwMiA8PSA4 OworICByZXR1cm4gcDIgPD0gMjsKK30KKworX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9f LCBfX25vY2xvbmVfXykpCitib29sIGZ1bmMxYiAoYm9vbCBwMSwgdWludDhfdCBwMikKK3sK KyAgcmV0dXJuIGZ1bmMxYSAocDEsIHAyKTsKK30KKworc3RhdGljIGlubGluZSBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCitib29sIGZ1bmMyYSAoYm9vbCBwMSwgdW5z aWduZWQgcDIpCit7CisgIGlmIChwMSkKKyAgICByZXR1cm4gcDIgPD0gODsKKyAgcmV0dXJu IHAyIDw9IDI7Cit9CisKK19fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXywgX19ub2Nsb25l X18pKQorYm9vbCBmdW5jMmIgKGJvb2wgcDEsIHVuc2lnbmVkIHAyKQoreworICByZXR1cm4g ZnVuYzJhIChwMSwgcDIpOworfQorCit2b2lkIHRlc3QxICh2b2lkKQoreworICBpZiAoZnVu YzFhICgwLCAxKSAhPSBmdW5jMWIgKDAsIDEpKSBfX2J1aWx0aW5fYWJvcnQoKTsKKyAgaWYg KGZ1bmMxYSAoMCwgMikgIT0gZnVuYzFiICgwLCAyKSkgX19idWlsdGluX2Fib3J0KCk7Cisg IGlmIChmdW5jMWEgKDAsIDMpICE9IGZ1bmMxYiAoMCwgMykpIF9fYnVpbHRpbl9hYm9ydCgp OworCisgIGlmIChmdW5jMWEgKDEsIDcpICE9IGZ1bmMxYiAoMSwgNykpIF9fYnVpbHRpbl9h Ym9ydCgpOworICBpZiAoZnVuYzFhICgxLCA4KSAhPSBmdW5jMWIgKDEsIDgpKSBfX2J1aWx0 aW5fYWJvcnQoKTsKKyAgaWYgKGZ1bmMxYSAoMSwgOSkgIT0gZnVuYzFiICgxLCA5KSkgX19i dWlsdGluX2Fib3J0KCk7Cit9CisKK3ZvaWQgdGVzdDIgKHZvaWQpCit7CisgIGlmIChmdW5j MmEgKDAsIDEpICE9IGZ1bmMyYiAoMCwgMSkpIF9fYnVpbHRpbl9hYm9ydCgpOworICBpZiAo ZnVuYzJhICgwLCAyKSAhPSBmdW5jMmIgKDAsIDIpKSBfX2J1aWx0aW5fYWJvcnQoKTsKKyAg aWYgKGZ1bmMyYSAoMCwgMykgIT0gZnVuYzJiICgwLCAzKSkgX19idWlsdGluX2Fib3J0KCk7 CisKKyAgaWYgKGZ1bmMyYSAoMSwgNykgIT0gZnVuYzJiICgxLCA3KSkgX19idWlsdGluX2Fi b3J0KCk7CisgIGlmIChmdW5jMmEgKDEsIDgpICE9IGZ1bmMyYiAoMSwgOCkpIF9fYnVpbHRp bl9hYm9ydCgpOworICBpZiAoZnVuYzJhICgxLCA5KSAhPSBmdW5jMmIgKDEsIDkpKSBfX2J1 aWx0aW5fYWJvcnQoKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIHRlc3QxKCk7Cisg IHRlc3QyKCk7CisKKyAgX19idWlsdGluX2V4aXQgKDApOworfQo= --------------X0mOC4BBYJJzKunhD9sJ2qfO--